Post

⚡ 네트워크 - REST API

⚡ 네트워크 - REST API

🔹 REST API란?

  • Representational State Transfer의 약자
  • HTTP 기반의 자원 중심 아키텍처 스타일을 따르는 API 설계 방식
  • URI로 자원을 표현하고, HTTP 메서드로 자원에 대한 행위를 정의함

🔹 REST의 구성 요소

구성 요소설명
자원(Resource)URI로 식별되는 대상 (예: /users/1)
행위(Verb)HTTP 메서드 (GET, POST, PUT, DELETE 등)
표현(Representation)자원의 표현 방식 (예: JSON, XML 등)

🔹 REST의 6가지 아키텍처 제약 조건

  1. 클라이언트-서버 구조: 클라이언트와 서버는 서로 분리되어 독립적으로 동작해야 함
  2. 무상태성(Stateless): 요청 간 상태 정보를 서버가 저장하지 않음
  3. 캐시 처리 가능(Cacheable): 응답은 명시적으로 캐싱이 가능해야 함
  4. 계층화 구조(Layered System): 중간 서버(proxy, gateway 등)를 통해 계층 구조를 이룰 수 있음
  5. 일관된 인터페이스(Uniform Interface): URI, HTTP 메서드, MIME 타입 등으로 인터페이스를 일관되게 유지해야 함
  6. 코드 온 디맨드(optional): 필요한 경우 클라이언트에 스크립트를 다운로드해서 실행 가능

🔹 RESTfulURI 설계 원칙

기준설명예시
명사 사용자원은 명사로 표현/users, /articles/1
계층 표현URI는 계층적으로 설계/users/1/posts/3
CRUDHTTP 메서드로 구분URI에 동사 사용 XGET /users, POST /users
복수형 사용 권장컬렉션은 복수형/users, /products

🔹 HTTP 메서드와 의미

메서드설명예시
GET자원 조회GET /users/1
POST자원 생성POST /users
PUT자원 전체 수정 (대체)PUT /users/1
PATCH자원 부분 수정PATCH /users/1
DELETE자원 삭제DELETE /users/1

🔹 주요 HTTP 상태 코드

코드의미설명
200 OK성공요청이 정상적으로 처리됨
201 Created생성 성공POST 요청으로 자원이 생성됨
204 No Content삭제/수정 성공응답 본문 없음
400 Bad Request잘못된 요청필드 누락, 형식 오류 등
401 Unauthorized인증 실패로그인 필요
403 Forbidden권한 없음접근 권한 부족
404 Not Found자원 없음존재하지 않는 URI
500 Internal Server Error서버 오류예기치 못한 오류 발생

🔹 REST API의 장점과 단점

▫️ 장점

  • HTTP 표준 기반으로 범용성, 확장성 우수
  • 클라이언트와 서버의 역할 분리 용이
  • 캐시와 계층화를 통한 성능 최적화 가능
  • 다양한 플랫폼과 언어에서 접근 가능

▫️ 단점

  • 명확한 표준이 없고 구현에 따라 해석이 달라질 수 있음
  • 복잡한 관계 표현이나 트랜잭션 처리에 한계
  • 버전 관리와 URI 설계의 일관성 유지가 어려움

🔹 RESTful API 설계 시 주의점

  • URI에는 동사 대신 명사 사용
  • 메서드 의미에 맞게 사용 (GET에 데이터를 생성하지 않음 등)
  • PUT은 전체 업데이트, PATCH는 부분 업데이트
  • 에러 처리에 명확한 상태 코드와 메시지 제공
  • 응답에 적절한 Content-Type 헤더 설정 (예: application/json)
  • 버전 관리는 URI(/v1/users) 또는 헤더 방식으로 명시

🔹 REST vs RESTful

  • REST는 아키텍처 스타일 그 자체
  • RESTfulREST 원칙을 잘 따르고 있는 구현

🔹 정리

  • REST APIHTTP 기반으로 자원을 URI로 표현하고, 그 자원에 대한 행위를 HTTP 메서드(GET, POST, PUT, DELETE 등)로 구분하는 아키텍처 스타일
  • 서버와 클라이언트를 분리하고, 무상태성을 유지하며, 일관된 인터페이스와 캐싱 같은 원칙을 따름
  • RESTful한 설계는 명확하고 확장성이 뛰어나 다양한 시스템 간 통신에 많이 쓰임
This post is licensed under CC BY 4.0 by the author.