비동기 보상 트랜잭션(Asynchronous Compensation Transaction)은 하나의 트랜잭션을 여러 단계로 나누어 실행하고, 실패 시에는 각 단계를 되돌리는 보상 작업(Undo가 아닌 Compensation Action)을 수행하여 전체적인 정합성을 유지합니다.
예: 3단계 트랜잭션 (T1 → T2 → T3)
본 트랜잭션 | 보상 트랜잭션 |
---|---|
주문 생성 | 주문 취소 |
재고 차감 | 재고 복구 |
결제 완료 | 결제 취소(환불) |
항목 | 설명 |
---|---|
비동기 처리 | 각 트랜잭션은 독립적으로 실행되며, 중앙 집중식 락 없음 |
확장성 우수 | 마이크로서비스 구조에 적합, 서비스 간 결합도 낮음 |
복잡성 증가 | 각 단계에 대한 보상 로직을 별도 구현해야 함 |
정합성은 최종적(Eventual Consistency) | 즉시 정합성(X), 최종적으로 데이터 일치 보장(O) |
대규모 시스템에서는 Orchestrator를 통해 흐름을 중앙에서 제어하는 것이 일반적
장점 | 단점 |
---|---|
2PC 대비 비동기 처리로 성능 우수 | 구현 복잡도 증가 (보상 로직 필요) |
락 없이 처리 가능 → 확장성 높음 | 트랜잭션 중단 시 데이터 일시 불일치 가능 |
MSA와 궁합이 좋음 | 테스트 및 디버깅 어려움 |
온라인 쇼핑몰:
주문 → 재고 차감 → 결제
항공 예약 시스템:
좌석 예약 → 결제 처리
비동기 보상 트랜잭션은 MSA 환경에서의 분산 트랜잭션 문제를 해결하는 실용적인 대안입니다. 즉각적 정합성은 포기하되, 최종 정합성(Eventual Consistency)을 확보하고, 시스템 확장성과 유연성을 극대화할 수 있는 구조입니다. 다만, 트랜잭션 보상 로직의 설계와 구현에 주의가 필요합니다.