위키득계정 ↗
기술

2단계 커밋

2단계 커밋기술
영어
Two-phase commit
약칭
2PC
주요 단계
준비와 결정
특징
장애 시 블로킹 가능
2단계 커밋은 여러 참여자가 수행한 분산 트랜잭션을 모두 확정하거나 모두 중단하도록 조정하는 프로토콜이다. 준비 여부를 모으는 단계와 최종 결정을 전달하는 단계를 구분하며, 조정자 장애 때 일부 참여자가 결정을 기다릴 수 있다.

준비 단계

조정자는 참여자들에게 해당 트랜잭션을 확정할 준비가 되었는지 묻는다. 준비 완료 응답은 단순한 작업 시작 알림이 아니라 나중의 최종 결정을 따를 수 있도록 필요한 상태를 확보했다는 약속이다. 재시작 뒤에도 이 상태를 알 수 있게 영속 기록이 필요할 수 있다.

최종 결정

모든 참여자가 준비를 마치면 조정자는 커밋을 결정할 수 있다. 준비할 수 없는 참여자가 있으면 중단한다. 조정자는 결정을 기록하고 참여자에게 전달하며, 참여자들은 그 결정을 자신의 상태에 반영한다. 네트워크에서 모든 참여자가 정확히 같은 순간에 바뀌어야 한다는 뜻은 아니다.

불확실한 참여자

준비를 마친 뒤 최종 결정을 받지 못한 참여자는 다른 참여자가 이미 커밋했는지 모를 수 있다. 이런 상태에서 타임아웃만 보고 마음대로 중단하면 전체 결정과 모순될 수 있다. 조정자 장애와 정보 단절 때문에 기다려야 하는 상황이 생기는 것이 고전적인 프로토콜의 중요한 한계다.

복제 합의와의 차이

트랜잭션 커밋은 모든 참여자의 준비 조건을 고려한다. 과반수의 서버가 같은 값을 선택하는 합의를 그대로 모든 참여자의 작업 성공과 동일시할 수 없다. 조정자 결정을 복제하는 방법도 있지만 전체 트랜잭션의 참여 조건과 복제 프로토콜의 장애 조건을 함께 설계해야 한다.

관련 문서

트랜잭션 / 데이터베이스 / 분산 시스템 / Paxos / Raft / FLP 불가능성 정리 / 네트워크 / 원자성