Saga 패턴은 분산 시스템에서 분산 트랜잭션을 관리하기 위한 패턴입니다.
트랜잭션이 여러 서비스에 걸쳐 있을 때, 각각의 서비스에서 로컬 트랜잭션을 순차적으로 실행하고, 실패 시 보상 작업을 통해 일관성을 유지합니다. Saga 패턴은 분산 시스템에서 복잡한 트랜잭션을 효율적으로 관리하고, 트랜잭션 실패 시 일관성을 유지하는 데 유용합니다.
그러나 트랜잭션과 보상 작업의 설계 및 구현이 복잡할 수 있으므로, 이를 신중하게 고려하여 도입해야 합니다.
* Saga 패턴에서 "Saga"는 연속된 일련의 트랜잭션을 관리하는 개념을 설명하기 위해 사용된 용어로서, 특정 단어나 문구의 약자가 아닙니다. 이 패턴의 이름은 원래의 서사(narrative) 또는 이야기(story)를 의미하는 단어 "Saga"에서 유래되었습니다. Saga 패턴은 긴 서사처럼 여러 단계로 구성된 트랜잭션을 관리하는 것을 비유적으로 표현한 것입니다.
다음은 Saga 패턴의 주요 개념, 장점, 단점, 그리고 사용 사례에 대한 설명입니다:
1. 주요 개념:
- Saga: 분산 트랜잭션의 논리적 단위로, 여러 단계의 로컬 트랜잭션으로 구성됩니다.
- 로컬 트랜잭션(Local Transaction): 각 서비스에서 독립적으로 실행되는 트랜잭션입니다.
- 보상 작업(Compensating Transaction): 실패한 트랜잭션을 롤백하기 위한 작업입니다. 예를 들어, 상품 주문이 실패하면 결제 취소가 보상 작업이 됩니다.
- 조정 방식: Saga를 관리하는 방식으로, 오케스트레이션(Orchestration)과 코레오그라피(Choreography)가 있습니다.
. 오케스트레이션(Orchestration): 중앙 조정자가 각 서비스의 트랜잭션을 순차적으로 호출하고 관리합니다.
. 코레오그라피(Choreography): 각 서비스가 트랜잭션의 시작과 완료를 이벤트로 발행하고, 다른 서비스가 이를 구독하여 다음 트랜잭션을 실행합니다.
2. 장점:
- 확장성: 각 서비스가 독립적으로 트랜잭션을 처리하므로, 시스템의 확장성이 높아집니다.
- 유연성: 서비스 간의 결합도가 낮아져, 서비스의 독립적인 개발과 배포가 용이합니다.
- 장애 복구: 보상 작업을 통해 트랜잭션 실패 시 시스템의 일관성을 유지할 수 있습니다.
3. 단점:
- 복잡성 증가: 각 단계의 트랜잭션과 보상 작업을 설계하고 구현해야 하므로, 시스템의 복잡성이 증가합니다.
- 일관성 지연: 모든 단계의 트랜잭션이 완료될 때까지 최종 일관성이 보장되지 않을 수 있습니다.
- 오버헤드: 보상 작업 및 이벤트 기반 통신의 오버헤드가 발생할 수 있습니다.
4. 사용 사례:
- 이커머스 주문 처리: 주문 생성, 결제, 재고 확인, 배송 요청 등 여러 서비스에 걸친 트랜잭션 관리
. 상황: 고객이 온라인 쇼핑몰에서 주문을 생성하면 여러 서비스가 순차적으로 처리됩니다.
예를 들어, 결제 서비스, 재고 서비스, 배송 서비스 등이 있습니다.
. 적용: 주문이 생성되면 결제 서비스에서 결제를 처리하고,
결제가 성공하면 재고 서비스가 재고를 확인하고 업데이트합니다.
재고 업데이트가 성공하면 배송 서비스가 배송 요청을 처리합니다.
만약 어느 한 단계에서 실패하면 보상 트랜잭션을 통해 이전 단계를 롤백합니다
(예: 결제가 실패하면 주문을 취소하고 결제를 환불).
- 여행 예약 시스템: 항공편 예약, 호텔 예약, 렌터카 예약 등 다양한 서비스에 걸친 예약 관리
. 상황: 고객이 여행을 예약할 때 항공편 예약, 호텔 예약, 렌터카 예약 등 여러 서비스가 연계됩니다.
. 적용: 항공편 예약이 완료되면 호텔 예약을 시도하고, 호텔 예약이 성공하면 렌터카 예약을 시도합니다.
어느 한 단계에서 실패하면 이전 예약을 취소하는 보상 트랜잭션을 실행합니다
(예: 렌터카 예약이 실패하면 호텔 예약과 항공편 예약을 취소).
- 금융 서비스: 여러 금융 서비스 간의 복잡한 트랜잭션 관리, 예를 들어, 송금, 계좌 이체 등.
. 상황: 고객이 돈을 송금할 때 여러 은행 계좌 간의 트랜잭션이 필요합니다.
. 적용: 송금 요청이 접수되면 출금 은행에서 금액을 차감하고, 수취 은행에서 금액을 입금합니다.
수취 은행의 입금이 실패하면 출금 은행에서 차감된 금액을 다시 입금하는 보상 트랜잭션을 실행합니다.
- 마이크로서비스 기반 시스템:
. 상황: 마이크로서비스 아키텍처에서는 서비스 간 트랜잭션 관리가 복잡해질 수 있습니다.
. 적용: 각 서비스가 독립적으로 로컬 트랜잭션을 처리하고,
Saga 패턴을 통해 전체 트랜잭션의 일관성을 유지합니다.
예를 들어, 사용자가 회원가입을 할 때, 사용자 서비스, 이메일 서비스, 결제 서비스 등이
각각의 트랜잭션을 처리하고, 실패 시 보상 트랜잭션을 통해 일관성을 유지합니다.
Saga 패턴은 이러한 분산 시스템에서 복잡한 트랜잭션을 관리하고, 실패 시 일관성을 유지하는 데 효과적입니다.
다양한 산업과 애플리케이션에서 널리 사용되고 있습니다
'IT 세상' 카테고리의 다른 글
ACID (0) | 2024.08.11 |
---|---|
2단계 커밋(2-Phase Commit, 2PC) (0) | 2024.08.11 |
Event Sourcing (0) | 2024.08.07 |
Strangler 패턴 (0) | 2024.08.07 |
CQRS(Command Query Responsibility Segregation) (0) | 2024.08.07 |