투 페이즈 커밋(2PC)은 분산 환경에서 원자성(Atomicity)을 보장하기 위해 사용되는 분산 트랜잭션 프로토콜입니다. 여러 데이터베이스 노드(또는 자원 관리자)가 하나의 트랜잭션에 참여할 경우, 모든 노드가 정합성 있는 상태로 Commit 혹은 Rollback할 수 있도록 중앙 Coordinator의 조율 하에 2단계에 걸쳐 트랜잭션을 수행합니다.
구성 요소 | 설명 |
---|---|
Coordinator (조정자) | 전체 트랜잭션을 관리하고 커밋 여부를 결정 |
Participant (참여자) | 각 분산 노드(DB 등)로 실제 데이터를 저장하는 자원 관리자 |
Transaction Log | 트랜잭션의 상태(prepare, commit 등)를 저장하여 장애 복구 지원 |
핵심 원칙: All or Nothing
항목 | 설명 |
---|---|
Atomicity 보장 | 모든 참여자에게 동일한 결과 보장 (Commit or Abort) |
일관성 유지 | 분산 DB 간 정합성 보장 |
Blocking Protocol | Coordinator 장애 시 Participant가 응답 대기 상태로 남을 수 있음 |
로그 기반 복구 | 장애 시 트랜잭션 로그 기반으로 상태 복구 가능 |
Coordinator 장애 시 블로킹 발생
참여자 장애 시 불확정 상태
성능 저하
보완 기법 | 설명 |
---|---|
Three-Phase Commit (3PC) | 중간 상태(Pre-Commit)를 추가하여 블로킹 문제를 완화 |
Paxos Commit | Consensus 알고리즘 적용하여 Coordinator 장애 대응 |
XA 프로토콜 | 분산 트랜잭션을 표준화한 API (JTA, JDBC 등에서 사용) |
SAGA 패턴 | 롱런 트랜잭션 분해 및 보상 트랜잭션으로 비동기 처리 (마이크로서비스 기반에서 주로 사용) |
Two-Phase Commit은 분산 트랜잭션의 원자성과 정합성을 보장하는 핵심 프로토콜이지만, Coordinator 장애 시의 블로킹 문제, 지연 발생, 성능 저하 등의 한계도 존재합니다. 이러한 단점을 극복하기 위해 3PC, SAGA, Paxos Commit 등의 기술이 도입되고 있으며, 최근에는 마이크로서비스 기반 환경에서 비동기 보상 트랜잭션 패턴이 더 자주 활용되고 있습니다.