[강의] REST - 좋은 웹 API 디자인이란?

Jerry·2025년 8월 14일

API의 기본 이해

API(Application Programming Interface) 개념

API란 서로 다른 SW 또는 시스템 간에 기능과 데이터를 교환하기 위하여 정의된 규칙과 명세이다.
이는 개발자가 특정 기능을 호출하고, 해당 호출에 관한 결과를 받을 수 있도록 미리 정해진 방법과 형식을 제공함으로써, 서로 다른 구성 요소 간의 원활한 연동을 가능하게 한다.
또한 인터페이스의 특징으로 내부 구현을 노출하지 않고 필요한 기능만 외부에 제공하여 모듈 간 결합도를 낮추고 호환성을 확보한다.

API의 역할과 필요성

API의 역할

  • API는 서로 다른 소프트웨어나 시스템 간의 기능 호출과 데이터 교환을 가능하게 하는 중개자 역할을 수행한다.
  • 이를 통해 개발자는 복잡한 내부 로직을 직접 구현하지 않고, 표준화된 명세에 따라 필요한 기능을 활용 할 수 있다.

API의 필요성

  1. 재사용성 향상 : 동일한 기능을 여러 시스템과 프로젝트에서 반복 활용 가능
  2. 호환성 확보 : 서로 다른 플랫폼·언어·환경 간에도 일관된 통신과 통합 가능
  3. 유지보수 용이성 : 내부 구현 변경 시 외부 코드 수정 없이 서비스 제공 가능
  4. 보안성 강화 : 접근 제어와 인증·권한 부여를 통해 안전한 기능 및 데이터 제공 가능

추상화와 캡슐화

추상화(Abstraction)

  • 복잡한 내부 동작을 감추고, 사용자가 필요한 기능과 인터페이스만 보이도록 단순화하는 개념
  • 이를 통해 사용자는 세부 구현을 몰라도 기능을 활용할 수 있으며, 개발 효율성과 가독성이 향상된다.

캡슐화(Encapsulation)

  • 데이터와 해당 데이터를 다루는 메서드를 하나의 단위로 묶고, 외부 접근을 제한하여 보호하는 개념
  • 이를 통해 무결성을 유지하고, 허용된 인터페이스를 통해서만 데이터 변경이 가능하게 한다.

API의 다양한 유형

유형설명예시
운영체제 API운영체제가 제공하는 기능(파일 처리, 메모리 관리, 네트워크 등)에 접근하기 위한 인터페이스Windows API, POSIX API
프로그래밍 언어 API특정 프로그래밍 언어에서 표준으로 제공하는 라이브러리·모듈을 통해 기능을 호출하는 인터페이스Java Collections API, Python os 모듈
데이터베이스 API애플리케이션이 데이터베이스와 연결하여 데이터 조회·수정·삭제 등을 수행할 수 있게 하는 인터페이스JDBC, ODBC
웹 APIHTTP/HTTPS 기반으로 인터넷을 통해 데이터와 기능을 제공하는 인터페이스REST, GraphQL, gRPC

API 사용의 이점

  1. 코드 재사용성
    • 동일한 API를 여러 프로젝트(로그인 → 결제, 블로그, 뉴스 …), 여러 플랫폼(Web, App 등)에서 재활용 가능
    • 예시: 결제 API 하나를 만들어 웹, 모바일, IoT 기기에서 모두 사용
  2. 구현 은닉
    • 내부 구현 변경(예: DB 교체, 로직 변경)에도 API 인터페이스만 유지하면 외부 영향 최소화
    • 예시: RDB에서 NoSQL로 DB가 교체되어도 사용자는 서비스 이용에 무관함
  3. 표준화된 데이터 교환
    • JSON, XML 등 표준 포맷을 사용하여 플랫폼·언어에 상관없이 데이터 전달 가능
    • 예시: 웹 API에서 JSON 응답을 제공하면, Python과 JavaScript 및 java 등 어떤 언어에서도 쉽게 파싱 가능
  4. end-point 보안성 강화
    • API 호출 과정에서 end-point를 기반한 인증과 권한 부여절차를 적용하여 불법 접근과 데이터 유출을 방지
    • 예시: JWT 기반 인증을 통한 안전한 사용자 정보 제공

웹 API의 개념과 발전

웹 API의 개념 및 특징

웹 API는 인터넷을 통해 애플리케이션 간 데이터와 기능을 교환할 수 있도록 정의된 HTTP 기반의 표준화된 인터페이스이다. 이를 통해 서로 다른 플랫폼과 환경에서도 표준적인 웹 환경으로 서비스 통합과 상호 운용성을 가능하게 한다.

특징설명
네트워크 기반 통신인터넷 또는 사설망을 통해 요청과 응답을 주고받아 원격 기능 호출 가능
플랫폼 독립성JSON, XML 등 표준 포맷을 사용해 다양한 운영체제· 언어에서 호환
분산 시스템에서의 역할서로 다른 서버와 서비스 간의 데이터·기능 연계의 중추 역할 수행
HTTP 프로토콜 활용의 장점전 세계적으로 표준화된 프로토콜로 방화벽 친화적이며 확장성· 접근성이 높음

웹 API의 프로토콜 종류

웹 API 프로토콜은 인터넷 환경에서 클라이언트와 서버 간 데이터 교환 방식과 규칙을 정의하는 통신 표준
과거에는 SOAP이 많이 사용되었으나, 현대 웹 서비스 표준으로는 REST가 가장 널리 활용되고 있다.

프로토콜등장 시기설명
RPC(Remote Procedure Call)1980년원격 시스템의 함수를 로컬처럼 호출 가능, 구조 단순하나 확장성 제한
SOAP(Simple Object Access Protocol)1998년XML 기반의 엄격한 메시지 형식과 보안 표준 지원, 기업 환경에 적합
REST(Representational State Transfer)2000년HTTP 기반의 경량 프로토콜, URL과 HTTP 메서드를 활용한 자원 중심 설계 (초창기는 XML을 활용, 이후는 JSON이 주류가 됨)
gRPC(Google RPC)2015년구글 개발, HTTP/2 기반의 고성능 이진 프로토콜, 스트리밍 및 다중 요청 처리 지원
GraphQL2015년페이스북 개발, 클라이언트가 필요한 데이터 구조를 직접 정의하여 요청 가능, 과·부족 데이터 문제 최소화

웹 API의 발전 과정

RPC의 등장

  • 1980년대에 등장한 RPC는 원격 시스템의 함수를 로컬 함수처럼 호출할 수 있는 구조를 제공하였다.
  • 단순한 호출 구조와 구현 용이성이 장점이었으나, 확장성과 표준화 측면에서 한계를 보였다.

SOAP과 XML 시대의 교훈

  • 1998년 도입된 SOAP은 XML 기반의 엄격한 메시지 형식과 보안 표준을 통해 기업 환경에서 널리 사용되었다.
  • XML의 복잡성과 높은 오버헤드로 인해 개발 편의성이 떨어지고, 경량화 요구를 충족하지 못하는 한계 발생

REST의 부상과 영향

  • 2000년 등장한 REST는 HTTP 프로토콜을 활용한 경량화 아키텍처로, URL과 메서드를 통한 직관적인 자원 접근 방식을 제공하였다. 간결한 구조와 플랫폼 독립성 덕분에 현대 웹 서비스 표준으로 자리 잡았다.

새로운 패러다임 (GraphQL, gRPC)

  • 2015년경 등장한 GraphQL과 gRPC는 REST의 한계를 보완하며 새로운 데이터 통신 패러다임을 제시하였다.
  • GraphQL은 필요한 데이터만 요청할 수 있는 유연성을 제공하고, gRPC는 HTTP/2 기반 고성능 이진 프로토콜로 실시간성과 효율성을 강화하였다.
    → 단, 유연성과 성능이 좋지만 REST를 이길 만큼의 특별하진 않아 주류가 되고 있진 않다.

현대 웹 API의 동향 - 아키텍처

MSA

  • 하나의 애플리케이션을 독립적으로 배포·확장 가능한 작은 서비스 단위로 분리하여 개발·운영하는 아키텍처 패턴
  • 각 서비스는 자체 데이터와 로직을 가지고 API를 통해 통신하며, 민첩한 배포와 확장성을 지원한다.

서버리스 아키텍처

  • 서버 인프라 관리 없이 클라우드 제공자의 실행 환경에서 이벤트 기반으로 코드를 실행하는 아키텍처
  • 사용자는 인프라 운영이 아닌 비즈니스 로직 개발에 집중할 수 있으며, 사용량 기반 과금 모델을 따른다.

API 경제와 비즈니스 모델

API 경제와 비즈니스 모델은 API를 핵심 자산으로 활용하여 데이터·서비스를 개방하고, 이를 통해 새로운 가치와 수익을 창출하는 경제 구조를 의미이다. 기업은 API를 통해 외부 개발자와 파트너 생태계를 확대하고, 사용량 기반 요금·구독·광고 등 다양한 수익 모델을 구현한다. 이는 플랫폼 확장성, 혁신 촉진, 시장 진입 장벽 완화 등의 효과를 가져온다.

API 설계 원칙과 패턴

기본 설계 원칙

API 기본 설계 원칙은 기능과 데이터 제공 방식에 있어 예측 가능하고 일관된 구조를 유지하며, 단순하면서도 향후 변화에 유연하게 대응할 수 있도록 설계하는 것을 의미한다.

설계 원칙설명
일관성(Consistency)요청·응답 형식, 명명 규칙, 오류 처리 방식 등을 통일하여 예측 가능성을 높임
단순성(Simplicity)최소한의 요소와 직관적인 구조로 이해와 사용을 쉽게 함
확장성(Extensibility)새로운 기능이나 변경 사항을 쉽게 추가할 수 있도록 유연하게 설계
안정성(Stability)변경이나 장애에도 안정적으로 동작하고, 하위 호환성을 유지

API Endpoint의 개념

API Endpoint는 클라이언트가 API 요청을 보내는 고유한 URL 주소를 의미한다.
이는 API가 제공하는 특정 기능이나 자원에 접근할 수 있는 진입점 역할을 하며, 요청·응답의 규격과 경로를 정의 할 수 있다. 또한 보안적으로 Endpoint는 외부에 접근 할 수 있는 시스템의 접근 경로로도 중요한 지점이다.

엔드포인트 설계 지침

  1. 명확한 의도 전달
    • 엔드포인트 URL은 해당 API가 수행하는 기능이나 제공하는 자원을 직관적으로 설계해야 한다.
    • 예: /users → 사용자 목록 조회, /orders/{id} → 특정 주문 조회
  2. 계층 구조화
    • 리소스 간 관계를 URL 경로에 계층적으로 표현하여 구조적이고 일관성 있는 접근을 제공한다.
    • 예: /users/{id}/orders → 특정 사용자의 주문 목록
  3. 명명 규칙
    • 소문자 사용, 단어 구분 시 바(-) 또는 언더바(_) 규칙 통일, 복수형 사용 등 일관된 네이밍 컨벤션을 유지
    • 예: /products, /product-categories
  4. 기능 단위 분할
    • CRUD와 같은 기능별로 엔드포인트를 구분하여 유지보수와 확장이 용이하도록 한다.
    • 예: /products(조회, 생성), /products/{id}(조회, 수정, 삭제)

API 요청/응답 설계 방법

  1. 데이터 구조화
    • 요청(Request)과 응답(Response) 데이터는 JSON, XML 등 표준 포맷을 사용하여 구조화해야 한다.
    • 필드명, 데이터 타입, 중첩 구조를 명확히 정의하여 일관성과 해석 용이성을 보장한다.
  2. 에러 처리 패턴
    • 에러 발생 시 HTTP 상태 코드와 함께 에러 메시지, 에러 코드, 원인 및 해결 방안을 포함한 구조적 응답을 제공
      API 요청/응답 설계
  3. 페이지네이션 패턴
    • 대량의 데이터를 나누어 전송할 수 있도록 페이지 단위로 설계하며, 페이지 번호·크기 또는 커서 기반 방식(cursor-based)을 적용한다. 응답에 전체 데이터 개수, 현재 페이지, 다음 페이지 여부를 포함한다.
  4. 필터링과 정렬 패턴
    • 쿼리 파라미터를 통해 특정 조건의 데이터만 조회하거나 정렬할 수 있도록 지원 할 수 있다.

API 버전 관리와 변경

API 버전의 개념과 관리 전략

API 버전이란? 기존 API의 호환성을 유지하면서 새로운 기능이나 변경 사항을 반영하기 위해 API의 릴리스 단위를 구분하는 체계이다.

API 버전 관리 전략

전략설명예시
URL 버전관리 (권장1)API 경로에 버전 번호를 포함하여 명시적으로 버전을 구분하는 방식버전 1 : GET /api/v1/users
버전 2 : GET /api/v2/users
무(無)버전 (권장2)경로에 버전을 드러내지 않고 하위 호환 중심으로 스키마 진화GET /api/users → 변경이 발생 할 시 호환 처리를 수행하며 서버 변경 시 DNS 변경으로 대응
헤더 기반 버전관리요청 헤더에 버전 정보를 포함하여 서버가 적절한 버전의 응답을 반환하는 방식GET /api/users
Header
API-Version: 2
컨텐트 협상 기반 버전관리HTTP Accept 헤더에 미디어 타입과 버전 정보를 함께 지정하여 버전을 선택하는 방식GET /api/users
Accept:application/vnd.example.v2+json

하위 호환성 유지

하위 호환성 유지란 기존 API를 사용하는 클라이언트가 변경 이후에도 동일한 방식으로 정상 동작하도록 기능과 인터페이스를 보장하는 것을 의미한다. 이를 위해 기존 필드, 동작, 계약(contract)을 깨지 않고 새로운 API 버전의 기능을 추가하거나 수정이 가능하다.

변경 유형

변경 유형설명하위 호환성 영향
추가 (Additive Change)새로운 필드, 엔드포인트, 파라미터를 추가하는 변경대부분 하위 호환 가능
수정 (Modified Change)기존 필드나 동작을 변경하는 경우위험 가능성 높음
삭제 (Removal Change)필드·엔드포인트 제거하위 호환성 깨짐

안전한 변경과 위험한 변경

구분안전한 변경위험한 변경
정의기존 API 동작을 깨뜨리지 않고 새로운 기능이나 데이터를 추가하는 변경기존 API를 사용하는 클라이언트의 동작을 깨뜨려 오류나 서비스 중단을 유발할 수 있는 변경
필드 변경새로운 필드 추가필드 삭제, 필드 타입 변경
파라미터 변경선택적 파라미터 추가(기본값 유지)필수 파라미터 추가 및 이름 변경
응답 구조기존 필드 유지하며 데이터 추가응답 구조 변경 (포맷·중첩 구조 변경)
엔드포인트 변경신규 엔드포인트 추가기존 엔드포인트 삭제, HTTP 메서드 변경
에러 처리새로운 에러 코드 추가기존 에러 코드 제거 또는 의미 변경
의미기존 의미 유지, 값 범위 확장기존 필드 값의 의미 변경
예시GET /users 응답에 nickname 필드 추가/users 응답에서 email 필드 제거

점진적 변경 적용 개념

점진적 변경 적용은 API 변경 시 기존 사용자의 혼란과 서비스 중단을 최소화하기 위해 단계적으로 변경을 도입하는 전략이다. 이를 통해 구버전과 신버전을 병행 운영하며, 예고·가이드 제공 후 점진적으로 전환을 완료한다.

변경 유형 분류

단계설명
Deprecation 단계변경 예정 필드·엔드포인트에 Deprecated 표시 및 문서화, 마이그레이션 가이드 제공
병행 운영 단계구버전과 신버전을 일정 기간 함께 운영하여 사용자에게 이전을 유도
완전 전환 단계예고 기간 이후 구버전을 제거하고 신버전만 제공

네이버 지도 Open API 종료에 따른 서비스 이관 안내 (네이버 개발자센터 → 네이버 클라우드 플랫폼) - 공지사항
네이버 클라우드 플랫폼 공공기관용

전환(마이그레이션) 가이드 및 문서화

전환(마이그레이션) 가이드는 기존 API 사용자가 새로운 버전이나 구조로 원활하게 이전할 수 있도록 절차, 변경 사항, 예시를 제공하는 문서를 의미한다.

API 품질의 이해

API 품질의 개념

API 품질은 API가 제공하는 기능이 신뢰성·성능·보안·사용성 측면에서 일관되게 유지되는 수준을 의미한다.
이는 개발자 경험과 시스템 안정성에 직접적인 영향을 미치는 핵심 속성이다.

API 품질의 기본 요소

품질 요소정의주요 지표/평가 항목예시
성능 (Performance)API가 요청을 얼마나 빠르고 효율적으로 처리하는지를 나타내는 특성응답 시간(latency), 처리량(QPS/RPS), 자원 효율성(CPU/메모리 사용률), 네트워크 최적화API의 응답 시간 200ms, 초당 1,000 요청 처리 가능
안정성 (Reliability)다양한 상황에서도 API가 일관되게 동작하고, 장애나 오류 발생 시 신속하게 복구되는 능력가용성(Availability), 오류율(Error Rate), 장애 복구 시간(MTTR), SLA 준수율99.9% 가용성
장애 발생 시 5분 내 복구
사용성 (Usability)개발자가 API를 쉽게 이해·활용하고 유지보수할 수 있는 정도명확한 문서화, 일관된 설계, 직관적인 응답 구조, 학습 곡선Swagger 문서 제공
표준 응답 포맷(JSON) 채택, RESTful 규칙 준수

기본적인 품질 관리 방법

API의 기본 품질 관리는 성능, 안정성, 사용성을 유지하기 위해 필수적인 모니터링과 관리 절차를 수행하는 것을 의미한다. 이는 서비스 초기 단계나 소규모 프로젝트에서도 최소한 적용해야 하는 관리 항목으로, 응답 시간 추적, 오류 처리 표준화, 사용량 집계 등이 포함된다.

  1. 응답 시간 모니터링
    • 개념: API 요청이 시작되어 응답이 완료되기까지 걸린 시간을 측정· 분석하는 과정
    • 목적: 성능 병목 구간을 파악하고 SLA(Service Level Agreement) 준수 여부를 확인
    • 방법:
      • 서버 측 로그에서 요청/응답 타임스탬프 기록
      • p50, p95, p99와 같은 지연(Latency) 지표 산출
      • 임계치 초과 시 알림 설정
  2. 기본적인 에러 처리
    • 개념: 오류 발생 시 표준화된 방식으로 상태 코드와 메시지를 반환하여 클라이언트가 상황을 이해하고 대응할 수 있게 하는 절차
    • 목적: 디버깅 용이성 확보, 사용자 경험 개선, 보안성 유지
    • 방법:
      • HTTP 상태 코드(4xx, 5xx) 규칙 준수
      • JSON 기반의 일관된 에러 응답 포맷 제공
      • 민감 정보는 응답에 포함하지 않음
      • 오류 코드 및 설명 문서화
  3. 간단한 사용량 체크
    • 개념: API의 호출 횟수, 성공률, 사용자별 사용 패턴 등을 집계하여 서비스 운영과 계획에 활용하는 작업
    • 목적: 리소스 관리, 과금· 정책 설정, 오남용(Abuse) 방지
    • 방법:
      • 엔드포인트별 호출 수와 상태 코드 비율 수집
      • 사용자 토큰·API 키 단위로 집계
      • 일정 기준 초과 시 레이트 리밋(rate limit) 적용

품질 관련 문서화

품질 관련 문서화는 API 사용자가 서비스의 성능, 제한사항, 권장 활용 방법을 명확히 이해할 수 있도록 작성된 기술 문서를 의미한다. 이는 개발자 경험 향상과 서비스 안정성 확보를 위해 성능 기준, 제약 조건, 모범 사례를 체계적으로 제시한다.

항목정의예시
성능 기대치 명시API의 응답 속도, 처리량, 가용성 등 성능 목표를 문서에 명확히 기록p95 응답 시간 ≤ 200ms
SLA 99.9%
제한사항 안내호출 빈도, 데이터 크기, 지원 포맷 등 사용 제약 조건을 사전 안내1분당 최대 60회 호출
요청 페이로드 ≤ 5MB
모범 사례 제시효율적이고 안전한 API 사용을 위한 권장 패턴과 예시 제공페이지네이션 사용
캐싱 적용
OAuth 2.0 인증
profile
Backend engineer

0개의 댓글