주문 완료는 주문 서비스 혼자 결정하지 않는다

주문 서비스는 주문을 생성할 수 있다.

하지만 이 프로젝트에서 “주문 완료”는 주문 서비스 혼자 결정할 수 있는 상태가 아니다.

상품 재고가 차감되어야 하고, 배송이 만들어져야 하며, 마지막으로 배송이 완료되어야 한다.

즉, 주문 완료는 여러 서비스의 협업 결과다.

이 점이 chap04에서 중요하다.

배송 완료라는 상태 변화가 들어와야 주문도 완료될 수 있다.

image.png

배송 완료 API가 새로 등장한다

chap04의 delivery-service에는 배송 완료 API가 있다.

PUT /api/deliveries/{deliveryId}/complete

이 API는 단순히 배송 상태만 바꾸는 요청이 아니다.

배송이 완료되었다는 사실을 다음 흐름으로 넘기는 트리거다.

배송이 완료되면 delivery-service는 delivery-completed 이벤트를 발행한다.

배송 완료
-> delivery-completed

이 이벤트는 Orchestrator가 받는다.

Orchestrator는 주문 완료 커맨드를 보낸다

Orchestrator는 delivery-completed 이벤트를 받으면 complete-order-command를 발행한다.

여기서 이벤트와 커맨드의 차이를 다시 떠올리면 좋다.