inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

routes 정의

put

해결된 질문

237

xiuxiu

작성한 질문수 1

0

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

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

 

rest-api graphql react

답변 1

1

정재남

"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를 사용하도록 리팩토링 해보시는건 좋은 생각이십니다!

0

xiuxiu

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

질문있습니다 !

0

134

2

sass 오류

0

174

1

does not match

0

164

2

프로젝트 배포

0

299

1

코드 똑같이 쳤는데 scss 적용이 안돼요 ㅠㅠ

0

748

1

scss 스타일 적용

0

478

2

yarn run client시 에러는 안 나는데 호스트가 열리질 않습니다 ㅠㅠ

0

430

1

무한 스크롤 관련 질문 드립니다.

1

513

2

props 를 넘겨줄 때 함수를 그대로 넘겨줄 때와 화살표 함수로 감싸서 넘겨줄 때의 차이가 궁금합니다 :)

0

454

1

getInitialProps 과 getServerSideProps에 대해서 질문드립니다!

0

1144

1

node-sass를 했을 때 에러가 발생합니다.

0

377

1

[소스 다운로드 안됩니다]

0

323

1

rendered HTML error 관련

2

2187

2

닉네임 부분이 잘못되어 있는 것 같습니다.

0

448

2

Typescript 질문드려요!

0

332

1

error 관련하여

1

289

1

질문이 있습니다!.

0

278

1

질문이 있습니다!

0

486

1

수정된 내용까지 확인했는데 에러가 납니다 ㅠ

1

303

2

React Hydration Error 가 나는 이유가 무엇일까요 ?;;

0

631

1

useRef를 선호하시는 이유가 궁금합니다!

1

794

1

react-query 4.0.0 버전에선 에러가 납니다

0

668

1

gql 백틱 안에 색깔 입혀지는 확장프로그램이 어떤건지 알 수 있을까요?

2

685

1

typeScript에 대한 질문을 어디다가 올려야할지 몰라서 여기다가 남깁니다!

0

303

1