작성
·
322
·
수정됨
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
여기에 질문 내용을 남겨주세요.
put은 리소스를 완전 대체하기 때문에 데이터의 부분적인 필드만 보낼 시에 부분적인 필드만 대체되거나 새롭게 추가된다고 하셨는데, post로 put을 대체하여 사용할 경우도 마찬가지의 동작이 되나요? 가령 전체 데이터필드는 "username", "age"가 있는데 post로 "age" 필드만 바디로 보낼 경우, put과 같이 "username"없이 "age"만 대체, 추가가 되는 건지요?
아니면 애초에 put은 리소스에 식별자를 추가해야되기 때문에 post로 대체 될 수 없는건가요?
답변 2
1
안녕하세요. 낌상님, 공식 서포터즈 David입니다.
이 부분은 구현하기 나름입니다.
PUT의 경우, RFC문서에서 다음과 같이 정의하고 있습니다.
The PUT method requests that the state of the target resource be created or replaced with the state defined by the representation enclosed in the request message payload.
https://httpwg.org/specs/rfc7231.html#PUT
만약, 어떤 서버의 PUT 메서드를 사용하는 특정 API가 해당 문서에 충실하게 구현했다면, 강의에서 언급한 것과 같이 리소스를 대체하는 방식으로 동작할 것입니다.
POST는 PUT과 다른 정의를 가집니다. 다만, POST를 PUT처럼 구현할 순 있습니다.
식별자 추가의 경우, POST로 보낼 때 바디에 함께 보내면 되는 부분이라 큰 문제가 되진 않습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴이에요.
put과 post는 HTTP 메서드 중에 두 가지입니다. 각각의 역할과 동작 방식이 다르기 때문에 put으로 대체할 수 있는지에 대한 질문이군요.
put은 요청된 데이터를 리소스의 완전한 형태로 대체하는 역할을 합니다. 즉, 요청한 데이터로 리소스를 완전히 대체하게 됩니다. 그래서 부분적인 필드만 보내는 경우, 해당 필드 이외의 데이터는 제거될 수 있습니다.
반면에 post는 리소스를 생성하거나 업데이트할 때 사용됩니다. put과 달리 데이터를 전송할 때 식별자를 함께 보내지 않아도 됩니다. 요청된 데이터를 리소스에 추가하거나 업데이트하게 됩니다.
따라서 “age” 필드만 바디로 보낼 경우, put과 post는 동작 방식이 다릅니다. put의 경우는 “age” 필드와 함께 “username”을 제외한 나머지 필드를 삭제하거나 대체할 가능성이 있습니다. 반면에 post의 경우는 “age” 필드만 업데이트할 수 있는데, “username” 필드는 그대로 유지되거나 변경되지 않을 수 있습니다.
요약하자면, put과 post는 역할과 동작 방식에 차이가 있기 때문에 put으로 대체할 경우와 post로 대체할 경우에 따라 동작이 다르게 됩니다. 따라서 put과 post는 서로 동일한 동작을 하는 것으로 대체할 수 없습니다.
더 자세한 내용은 HTTP 스펙이나 관련된 참고자료를 확인해보시는 것을 추천드립니다. 다른 궁금한 점이 있으시면 언제든지 물어보세요. 좋은 하루 되세요!