Skip to content

MicroService Architecture ‐ SAGA

woojin.jang edited this page Jun 25, 2026 · 1 revision

MicroService Architecture - SAGA(Orchestration)

  • Saga란, 분산 시스템에서 데이터 정합성을 보장하기 위해 사용하는 분산 트랜잭션 처리 방식이다.
  • 각 작업을 개별 트랜잭션으로 나누고 실패 시에 보상 트랜잭션을 수행하여 정합성을 맞추는 방식이다.
    • 이 때, 보상 트랜잭션 로직은 멱등성이어야 하며 재시도가 가능해야 한다.
  • TCC와 달리 Saga는 리소스 예약 개념이 없이 즉시 상태 변경을 수행한다.
    • 재고차감 예약이 아닌 즉시 차감
    • 최종적 일관성(Eventual Consistency)을 보장
  • Choreography 방식과 Orchestration 방식이 존재한다.

Choreography

  • 중앙 통제자 없이 각 서비스가 이벤트를 매개로 자율적으로 협력하는 방식이다.
  • 실패가 되면 보상 이벤트로 되돌린다. 예를 들어 재고가 부족하면 실패 이벤트를 발행해 결제가 이를 구독해 환불하고 주문을 취소 상태로 바꾼다.
  • 정방향 흐름과 똑같이 역방향도 이벤트 연쇄로 처리된다.
  • 장점은 결합도가 낮다는 점이다. 서비스들이 서로를 직접 호출하지 않고 이벤트로만 소통하므로 독립적으로 추가·변경하기 쉽고, 중앙 단일 장애점이 없다.
  • 단점은 전체 흐름이 코드 한 곳에 없기에 추적하기 어렵다. 단계가 많아지면 이벤트가 이벤트를 부르는 사슬이 복잡해지고 자칫 순환 의존이나 의도치 않은 이벤트 연쇄가 생길 위험도 있다.

Orchestration

  • 오케스트레이터라는 중앙 조정자가 전체 트랜잭션 흐름을 지휘하는 방법이다.
  • 예를 들어, 주문 요청이 들어오면 결제하라는 명령을 보내고 응답을 기다린다. 이 성공 응답을 받으면 다음으로 재고를 차감하라는 명령을 보내고, 또 응답을 받으면 다음으로 넘어간다.
  • 각 단계의 성공/실패 판단과 다음에 무엇을 할지는 모두 오케스트레이터가 결정한다. 서비스들은 서로의 존재를 모르고 오케스트레이터하고만 대화한다.
  • 실패 처리도 중앙에서 한다. 재고 차감에서 실패 응답이 오면 오케스트레이터는 이미 완료된 결제를 취소하라는 보상 명령을 보내 역순으로 롤백한다. 어디까지 진행됐고 무엇을 되돌려야 하는지를 오케스트레이터가 상태로 관리하고 있어 보상 로직이 명확하다.
  • 장점은 흐름이 한 곳에 정의되어 있어 이해·디버깅·모니터링이 쉽다는 점이다. 복잡한 조건 분기, 재시도, 타임아웃, 롤백과 같은 시나리오를 다루기에 유리하다.
  • 단점은 오케스트레이터가 단일 장애점이 될 수 있고, 로직이 한 곳에 몰려있기 때문에 시간이 지나면 God Object처럼 비대해질 위험이 있다. 또한 서비스들이 오케스트레이터에 의존하게 된다.

📖 Java

📖 Kotlin

📖 Coroutine

📖 Spring

📖 Spring Security

📖 Spring Batch

📖 Reactive Programming

📖 Database

📖 MySQL

📖 Redis

📖 JPA

📖 QueryDsl

📖 MSA

📖 Kafka

📖 Apache Flink

  • [Apache Flink - Apache Flink Architecture]
  • [Apache Flink - Stream Processing]
  • [Apache Flink - Data Stream API & Window]
  • [Apache Flink - State Management]

📖 HTTP

📖 AWS

📖 Docker

📖 Kubernetes

📖 CI/CD

📖 Nginx

📖 Monitoring🥈

  • [Monitoring - Log Concept]
  • [Monitoring - Log Level & Filter]
  • [Monitoring - Logback]
  • [Monitoring - Log Collection with ELK Stack]
  • [Monitoring - Log Monitoring with Kibana]
  • [Monitoring - Building a Monitoring System with Spring Boot Actuator]
  • [Monitoring - Server Monitoring with Prometheus and Grafana with Discord Alerts]

📖 Test

📖 Effective Java 3/E

📖 Kotlin Academy - Effective Kotlin

📖 Kotlin Academy - 핵심편

📖 스프링으로 시작하는 리액티브 프로그래밍

📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초 1

📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초 2

📖 Clean Code

📖 리팩토링 2판

📖 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식

📖 GraphQL

Clone this wiki locally