보상 트랜잭션(Compensating Transaction)은
분산 환경에서 이미 커밋된 작업을 “되돌리기 위해” 실행하는 추가 트랜잭션을 말한다.
❌ “롤백”이 아니라
✅ “취소·무효·상쇄”를 새로운 트랜잭션으로 수행하는 개념이다.
BEGIN
주문 생성
결제 처리
ROLLBACK ← 문제 생기면 한 번에 되돌림
order-server → 주문 생성 (COMMIT)
payment-server → 결제 승인 (COMMIT)
delivery-server → 배송 생성 ❌ 실패
ROLLBACK 불가능👉 그래서 등장한 개념이 보상 트랜잭션
보상 트랜잭션이란
이미 성공적으로 커밋된 트랜잭션의 효과를
비즈니스적으로 무효화하기 위해 실행하는 “역방향 트랜잭션”이다.
| 구분 | 롤백 | 보상 트랜잭션 |
|---|---|---|
| 실행 시점 | 커밋 이전 | 커밋 이후 |
| 방식 | DB 상태 복구 | 새로운 비즈니스 동작 |
| 기술적 성격 | DB 기능 | 애플리케이션 로직 |
| 사용 환경 | 단일 시스템 | 분산 시스템(MSA) |
예: 주문 → 배송 생성 실패
주문 상태 → CANCELED
배송 예약 데이터 → 취소 처리
결제 → 환불 (필요 시)
이 전체가 보상 트랜잭션이다.
보상 트랜잭션은 Saga 패턴의 핵심 구성 요소다.
👉 어떤 Saga든 보상 트랜잭션 없이는 성립 불가
같은 보상 이벤트가 2번 와도
결과는 1번 수행된 것과 동일해야 함
보상 트랜잭션은 분산 환경에서 이미 커밋된 작업을 기술적으로 롤백할 수 없을 때, 비즈니스적으로 상태를 상쇄하기 위해 수행하는 역방향 트랜잭션이며, Saga 패턴의 핵심 구성 요소다.