2PC(Two phase Commit)은 분산 트랜잭션에서 원자성을 보장하는 프로토콜이다.
·수정 2026.04.24·수정 3회
요약
- 2PC(Two phase Commit)은 분산 트랜잭션에서 원자성을 보장하는 프로토콜
- Prepare(투표 단계), Commit/Abort(결정 단계)로 나눠짐
- 해당 단계들은 Coordinator or Transaction Manager를 통해 관리됨
본문
2 phase
Phase 1 - Prepare
- 코디네이터가 모든 참여자한테 커밋할 준비가 되었는지 prepare 요청을 보냄
- 각 참여자는 자신의 로컬 트랜잭션을 커밋하지 않고 잠근다. 로그에 redo/undo 정보를 기록
- 준비가 되면 yes, 실패하면 no
Phase 2 - Commit/Abort
- 전원 yes: 코디네이터가 commit 명령을 모든 참여자에게 보낸다. 각 참여자가 로컬 커밋 후 lock을 해제
- 한명이라도 no 또는 타임아웃: 코디네이터가 abort 명령을 보낸다. yes 투표 참여자도 undo 로그를 이용해 롤백한다.
치명적 단점
- Blocking 문제: 하나의 참여자에게 yes를 받고 코디네이터가 죽으면 lock 잡고 무한 락
- 코디네이터의 SPOF
- 성능: 전체 요청은 가장 느린 참여자의 지연에 의존적임
- 확장성
- prepare 단계의 네트워크 라운드 트립과 lock 경합이 증가한다. 마이크로서비스가 수십개 참여하는 트랜잭션에서는 참여 불가능
Saga와의 비교
- 2PC는 커밋 시점을 지연 시켜서 원자성을 얻고, Saga는 커밋을 먼저하고 실패 시 보상으로 되돌린다.
- Saga가 표준