들어가며
API(Application Programming Interface)는 각종 애플리케이션에서 데이터를 주고받는 중요한 수단입니다. 이러한 API를 구현하는 방법 중 하나가 REST API인데요. 이번 시간에는 REST API가 무엇인지, 그리고 어떻게 동작하는지에 대해 가볍게 알아보도록 하겠습니다.
REST가 뭔데?
REST(Representational State Transfer)는 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처 스타일입니다.
REST 아키텍처는 다음 6가지 제약 조건이 있습니다.
- 인터페이스 일관성 (Uniform Interface)
클라이언트와 서버 사이의 인터페이스를 정의하며, 아키텍처를 단순화하고 분리합니다.
Uniform Interface에는 다음 4가지 가이드 원칙이 있습니다.
리소스 기반 (Resource-Based)
각 리소스는 요청에서 URI를 이용해 구별되어야 합니다. 리소스 자체는 클라이언트에게 반환되는 표현(representation)과 개념적으로 분리되어 있습니다. 예를 들어, 서버는 데이터베이스를 직접 보내지 않고, 데이터베이스 레코드를 나타내는 HTML, XML 또는 JSON을 보냅니다.
메시지를 통한 리소스 조작 (Manipulation of Resources Through Representations)
클라이언트는 리소스의 표현과 그에 첨부된 메타데이터를 가지고 있으면, 해당 리소스를 수정하거나 삭제하는 데 충분한 정보를 가지게 됩니다. 이는 클라이언트가 권한이 있다면 해당 리소스를 서버에서 수정하거나 삭제할 수 있음을 의미합니다.
자기서술적 메시지 (Self-Descriptive Messages)
각 메시지는 메시지를 처리하는 방법을 설명하는 충분한 정보를 포함해야 합니다. 예를 들어, 어떤 파서를 호출해야 하는지는 인터넷 미디어 타입(이전에는 MIME 타입이라고 알려짐)에 의해 지정될 수 있습니다. 응답은 또한 명확하게 캐시 가능성을 나타냅니다.
애플리케이션 상태의 엔진으로서의 하이퍼미디어 (Hypermedia as the Engine of Application State , HATEOAS)
클라이언트는 요청 본문, 쿼리 문자열 매개변수, 요청 헤더 및 요청된 URI(자원 이름)를 통해 상태를 전달합니다. 서비스는 본문 내용, 응답 코드, 응답 헤더를 통해 클라이언트에게 상태를 전달합니다. 이는 기술적으로 하이퍼미디어(또는 하이퍼텍스트 내의 하이퍼링크)라고 합니다. - 무상태 (Stateless)
서버는 이전 요청에 대한 정보를 기억하지 않으며, 모든 정보는 요청에 포함되어야 합니다. 이는 서버의 확장성을 향상시키며, 요청을 빠르게 처리할 수 있게 합니다. - 캐시 가능 (Cacheable)
이 제약 조건은 클라이언트가 서버로부터 받은 응답을 캐시해 재사용할 수 있도록 합니다. 각 응답에는 캐시 가능 여부가 명시적으로 표시되어야 합니다. 이는 네트워크 효율성을 향상시킵니다. - 클라이언트- 서버 (Client-Server)
이는 클라이언트와 서버의 역할을 명확히 분리합니다. 서버는 데이터 관리에, 클라이언트는 UI와 UX에 집중합니다. 서버와 클라이언트는 인터페이스가 변경되지 않는 한 독립적으로 교체되고 개발될 수도 있습니다. - 계층화 (Layered System)
클라이언트는 직접적으로 종단 시스템과 통신하는지, 중간에 다른 계층을 거치는지 알 수 없습니다. 이는 아키텍처의 유연성을 향상시킵니다. - Code on Demand (optional)
이 제약 조건은 선택적으로 적용됩니다. 필요한 경우 서버는 코드를 클라이언트에 전송하여 클라이언트의 기능을 확장할 수 있습니다.
REST API란?
REST API는 REST 원칙에 따라 구현된 API를 의미합니다.
REST API는 HTTP 메서드 (GET, POST, PUT, DELETE 등)를 활용하여 자원에 대한 CRUD (Create, Read, Update, Delete) 연산을 수행하며, 리소스 기반으로 설계됩니다. 각 API 엔드포인트는 고유한 식별자를 가진 리소스를 나타내며, 이 리소스는 URI(Uniform Resource Identifier)에 의해 식별됩니다.
다음은 REST API의 예시입니다.
사용자 정보 조회
GET /users/123 HTTP/1.1
Host: www.example.com
- HTTP 메서드: GET
- 엔드포인트: /users/{userId}
- 설명: 특정 사용자의 정보를 요청합니다. {userId}는 사용자의 고유 식별자입니다.
사용자 정보 반환
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 123,
"name": "홍길동",
"email": "hong@example.com"
}
- 상태 코드: 200 OK
- 설명: 클라이언트의 요청을 성공적으로 처리했음을 나타냅니다. 특정 사용자의 정보를 반환합니다.
REST API는 뭐가 좋을까?
REST API의 장점은 다음과 같습니다.
- 플랫폼 독립적입니다.
어떤 언어로든 REST API를 호출할 수 있으며, 서버는 요청을 이해하고 적절한 응답을 반환할 수 있습니다. - 확장성이 매우 좋습니다.
요청 간에 서버가 클라이언트의 정보를 저장하지 않기 때문에, 서버는 요청을 더 빨리 처리할 수 있으며, 이는 서버의 부하를 줄이고 더 많은 클라이언트 요청을 처리할 수 있음을 의미합니다. - 직관적이고 사용하기 쉽습니다.
HTTP 메서드와 상태 코드는 명확하게 정의되어 있고, 각 URI는 자원을 쉽게 식별할 수 있도록 설계되었습니다.
마치며
지금까지 REST API에 대해 가볍게 살펴봤는데요. REST API를 사용하면 웹 서비스에서 서버와의 통신을 효율적으로 구현할 수 있습니다.
지적이나 다른 의견은 언제나 환영합니다 :D
감사합니다.
See also
Reference
Chapter 5: Representational State Transfer (REST)
'Web' 카테고리의 다른 글
웹 스토리지 이해하기 (0) | 2024.03.05 |
---|---|
HTTP 세션 이해하기 (0) | 2024.02.20 |
HTTP 쿠키 이해하기 (0) | 2024.02.13 |
HTTP에 대해 알아보자 (1) | 2024.01.30 |
웹 페이지 렌더링 방식: CSR, SSR, SSG 이해하기 (2) | 2023.11.20 |