이벤트 기반 시스템에서 Saga 마이크로서비스 패턴 마스터하기
Source: Dev.to
위 링크에 있는 글의 내용을 제공해 주시면, 해당 텍스트를 한국어로 번역해 드리겠습니다.
국경 간 결제 여정
금융 기관(예: 은행 또는 외환 파트너) 내부에서는 이체를 시작하면 일련의 특화된 마이크로서비스가 트리거됩니다.
예시
- Payment Gateway가 요청을 확인하고 최적의 환율을 결정하는 Currency Conversion 서비스로 전달합니다.
- 변환 후, 거래는 국제 규정을 충족하기 위해 Compliance 서비스를 거쳐야 하며, 합법성을 보장하기 위해 Fraud Detection 서비스를 거칩니다.
- 마지막으로, Payment Execution 서비스가 거래를 처리하고, Notification 서비스가 수신자에게 이체를 확인합니다.
분산 시스템의 복잡성
Fraud Detection 서비스가 트랜잭션에 플래그를 지정하거나 Currency Conversion이 실패하면 어떻게 될까요? 모놀리식 시스템에서는 롤백이 간단하지만, 분산 아키텍처에서는 상황이 복잡해집니다. 이때 saga 패턴이 도움이 될 수 있는데, 중앙 컨트롤러 없이 서비스들을 조정합니다—마치 새 무리가 대형을 이루어 날거나, 응급 구조대가 무전 호출에 반응하는 것과 같습니다.
Saga 패턴 이해하기
Saga 패턴은 각 마이크로서비스가 자신의 부분을 독립적으로 실행하고, 실패 시 보상 로직으로 대응하도록 하여 분산 트랜잭션을 관리합니다. 각 서비스는 로컬 트랜잭션을 수행하고 자체적인 “앗, 고쳐야겠어요” 계획을 정의함으로써 전체 시스템의 안정성을 보장합니다.
Source:
The Cross-Border Payment: The Saga Approach
분산 사가에서 이상적인 흐름은 독립적인 로컬 트랜잭션들의 체인으로 나뉩니다. 하나의 거대한 락을 사용하는 대신, 각 서비스는 작업을 즉시 커밋하고 다음 서비스에 “끝났으니, 이제 너 차례야!” 라고 알립니다.
How It Works: Choreography
- Currency Conversion 서비스는 환율을 고정하고 자체 데이터베이스를 업데이트한 뒤
RateConverted이벤트를 발생시킵니다. - Compliance 서비스는 해당 이벤트를 수신하고 깨어나서 검증을 시작합니다.
이것은 choreography를 만든다: 흐름을 지시하는 단일 “보스”가 없는 분산된 춤. 마치 재즈 앙상블처럼, 각 마이크로서비스는 리듬(이벤트 순서)을 알고 올바른 신호를 들었을 때 자신의 파트를 즉흥적으로 수행합니다.
The “Safety Net”: Compensating Transactions
Fraud Detection 서비스가 이체를 의심스러운 것으로 표시하면 FraudDetected 이벤트를 발생시킵니다. 전역 “undo” 버튼이 없기 때문에 이전 서비스들은 보상 트랜잭션을 실행해야 합니다.
Example
- Currency Conversion은 사기 이벤트를 받아 원래 환율로 보유된 자금을 자동으로 되돌립니다.
- Payment Gateway는 대시보드를 “Rejected”로 업데이트하고 필요시 환불을 트리거합니다.
실제 세계의 과제
프로덕션 환경에서 사가를 구현하면 여러 가지 과제가 발생합니다:
- 디버깅: 분산된 흐름을 추적하는 것이 복잡할 수 있으며, 여러 서비스에 걸친 단일 트랜잭션을 따라가려면 분산 트레이싱에 의존하는 경우가 많습니다.
- 스케일링: 이벤트 브로커(예: Kafka)를 확장하고, 병목 현상 없이 부하를 처리하도록 보장해야 합니다.
- 멱등성: 서비스가 동일한 실패 이벤트를 두 번 받더라도 보상 작업을 두 번 실행하지 않도록 보장해야 합니다.
- 순서가 뒤바뀐 이벤트: 기대와 다른 순서로 도착하는 이벤트를 처리해야 합니다.
새로운 관점을 포용하기
Saga 패턴은 실패를 피하는 것이 아니라 우아한 복구를 설계하는 것입니다. 이는 오류를 방지하는 데 초점을 맞추는 대신, 오류를 효과적으로 관리하는 데 중점을 둡니다.
트레이드‑오프와 결정
Saga는 항상 최선의 선택은 아닙니다. 실시간 응답이 필요하거나 보상 작업이 매우 복잡한 애플리케이션의 경우, Saga는 불필요한 복잡성을 추가할 수 있습니다. 궁극적 일관성—Saga의 핵심 특성—은 비즈니스 도메인에서 허용 가능해야 합니다.
결론: 조화로운 시스템 구축
Saga 마이크로서비스 패턴은 분산 시스템을 위한 안전망 역할을 하며, 각 서비스가 독립적으로 동작하면서 전체 프로세스 무결성을 유지하도록 합니다. 이것이 만병통치약은 아니지만, 신중하게 적용하면 혼란스러운 오케스트라를 조화로운 교향곡으로 바꿔줍니다. 다음에 전 세계로 돈을 송금할 때, 원활한 운영을 보장하기 위해 뒤에서 작동하는 Saga 패턴을 기억하세요. 엔지니어에게 이 복잡성을 수용하는 것은 모험의 일부입니다.