일단 멱등성의 정의를 살펴보면 같은 연산을 여러 번 실행해도 그 결과가 달라지지 않는 성질을 의미한다.
HTTP에서의 멱등성이란
여러 번 요청을 보내도, 결과가 같을 때, 즉 서버의 상태가 동일할 때 멱등성을 가진다.
멱등성을 따질 때는 상태 코드가 아니라 서버의 리소스 상태를 고려하기 때문에 서버의 백엔드 상태만 보면 됩니다.
- 멱등성 메서드 : GET, HEAD, PUT, DELETE, OPTIONS, TRACE
- 비멱등성 메서드 : POST, PATCH
Idempotency means that multiple identical requests will have the same outcome. So it does not matter if a request is sent once or multiple times.The following HTTP methods are idempotent: GET, HEAD, OPTIONS, TRACE, PUT and DELETE. All safe HTTP methods are idempotent but PUT and DELETE are idempotent but not safe.
method | purpose | reason |
GET | 리소스를 조회 | 같은 요청 여러 번 해도 시스템으로부터 같은 결과 조회 |
POST | 리소스를 생성 또는 처리 | 같은 요청 여러 번 하면 새로운 리소스가 생성되거나 리소스의 상태가 달라지면서 호출 결과가 달라질 수 있음 |
PUT | 리소스를 대체함 | 같은 요청을 여러 번 해도 항상 대상 리소스를 대체해서 동일한 상태로 만듦 |
PATCH | 리소스를 수정함 | 기존 리소스에 응답을 추가하는 경우에도 PATCH가 사용될 수 있고, 이 때 호출 결과가 달라질 수 있음 |
DELETE | 리소스를 삭제함 | 여러 번 호출해도 항상 리소스가 없는 동일한 상태 |
HTTP 메서드의 멱등성이 필요한 이유
- 요청의 재시도 때문인데, 만약 HTTP 요청이 멱등성을 보장하지 않는다면, 리소스가 이미 처리 되었는데 중복 요청이 보내질 수 있기 때문이다. 그래서 클라이언트는 멱등성을 고려해서 재시도 요청을 해야 한다.
- 멱등성은 오직 사용자 요청에 의한 리소스만을 고려해서, 구현에 따른 부작용을 고려하지는 않는다.
예외 : PATCH
- 기본적으로 PATCH는 멱등성을 가지지 않는 메서드인데, 그 구현을 PUT과 동일한 방식으로 하게 되면 멱등성을 가지게 된다.
예외 : DELETE
- 기본적으로 DELETE는 멱등성을 가진다. 삭제를 할 때 각 id의 값으로 삭제하기 때문이다, 하지만! 예시로 최신글을 삭제한다고 하게 되면 새로고침 될 때마다 결과값이 달라지기 때문에 멱등성을 보장하지 않게 된다!
그래서 HTTP 메서드 규격에 맞게 메서드를 사용해야 한다.
HTTP methods : Idempotency and Safety
'cs' 카테고리의 다른 글
CS 요약본 및 궁금증 요약본 (0) | 2023.06.08 |
---|---|
String의 불변성과 StringBuilder와 StringBuffer의 차이 (0) | 2023.06.08 |
JPA와, JPA에서 영속성에 대한 궁금증.. (0) | 2023.05.24 |
리눅스란 뭐지..? + 리눅스 주요 디렉토리 및 리눅스 명령어 (0) | 2023.05.15 |
[혼공운영체제] 스레드 (0) | 2023.05.05 |