알림은 주문 요청보다 늦게 도착한다

사용자는 화면에서 주문 버튼을 누른다.

하지만 주문 완료 알림은 그 즉시 오는 것이 아니다.

왜냐하면 주문 완료는 단순히 주문 row가 생겼다는 뜻이 아니기 때문이다.

이 프로젝트에서는 재고 차감, 배송 생성, 배송 완료까지 이어진 뒤에야 주문 완료로 볼 수 있다.

따라서 chap04의 핵심 흐름은 “요청을 보낸다”에서 끝나지 않는다.

요청 이후에 내부 메시지 흐름이 진행되고, 마지막에 다시 사용자 화면으로 결과가 돌아온다.

전체 흐름은 이렇게 이어진다

큰 흐름은 아래와 같다.

브라우저 WebSocket 연결
-> /topic/orders/{userId} 구독
-> 주문 생성 API 호출
-> order-created 이벤트 발행
-> 재고 차감
-> 배송 생성
-> 배송 완료 API 호출
-> delivery-completed 이벤트 발행
-> complete-order-command 발행
-> order-service 주문 완료 처리
-> /topic/orders/{userId}로 알림 발행
-> 브라우저 화면에 주문 완료 표시

이 흐름은 길어 보이지만, 역할을 나누면 어렵지 않다.

image.png

먼저 구독하고, 그다음 주문한다

frontend/index.html에서는 주문 API를 호출하기 전에 WebSocket 연결을 먼저 준비한다.

그 이유는 간단하다.

주문 완료 알림을 놓치지 않기 위해서다.