도움되는정보

서버 기반 분산 트랜잭션 관리: Two-Phase Commit과 Saga Pattern의 모든 것

2 동네형 0 40 02.23 20:50

7a1d48ab3332bb27c2b8ccdb8e6dafc0_1740311
분산 시스템 환경에서 트랜잭션을 안전하게 처리하는 것은 매우 중요한 과제입니다. 특히, 데이터의 일관성을 유지하면서도 성능 저하를 최소화해야 합니다. 이를 위해 대표적인 분산 트랜잭션 관리 기법으로
 Two-Phase Commit (2PC)  Saga Pattern이 사용됩니다. 이번 포스트에서는 이 두 가지 기법의 원리와 장단점, 그리고 어떤 상황에서 더 적합한지에 대해 깊이 있게 다뤄보겠습니다.

7a1d48ab3332bb27c2b8ccdb8e6dafc0_1740311
Two-Phase Commit (2PC)란?

2PC의 개념과 동작 방식

Two-Phase Commit(2PC)은 분산 트랜잭션의 원자성을 보장하는 프로토콜로, 트랜잭션을 두 단계(Prepare, Commit)로 나눠 실행하는 방식입니다. 주로 분산 데이터베이스 시스템에서 활용됩니다.

  • Prepare 단계
  • 트랜잭션 관리자는 모든 참여 노드(Participant)에게 트랜잭션 수행 가능 여부를 확인합니다.
  • 각 노드는 로컬에서 트랜잭션을 준비하고, 성공 여부를 응답합니다.
  • 만약 하나라도 실패하면 트랜잭션이 롤백됩니다.
  • Commit 단계
  • 모든 노드가 성공을 응답하면 트랜잭션 관리자는 Commit을 수행하라고 명령합니다.
  • 각 노드는 트랜잭션을 확정하고 데이터를 영구적으로 저장합니다.

2PC의 장점과 단점

✅ 장점

  • 데이터의 일관성(Consistency) 을 보장할 수 있음
  • 강력한 트랜잭션 관리가 가능

❌ 단점

  • Blocking 문제 : 한 노드가 응답하지 않으면 전체 트랜잭션이 멈출 수 있음
  • 높은 지연 시간 : Prepare → Commit 두 단계로 진행되어 속도가 느림
  • 장애 복구 어려움 : Coordinator가 장애 발생 시 복구가 어렵고, 추가적인 Failover가 필요

7a1d48ab3332bb27c2b8ccdb8e6dafc0_1740311
Saga Pattern이란?

Saga의 개념과 동작 방식

Saga 패턴은 장기 실행 트랜잭션(Long-running Transaction)을 처리하는 분산 트랜잭션 관리 기법입니다. 2PC와 달리 각 서비스가 독립적으로 작업을 수행하며, 실패 시 보상 트랜잭션(Compensating Transaction)을 실행하여 롤백합니다.

Saga 패턴에는 두 가지 실행 방식이 있습니다.

  • Choreography (오케스트레이션 없이 이벤트 기반 실행)
  • 서비스들이 이벤트를 주고받으며 트랜잭션을 진행
  • 특정 서비스가 실패하면 이전 이벤트를 되돌리는 방식으로 롤백
  • Orchestration (중앙 관리자가 트랜잭션 조정)
  • Saga Coordinator가 트랜잭션의 진행을 관리
  • 실패 시 보상 트랜잭션을 명시적으로 수행

Saga의 장점과 단점

✅ 장점

  • 비동기 처리 가능 : 높은 성능과 확장성을 유지할 수 있음
  • Blocking 문제 없음 : 한 서비스가 응답하지 않아도 전체 시스템이 멈추지 않음
  • 부분 실패 허용 : 장애 발생 시 보상 트랜잭션을 통해 일부만 롤백 가능

❌ 단점

  • 데이터 일관성 보장 어려움 : 보상 트랜잭션이 항상 완벽하게 동작한다고 보장할 수 없음
  • 복잡한 트랜잭션 관리 필요 : 여러 서비스 간 보상 트랜잭션 설계가 필수

7a1d48ab3332bb27c2b8ccdb8e6dafc0_1740311
Two-Phase Commit vs Saga Pattern 비교

| 항목 | Two-Phase Commit (2PC) | Saga Pattern |

|------|---------------------|-------------|

트랜잭션 모델 | 강력한 일관성(ACID) | 최종적 일관성(Eventual Consistency) |

처리 방식 | 동기(Synchronous) | 비동기(Asynchronous) |

성능 | 높은 지연 시간 | 빠른 성능 |

확장성 | 낮음 | 높음 |

장애 복구 | 어렵고 비용이 큼 | 비교적 용이 |

7a1d48ab3332bb27c2b8ccdb8e6dafc0_1740311
언제 2PC와 Saga를 사용할까?

2PC는 강력한 일관성이 필수적인 경우 에 적합합니다. 예를 들면,

  • 은행 계좌 이체
  • 회계 시스템
  • 주문 결제 프로세스

반면 Saga는 확장성과 성능이 중요한 경우에 적합합니다. 예를 들면,

  • 마이크로서비스 기반의 e커머스
  • 항공권 예약 시스템
  • 금융 서비스 API

7a1d48ab3332bb27c2b8ccdb8e6dafc0_1740311
실무에서의 분산 트랜잭션 적용 방법

1. 데이터 일관성 전략

  • CQRS (Command Query Responsibility Segregation) : 읽기와 쓰기를 분리하여 데이터 동기화 문제 해결
  • 이벤트 소싱(Event Sourcing) : 모든 상태 변화를 이벤트 로그로 저장하여 추적 가능
  • Idempotency (멱등성) : 같은 요청이 여러 번 실행되더라도 동일한 결과를 보장

2. 장애 대응 및 복구 전략

  • Retry 메커니즘 : 트랜잭션 실패 시 재시도 정책 적용
  • Dead Letter Queue (DLQ) : 실패한 메시지를 보관하고 나중에 처리
  • Circuit Breaker 패턴 : 특정 임계값 초과 시 서비스 호출을 중단하여 시스템 보호

7a1d48ab3332bb27c2b8ccdb8e6dafc0_1740311
결론

분산 트랜잭션 관리에서 2PC와 Saga 패턴은 각각 다른 목적을 가진다는 점이 중요합니다.

  • 2PC는 강력한 일관성이 필요한 경우 적합하지만, 성능이 떨어지고 장애 복구가 어렵습니다.
  • Saga는 확장성과 성능이 중요한 경우 적합하지만, 데이터 일관성 유지가 쉽지 않습니다.

따라서 어떤 트랜잭션 관리 방식이 더 적합한지 고민하고, 시스템 아키텍처에 맞는 최적의 솔루션을 선택하는 것이 중요합니다.


7a1d48ab3332bb27c2b8ccdb8e6dafc0_1740311

*** 불펌 무단복제 이미지 캡쳐를 금지합니다 ***

, , , , , , , , ,

Comments

글이 없습니다.
페이스북에 공유 트위터에 공유 구글플러스에 공유 카카오스토리에 공유 네이버밴드에 공유