TIL

멱등성

KANG_G1 2023. 1. 17. 22:34

멱등성에 대해 공부하게 된 이유

데이터를 넘겨받아 업무를 진행하던 중, 데이터를 정확히 보냈음에도

서버에서 그에 대한 응답이 제대로 오지 않았다.

결론은 내가 데이터 전달을 잘못 한 것이었지만 처음엔 문제의 원인이 http 부분에 있다고 여겼고

http에 대해 공부하던 도중 멱등성이란 단어를 듣게 되어 알고 싶어졌기 때문이다

 

 멱등성(Idempotent)

동일한 요청을 여러 번 보내도 한 번 보내는 것과 같은 효과를 지니며

서버의 상태도 동일하게 남을 때, '멱등성을 가졌다' 고 말한다.

외부 요인으로 중간에 리소스가 변경되는 것을 고려하지 않고 해당 요청을 기준으로 고려한다

올바르게 구현한 경우 GET, HEAD, PUT, DELETE 메서드는 멱등성을 가지며

POST 메서드는 멱등성을 지니지 않는다.

 

 

DELETE를 활용한 예)

 

DELETE /idX/delete HTTP/1.1   -> Returns 200 if idX exists

DELETE /idX/delete HTTP/1.1   -> Returns 404 as it just got deleted

DELETE /idX/delete HTTP/1.1   -> Returns 404

 

DELETE를 여러 번 호출하면 응답은 달라질 수 있지만, idX가 삭제된 것은 동일

응답이 다를 수는 있지만, 요청이 의도한 결과가 도출된다면 멱등성이 유지됨을 의미한다라는 것이다.

 

 

GET을 활용한 예)

 

GET /pageX HTTP/1.1

GET /pageX HTTP/1.1

GET /pageX HTTP/1.1

GET /pageX HTTP/1.1

 

여러 번 연속해서 호출해도 클라이언트가 받는 응답은 동일하다.


HTTP 메소드의 속성

메소드 안전 멱등 캐시 가능
GET O O O
POST X X O
PUT X O X
PATCH X X O
DELETE X O X

 

 안전과 캐시란?

 

 1. 안전

호출해도 리소스를 변경하지 않는 특성

 

2. 캐시 가능

응답 결과를 서버에 캐시 해서 사용해도 되는 메소드

GET, HEAD, POST, PATCH가 가능하지만 실무에서는 구현이 어렵기 때문에

GET, HEAD 정도만 캐시 하여 사용

 


Reference

 

https://developer.mozilla.org/ko/docs/Glossary/Idempotent

https://atoz-developer.tistory.com/117