SAGA Pattern
마이크로서비스 아키텍처에서 여러 서비스에 걸쳐있는 비즈니스 트랜잭션의 원자성 문제를 해결하기 위한 대안으로 SAGA 패턴이 널리 사용된다.
SAGA는 하나의 긴 비즈니스 트랜잭잭션을 여러 개의 로컬 트랜잭션의 연속으로 나누어 처리하는 패턴
각 로컬 트랜잭션이 성공하면, 다음 트랜잭션을 호출하는 이벤트를 발행하는 방식으로 전체 흐름 진행
핵심 원리 - 보상 트랜잭션
SAGA 패턴의 핵심은 만약 로컬 트랜잭션 중 하나가 실패하면, 이미 성공적으로 완료된 이전 트랜잭션들을 취소하는 보상 트랜잭션이 역순으로 실행된다.
(T1)
결제 서비스: 카드 결제 성공(T2)
재고 서비스: 재고 차감 실패(C1)
결제 서비스: 카드 결제 취소 (T1의 보상 트랜잭션)
이러한 보상 트랜잭션의 실행을 통해, 전체 시스템은 최종적으로 일관된 상태를 유지하게 된다. 이를 최종적 일관성(Eventual Consistency)이라 칭한다.
두 가지 구현 방식
SAGA 패턴은 제어 방식에 따라 두 가지 방식으로 구현할 수 있다.
제어 방식
각 서비스가 이벤트를 발행하고 구독하며 자율적으로 동작
중앙의 오케스트레이터가 각 서비스의 트랜잭션을 지시 및 제어
장점
서비스 간 결합도가 낮고 구조가 비교적 단순
전체 흐름을 중앙에서 관리하여 추적 및 디버깅 용이
단점
전체 흐름을 파악하기 어렵고, 서비스 간 순환 의존성 위험
오케스트레이터의 SPoF
심층적 고려사항
SAGA 패턴을 적용할 때는 ACID 속성 중 일부를 포기하는 트레이드오프를 이해해야 한다.
격리 수준(Isolation)의 부재
SAGA는
ACD
(원자성, 일관성, 지속성)는 보장하지만, 격리성 보장 X성공(T1)과 실패(T2) 사이의 짧은 시간 동안, 일부 서비스는 중간 상태를 볼 수 있음
이후 보상 트랜잭션(C1)이 실행되어 일시적으로 데이터가 불일치하는 상태가 외부에 노출될 수 있음
보상 트랜잭션의 멱등성 보장
네트워크 오류 등으로 인해 보상 트랜잭션 요청이 여러 번 전달 가능
보상 트랜잭션이 여러 번 실행되더라도 시스템 상태에 영향을 주지 않도록 멱등성(idempotency)을 보장해야 함
최종적 일관성
SAGA는 모든 참여 서비스가 즉시 일관된 상태를 유지하는 강한 일관성(Strong Consistency)을 보장하지 않음
대신, 실패가 발생하더라도 보상 트랜잭션을 통해 결국에는 모든 데이터가 일관된 상태에 도달하는 최종적 일관성을 목표
일시적인 데이터 불일치를 허용할 수 있는 비즈니스 요구사항인지 검토 필요
Last updated
Was this helpful?