분산 트랜잭션의 어려움
마이크로서비스에서는 주문·결제·재고가 각각 다른 DB를 사용합니다. 2PC(2-Phase Commit)는 이론적으로 원자성을 보장하지만, 블로킹과 단일 장애 포인트 문제로 실무 적용이 어렵습니다.
SAGA 패턴 개요
SAGA는 긴 트랜잭션을 여러 개의 로컬 트랜잭션으로 분리하고, 실패 시 보상 트랜잭션(Compensating Transaction)으로 롤백하는 패턴입니다. 결과적 일관성(Eventual Consistency)을 기반으로 합니다.
Choreography 방식
각 서비스가 이벤트를 발행하고 구독하여 협력합니다. 중앙 제어 없이 느슨한 결합을 유지할 수 있지만, 전체 흐름을 추적하기 어렵습니다. Kafka 같은 메시지 브로커와 함께 사용됩니다.
Orchestration 방식
중앙 오케스트레이터가 각 서비스를 순서대로 호출하고 결과를 관리합니다. 흐름이 명확하고 모니터링이 쉽지만, 오케스트레이터가 단일 장애 포인트가 될 수 있습니다.
보상 트랜잭션 설계
각 단계의 보상 트랜잭션은 멱등성(Idempotent)을 보장해야 합니다. 이미 실행된 보상이 중복 실행되어도 결과가 동일해야 합니다.