핵심 인사이트 (3줄 요약)
- 비동기 트랜잭션 체인: 긴 분산 트랜잭션을 여러 개의 로컬 트랜잭션으로 쪼개고, 각 단계의 성공/실패를 메시지로 연쇄 처리하는 패턴이다.
- 보상 트랜잭션 (Compensating): 중간 단계에서 실패가 발생하면, 이전 단계의 성공을 논리적으로 취소하는 역트랜잭션을 실행하여 일관성을 맞춘다.
- 결과적 일관성 (Eventual): 2PC와 달리 리소스 락(Lock)을 걸지 않아 확장성이 매우 높지만, 데이터 정합성이 즉시 맞춰지지 않음을 수용해야 한다.
Ⅰ. 개요 (Context & Background)
마이크로서비스 아키텍처(MSA)에서는 서비스마다 독립된 데이터베이스를 가지므로, 전통적인 단일 DB 트랜잭션을 사용할 수 없다. 사가 패턴(Saga Pattern)은 이러한 분산 환경에서 여러 서비스에 걸친 데이터 무결성을 유지하기 위한 사실상의 표준(De facto standard)이다.
Ⅱ. 아키텍처 및 핵심 원리 (Deep Dive)
사가 패턴은 각 단계가 성공하면 다음 단계를 호출하고, 실패하면 왔던 길을 되돌아가는 보상 트랜잭션 로직이 핵심이다.
[ T1 ] --(Success)--> [ T2 ] --(Success)--> [ T3 ] --(Success)--> [ FIN ]
|
[ C1 ] <--(Compensate)- [ C2 ] <--(Failure)--+
<Bilingual ASCII Diagram: Saga Logic>
- T1, T2, T3: 각 마이크로서비스의 로컬 트랜잭션 (Local Transaction)
- C1, C2: 실패 시 실행되는 보상 트랜잭션 (Compensating Transaction)
- State: 각 단계의 성공 여부를 메시지 큐(Kafka) 등을 통해 비동기로 전달
Ⅲ. 융합 비교 및 다각도 분석 (Comparison & Synergy)
사가 패턴의 두 가지 구현 방식 비교:
| 비교 항목 | 코레오그래피 (Choreography) | 오케스트레이션 (Orchestration) |
|---|---|---|
| 제어 주체 | 각 서비스가 자율적으로 판단 (이벤트 기반) | 중앙 컨트롤러가 전체 흐름 통제 (지휘자) |
| 결합도 | 낮음 (서로를 몰라도 됨) | 상대적 높음 (중앙에 의존) |
| 복잡도 | 추적과 디버깅이 어려움 | 흐름 파악과 관리가 쉬움 |
| 적합한 곳 | 서비스가 적고 단순한 흐름 | 복잡하고 단계가 많은 업무 프로세스 |
Ⅳ. 실무 적용 및 기술사적 판단 (Strategy & Decision)
- 기술사적 판단: 사가는 '데이터 원자성'을 완벽히 보장하지 못하므로, 중간 상태(Dirty Read 등)를 방어하는 시맨틱 락(Semantic Lock)이나 격리성 설계가 필수적이다.
- 실무 전략: 보상 트랜잭션 자체도 실패할 수 있음을 가정하고, 멱등성(Idempotency) 보장과 최대 재시도(Retry), 사후 수동 처리(Manual) 프로세스를 함께 수립해야 한다.
Ⅴ. 기대효과 및 결론 (Future & Standard)
사가 패턴은 클라우드 분산 아키텍처의 탄력성을 극대화하는 핵심 기술이다. 현대의 대규모 이커머스나 핀테크 시스템은 2PC의 제약을 벗어나 사가 패턴을 통해 결과적 일관성을 지향하고 있으며, 이는 분산 컴퓨팅의 근본적인 한계를 극복하는 현실적이고 강력한 대안이다.
📌 관련 개념 맵 (Knowledge Graph)
- 상위 개념: 마이크로서비스 아키텍처(MSA), 분산 트랜잭션
- 하위 개념: 보상 트랜잭션, 코레오그래피 사가, 오케스트레이션 사가
- 연관 개념: 결과적 일관성 (BASE), EDA, 멱등성, 2PC 한계
👶 어린이를 위한 3줄 비유 설명
- 도미노 게임: 도미노를 하나씩 쓰러뜨리는 것처럼, 여러 친구가 순서대로 자기 할 일을 하는 거예요.
- 반대로 세우기: 만약 중간에 도미노가 안 쓰러지면, 이미 쓰러진 도미노를 다시 세우러 가는 것이 보상 트랜잭션이에요.
- 결론: 한 번에 다 하려고 욕심부리지 않고, 하나씩 차례차례 해결하는 똑똑한 방법이에요!