2025-12-16
오늘 배운 것
📌 REST란?
REpresentational State Transfer
리소스를 URI로 표현하고, HTTP 메서드로 행위를 구분하는 설계 방식
🎯 핵심 설계 원칙
✅ 1. 자원(Resource)은 명사로, 행위는 HTTP 메서드로
GET /users → 사용자 목록 조회
GET /users/{id} → 특정 사용자 조회
POST /users → 사용자 생성
PUT /users/{id} → 사용자 전체 수정
PATCH /users/{id} → 사용자 일부 수정
DELETE /users/{id} → 사용자 삭제
❌ /getUser, /deleteUser 이런 식으로 행위를 URI에 넣지 않기
✅ 2. URI는 리소스를 표현해야 한다
| 잘못된 예 | 개선된 예 |
|---|---|
/getUserInfo |
/users/{id} |
/updateOrderStatus |
/orders/{id}/status |
/saveFormData |
/forms (POST 요청으로 처리) |
✅ 3. HTTP 메서드 의미 지키기
| 메서드 | 의미 |
|---|---|
GET |
조회 (읽기 전용) |
POST |
생성 |
PUT |
전체 수정 (대체) |
PATCH |
일부 수정 |
DELETE |
삭제 |
❌ GET 요청에 Body 사용 ❌ (표준상 금지)
✅ 4. 상태코드로 처리 결과 표현하기
| 코드 | 의미 |
|---|---|
200 OK |
정상 처리 |
201 Created |
생성 완료 (POST) |
204 No Content |
삭제 완료 (응답 없음) |
400 Bad Request |
잘못된 요청 |
401 Unauthorized |
인증 실패 |
403 Forbidden |
권한 부족 |
404 Not Found |
리소스 없음 |
500 Internal Server Error |
서버 내부 오류 |
✅ 5. 에러 응답 포맷 통일
{
"code": "USER_NOT_FOUND",
"message": "해당 사용자를 찾을 수 없습니다."
}
✅ 프론트와 협업을 위한 일관된 에러 구조 중요
✅ 6. 계층적 URI 구조 + 관계 표현
GET /users/{userId}/orders → 특정 사용자의 주문 목록
GET /articles/{id}/comments → 특정 게시글의 댓글
리소스 간 관계는 URI로 계층 표현
✅ 7. 필터링/페이징/정렬은 쿼리 파라미터로
GET /users?page=1&size=10&sort=name,desc
GET /products?category=shoes&minPrice=10000
✅ 검색 조건, 정렬 등은 URI가 아닌 쿼리 파라미터로 처리
✅ 8. 응답 데이터 포맷은 명확하게
GET /users → Content-Type: application/json
- 기본은 JSON 사용
- 필요한 경우 XML, CSV 등도 지원 가능
🧠 RESTful한 API가 주는 이점
| 항목 | 설명 |
|---|---|
| ✅ 직관적인 URI | 프론트 개발자와 협업이 쉬움 |
| ✅ HTTP 표준 준수 | 클라이언트/서버가 역할 분리 |
| ✅ 캐시, 로깅, 테스트 용이 | Swagger, Postman에서도 바로 사용 가능 |
| ✅ 확장성 | URI만으로 리소스 설계 명확하게 표현 가능 |