본문 바로가기
cs

[HTTP] 멱등성이 뭔가요 영어론 Idempotency

by 이쟝 2023. 5. 30.
일단 멱등성의 정의를 살펴보면 같은 연산을 여러 번 실행해도 그 결과가 달라지지 않는 성질을 의미한다. 

 

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

멱등성

HTTP Method의 멱등성

HTTP 메소드의 멱등성과 DELETE 메서드가 멱등한 이유

PATCH는 정말 idempotent 하지 않을까? 

HTTP Method의 속성 : 안전 Safe, 멱등 Idempotent, 캐시 가능 Cacheable