[공부정리] POST vs PUT (Feat. 멱등성)

jeyong·2024년 1월 24일
0

공부 / 생각 정리  

목록 보기
4/121

스프링에 대해서 여러가지 공부를 하던중, 정리 해놓으면 좋을 것 같은 주제를 정리하려고 한다.
이번에 다를 주제는 POST vs PUT이다.

1. POST vs PUT

POST vs PUT에 대해서 간단히 설명하자면 아래와 같다.

새 자원을 생성한다는 점에서 POST랑 같네?! 라고 생각할수도있지만 POST와 PUT의 가장 큰 차이는 POST는 request message로 포함된 엔티티를 이용해 새로운 자원을 생성해 내는것이고, PUT은 request message와 함께 넘어온 식별자의 자원을 만드는것이다.
출처: https://multifrontgarden.tistory.com/245 [우리집앞마당:티스토리]

하지만 해당 내용만을 다룰 것이라면 게시글을 작성하지 않았을 것이다.

2. 멱등성

멱등성(Idempotent)은 수학이나 전산학에서 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다.

이 멱등성을 HTTP Method에 적용하면, 동일한 요청을 한번 보내는 것과 여러번 연속으로 보내는 것이 같은 효과를 가지고, 서버의 상태도 동일하게 남을 때 해당 HTTP Method가 멱등성을 가진다고 한다.

3. HTTP Method의 멱등성

중요한 점은, 결과가 의미하는 것이 응답 상태코드가 아닌 서버의 상태라는 것이다. 예를 들어, 똑같은 요청을 했을 때 응답하는 상태코드가 바뀌더라도 서버의 상태가 항상 같은 상태라면 멱등성이 있다고 판단한다.

우리가 흔히 사용하는 HTTP Method는 GET, POST, PUT, PATCH, DELETE가 있다. HTTP 스펙에 명시된 것에 의하면, GET, PUT, DELETE는 멱등성을 가지도록, POST와 PATCH는 멱등성을 가지지 않도록 구현해야 한다. 즉, POST vs PUT의 차이점은 멱등성의 유무이다.

4. PUT vs PATCH

위에서 간단하게 POST vs PUT에 대해서 알아보았는데, PUT vs PATCH는 둘다 수정 HTTP Method임에도 불구하고 멱등성에 대한 부분에서 차이가 발생한다. 해당 이유에 대해서 정리해보자. 해당 이유에 대해서 설명할면 PATCH에 대해서만 정리하면 된다.

PATCH는 리소스의 부분적인 수정을 할 때 사용된다. PATCH는 기본적으로 멱등성을 가지지 않는 메서드인데, 그 구현을 PUT과 동일한 방식으로 할 경우 멱등성을 가지게 된다고 한다.
PATCH는 HTTP 스펙상 구현 방법에 제한이 없다. 그렇기때문에 요청 Body에 꼭 덮어쓸 데이터가 있을 필요가 없다. 즉, PATCH는 덮어쓸 데이터가 아닌 동작을 지정해줄 수 있는 것이다. (약간 말장난이라고 생각한다.)

결론적으로 말하자면, Patch의 구현을 PUT과 동일한 방식으로 할 경우 멱등성을 가진다. 반대로 Patch의 구현을 색다르게 할경우 멱등성을 가지지 않는 것이다.

5. 마무리

HTTP Method의 멱등성은 위에서도 이야기 했듯이 좀 억지인 부분이 있다. 하지만 해당 내용들을 지키지 않는다면 API의 동작을 유추하기 힘들어 질 것이다. 그래서 최대한 해당 내용들을 따라서 작성하는 것이 옳다고 생각한다.

profile
노를 젓다 보면 언젠가는 물이 들어오겠지.

0개의 댓글