반응형
Advanced MSA Architecture
데이터가 흩어져도 하나처럼,
분산 트랜잭션 관리 전략
안녕하세요, code-resting입니다. 서비스 규모가 커져 DB를 쪼개는 '샤딩'이나 서비스별로 DB를 두는 'MSA'를 도입하면 피할 수 없는 숙제가 생깁니다. 바로 분산 트랜잭션이죠. 하나의 물리적 트랜잭션으로 묶을 수 없는 여러 서버 간의 데이터 정합성을 어떻게 맞출 수 있을까요? 오늘 그 해답을 찾아봅니다.
1. 고전적인 해법: 2PC (2단계 커밋)
중앙에 '코디네이터'를 두고 모든 서버에 "준비됐니?" 물어본 뒤, 모두 OK 할 때만 커밋을 수행하는 방식입니다.
- ✅ 장점: 강력한 일관성(Strict Consistency)을 보장합니다.
- ❌ 단점: 한 서버라도 응답이 늦으면 전체가 대기(Blocking)합니다. 성능 저하와 장애 전파의 원인이 되어 MSA에서는 지양하는 추세입니다.
2. 현대적인 해법: Saga 패턴
Saga는 각 서비스의 로컬 트랜잭션을 순차적으로 실행하고, 중간에 실패하면 이전에 성공한 작업들을 되돌리는 보상 트랜잭션(Compensating Transaction)을 실행하는 방식입니다.
Saga 패턴의 두 가지 구현 방식:
- Choreography (코레오그래피): 중앙 통제자 없이 이벤트 메시지로 서로 통신. 간단하지만 흐름 파악이 어려움.
- Orchestration (오케스트레이션): 중앙 '오케스트레이터'가 전체 흐름을 제어. 복잡하지만 상태 관리가 명확함.
3. 2PC vs Saga 한눈에 비교
| 항목 | 2PC | Saga 패턴 |
|---|---|---|
| 일관성 모델 | 강한 일관성 | 결과적 일관성 (Eventual) |
| 가용성 | 낮음 (Blocking) | 높음 (Non-blocking) |
| 실패 처리 | 전체 롤백 | 보상 트랜잭션 실행 |
💡 마무리하며
2026년 대규모 분산 시스템에서 '완벽한 실시간 일관성'을 고집하는 것은 성능을 포기하는 것과 같습니다. **Saga 패턴**을 통해 비즈니스 흐름을 설계하고, **결과적 일관성**을 수용하는 것이 현대 백엔드 아키텍처의 핵심입니다. 실패했을 때 어떻게 '우아하게' 되돌릴 것인가를 고민해 보세요.
728x90
반응형
'아키텍처' 카테고리의 다른 글
| 데이터가 꼬이지 않는 캐시 운영 전략: Cache-Aside부터 Write-Back까지 완벽 정리 (0) | 2026.04.08 |
|---|---|
| 서버 부하를 덜어주는 마법: 로컬 캐시(Ehcache) vs 글로벌 캐시(Redis) 선택 가이드 (0) | 2026.04.06 |
| 서버 한 대로 안 될 때: 로드밸런서(L4 vs L7)와 Nginx 리버스 프록시 완벽 이해 (0) | 2026.03.12 |
| MSA에서 겹치지 않는 ID 만들기: Twitter Snowflake 알고리즘의 원리와 구현 (0) | 2026.03.06 |
| [실전] Kafka + Spring Boot로 구현하는 Saga 패턴: 결제 실패 시 주문 자동 취소하기 (0) | 2026.03.02 |
댓글