웹에서 자원을 관리하고 상호작용하는 표준을 정의한 것
기본개념
1. 자원(Resource)
- 자원은 시스템이 제공하는 데이터 또는 기능
- REST에서 자원은 URI로 표현된다
- 예 : https://api.example.com/users
2. 행위(Verb)
- 클라이언트가 자원을 어떻게 처리할지 HTTP 메서드를 통해 명시한다
- GET : 자원을 조회
- POST : 자원을 생성
- PUT : 자원을 수정
- DELETE : 자원을 삭제
3. 표현(Representation)
- 클라이언트와 서버가 자원에 대해 상호작용할 때, 자원의 표현을 교환한다
- 예 : JSON, XML, HTML 등으로 데이터를 표현
4. 상태 무저장성(Stateless)
- 서버는 클라이언트의 상태를 저장하지 않는다
각 요청은 독립적이며, 필요한 모든 정보를 요청에 포함해야 한다
특징
1. 클라이언트-서버 구조
- 클라이언트는 사용자 인터페이스를 관리하고, 서버는 데이터를 관리한다
- 서로 독립적으로 개발 및 확장이 가능
2. 무상태성(Stateless)
- 요청 간에 클라이언트의 상태 정보를 유지하지 않는다
- 요청마다 필요한 데이터를 모두 포함해야 한다
3. 캐시 가능(Cacheable)
- 응답 데이터를 캐싱하여 네트워크 트래픽을 줄이고 성능을 향상시킨다
4. 통일된 인터페이스(Uniform Interface)
- URI로 자원을 식별하고, HTTP 메서드로 동작을 명확히 표현한다
5. 계층화 시스템(Layered System)
- 클라이언트는 직접 서버와 통신하거나 중간 계층(예: 로드 밸런서, 캐시 서버)을 거칠 수 있다
구성요소
1. HTTP 메서드
메서드 | 설명 | 예시 |
GET | 자원 조회 | GET /users - 사용자 목록 조회 |
POST | 자원 생성 | POST /users - 새 사용자 생성 |
PUT | 자원 전체 수정 | PUT /users/1 - ID 1 사용자 정보 수정 |
PATCH | 자원 일부 수정 | PATCH /users/1 - ID 1 사용자의 일부 수정 |
DELETE | 자원 삭제 | DELETE /users/1 - ID 1 사용자 삭제 |
2. URI
- REST API에서 자원을 나타내는 경로
- 형식 : https://api.example.com/{자원}/{자원 ID}
- 예: https://api.example.com/users/123
3. HTTP 상태 코드
코드 | 의미 | 설명 |
200 | OK | 요청 성공 |
201 | Created | 자원 생성 성공 |
400 | Bad Request | 잘못된 요청 |
401 | Unauthorized | 인증 실패 |
403 | Forbidden | 권한 없음 |
404 | Not Found | 자원 없음 |
500 | Internal Server Error | 서버 오류 |
장점
1. 확장성 : 클라이언트와 서버가 독립적으로 확장 가능
2. 유연성 : JSON, XML 등 다양한 포맷 지원
3. 표준화 : URI와 HTTP 메서드를 활용하여 직관적
4. 캐싱 : 응답 데이터를 캐시할 수 있어 성능 향상
단점
1. 무상태성의 부담 : 클라이언트가 상태 정보를 항상 포함해야 하므로, 데이터 크기가 커질 수 있음
2. 오버헤드 : REST는 HTTP를 기반으로 하므로 프로토콜 오버헤드가 있을 수 있음
3. 복잡한 응답 구조 : 대규모 데이터나 관계형 데이터는 표현하기 어려울 수 있음
예시
1. 사용자 목록 조회
요청 :
GET /users
응답 :
[
{
"id": 1,
"name": "Alice"
},
{
"id": 2,
"name": "Bob"
}
]
2. 새 사용자 생성
요청 :
POST /users
Content-Type: application/json
{
"name": "Charlie"
}
응답 :
HTTP 201 Created
3. 사용자 삭제
요청 :
DELETE /users/1
응답 :
HTTP 204 No Content
출처 : ChatGPT