1. REST의 기본 개념
- 자원(Resource)
- REST에서 모든 것은 "자원"으로 표현됩니다.
- 자원은 URI(Uniform Resource Identifier)를 통해 식별
ex)
https://api.example.com/users(사용자 자원)
https://api.example.com/users/123 (특정 사용자 자원)
- 표현(Representation)
- 자원은 여러 형태로 표현될 수 있다.
- 일반적으로 JSON, XML, HTML 형식이 사용된다.
ex) JSON 형식으로 사용자 데이터를 표현
{
"id":123,
"name":"mangez",
"email":"mangez@example.com"
}
- HTTP 메서드(Method)
- RESTful API는 자원에 대한 작업을 HTTP 메서드를 통해 정의한다.
∘ GET : 자원을 조회
∘ POST : 자원을 생성
∘ PUT : 자원을 수정 (전체 업데이트)
∘ PATCH : 자원을 수정 (부분 업데이트)
∘ DELETE : 자원을 삭제
- 상태 기반(Stateful 또는 Stateless)
- REST는 Stateless를 지향합니다.
- 클라이언트와 서버의 통신은 상태 정보를 저장하지 않으며, 요청은 독립적입니다.
- 즉, 요청마다 필요한 모든 정보를 포함해야 합니다.
2. RESTful API의 특징
- 클라이언트-서버 구조
- 클라이언트와 서버가 명확히 분리되어 있습니다.
- 클라이언트는 사용자 인터페이스를 담당하고,
- 서버는 데이터와 비즈니스 로직을 처리합니다.
- 무상태성(Statelessness)
- 서버는 클라이언트의 상태를 저장하지 않습니다.
- 각 요청은 독립적이며, 필요한 모든 정보를 포함해야 합니다.
- 캐시 기능(Cacheable)
- HTTP의 캐싱 메커니즘을 활용하여 클라이언트 요청 및 서버 응답을 캐싱할 수 있습니다.
- 이를 통해 성능이 향상됩니다.
- 일관된 인터페이스(Uniform Interface)
- REST는 자원을 URI로 식별하고, HTTP 메서드를 사용하여 동작을 정의합니다.
ex) GET /users, POST /users, PUT /users/123
- 계층화 구조(Layered System)
- 클라이언트는 서버의 직접적인 정보를 알 필요가 없습니다.
ex) 요청이 프록시, 로드 밸런서 등을 거쳐도 상관 없습니다.
3. RESTful API 설계 원칙
- 자원의 URI는 명사로 표현
- HTTP 메서드의 올바른 사용
- GET, POST, PUT, PATCH, DELETE를 의미이 맞게 사용합니다.
- 자원 간 관계 표현
- ex) 특정 사용자의 주문 목록
GET /users/123/orders
- HTTP 상태 코드를 적절히 활용
- 200 OK : 요청 성공
- 201 Created : 자원 생성 성공
- 204 No Content : 삭제 성공
- 400 Bad Request : 잘못된 요청
- 401 Unauthorized : 인증 실패
- 404 Not Found : 자원을 찾을 수 없음
- 500 Internal Server Error : 서버 오류
- 응답에 메시지 바디 포함
- 응답 데이터는 JSON이나 XML과 같은 표준 형식을 사용합니다.
4. RESTful API의 장점
- 간결함과 직관성
- HTTP 프로토콜은 기반으로 설계되어 쉽게 이해하고 사용할 수 있습니다.
- 유연성
- JSON, XML 등 다양한 데이터 형식을 지원합니다.
- 확장성
- Stateless 설계 덕분에 서버 확장이 용이합니다.
- 표준화
- 표준 HTTP 메서드와 상태 코드를 사용하여 일관성을 유지합니다.
5. RESTful API의 단점
- 복잡한 요청
- 매우 대규모 데이터나 복잡한 관계를 처리하기 어렵습니다.
- 실시간 데이터 전송 부족
- 웹소켓처럼 실시간 통신에 최적화되어 있지 않습니다.
- 오버헤드
- Stateless 특성상 요청마다 필요한 데이터를 포함해야 하므로 네트워크 오버헤드가 발생할 수 있습니다.