⚙️ HTTP Method 속성
- HTTP Method별 속성표
사진출처 : https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
→ Optional은 "Java의 Optional과 같이 있을 수 있다"라는 말과 동일
| 속성 | 의미 | 예시 메서드 |
|---|---|---|
| 안전성(Safe) | 서버의 상태를 변경하지 않음 | GET, HEAD |
| 멱등성(Idempotent) | 여러 번 요청해도 결과가 같음 | GET, PUT, DELETE |
| 캐시 가능성(Cacheable) | 응답을 클라이언트/프록시에서 저장해 재사용 가능 | GET, HEAD (POST는 조건부) |
1. 안정성(Safe)
2. 멱등성(Idempotent)
한번을 호출하거나 수천번을 호출하거나 항상 결과는 같음
요청이 실패한 경우, 재시도하기 위해 필요함
리소스 조회(GET Method)가 재요청 중간에 변경된다면?
→ 재요청 중간에 리소스가 변경되는 것은 멱등성으로 고려하지 않음
3. 캐시 가능성(Cacheable)
🔢 HTTP 상태 코드
- 서버의 응답 상태를 나타내는 3자리 숫자 코드
- 1xx~5xx의 의미만 정확히 이해하면 충분함
| 범위 | 의미 | 대표 코드 및 설명 |
|---|---|---|
| 1xx | 정보 | 처리 중 (거의 사용 X) |
| 2xx | 성공 | 200 OK, 201 Created, 204 No Content 등 |
| 3xx | 리다이렉션 | 301, 302, 307, 308 등 |
| 4xx | 클라이언트 오류 | 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found |
| 5xx | 서버 오류 | 500 Internal Server Error, 503 Service Unavailable |
📍 리다이렉션 코드 (3xx)
| 코드 | 설명 |
|---|---|
301 | 영구 이동 (GET으로 변환될 수 있음) |
308 | 영구 이동 (메서드 & Body 유지) |
302 | 임시 이동 (GET으로 변환될 수 있음) |
303 | 다른 URI 참조 (GET으로 변환) |
307 | 임시 이동 (메서드 & Body 유지) |
304 | 캐시 사용 권장, 변경 없음 (Body 없음) |
→ PRG 패턴(Post-Redirect-Get)에서 302/303/307 사용
🧱 HTTP API 설계 원칙
❌ 잘못된 설계 예시 (동사 기반 URL)
/create/board
/read/board/1
/update/board/1
/create/boardcreate라는 동사가 들어가 있음/read/board/1read라는 동사는 필요 없음/read/board-listread라는 동사가 들어가 있음board-list도 중복된 표현이라 /board만 써도 됨/update/board/1update가 불필요하게 동사로 명시됨/delete/board/1/board/1이면 충분⭕ 좋은 설계 예시 (RESTful 설계)
| 작업 | Method | URI 예시 |
|---|---|---|
| 게시글 생성 | POST | /boards |
| 게시글 1개 조회 | GET | /boards/{id} |
| 게시글 목록 조회 | GET | /boards |
| 게시글 수정 | PUT / PATCH | /boards/{id} |
| 게시글 삭제 | DELETE | /boards/{id} |