▼ 표 4-1 주문 생성 사가의 보상 트랜잭션
단계 |
서비스 |
트랜잭션 |
보상 트랜잭션 |
1 |
주문 서비스 |
createOrder() |
rejectOrder() |
2 |
소비자 서비스 |
verifyConsumerDetails() |
- |
3 |
주방 서비스 |
createTicket() |
rejectTicket() |
4 |
회계 서비스 |
authorizeCreditCard() |
- |
5 |
주방 서비스 |
approveTicket() |
- |
6 |
주문 서비스 |
approveOrder() |
- |
예를 들어 소비자의 신용카드 승인이 실패하면 보상 트랜잭션은 다음 순서대로 작동될 것입니다.
1. 주문 서비스: 주문을 APPROVAL_PENDING 상태로 생성합니다.
2. 소비자 서비스: 소비자가 주문을 할 수 있는지 확인합니다.
3. 주방 서비스: 주문 내역을 확인하고 티켓을 CREATE_PENDING 상태로 생성합니다.
4. 회계 서비스: 소비자의 신용카드 승인 요청이 거부됩니다.
5. 주방 서비스: 티켓 상태를 CREATE_REJECTED로 변경합니다.
6. 주문 서비스: 주문 상태를 REJECTED로 변경합니다.
5~6번째 단계는 주방 서비스, 주문 서비스가 수행한 업데이트를 언두하는 보상 트랜잭션입니다. 일반 트랜잭션과 보상 트랜잭션의 순서화는 바로 다음에 설명할 사가 편성 로직이 하는 일입니다.