q1: Saga 패턴
a1:
Saga 패턴은 마이크로서비스나 분산 시스템에서 전통적인 2PC(2단계 커밋)의 단점을 보완하기 위해 고안된 비동기 보상 트랜잭션 패턴입니다.
1. 기본 아이디어
• 전체 트랜잭션을 여러 단계(로컬 트랜잭션)로 나눠서 순차적으로 실행합니다.
• 각 단계가 성공적으로 완료되면 다음 단계로 넘어가고, 만약 어느 단계에서 실패가 발생하면 이미 완료된 이전 단계들을 보상(Compensating) 트랜잭션으로 되돌립니다.
• 이렇게 함으로써 시스템 전체가 롤백되길 기다리느라 잠금 상태로 머무는 것이 아니라, 각 서비스가 독립적으로 진행·복구할 수 있습니다.
2. 구현 방식
• 오케스트레이션(Ochestration)
중앙에서 Saga 진행을 제어하는 오케스트레이터(조정자)가 있고, 각 서비스는 오케스트레이터의 지시에 따라 트랜잭션을 실행하거나 보상 트랜잭션을 수행합니다.
• 코레오그래피(Choreography)
별도의 중앙 조정자 없이 이벤트 기반으로 각 서비스가 서로의 상태 변화를 감지해 다음 로컬 트랜잭션이나 보상 트랜잭션을 실행합니다.
3. 장·단점
• 장점
• 각 단계가 끝나면 바로 커밋하므로 락(lock) 경합이나 네트워크 지연으로 인한 전체 중단이 줄어듭니다.
• 비동기 이벤트 기반이어서 시스템 확장성이 좋습니다.
• 단점
• 전통 2PC에 비해 구현이 복잡하고, 보상 로직을 일일이 신경 써야 합니다.
• 장애 시 결국 일관성이 최종적으로 맞춰지는 ‘사후 일관성(Eventual Consistency)’ 모델이므로, 중간 상태를 외부에서 읽으면 일관성이 깨진 것처럼 보일 수 있습니다.
4. 적용 예시
• 항공권 예약 시스템
1. 좌석 확보
2. 결제 승인
3. 알림 이메일 발송
— 도중 2)번 결제 승인에서 실패하면 1)번 좌석 확보를 해제(보상)
• 전자상거래 주문 처리
1. 재고 감소
2. 결제 처리
3. 배송 요청
— 3)번 배송 요청에 실패하면 1)번과 2)번을 각각 보상(재고 복원·결제 취소)
⸻
이처럼 Saga 패턴은 2PC처럼 전체를 잠그지 않고, 단계별로 커밋·보상을 나눠 처리함으로써 분산 트랜잭션의 확장성과 안정성을 높여 줍니다.
Saga 패턴 250523
2025. 5. 23. 10:32
반응형