kakasoo

멱등, 비멱등 / PUT, PATCH의 사용 본문

프로그래밍/HTTP

멱등, 비멱등 / PUT, PATCH의 사용

카카수(kakasoo) 2021. 3. 7. 14:54
반응형

PUT VS PATCH

PUT은 멱등하고, PATCH는 비(非)멱등한 메서드라고 말한다. 여기서 멱등하다는 것은 여러 번 요청해도 결과가 동일하다는 것이고, 비멱등하다는 것은 여러 번 요청하면 그 결과가 누적되서 나온다, 즉 동일하지 않다는 것을 의미한다. 예컨대 GET으로 조회하는 것은 멱등하다. 새로고침을 여러 번 한다고 해서 페이지가 바뀌는 경우는 없다. DELETE도 멱등하다. 처음에 삭제를 하고, 두번째에서는 삭제할 게 없어서 삭제된 것처럼 표시된다. 세번째 네번째도 역시 삭제할 게 없으니 아무것도 바뀔 게 없다. 하지만 PUT, PATCH와 같이 수정을 위한 메서드는 어떨가? 이 멱등, 비멱등에 대한 구분은 결국 서버 측에서 API를 만드는 개발자가 구현해야 한다. 그렇다면 수정에 대한 멱등과 비멱등 구분을 알아야 한다.

그러나 여러 자료를 찾아보면 PUT은 전체를 바꾸고 PATCH는 부분을 바꾸기 때문에 비멱등하다고만 나와 있을 뿐, 그게 어떻게 구현되어야 할지는 찾아보기 힘들다. 그래서 나는 아래처럼 사용하고 있다.

PUT 메서드의 경우

( 데이터 상에서 사용자의 나이가 5살이라고 가정하고, 현재 1월 1일이 되어 1살을 늘려야 하는 상황이다. )

PUT : 사용자의 나이를 6살로 바꿔줘.
PUT : 사용자의 나이를 6살로 바꿔줘.
PUT : 사용자의 나이를 6살로 바꿔줘.
PUT : 사용자의 나이를 6살로 바꿔줘.

PATCH 메서드의 경우

( 데이터 상에서 사용자의 나이가 5살이라고 가정하고, 현재 1월 1일이 되어 1살을 늘려야 하는 상황이다. )

PATCH : 사용자의 나이를 1살 늘려줘.
PATCH : 사용자의 나이를 1살 늘려줘.
PATCH : 사용자의 나이를 1살 늘려줘.
PATCH : 사용자의 나이를 1살 늘려줘.
  • 결과적으로, PUT 메서드의 경우에는 나이가 6살로 됐을 것이고, PATCH 메서드는 4살이 추가되어 9살이 되었을 것이다.
  • 동일하게 나이를 늘리고자 설계한 것이지만, 전자의 경우에는 멱등하여 문제가 되지 않았고, 후자의 경우에는 비멱등하여 여러 번 요청이 들어간 경우에 문제가 되었다.
  • PUT 메서드는 전체를 바꾸고, PATCH 메서드는 토글, 스위치 같은 느낌으로 이해하면 될 법하다.
반응형

'프로그래밍 > HTTP' 카테고리의 다른 글

안전한 메서드와 HEAD 메서드의 사용  (0) 2021.03.07
[HTTP] 24. 웹 호스팅  (0) 2021.01.31
[HTTP] 23. 내용 협상과 트랜스 코딩  (0) 2021.01.31
[HTTP] 22. 국제화  (0) 2021.01.31
[HTTP] 21. 엔터티와 인코딩  (0) 2021.01.31