2024년 5월 5일
출처: Saga 패턴
[Saga 패턴](<https://learn.microsoft.com/ko-kr/azure/architecture/reference-architectures/saga/saga>)
<aside> 📖 [LIST]
</aside>
Saga 디자인 패턴은 분산 트랜잭션 시나리오에서 마이크로 서비스 간의 데이터 일관성을 관리하는 방법 중 하입니다. Saga는 각 서비스를 업데이트하고 메시지 또는 이벤트를 게시하여 다음 트랜잭션 단계를 트리거하는 일련의 트랜잭션입니다. 단계가 실패하면 Saga는 이전 트랜잭션을 상쇄하는 보상 트랜잭션을 실행합니다.
• 각 서비스는 로컬 트랜잭션을 가지고 있으며, 해당 서비스 데이터를 업데이트하며 메시지 또는 이벤트를 발행해서, 다음 단계 트랜잭션을 호출하게 됩니다. • 만약, 해당 프로세스가 실패하게 되면 데이터 정합성을 맞추기 위해 이전 트랜잭션에 대해 보상 트랜잭션을 실행합니다. • NoSQL 같이 분산 트랜잭션 처리를 지원하지 않거나, 각기 다른 서비스에서 다른 DB 밴더사를 이용할 경우에도 Saga Pattenrn을 이용해서 데이터 일관성을 보장 받을 수 있습니다.
각기 다른 분산 서버에 다른 DB 밴더사를 사용하고 있어도, Saga Pattern을 사용하면 데이터 일관성을 보장받을 수 있다. 또한 트랜잭션 실패시, 보상 트랜잭션으로 데이터 정합성을 맞출 수 있다.
서비스 간 데이터 일관성에는 서비스 간 트랜잭션 관리 전략이 필요합니다.
다중 서비스 아키텍처에서
마이크로 서비스당 데이터베이스 모델은 마이크로 서비스 아키텍처에 많은 이점을 제공합니다. 도메인 데이터를 캡슐화하면 각 서비스에서 최상의 데이터 저장소 형식 및 스키마를 사용하고, 필요에 따라 자체 데이터 저장소의 크기를 조정하고, 다른 서비스의 오류로부터 격리할 수 있습니다. 그러나 서비스별 데이터베이스 간에 데이터 일관성을 보장하는 데서 문제가 발생합니다. 해
Saga 패턴은 일련의 로컬 트랜잭션을 사용하여 트랜잭션 관리를 제공합니다. 로컬 트랜잭션은 Saga 참가자가 수행하는 원자성 작업입니다. 각 로컬 트랜잭션은 데이터베이스를 업데이트하고 메시지 또는 이벤트를 게시하여 Saga에서 다음 로컬 트랜잭션을 트리거합니다. 로컬 트랜잭션이 실패하면 Saga는 이전 로컬 트랜잭션에 의해 변경된 내용을 실행 취소하는 일련의 보상 트랜잭션을 실행합니다.
Saga 패턴에서