웹 서비스 개발에 널리 사용되는 아키텍처 스타일
HTTP 프로토콜 기반으로 동작한다.
- REST에서는 모든 것을 "자원"으로 본다.
- 자원은 URI(Uniform Resource Identifier)로 식별한다.
- 표현은클라이언트가 서버로부터 자원의 상태(데이터)를 요청할 때, 그 자원은 JSON, XML 등 특정 형식으로 전달된다.
- 상태 전달은 REST는 상태를 유지하지 않는 통신 방법이다. 즉, 각 요청은 독립적이며 서로의 상태 정보를 공유하지 않는다.
예:
/users
/users/1
/posts/10
- 클라이언트가 요청한 자원의 상태를 특정 형식으로 전달
- 주로 JSON, XML 사용
{
"id": 1,
"name": "coco"
}- 서버는 클라이언트의 상태를 저장하지 않는다.
- 각 요청은 독립적으로 처리된다.
예:
- 매 요청마다 인증 토큰 포함 필요 (JWT 등)
REST 원칙을 따르는 API
클라이언트와 서버 간의 통신을 REST 방식으로 설계한 것
- URL을 통해 자원을 식별
GET /users
GET /users/1
| Method | 설명 |
|---|---|
| GET | 조회 |
| POST | 생성 |
| PUT | 전체 수정 |
| PATCH | 부분 수정 |
| DELETE | 삭제 |
서버의 처리 결과를 숫자로 반환
| 코드 | 의미 |
|---|---|
| 200 | OK (요청 성공, 정상 응답) |
| 201 | Created (리소스 생성 성공) |
| 204 | No Content (성공했지만 반환할 데이터 없음) |
| 400 | Bad Request (잘못된 요청, 파라미터 오류 등) |
| 401 | Unauthorized (인증 필요 또는 인증 실패) |
| 403 | Forbidden (권한 없음, 접근 거부) |
| 404 | Not Found (요청한 리소스를 찾을 수 없음) |
| 405 | Method Not Allowed (허용되지 않은 HTTP Method 사용) |
| 409 | Conflict (리소스 충돌, 중복 데이터 등) |
| 500 | Internal Server Error (서버 내부 오류) |
| 503 | Service Unavailable (서버 과부하 또는 점검 중) |
요청/응답에 대한 메타데이터 포함
- Content-Type
- Authorization
- Cache-Control
- 실제 데이터(JSON 등) 포함
- 역할 분리
- 클라이언트: 요청
- 서버: 처리 및 응답
- 서버는 상태를 저장하지 않음
- 요청마다 필요한 정보 포함
- 응답을 캐싱하여 성능 향상 가능
- 클라이언트는 중간 서버 존재 여부를 모름
- 예: API Gateway, Proxy, Load Balancer
-
마지막에 "/" 사용하지 않음
/users (O) /users/ (X) -
소문자 사용
/users (O) /Users (X) -
하이픈(-) 사용, 언더바(_) 지양
/user-profile (O) /user_profile (X)
- URI는 "자원"을 표현해야 한다
GET /users (O)
GET /getUsers (X)
POST /createUser (X)
👉 행위는 HTTP Method로 표현
- REST는 HTTP 기반 아키텍처 스타일
- 자원(URI) + 행위(Method)로 설계
- 상태는 저장하지 않음 (Stateless)
- JSON 형태로 데이터 전달
- URI는 명사, 행위는 HTTP Method
GET /users/1
응답:
{
"id": 1,
"name": "coco"
}POST /users
요청:
{
"name": "coco"
}응답:
- 201 Created


