Day 77 · 4/5
🌳 고급 고급

Saga 패턴이 뭔가요?

쉽게 이해하기

여행 예약을 생각해보세요. 항공권, 호텔, 렌터카를 따로따로 예약하는데, 하나라도 실패하면 나머지도 모두 취소해야 하죠. 각 예약처가 독립적으로 운영되기 때문에 한 번에 묶어서 처리할 수 없어요. Saga 패턴은 이처럼 독립적인 서비스들에서 일어나는 작업들을 순서대로 실행하고, 실패하면 이미 한 것들을 되돌리는 방식이에요.

핵심 정리

마이크로서비스에서 여러 서비스에 걸친 트랜잭션을 관리하는 패턴이에요.

자세히 알아보기

Saga 패턴은 마이크로서비스 아키텍처에서 분산 트랜잭션을 관리하는 패턴입니다. 모놀리식 애플리케이션에서는 데이터베이스 트랜잭션으로 여러 작업을 원자적으로 처리할 수 있지만, 마이크로서비스에서는 각 서비스가 독립적인 데이터베이스를 가지고 있어서 전통적인 분산 트랜잭션(2PC)을 사용하기 어려워요. Saga는 긴 트랜잭션을 여러 개의 작은 로컬 트랜잭션으로 나누고, 각 트랜잭션은 메시지나 이벤트로 다음 트랜잭션을 트리거해요. 예를 들어 주문 프로세스는 '주문 생성 → 결제 처리 → 재고 감소 → 배송 요청' 같은 순차적인 단계로 나뉘죠. 중요한 건 보상 트랜잭션(Compensating Transaction)이에요. 중간에 어떤 단계가 실패하면, 이미 완료된 단계들을 되돌리는 보상 작업을 실행해야 해요. 결제가 실패하면 주문을 취소하고, 배송 실패하면 재고를 다시 증가시키는 식이죠. Saga는 Choreography와 Orchestration 두 가지 방식으로 구현해요. Choreography는 각 서비스가 이벤트를 듣고 자율적으로 다음 단계를 진행하는 방식이고, Orchestration은 중앙의 조정자(Orchestrator)가 각 서비스에 명령을 내리는 방식이에요. 복잡한 비즈니스 로직에서는 Orchestration이 추적과 디버깅이 더 쉬워요.