더북(TheBook)

▼ 표 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번째 단계는 주방 서비스, 주문 서비스가 수행한 업데이트를 언두하는 보상 트랜잭션입니다. 일반 트랜잭션과 보상 트랜잭션의 순서화는 바로 다음에 설명할 사가 편성 로직이 하는 일입니다.