프로그래밍/Backend

REST API 뼛속까지 탐구하기

supernovaMK 2024. 8. 1. 16:38

먼저 REST  API란 무엇인가?


REST API(Representational State Transfer Application Programming Interface)는 웹 서비스 설계 방식 중 하나로, 클라이언트와 서버 간의 통신을 위해 HTTP 프로토콜을 기반으로 사용됩니다. REST API는 자원의 표현을 전달하여 클라이언트가 서버의 상태를 변경하거나, 서버에서 데이터를 가져올 수 있게 합니다. REST는 다음과 같은 주요 원칙을 따릅니다:

주요 원칙

  1. 자원(Resource) 기반:
    • 모든 것은 자원으로 간주됩니다. 자원은 URI(Uniform Resource Identifier)를 통해 식별됩니다. 예를 들어, /articles, /users/123 등이 자원을 나타내는 URI입니다.
  2. HTTP 메서드 사용:
    • REST API는 HTTP 메서드를 사용하여 자원에 대한 작업을 수행합니다.
      • GET: 자원을 조회합니다.
      • POST: 새 자원을 생성합니다.
      • PUT: 자원을 업데이트합니다.
      • DELETE: 자원을 삭제합니다.
      • PATCH: 자원의 일부를 업데이트합니다.
  3. 상태 무저장성(Stateless):
    • 각 요청은 클라이언트의 컨텍스트를 서버에 저장하지 않고, 완전한 요청을 포함해야 합니다. 서버는 각 요청을 독립적으로 처리합니다.
  4. 클라이언트-서버 구조:
    • 클라이언트와 서버는 분리되어 있으며, 클라이언트는 서버에 요청을 보내고 서버는 요청에 응답합니다. 클라이언트는 서버의 내부 구현에 대해 알 필요가 없습니다.
  5. 계층화 시스템(Layered System):
    • 클라이언트는 직접 연결된 서버 외에 중간 서버를 통해서도 연결될 수 있습니다. 이는 로드 밸런싱, 캐싱 등의 기능을 제공할 수 있습니다.
  6. 캐시 가능(Cachable):
    • HTTP 응답은 캐시 가능해야 합니다. 서버는 각 응답에 대해 캐싱 가능한지 여부를 명시합니다.

 

여기까지가 GPT가 나에게 준 답변이다.

 

서버의 자원을 클라이언트에 구애받지 않고 사용할 수 있게 하는 설계 방식이라고 요약할 수 있겠다.


그렇다면 REST 는 무엇일까

 

REST(Representational State Transfer)의 약자로 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미합니다.

 

  1. 자원(Resource) : HTTP URI
  2. 자원에 대한 행위(Verb) : HTTP Method
  3. 자원에 대한 행위의 내용 (Representations) : HTTP Message Pay Load

 

REST 특징

  1. Server-Client(서버-클라이언트 구조)
  2. Stateless(무상태)
  3. Cacheable(캐시 처리 가능)
  4. Layered System(계층화)
  5. Uniform Interface(인터페이스 일관성)

 

여기서 그러면 URL 과 URI 까지 궁금하게 되었다.

 

URI와 URL를 쉽게 구분하는 방법은

URI 는 통합 자원 식별자로 주소에 식별자가 있으면 URI

URL은 리소스 주소를 나타내므로 리소스 위치까지만 나타내면 URL 입니다.

 

즉 URI가 더 큰 범위인 것이다. 그 안에 URL이 존재하는 것이다.

 

 

즉 , HTTP URI 를 통해서 자원을 구분하고, HTTP 메서드를 사용하여 자원들을 관리하고 응답으로는 JSON이나 XML로 데이터를 넘겨주게 되는 것이다.

 

 


 

장점

  • HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구출할 필요가 없다.
  • HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해 준다.
  • HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.
  • Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다.
  • REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.
  • 여러 가지 서비스 디자인에서 생길 수 있는 문제를 최소화한다.
  • 서버와 클라이언트의 역할을 명확하게 분리한다

단점

  • 표준이 자체가 존재하지 않아 정의가 필요하다.
  • HTTP Method 형태가 제한적이다.
  • 브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠 수 있는 URL보다 Header 정보의 값을 처리해야 하므로 전문성이 요구된다.
  • 구형 브라우저에서 호환이 되지 않아 지원해주지 못하는 동작이 많다.(익스폴로어)