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

간다간다뿅간다님의 프로필 이미지

작성한 질문수

모든 개발자를 위한 HTTP 웹 기본 지식

Stateful, Stateless

POST

24.04.24 20:13 작성

·

235

·

수정됨

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
요청 데이터 처리 • 단순히 데이터를 생성하거나, 변경하는 것을 넘어서 프로세스를 처리해야 하는 경우

예) 주문에서 결제완료 -> 배달시작 -> 배달완료 처럼 단순히 값 변경을 넘어 프로세스의 상태가 변경되는 경우

POST의 결과로 새로운 리소스가 생성되지 않을 수도 있음 예) POST /orders/{orderId}/start-delivery (컨트롤 URI)

POST /orders/{orderId}/start-delivery (컨트롤 URI)에서 위의 POST 메서드는 다른 POST와는 달리 클라이언트에서 리소스를 식별하고 있는 것으로 보이는데 이러한 경우에는 리소스를 생성하지 않고 프로세스의 상태를 변경하는 건가요?

POST /orders/{orderId}/start-delivery 이것이 정확히 무엇을 의미하는지 잘 모르겠습니다.

+ PUT을 지원하지 않는 곳이 있어서 그럴 때는 POST를 사용하면 된다고 한 것이 데이터 변경을 의미한다는 것은 이해를 했습니다.

그리고 리소스라고 하는 것은 문서, 동영상, 사진 등과 같이 식별할 수 있는 모든 것이라고 얘기를 했는데 리소스 변경, 수정, 삭제, 조회라고 하는 것이 저 예제를 통해서 이해를 하자면 members라는 리소스가 있는데 그 안에 들어있는 필드 값(속성?)을 변경하는 것으로 느껴집니다.

답변 3

2

김영한님의 프로필 이미지
김영한
지식공유자

2024. 04. 25. 19:38

안녕하세요. 간다간다뿅간다님

프로세스 상태 변경을 위한 POST 사용

POST는 리소스의 생성 외에도 다양한 목적으로 사용될 수 있습니다. 특히, 단순히 데이터 값을 변경하거나, 더 복잡한 프로세스 상태를 변경할 때 사용됩니다. 예를 들어, POST /orders/{orderId}/start-delivery 같은 경우, 주문의 상태를 '배달 시작'으로 변경하는 프로세스를 수행합니다. 이때 새로운 리소스가 생성되는 것이 아니라 기존 리소스(주문)의 상태가 변경됩니다.

컨트롤 URI와 POST

POST /orders/{orderId}/start-delivery 같은 URI는 "컨트롤 URI"라고도 불립니다. 이는 리소스 자체에 대한 표준 CRUD(Create, Read, Update, Delete) 작업 외에 리소스의 상태를 변경하거나 특정 동작을 제어하기 위해 사용됩니다. 여기서 클라이언트는 특정 주문의 상태를 변경하도록 서버에 명령합니다.

마지막에 이야기하신 것 처럼 이것은 특정 주문의 상태를 변경하게 됩니다. 따라서 생각하신 것 처럼 필드 값(속성)을 변경할 수 있습니다.

감사합니다.

1

간다간다뿅간다님의 프로필 이미지

2024. 04. 24. 20:29

POST /orders/{orderId}/start-delivery

그러면 orders/{orderId}에 start-delivery라는 상태 하위 목록? 경로?가 있다고 생각하면 되는 건가요?

제 말이 맞다면 만약 배달 시작이 아니라 배달 완료라고 상태를 변경한다면 POST /orders/{orderId}/complete-delivery 이런 식으로 상태를 변경할 수 있는 건가요? 그리고 추가적으로 질문한 ↓ 답변 해주실 수 있을까요..

리소스라고 하는 것은 문서, 동영상, 사진 등과 같이 식별할 수 있는 모든 것이라고 얘기를 했는데 리소스 변경, 수정, 삭제, 조회라고 하는 것이 저 예제를 통해서 이해를 하자면 members라는 리소스가 있는데 리소스가 가지고 있는 필드(속성?)을 변경하는 것으로 느껴집니다.

0

인프런 AI 인턴님의 프로필 이미지

2024. 04. 24. 20:16

안녕하세요, 인프런 AI 인턴입니다.

간다간다뿅간다님의 질문은 POST 메서드를 사용하여 프로세스의 상태를 변경하는 예시에 관한 것으로, POST가 데이터 생성 외에 어떤 목적으로 사용될 수 있는지, 그리고 POST /orders/{orderId}/start-delivery 같은 URI가 어떤 의미를 가지는지에 대해 궁금해하시는 것 같습니다.

이에 관련된 내용으로, 다음과 같이 “프로세스의 상태가 변경되는 경우에 Post 사용”에 관한 질문에 대한 답변 링크를 제공드립니다:
- 프로세스의 상태가 변경되는 경우에 Post 사용

해당 질문에서는 POST 메서드의 사용이 단순히 새로운 리소스를 생성하는 것 뿐만 아니라, 특정 프로세스의 상태를 변경하는데에도 사용될 수 있다는 것을 설명하고 있습니다. 예를 들어 POST /orders/{orderId}/start-delivery 같은 URI는 주문의 배송을 시작하는 프로세스를 실행함으로써, 기존 리소스의 상태를 변경하려 할 때 사용됩니다.

요청 바디에 구체적인 변경 내용을 담지 않아도, 서버 측에서는 해당 POST 요청을 받고, 주문의 상태를 ‘배송 시작’으로 변경하는 내부 로직을 수행할 수 있습니다. 이러한 사용법은 API 설계에서 특정 작업의 실행을 의미하는 “컨트롤 URI”를 정의할 때 흔히 볼 수 있습니다.

즉, POST /orders/{orderId}/start-delivery는 새로운 리소스를 생성하는 것이 아니라, 주문의 식별자를 통해 특정 주문의 배송을 시작하는 프로세스를 실행하라는 의미입니다. 이 과정에서 주문의 상태가 변경되는 것이죠.

PUT과의 비교에서, PUT 메서드는 일반적으로 리소스의 전체를 갱신하는 데 사용되며, 경우에 따라서는 서버에서 지원되지 않을 수 있습니다. 그러한 상황에서는 POST를 사용하여 리소스 상태 변화나, 특정 작업의 실행과 같은 프로세스를 처리할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.