본문 바로가기
아키텍처

MSA 트랜잭션의 구원자: 2PC(Two-Phase Commit)와 Saga 패턴 완벽 이해

by 공부 안하고 싶은 사람 2026. 4. 2.
반응형
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 패턴**을 통해 비즈니스 흐름을 설계하고, **결과적 일관성**을 수용하는 것이 현대 백엔드 아키텍처의 핵심입니다. 실패했을 때 어떻게 '우아하게' 되돌릴 것인가를 고민해 보세요.

© 2026 code-resting. All rights reserved.

728x90
반응형

댓글