멱등성에 대해 공부하게 된 이유
데이터를 넘겨받아 업무를 진행하던 중, 데이터를 정확히 보냈음에도
서버에서 그에 대한 응답이 제대로 오지 않았다.
결론은 내가 데이터 전달을 잘못 한 것이었지만 처음엔 문제의 원인이 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
'TIL' 카테고리의 다른 글
Module & Bundler (0) | 2023.01.25 |
---|---|
defer (0) | 2023.01.17 |
ternary-operator (0) | 2023.01.17 |
push, replace, redirect, Link의 사용은 언제인가 (0) | 2023.01.17 |
GraphQL(Graph Query Language) (0) | 2023.01.17 |