본문 바로가기

IT 세상

2단계 커밋(2-Phase Commit, 2PC)

2단계 커밋(2-Phase Commit, 2PC)  은 컴퓨터 과학에서 분산 시스템의 모든 참가자들이 트랜잭션을 완료하거나 롤백하도록 보장하기 위해 사용하는 프로토콜입니다. 첫 번째 단계인 "준비 단계"에서는 참가자들이 커밋할 수 있는지 여부를 결정하고, 두 번째 단계인 "커밋 단계"에서는 최종 결정을 내리게 됩니다.

 

2단계 커밋(2PC) 프로토콜은 분산 시스템에서 데이터베이스나 트랜잭션 관리 시스템이 분산 트랜잭션을 원자적으로 수행하기 위해 사용하는 방법입니다. 이 프로토콜은 모든 참여 노드가 트랜잭션을 성공적으로 완료하거나, 실패 시 롤백(되돌리기)을 통해 모든 노드의 상태를 일관되게 유지할 수 있도록 보장합니다.

1. 개요

분산 시스템에서는 여러 노드(또는 시스템)가 하나의 트랜잭션에 참여할 수 있습니다. 이때 각각의 노드는 독립적으로 트랜잭션을 처리하므로, 모든 노드가 해당 트랜잭션을 성공적으로 처리했는지 확인하고 트랜잭션을 최종적으로 커밋할지 여부를 결정해야 합니다. 2PC는 이러한 상황에서 트랜잭션의 일관성을 유지하기 위한 표준적인 방법입니다.

2. 프로토콜 단계

2PC는 크게 두 가지 단계로 이루어집니다:

1) 준비 단계(Prepare Phase)

  • 조정자(Coordinator): 트랜잭션을 관리하는 중앙 노드가 있으며, 이 노드는 모든 참여 노드에게 트랜잭션을 준비(Prepare)할 것을 요청합니다.
  • 참여자(Participant): 각 참여 노드는 트랜잭션을 로컬에서 실행한 후, 성공하면 "준비 완료(Prepared)" 메시지를 조정자에게 전송하고, 실패하면 "실패(Abort)" 메시지를 전송합니다.
  • 결과: 모든 노드가 "준비 완료" 상태이면, 트랜잭션을 커밋할 수 있는 준비가 된 것입니다. 한 노드라도 "실패"를 보고하면, 트랜잭션을 중단하고 롤백해야 합니다.

2) 커밋 단계(Commit Phase)

  • 커밋(Commit): 모든 노드가 "준비 완료"를 보고했다면, 조정자는 모든 노드에게 트랜잭션을 커밋할 것을 명령합니다. 각 노드는 커밋을 수행하고 조정자에게 완료 메시지를 전송합니다.
  • 롤백(Rollback): 한 노드라도 "실패"를 보고했다면, 조정자는 트랜잭션을 롤백하도록 명령합니다. 각 노드는 자신이 실행했던 트랜잭션을 롤백하고 완료 메시지를 조정자에게 전송합니다.

3. 장점과 단점

  • 장점: 2PC는 분산 트랜잭션에서 일관성을 보장합니다. 모든 노드가 트랜잭션을 성공적으로 완료하거나, 실패 시 모든 변경사항을 되돌릴 수 있습니다.
  • 단점: 2PC는 비교적 느린 프로토콜입니다. 각 노드 간의 통신 오버헤드가 크고, 네트워크 지연이나 장애가 발생할 경우 시스템이 오랫동안 대기 상태에 빠질 수 있습니다. 또한, 조정자 노드에 장애가 발생할 경우 트랜잭션 전체가 중단될 위험이 있습니다.

4. 사용 사례

2PC는 은행 시스템, 예약 시스템 등 높은 수준의 데이터 일관성이 필요한 분산 시스템에서 주로 사용됩니다. 이러한 시스템에서는 모든 트랜잭션이 올바르게 수행되어야 하며, 실패 시 모든 데이터가 원래 상태로 복원되어야 합니다.

2PC 프로토콜은 그 안정성과 신뢰성으로 인해 여전히 많이 사용되지만, 더 빠른 성능이나 장애 허용성을 위해 3단계 커밋(3PC)이나 다른 대체 프로토콜들이 개발되기도 했습니다.

'IT 세상' 카테고리의 다른 글

Application Architect 직무 면접, 채용 예상 질문  (0) 2024.08.11
ACID  (0) 2024.08.11
Saga 패턴  (0) 2024.08.07
Event Sourcing  (0) 2024.08.07
Strangler 패턴  (0) 2024.08.07