💡 핵심 인사이트
PBFT(Practical Byzantine Fault Tolerance) 합의 알고리즘은 비트코인처럼 전기를 낭비하며 채굴(수학 문제 풀기)을 하는 대신, **정해진 노드(대표자)들끼리 3번의 메시지(투표)를 주고받으며 다수결(2/3 이상)로 빠르게 장부를 확정 짓는 '스마트한 네트워크 회의 시스템'**입니다.
이 회의는 철저히 Pre-prepare ➔ Prepare ➔ Commit 이라는 3단계 투표 프로세스로 진행됩니다.


Ⅰ. BFT(비잔틴 장애 허용)의 전제 조건

PBFT는 하이퍼레저 패브릭이나 텐더민트(코스모스) 등 프라이빗 체인이나 고속 메인넷에서 주로 쓰는 방식입니다.

  • 리더와 팔로워: 노드들 중 한 명을 반장(Primary/리더)으로 뽑고, 나머지는 일반 학생(Replica/팔로워)이 됩니다.
  • 다수결의 룰: 전체 노드 중 배신자나 고장 난 컴퓨터(비잔틴 노드)가 $f$개 있을 때, 전체 노드가 **$3f + 1$개 이상(즉, 2/3 초과)**의 착한 노드만 있으면 네트워크는 100% 안전하게 정상 합의에 도달한다는 수학적 증명에 기반합니다. (예: 4명이면 1명의 배신자를 견딜 수 있음).

Ⅱ. PBFT 합의 3단계 프로세스 (시험 출제 1순위)

사용자가 "A가 B에게 1만 원 송금함"이라는 거래를 요청하면, 노드들끼리 쉴 새 없이 메시지를 주고받으며(투표) 검증을 시작합니다.

1단계: Pre-prepare (사전 준비 / 제안)

  • 주체: 오직 반장(리더 노드) 혼자만 말하는 시간입니다.
  • 내용: 클라이언트의 거래 요청을 받은 반장이 순서를 매겨 블록을 임시로 만든 뒤, "얘들아! 우리 이 장부 내용(블록)으로 합의해서 통과시키자!"라고 모든 팔로워 노드들에게 제안서(메시지)를 뿌립니다. (나머지 노드는 듣기만 함).

2단계: Prepare (준비 / 1차 투표)

  • 주체: 반장을 포함한 모든 노드들이 서로서로 대화하는 시간입니다.
  • 내용: 반장의 제안을 받은 각 팔로워들은 서류에 위조가 없는지 검토합니다. 맞다고 생각되면 "나도 이 블록 찬성해!"라는 Prepare 메시지를 자기 자신을 제외한 나머지 모든 네트워크 노드 전체에게 미친 듯이 뿌립니다. (여기서 통신량이 $N^2$으로 폭발합니다).
  • 결과: 각 노드는 주변 친구들에게서 찬성 메시지를 줍습니다. 만약 전체 노드의 **2/3 이상(정족수)**에게서 찬성표를 받으면, "아, 대다수가 이 제안에 동의하고 있구나"라고 확신하며 1차 검증을 통과(Prepared 상태)합니다.

3단계: Commit (확정 / 최종 투표)

  • 주체: 1차 투표를 통과한 모든 노드들이 다시 서로서로 대화합니다.
  • 내용: 2/3 이상의 동의를 확인한 노드는, "좋아, 대다수 의견을 확인했으니 이제 이 블록을 진짜 내 하드디스크에 영구 기록할게!"라는 Commit 메시지를 또다시 전 네트워크에 뿌립니다.
  • 결과: 역시 Commit 메시지가 2/3 이상 모이게 되면(Committed 상태), 비로소 그 거래 블록은 완벽히 신뢰할 수 있는 장부가 되어 노드의 원장(DB)에 영구적으로 기록되고(저장), 클라이언트에게 "성공적으로 이체되었습니다!"라고 응답을 보냅니다.

Ⅲ. PBFT의 장단점

  • 장점 (즉각적 완결성): 3단계 투표가 끝나는 순간 블록이 확정되므로, 비트코인처럼 혹시 장부가 뒤집힐까 봐 1시간(6 컨펌)씩 덜덜 떨며 기다릴 필요 없이 단 몇 초 만에 결제가 완료됩니다. 분기가 일어나지 않습니다.
  • 단점 (확장성 부족): 노드가 100개면 Prepare 단계에서 $100 \times 100 = 10,000$개의 통신이 터지고, Commit에서 또 만 개의 통신이 터집니다. 노드 수가 많아질수록 네트워크 통신 오버헤드가 기하급수적으로 폭발해 마비되므로, 보통 노드 수를 수십 개 이하로 제한하는 프라이빗 체인에만 쓸 수 있습니다.

📢 섹션 요약 비유: PBFT 3단계는 반장 선거입니다. 반장이 칠판에 "오늘 체육 시간으로 바꾸자!"고 적는 것이 **Pre-prepare(제안)**입니다. 반 친구들이 서로 귓속말로 "너 찬성해? 난 찬성!" 하고 물어보며 반 2/3가 찬성임을 확인하는 웅성거림이 **Prepare(1차 여론 확인)**입니다. 분위기를 파악한 후 다 같이 손을 번쩍 들어 "체육 찬성!"이라고 소리치며 최종 확정 짓는 것이 **Commit(최종 승인)**입니다.