2024년 5월 5일

출처: Saga 패턴

[Saga 패턴](<https://learn.microsoft.com/ko-kr/azure/architecture/reference-architectures/saga/saga>)

<aside> 📖 [LIST]

</aside>

Sage 분산 트랜잭션 패턴

Saga 디자인 패턴은 분산 트랜잭션 시나리오에서 마이크로 서비스 간의 데이터 일관성을 관리하는 방법 중 하입니다. Saga는 각 서비스를 업데이트하고 메시지 또는 이벤트를 게시하여 다음 트랜잭션 단계를 트리거하는 일련의 트랜잭션입니다. 단계가 실패하면 Saga는 이전 트랜잭션을 상쇄하는 보상 트랜잭션을 실행합니다.

• 각 서비스는 로컬 트랜잭션을 가지고 있으며, 해당 서비스 데이터를 업데이트하며 메시지 또는 이벤트를 발행해서, 다음 단계 트랜잭션을 호출하게 됩니다. • 만약, 해당 프로세스가 실패하게 되면 데이터 정합성을 맞추기 위해 이전 트랜잭션에 대해 보상 트랜잭션을 실행합니다. • NoSQL 같이 분산 트랜잭션 처리를 지원하지 않거나, 각기 다른 서비스에서 다른 DB 밴더사를 이용할 경우에도 Saga Pattenrn을 이용해서 데이터 일관성을 보장 받을 수 있습니다.

각기 다른 분산 서버에 다른 DB 밴더사를 사용하고 있어도, Saga Pattern을 사용하면 데이터 일관성을 보장받을 수 있다. 또한 트랜잭션 실패시, 보상 트랜잭션으로 데이터 정합성을 맞출 수 있다.

서비스 간 데이터 일관성에는 서비스 간 트랜잭션 관리 전략이 필요합니다.

다중 서비스 아키텍처에서

마이크로 서비스당 데이터베이스 모델은 마이크로 서비스 아키텍처에 많은 이점을 제공합니다. 도메인 데이터를 캡슐화하면 각 서비스에서 최상의 데이터 저장소 형식 및 스키마를 사용하고, 필요에 따라 자체 데이터 저장소의 크기를 조정하고, 다른 서비스의 오류로부터 격리할 수 있습니다. 그러나 서비스별 데이터베이스 간에 데이터 일관성을 보장하는 데서 문제가 발생합니다. 해

해법 방법

Saga 패턴은 일련의 로컬 트랜잭션을 사용하여 트랜잭션 관리를 제공합니다. 로컬 트랜잭션은 Saga 참가자가 수행하는 원자성 작업입니다. 각 로컬 트랜잭션은 데이터베이스를 업데이트하고 메시지 또는 이벤트를 게시하여 Saga에서 다음 로컬 트랜잭션을 트리거합니다. 로컬 트랜잭션이 실패하면 Saga는 이전 로컬 트랜잭션에 의해 변경된 내용을 실행 취소하는 일련의 보상 트랜잭션을 실행합니다.

Untitled

Saga 패턴에서