2025. 2. 28. 17:41ㆍSpring Microservice
📌 SAGA 패턴이란?
SAGA 패턴은 마이크로서비스 아키텍처에서 분산된 트랜잭션을 관리하는 패턴입니다.
단일 데이터베이스 트랜잭션을 사용하기 어려운 마이크로서비스 환경에서, 데이터 일관성을 유지하기 위한 방법으로 활용됩니다.
🔹 1. 왜 SAGA 패턴이 필요한가?
마이크로서비스 환경에서는 각 서비스가 개별 데이터베이스를 관리하는 경우가 많습니다.
이때, 하나의 비즈니스 로직이 여러 마이크로서비스에 걸쳐 수행되는 경우가 발생할 수 있습니다.
✅ 전통적인 데이터베이스 트랜잭션(ACID) 문제
- 단일 모놀리식 시스템에서는 ACID(Atomicity, Consistency, Isolation, Durability) 트랜잭션을 활용하여 데이터 일관성을 유지할 수 있음.
- 하지만 마이크로서비스 환경에서는 서로 다른 DB에 걸친 트랜잭션을 직접 관리하기 어려움.
- 예제:
- "사용자가 제품을 구매하면, 주문 서비스와 결제 서비스가 각각 다른 데이터베이스에서 동작."
- 주문이 생성되었지만 결제 과정에서 실패하면 롤백(Rollback) 문제가 발생.
📌 해결책 → SAGA 패턴을 활용하여 서비스 간 분산 트랜잭션을 관리.
🔹 2. SAGA 패턴의 동작 방식
SAGA 패턴은 하나의 긴 트랜잭션을 여러 개의 작은 트랜잭션(로컬 트랜잭션)으로 나누어 관리합니다.
각 로컬 트랜잭션이 성공적으로 실행되면 다음 서비스가 호출되며, 어느 한 트랜잭션이 실패하면 보상 작업(Compensating Transaction)을 실행하여 롤백을 수행합니다.
✅ SAGA의 두 가지 구현 방식
- 오케스트레이션 기반 SAGA (Orchestration-based SAGA)
- 코레오그래피 기반 SAGA (Choreography-based SAGA)
🔹 3. SAGA 패턴의 구현 방식
1️⃣ 오케스트레이션 기반 SAGA (Orchestration-Based SAGA)
- 중앙 컨트롤러(SAGA Coordinator)가 전체 트랜잭션을 관리하고 조정.
- 중앙 컨트롤러가 각 서비스에 트랜잭션을 실행하라고 지시하며, 실패 시 보상 작업을 수행.
✅ 동작 방식
- 클라이언트가 SAGA Coordinator에게 트랜잭션 요청.
- Coordinator가 첫 번째 서비스(예:
Order Service
)에 트랜잭션 실행 요청. Order Service
가 성공하면, 다음 서비스(예:Payment Service
)에 요청을 전달.- 모든 서비스가 성공하면 최종적으로 완료.
- 특정 서비스가 실패하면, Coordinator가 이전 서비스에 보상 트랜잭션(Compensation Transaction) 실행 요청.
✅ 장점
✔ 중앙 집중 제어가 가능하여 트랜잭션 흐름을 명확하게 관리.
✔ 트랜잭션 실행 순서를 쉽게 변경 가능.
✅ 단점
❌ Coordinator가 단일 장애점(Single Point of Failure, SPOF)이 될 가능성 있음.
❌ Coordinator의 부하가 증가하면 성능 이슈 발생 가능.
📌 대표적인 구현 기술: Camunda, Temporal, Axon Framework
2️⃣ 코레오그래피 기반 SAGA (Choreography-Based SAGA)
- 중앙 조정자 없이, 각 서비스가 이벤트 기반으로 트랜잭션을 관리.
- 각 서비스는 특정 이벤트를 구독(Subscribe)하고, 이벤트가 발생하면 자체적으로 트랜잭션을 실행.
✅ 동작 방식
Order Service
가 주문 생성 후 "Order Created" 이벤트를 발행(Publish).Payment Service
가 이벤트를 구독(Subscribe)하고 결제 진행 후 "Payment Successful" 이벤트 발행.Inventory Service
가 이벤트를 구독하고 재고 감소 처리 후 "Stock Updated" 이벤트 발행.- 모든 서비스가 성공하면 최종 완료.
- 특정 서비스가 실패하면, 해당 서비스가 보상 트랜잭션을 실행하여 롤백.
✅ 장점
✔ 중앙 조정자 없이 서비스 간 결합도를 낮출 수 있음.
✔ 확장성이 뛰어나며, 여러 서비스가 동적으로 추가 가능.
✅ 단점
❌ 서비스 간 이벤트 흐름이 복잡해질 수 있으며 디버깅이 어려움.
❌ 이벤트 로깅 및 추적을 위한 추가적인 모니터링 도구 필요.
📌 대표적인 구현 기술: Apache Kafka, RabbitMQ, NATS, AWS SNS/SQS
🔹 4. SAGA 패턴 예제
✅ 예제 시나리오: 온라인 주문 시스템
- 서비스 구성:
Order Service
,Payment Service
,Inventory Service
- 트랜잭션 흐름
Order Service
→ 주문 생성 요청Payment Service
→ 결제 진행Inventory Service
→ 재고 감소- 주문 완료
📌 실패 시 보상 트랜잭션 예제
Payment Service
에서 결제 실패 →Order Service
가 주문을 취소하는 보상 트랜잭션 실행.Inventory Service
에서 재고 부족 →Payment Service
가 결제를 취소하는 보상 트랜잭션 실행.
🔹 5. SAGA 패턴의 장점과 단점
✅ 장점
✔ 마이크로서비스 환경에서 데이터 일관성을 유지할 수 있음.
✔ 분산 시스템에서 트랜잭션 롤백이 가능하여 신뢰성 증가.
✔ 이벤트 기반 아키텍처와 결합하여 확장성 높은 설계 가능.
❌ 단점
❌ 구현이 복잡하며, SAGA Coordinator 또는 이벤트 기반 설계가 필요.
❌ 데이터 정합성 유지가 어렵고, 보상 트랜잭션 설계가 필수적.
❌ 트랜잭션이 여러 단계로 나뉘어져 있어 지연(Latency) 발생 가능.
🔹 6. SAGA 패턴 vs. 2PC (Two-Phase Commit)
비교 항목 | SAGA 패턴 | 2PC (Two-Phase Commit) |
---|---|---|
트랜잭션 방식 | 분산 트랜잭션을 작은 로컬 트랜잭션으로 처리 | 모든 서비스가 한 번에 커밋 또는 롤백 |
데이터 일관성 | Eventually Consistent (최종적 일관성) | Strong Consistency (강한 일관성) |
실패 처리 | 보상 트랜잭션으로 롤백 | 모든 서비스가 롤백됨 |
확장성 | 이벤트 기반으로 확장성 높음 | 참여 서비스가 많아질수록 성능 저하 |
적용 환경 | 마이크로서비스, 비동기 이벤트 | 단일 데이터베이스, 강한 트랜잭션 요구 |
📌 2PC는 강한 일관성을 보장하지만 확장성이 낮고, SAGA는 확장성이 뛰어나지만 데이터 일관성을 유지하기 위한 설계가 필요.
📌 Summary
✔ SAGA 패턴은 마이크로서비스 환경에서 분산 트랜잭션을 관리하는 대표적인 방법.
✔ 오케스트레이션 방식은 중앙 집중적 관리가 가능하지만 SPOF 문제가 있음.
✔ 코레오그래피 방식은 이벤트 기반으로 확장성이 뛰어나지만 디버깅이 어려움.
✔ 트랜잭션 실패 시 보상 트랜잭션을 설계해야 함.
💡 마이크로서비스 환경에서는 ACID 트랜잭션 대신 SAGA 패턴을 활용하여 최종적 일관성(Eventual Consistency)을 유지하는 것이 중요함. 🚀
'Spring Microservice' 카테고리의 다른 글
What is Spring Cloud? (0) | 2025.03.02 |
---|---|
2.Exploring the microservices world with Spring Cloud (0) | 2025.03.02 |
Microservice build/deployment patterns (0) | 2025.02.28 |
Application metrics pattern (0) | 2025.02.28 |
Microservice logging and tracing patterns (0) | 2025.02.28 |