본문 바로가기

Backend

[Springboot] Postmapping vs Putmapping vs Patchmapping

반응형

 

CRUD를 최대한 지키면서 코드를 개발하다보니, 새로운 리소스를 생성하는 POST와 리소스를 수정 혹은 대체하는 PUT, PATCH의 차이에 대해서 의문점이 들었다. 

 

여러 서비스 기업의 기술 블로그를 읽던 중 가장 직관적으로 이해가 잘 되는 피드페이지를 공유한다.

https://www.tosspayments.com/blog/articles/dev-1

 

멱등성이 뭔가요?

생소한 표현이지만 알고 보면 쉬워요. 컴퓨터 과학에서 멱등하다는 것은 첫 번째 수행을 한 뒤 여러 차례 적용해도 결과를 변경시키지 않는 작업 또는 기능의 속성을 뜻해요. 즉, 멱등한 작업의

www.tosspayments.com

 


결국엔 멱등성 이라는 이 키워드가 핵심이었다. 

" 첫 번째 수행을 한 뒤 여러 차례 적용해도 결과를 변경시키지 않는 작업 또는 기능의 속성 "

 

여러번 요청 작업이 있어도 결과가 그대로 유지되어있는가, 변경되는가의 차이에 따라 PUT과 PATCH를 사용하는 출발점이 달라진다.

 

  • Postmapping
    • 새로운 리소스를 생성할 때 사용
    • 멱등성을 가지지 않는다. -> 같은 요청을 여러 번 수행하면 동일한 리소스의 여러 복사본이 생성되기 때문이다.
  • Putmapping
    • 리소스 전체 업데이트를 위해서 사용
    • 클라이언트가 리소스의 완전한 새 버전을 제공하고, 기존의 리소스가 대체되는 작업일 때 활용한다
    • 멱등성을 가진다 -> 여러 번 동일한 요청에도 기존의 리소스가 대체될 뿐, 새로운 리소스가 그대로 유지되기 때문이다.
    • 활용 예시 -> 사용자 프로필 정보를 업데이트할 때, 이름,전화번호,이메일 등 모든 정보를 포함해서 생성할 때
  • Patchmapping
    • 리소스 일부를 업데이트하기 위해서 사용
    • 클라이언트는 변경하고자 하는 리소스의 일부 필드만 요청하고, 리소스의 다른 부분은 영향을 받지 않는다.
    • 멱등성을 보장하지 않는다. -> 같은 PATCH 요청을 여러 번 수행할 경우, 결과가 매번 달라진다.
    • 활용 예시 -> 닉네임만 수정하기와 같은 작업 요청을 할 때

 

코드 개발하다가  의문점이 들었던 부분은 해소가 되었다. 푸시 알림을 설정할지, 해제할지 요청 API를 작성중이었는데, POST 요청은 아닌 것 같고, PUT인가 PATCH인가에 대해서 모호성을 느끼던 순간이 있었고, 이 기회에 확실하게 개념을 잡을 수 있었던 것 같다.

반응형