프로그래밍/Backend
REST API 뼛속까지 탐구하기
supernovaMK
2024. 8. 1. 16:38
먼저 REST API란 무엇인가?
REST API(Representational State Transfer Application Programming Interface)는 웹 서비스 설계 방식 중 하나로, 클라이언트와 서버 간의 통신을 위해 HTTP 프로토콜을 기반으로 사용됩니다. REST API는 자원의 표현을 전달하여 클라이언트가 서버의 상태를 변경하거나, 서버에서 데이터를 가져올 수 있게 합니다. REST는 다음과 같은 주요 원칙을 따릅니다:
주요 원칙
- 자원(Resource) 기반:
- 모든 것은 자원으로 간주됩니다. 자원은 URI(Uniform Resource Identifier)를 통해 식별됩니다. 예를 들어, /articles, /users/123 등이 자원을 나타내는 URI입니다.
- HTTP 메서드 사용:
- REST API는 HTTP 메서드를 사용하여 자원에 대한 작업을 수행합니다.
- GET: 자원을 조회합니다.
- POST: 새 자원을 생성합니다.
- PUT: 자원을 업데이트합니다.
- DELETE: 자원을 삭제합니다.
- PATCH: 자원의 일부를 업데이트합니다.
- REST API는 HTTP 메서드를 사용하여 자원에 대한 작업을 수행합니다.
- 상태 무저장성(Stateless):
- 각 요청은 클라이언트의 컨텍스트를 서버에 저장하지 않고, 완전한 요청을 포함해야 합니다. 서버는 각 요청을 독립적으로 처리합니다.
- 클라이언트-서버 구조:
- 클라이언트와 서버는 분리되어 있으며, 클라이언트는 서버에 요청을 보내고 서버는 요청에 응답합니다. 클라이언트는 서버의 내부 구현에 대해 알 필요가 없습니다.
- 계층화 시스템(Layered System):
- 클라이언트는 직접 연결된 서버 외에 중간 서버를 통해서도 연결될 수 있습니다. 이는 로드 밸런싱, 캐싱 등의 기능을 제공할 수 있습니다.
- 캐시 가능(Cachable):
- HTTP 응답은 캐시 가능해야 합니다. 서버는 각 응답에 대해 캐싱 가능한지 여부를 명시합니다.
여기까지가 GPT가 나에게 준 답변이다.
서버의 자원을 클라이언트에 구애받지 않고 사용할 수 있게 하는 설계 방식이라고 요약할 수 있겠다.
그렇다면 REST 는 무엇일까
REST(Representational State Transfer)의 약자로 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미합니다.
- 자원(Resource) : HTTP URI
- 자원에 대한 행위(Verb) : HTTP Method
- 자원에 대한 행위의 내용 (Representations) : HTTP Message Pay Load
REST 특징
- Server-Client(서버-클라이언트 구조)
- Stateless(무상태)
- Cacheable(캐시 처리 가능)
- Layered System(계층화)
- 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 정보의 값을 처리해야 하므로 전문성이 요구된다.
- 구형 브라우저에서 호환이 되지 않아 지원해주지 못하는 동작이 많다.(익스폴로어)