HTTP 메서드¶
HTTP 메서드란?¶
HTTP 메서드는 클라이언트가 서버에 어떤 행위를 원하는지 알려주는 수단이다.
클라이언트는 요청 시 메서드를 명시하고, 서버는 이를 보고 어떤 처리를 할지 결정한다.
메서드 종류와 역할¶
| 메서드 | 역할 | 멱등성 | 안전성 |
|---|---|---|---|
| GET | 리소스 조회 | ✅ | ✅ |
| POST | 리소스 생성 | ❌ | ❌ |
| PUT | 리소스 전체 교체 | ✅ | ❌ |
| PATCH | 리소스 일부 수정 | ❌ | ❌ |
| DELETE | 리소스 삭제 | ✅ | ❌ |
핵심 개념¶
멱등성(Idempotent) 같은 요청을 여러 번 보내도 서버 상태의 결과가 동일한 것.
안전성(Safe) 요청이 서버 상태를 변경하지 않는 것 (읽기 전용).
PUT vs PATCH¶
- PUT: 리소스 전체를 교체. 빠진 필드는 null로 덮어씀
- PATCH: 보낸 필드만 수정. 나머지는 그대로 유지
실무 기준 - 회원 정보 수정, 게시글 일부 수정 → PATCH - 리소스를 의도적으로 통째로 교체할 때 → PUT
PATCH가 멱등하지 않은 이유: { "age": +1 } 처럼 상대적 변경을 허용하기 때문.
PUT은 스펙상 "이 값으로 교체해"라는 절대값 교체 의미가 고정되어 있어 멱등으로 정의됨.
POST 중복 요청 방어 (실무)¶
실무에서는 레이어별로 겹쳐서 방어한다.
- PRG 패턴 (Post-Redirect-Get): POST 성공 후 GET으로 redirect. 새로고침 시 중복 요청 방지. 폼 기반 웹에서 주로 사용.
- 클라이언트 중복 클릭 방지: 버튼 비활성화, 로딩 스피너. 클라이언트 단 방어라 완전하지 않음.
- Idempotency Key: 요청마다 고유 UUID를 헤더에 담아 전송. 서버는 Redis/DB에 저장 후 중복 키 요청 시 이전 결과 반환. 결제 API(Stripe, Toss)에서 표준처럼 사용.
- DB 유니크 제약: 같은 데이터 중복 insert 시 DB에서 차단. 최후의 방어선.
면접 답변 예시¶
Q. GET과 POST의 차이를 설명해보세요.
GET은 리소스를 조회하는 HTTP 메서드입니다. 단순 조회이기 때문에 멱등성과 안전성이 모두 보장됩니다. 반면 POST는 리소스를 생성하는 HTTP 메서드입니다. 여러 번 요청하면 리소스가 계속 생성되므로 멱등성이 보장되지 않고, 서버 상태를 변경하므로 안전성도 보장되지 않습니다.
- 멱등성: 여러 번 요청해도 서버 상태의 결과가 동일한 것
- 안전성: 요청이 서버 상태를 변경하지 않는 것