인프런 커뮤니티 질문&답변

xiuxiu님의 프로필 이미지

작성한 질문수

풀스택 리액트 토이프로젝트 - REST, GraphQL (for FE개발자)

routes 정의

put

해결된 질문

22.01.12 08:54 작성

·

202

0

그래프큐엘을 다시 보면서  강의 정주행 해보고 있습니다.
질문: update message 부분을 put 대신에 patch로 리팩토링해도 괜찮을까요?

저는 프론트 위주로만  알고 있어서 api쪽은 단순히  전체 update는 put, 부분적인 data 수정은 patch 정도로만 알고 있는데요, 어떤 경우 put/patch를 쓰는 게 더 좋은지 의견 궁금해서 남깁니다. 

 

답변 1

1

정재남님의 프로필 이미지
정재남
지식공유자

2022. 01. 12. 15:46

"patch는 멱등성을 보장하지 않는다"는게 대표적인 차이입니다.
https://developer.mozilla.org/ko/docs/Web/HTTP/Methods/PATCH

멱등성이란, 연산을 여러번 하더라도 결과가 달라지지 않는 성질을 의미합니다.

즉 put은 동일한 요청을 여러번 하더라도 결과가 달라지지 않는 반면,
patch는 달라질 수도 있다는 거죠.

예를 들어 

1) PATCH messages/1
{ text: 'abc' }

이런식으로 patch를 수행하면 정확히 text만 'abc'로 변경되는 요청이니까
위 동일 요청을 여러번 수행하더라도 늘 같은 결과가 됩니다 (멱등성 O).

반면,

2) PATCH messages/1
{  add: 'text', value: 'def' }

'add'라는 명령을 수행할 타겟 프로퍼티('text')를 지정하여 'value'에 지정된 값을 추가할 수 있게 구현했다면
위 동일 요청에 의해서 text 값이 자꾸만 변경될 것입니다 (멱등성 X).
('abc' => 'abcdef' => 'abcdefdef' => 'abcdefdefdef' => ... )

애초에 2)와 같은 방식으로 api를 작성하지 않으면 되긴 하지만
바꿔말하면 "어떻게 구현하느냐"에 따라서 멱등성 여부가 "달라질 수 있다"는게 포인트입니다.

이런 맥락에서 patch는 쓰지 않고 오직 put만을 쓰도록 권장하는 사람들도 있고,
데이터 사이즈가 거대한 경우와 그렇지 않은 경우를 나누어 판단하자는 사람들도 있고,
위 성질을 잘 이해하고 사용하자는 사람들도 있지요.

어쩄든 patch를 사용하도록 리팩토링 해보시는건 좋은 생각이십니다!

xiuxiu님의 프로필 이미지
xiuxiu
질문자

2022. 01. 12. 20:10

답변 감사합니다 많은 도움 되었습니다!!!

xiuxiu님의 프로필 이미지

작성한 질문수

질문하기