작성
·
1.6K
3
HTTP 메서드에 처음 공부할 때 수정의 경우에는 PUT과 PATCH를 사용한다고 배웠는데요.
PUT의 경우에는 통째로 갈아끼우는 방식의 갱신이고
PATCH의 경우에는 부분 수정이 가능하다고 배웠습니다.
이 강의에서는 USER의 정보중에 이름만받고 있어서(PUT은 전체 필드를 명시해주어야 한다고 배웠습니다.) PATCH가 더 적당한 방식이 아닌가라는 생각이 들었습니다.
PATCH가 아닌 PUTMapping을 사용하신 이유가 있으실까요? 그리고 이와 관련된 블로그 글들이 많은데 저마다 내리는 결론이 달라서 조금 혼란스럽습니다. 강사님의 생각을 듣고 싶습니다.
좋은 강의 만들어주신 태현님을 존중하고 존경하며 이만 글 줄이겠습니다!
답변 1
4
안녕하세요, wisehero님~ 정말 좋은 질문이십니다!! 😊
사실 이 부분이 굉장히 애매하고 흥미로운 부분입니다.
저희가 흔히 REST API
라고 말하는 것이 진정으로 REST
의미에 걸맞는가? 하면 사실은 그렇지 않습니다. (관련해서는 https://youtu.be/RP_f5dMoHFc?si=w0isupnktK3aHaW9 영상을 봐보셔도 좋습니다)
현실적으로 100% REST API
를 만들기 위해서는 생각보다 지켜야 할 것도 많고, 해야 할 것도 많죠.
때문에 보통은 API의 URI를 통해 대략적으로 자원의 의미를 파악할 수 있고, Method를 통해 자원의 변화를 파악할 수 있으면 만족하는(?) 편이라고 생각됩니다.
즉, 함께 프로젝트를 만들어 가는 사람들이 만족한다면 그것으로 충분하다는 뜻이죠!!
PATCH
와 PUT
의 관계도 비슷합니다. 어떤 곳에서는 수정은 무조건 PUT
으로 하기도 하고, 어떤 곳에서는 상황에 따라 PATCH
와 PUT
을 조금 더 디테일하게 나누기도 합니다. 어떤 방식이 절대적으로 맞다기 보다는 상황가 사람에 따라 선호할 수 있는 부분이라고 생각합니다.
개인적으로는 전자를 선호하는데요, 그 이유는 Entity가 상황에 따라 계속해서 변할 수 있기 때문입니다.
예를 들어 User
Entity에 id
와 name
만 있었다고 해보겠습니다. 여기서 PUT
과 PATCH
를 구분한다면, 이름을 변경하는 API는 PUT
으로 만들어야 합니다. 현재 필드는 name
만 존재하니까요.
그런데 시간이 흘러 age
라는 필드도 User
에 추가되었다고 해보죠. 그럼, 원래 있던 name
만 변경하는 API는 PATCH
로 변경되어야 합니다. 그 API는 모든 필드를 수정하는 것이 아니라, age
와 name
중 name
만 수정하기 때문이죠.
이렇게 되면, API의 method를 변경해야 하는데 이런 작업이 쉬운 것은 아닙니다.특히 모바일 앱처럼 버전 관리를 조금 더 세밀하게 해야하는 경우, 상당히 높은 비율의 사용자가 신규 앱 버전으로 업데이트 하지 않는 이상 하위 호환성을 위해 기존의 API 코드를 제거할 수도 없죠. 때문에 프로덕트의 유지비용이 올라가게 됩니다.
결론적으로 PATCH
와 PUT
의 적용은 결국 프로덕트를 만들어 가는 사람들이 모여 convention으로 정하는 부분이 아닐까 싶습니다. 답변이 도움이 되었으면 좋겠습니다. 감사합니다! 😊 🙇
수정은 무조건 PUT으로하고 어떤 곳은 PATCH와 PUT을 디테일하게 나누는 이렇게 두가지가 있고 지식 공유자님께서는 전자를 선호한다고 하셨는데 뭔가 제가 읽었을때 문맥상 PUT이 아닌 PATCH만 사용하는 것을 선호하시는다고 느꼈는데 제가 잘못이해한 것일까요?ㅠ
PUT과 PATCH로 해놓은 경우 age라는 필드가 추가된 경우 PUT을 PATCH로 변경해야하니 PATCH로만 하게되면 이렇게 HTTP Method를 수정할 일이 없이 PATCH로 그대로 처리가 되는것같은데 제가 이해한 것이 맞는지 검증 부탁드려도될까요??!! 부탁드리겠습니다!!
안녕하세요 주승님! 🙂
살짝 뉘앙스가 다릅니다! 위에 말씀드린 경우의 수는 "만약 PUT과 PATCH를 구분해야 한다면~"이 전제로 되어 있죠. PUT만 사용하건, PATCH만 사용하건 상관없이 둘을 명확하게 구분하겠다면 아무튼 수정이 일어난다는 것이 핵심입니다.
그리고 PUT과 PATCH 중에 하나만 골라야 하는데 PUT을 더 선호하는데 큰 이유는 없어요! (더 익숙해서 그런게 아닌가 싶네요!)
감사합니다!
답변 감사드립니다. 해결이 되었습니다! 명절 연휴에도 답변 달아주셔서 감사드립니다!