Published on

Saga 패턴

Authors
  • avatar
    Name
    JaeHyeok CHOI
    Twitter
    none

Saga 패턴

데이터 일관성

기존의 모놀리식 환경에서는 하나의 DBMS가 트랜잭션의 원자성과 일관성을 보장해줬는데, MSA 환경에서는 여러가지 DBMS가 사용될 수 있습니다. 즉, 전체 트랜잭션이 하나의 BD에서 처리되는 것이 아닌, 여러 마이크로서비스의 개별적인 로컬 트랜잭션들의 조합된 형태가 됩니다.

이러한 경우 트랜잭션의 원자성과 일관성을 보장하기 위하여 Saga 패턴을 사용합니다.

정의

Saga 패턴은 복잡한 트랜잭션을 처리하기 위한 설계 패턴입니다. 주로 분산 트랜잭션을 처리할 때 사용됩니다. 주로 MSA 환경에서 데이터의 일관성을 보장해주기 위하여 사용됩니다.

사가 패턴은 각 서비스가 자체적으로 수행하는 로컬 트랜잭션의 흐름을 메시지 또는 이벤트를 통해 이어가는 방식입니다.

예시

전자상거래 시스템에서 고객의 신용 한도 내에서 주문을 생성해야 하는 시나리오를 생각해 봤을 때, 주문 생성 트랜잭션이 완료되면 '주문 생성됨' 이라는 이벤트를 발행하고, 이 이벤트를 수신하는 서비스들은 각각의 로컬 트랜잭션을 수행합니다. 만약 중간 단계에서 어떠한 트랜잭션이 비즈니스 규칙을 위반하여 실패하게 되면, 이전 단계에서 수행한 작업들을 되돌리기 위한 보상 트랜잭션을 실행합니다.

사가 패턴은 문제 발생시 롤백을 사용하지 않고, 보상을 통해 트랜잭션의 전체 일관성을 간접적으로 유지하는 방식입니다.

즉, MSA 환경에서 트랜잭션 간 결합도를 낮추면서도 데이터 정합성을 유지할 수 있는 방식입니다.

요약

Saga Pattern은 분산 트랜잭션 환경에서 서비스간 결합도를 낮추고 보상 트랜잭션을 실행하도록 설계하는 패턴 중 하나로, 데이터의 일관성을 보장하고, 보상 트랜잭션 구현을 위해 고려해야 합니다.

보상 트랜잭션은 서비스와 비즈니스 흐름을 고려해 최소화하는 것이 바람직합니다.

출처

https://joobly.tistory.com/69 https://sangyunpark99.tistory.com/entry/Saga-Pattern%EC%82%AC%EA%B0%80-%ED%8C%A8%ED%84%B4