핵심 인사이트 (3줄 요약)
- 본질: 사가 패턴(Saga Pattern)은 마이크로서비스(MSA) 환경에서 여러 서비스에 걸친 트랜잭션을 일관되게 처리하기 위해, 각 단계의 로컬 트랜잭션을 순차적으로 실행하고 실패 시 '보상 트랜잭션'으로 원상복구하는 기법이다.
- 가치: 분산 트랜잭션(2PC)의 성능 저하와 가용성 문제를 극복하며, 데이터의 최종적 일관성(Eventual Consistency)을 보장한다.
- 판단 포인트: 데이터 원복(Rollback)이 불가능한 분산 환경에서 비즈니스 정합성을 유지해야 할 때, 중앙 조율(Orchestration) 또는 자율 협력(Choreography) 방식으로 구현한다.
Ⅰ. 개요 및 필요성
과거의 단일 DB 시스템에서는 Commit/Rollback 한 번으로 모든 데이터를 맞출 수 있었다. 하지만 MSA에서는 주문, 결제, 재고 서비스가 각자 다른 DB를 가진다. 주문은 성공했는데 결제가 실패하면, 이미 완료된 주문을 취소해야 한다. 이때 분산 트랜잭션(2PC)을 쓰면 모든 DB에 락(Lock)을 걸어 성능이 매우 떨어진다. 사가 패턴은 일단 각자 처리하고, 중간에 문제가 생기면 "방금 한 거 취소해!"라고 거꾸로 명령(보상 트랜잭션)을 내려 문제를 해결한다.
📢 섹션 요약 비유: 사가 패턴은 '단체 여행 환불 규정'이다. 비행기-호텔-가이드를 예약했는데 비행기가 취소되면, 이미 예약한 호텔과 가이드를 줄줄이 취소(보상 트랜잭션)하여 원래대로 돌려놓는 것과 같다.
Ⅱ. 아키텍처 및 핵심 원리
사가 패턴의 두 가지 구현 방식
- 코레오그래피 (Choreography):
- 중앙 제어자 없이 각 서비스가 이벤트를 발행하고 구독하며 자율적으로 다음 단계를 실행한다.
- 장점: 구조가 간단하고 결합도가 낮음.
- 단점: 어떤 서비스가 어떤 일을 하는지 흐름 파악이 어렵고 복잡해지면 디버깅이 힘듦.
- 오케스트레이션 (Orchestration):
- 중앙의 'Saga 인스턴스(지휘자)'가 모든 서비스에 명령을 내리고 상태를 관리한다.
- 장점: 복잡한 비즈니스 로직을 한눈에 파악하기 좋고 중앙에서 에러 처리가 용이함.
- 단점: 조율자(Orchestrator)에 로직이 집중되어 관리가 필요함.
보상 트랜잭션 (Compensating Transaction)
- 기술적 롤백이 아닌 논리적 롤백이다. 예를 들어 결제 완료 후 실패 시 '결제 취소'라는 반대 행위를 수행하여 데이터를 논리적으로 원복한다.
📢 섹션 요약 비유: 코레오그래피는 '무용수들이 서로 눈치를 보며 춤추는 것'이고, 오케스트레이션은 '지휘자가 손짓으로 연주를 지시하는 것'이다.
Ⅲ. 비교 및 연결
2PC (Two-Phase Commit) vs Saga Pattern
| 비교 항목 | 2PC (전통적 분산 트랜잭션) | Saga Pattern (MSA 표준) |
|---|---|---|
| 데이터 일관성 | 강한 일관성 (ACID) | 최종적 일관성 (BASE) |
| 시스템 가용성 | 낮음 (모든 참여자가 OK 해야 함) | 높음 (각자 독립적으로 처리) |
| 성능 및 확장성 | 낮음 (글로벌 락 발생) | 높음 (로컬 트랜잭션 활용) |
| 구현 난이도 | 낮음 (미들웨어가 지원) | 높음 (보상 로직 직접 개발 필수) |
📢 섹션 요약 비유: 2PC는 전원이 동시에 "예"라고 해야 통과되는 투표고, 사가는 일단 각자 처리하고 문제 생기면 사과(보상)하며 수습하는 방식이다.
Ⅳ. 실무 적용 및 기술사 판단
기술사 핵심 포인트:
- 멱등성 (Idempotency): 네트워크 장애로 같은 취소 명령이 두 번 와도 결과가 같아야 하므로 멱등성 설계가 필수다.
- 이벤트 전달 보장: 메시지 브로커(Kafka 등)를 통해 이벤트가 최소 한 번(At-least-once)은 반드시 전달되도록 설계해야 한다.
- 격리성 부족 문제: 사가는 격리(Isolation) 수준이 낮아, 중간 단계의 데이터를 다른 사용자가 볼 수 있는 현상(Dirty Read)이 발생할 수 있음을 인지해야 한다.
📢 섹션 요약 비유: 사가 패턴은 '신중한 도미노'다. 도미노를 하나씩 쓰러뜨리다가 문제가 생기면, 쓰러진 도미노를 다시 세우는 대신 반대 방향으로 똑똑하게 정리하여 멈추는 것이다.
Ⅴ. 기대효과 및 결론
사가 패턴은 MSA의 가장 큰 난제인 '분산 데이터 정합성'을 해결하는 가장 현실적인 대안이다. 강한 일관성을 포기하는 대신 시스템의 성능과 확장성을 얻는 '트레이드 오프(Trade-off)'의 결과물이다. 기술사 시험에서는 2PC의 한계점과 사가의 보상 트랜잭션 메커니즘, 그리고 오케스트레이션과 코레오그래피의 차이점을 명확히 기술하는 것이 핵심이다.
📢 섹션 요약 비유: 사가 패턴은 IT 세상의 '실수 방지 시스템'이다. 중간에 단계가 틀어지면 처음으로 돌아가서 모든 걸 원래대로 돌려놓아 사고를 막는다.
📌 관련 개념 맵
| 개념 | 연관 키워드 | 관계 |
|---|---|---|
| 보상 트랜잭션 | 논리적 원복, 반대 작업 | 사가 패턴의 핵심 실패 대응 기법 |
| 최종적 일관성 | BASE, 결국엔 맞음 | 사가 패턴이 지향하는 일관성 모델 |
| Orchestrator | 중앙 조율자, 상태 머신 | 복잡한 사가 흐름을 관리하는 중앙 두뇌 |
| Kafka / RabbitMQ | 메시지 브로커, 이벤트 | 사가 단계 사이의 신호를 전달하는 통로 |
👶 어린이를 위한 3줄 비유 설명
- 여러 명의 친구가 순서대로 숙제를 하는데, 중간에 한 명이 틀리면 앞 친구들이 한 걸 다시 고쳐주는 약속이에요.
- 물건을 사고 결제까지 했는데 택배가 없으면, 결제한 돈을 다시 돌려주는 것과 같아요.
- 모두가 완벽하게 끝낼 수 없다면, 아무것도 안 한 것처럼 깨끗하게 되돌려놔요.