비동기 보상 트랜잭션(Asynchronous Compensation Transaction)

agnusdei·2025년 4월 29일
0

Database

목록 보기
7/30

1. 개요

비동기 보상 트랜잭션(Asynchronous Compensation Transaction)은 하나의 트랜잭션을 여러 단계로 나누어 실행하고, 실패 시에는 각 단계를 되돌리는 보상 작업(Undo가 아닌 Compensation Action)을 수행하여 전체적인 정합성을 유지합니다.

  • 대표적인 구현: SAGA 패턴
  • 동기 커밋이 아닌, 비동기 처리 + 보상 메커니즘을 기반으로 함

2. 동작 구조

예: 3단계 트랜잭션 (T1 → T2 → T3)

정상 흐름

  1. T1 실행 (성공)
  2. T2 실행 (성공)
  3. T3 실행 (성공)
    → 전체 트랜잭션 완료

실패 시 보상 흐름 (ex. T2 실패)

  1. T1 실행 (성공)
  2. T2 실행 (실패)
  3. 보상 트랜잭션 실행:
    • C1 실행 (T1의 반대 작업)

3. 보상 트랜잭션 예시

본 트랜잭션보상 트랜잭션
주문 생성주문 취소
재고 차감재고 복구
결제 완료결제 취소(환불)

4. 특징

항목설명
비동기 처리각 트랜잭션은 독립적으로 실행되며, 중앙 집중식 락 없음
확장성 우수마이크로서비스 구조에 적합, 서비스 간 결합도 낮음
복잡성 증가각 단계에 대한 보상 로직을 별도 구현해야 함
정합성은 최종적(Eventual Consistency)즉시 정합성(X), 최종적으로 데이터 일치 보장(O)

5. 구현 방식

(1) Choreography 방식

  • 각 서비스가 다음 서비스를 이벤트(Event)로 호출
  • 실패 시 보상 이벤트 발생
  • 예: 주문 서비스 → 결제 서비스 → 배송 서비스

(2) Orchestration 방식

  • 중앙 조정자(Coordinator)가 전체 트랜잭션 흐름 제어
  • 보상도 조정자가 명령

대규모 시스템에서는 Orchestrator를 통해 흐름을 중앙에서 제어하는 것이 일반적


6. 장점 vs 단점

장점단점
2PC 대비 비동기 처리로 성능 우수구현 복잡도 증가 (보상 로직 필요)
락 없이 처리 가능 → 확장성 높음트랜잭션 중단 시 데이터 일시 불일치 가능
MSA와 궁합이 좋음테스트 및 디버깅 어려움

7. 실제 적용 예시

  • 온라인 쇼핑몰:
    주문 → 재고 차감 → 결제

    • 결제 실패 시: 주문 취소 + 재고 복구
  • 항공 예약 시스템:
    좌석 예약 → 결제 처리

    • 결제 실패 시: 좌석 예약 취소

8. 결론

비동기 보상 트랜잭션은 MSA 환경에서의 분산 트랜잭션 문제를 해결하는 실용적인 대안입니다. 즉각적 정합성은 포기하되, 최종 정합성(Eventual Consistency)을 확보하고, 시스템 확장성과 유연성을 극대화할 수 있는 구조입니다. 다만, 트랜잭션 보상 로직의 설계와 구현에 주의가 필요합니다.


0개의 댓글