사가는 트랜잭션이 진행하는 반대 방향(Cn … C1)으로 보상 트랜잭션을 실행합니다. Ci와 Ti는 순서화(sequencing, 시퀀싱)8 원리가 동일하므로 Ci가 끝나면 Ci-1 실행이 트리거됩니다.
주문 생성 사가가 실패하는 이유는 여러 가지일 것입니다.
• 소비자 정보가 올바르지 않거나 주문을 할 수 없는 소비자입니다.
• 음식점 정보가 올바르지 않거나 주문 접수가 불가한 음식점입니다.
• 소비자 신용카드가 승인 거절되었습니다.
로컬 트랜잭션이 실패하면 사가는 주문, 티켓을 무효화하는 보상 트랜잭션을 가동합니다. 표 4-1은 주문 생성 사가의 단계별 보상 트랜잭션입니다. 모든 단계에 보상 트랜잭션이 필요한 것은 아닙니다. verifyConsumerDetails() 같은 읽기 전용(read-only) 단계나, 항상 성공하는 단계 다음에 이어지는 authorizeCreditCard() 같은 단계는 보상 트랜잭션이 필요 없습니다.
주문 생성 사가의 1~3번째 단계는 실패할 가능성이 있는 단계 다음에 있으므로 보상 트랜잭션(compensatable transaction), 4번째 단계는 절대로 실패하지 않는 단계 다음에 있으므로 피봇 트랜잭션(pivot transaction), 5~6번째 단계는 항상 성공하기 때문에 재시도 가능 트랜잭션(retriable transaction)이라고 합니다.
8 역주 : ‘차례대로 동작을 수행하도록 순서를 정하는 것’을 이야기합니다.