1. 합의 알고리즘 🎯
합의 알고리즘이 어느 단계에 위치하는지 확인해 봅시다.
> 트랜잭션 생성 => 네트워크 전파 ✅
: 사용자가 Private Key로 트랜잭션을 생성하고 P2P 네트워크에 브로드캐스트합니다. 참고로 브로드캐스트란, 네트워크에 연결된 모든 장치
2025년 11월 21일7min read
1. 합의 알고리즘 🎯
합의 알고리즘이 어느 단계에 위치하는지 확인해 봅시다.
트랜잭션 생성 => 네트워크 전파 ✅
: 사용자가 Private Key로 트랜잭션을 생성하고 P2P 네트워크에 브로드캐스트 합니다. 참고로 브로드캐스트란, 네트워크에 연결된 모든 장치에 데이터를 동시에 보내는 통신 방식을 의미합니다. 노드들이 서명 및 잔액 등 주요 state 검증 ✅ : 네트워크 노드는 트랜잭션을 수신하는 즉시 유효성 검증(서명, 잔액, 이중 지불 여부 등)을 수행합니다. 유효한 트랜잭션들은 멤풀(Mempool)에 대기 상태로 저장됩니다. 멤풀은 메모리 풀의 줄임말로, 블록에 포함되지 않은 미확정 트랜잭션들의 대기 장소입니다. 멤풀은 노드마다 독립적으로 존재합니다. 유효한 트랜잭션들을 모아 블록 생성 ✅ : 채굴자 또는 검증자가 멤풀에서 트랜잭션들을 선택하여 후보 블록(Candidate Block)을 만듭니다. 합의 알고리즘에 따라 승인 ✅ : 후보 블록을 네트워크에 제안하고, 합의 알고리즘(작업 증명, 지분 증명, BFT 등)에 따라 다른 노드들의 검증 및 승인을 받습니다. 이 단계에서 블록의 순서와 내용에 대한 네트워크 전체의 합의가 이루어집니다. 체인에 연결 ✅ : 합의가 완료되어 유효성이 확정된 블록이 기존의 블록체인에 연결(Append) 됩니다. 이 순간 트랜잭션은 최종 확정(Finalized) 되며, 네트워크의 모든 노드가 장부를 업데이트합니다.
체인에 블록을 연결하기 전에, 노드들이 블록에 대해 합의하는 방식이 합의 알고리즘입니다. 합의 알고리즘은 여러 방식이 있을 수 있겠죠. 하지만 공통적으로 준수해야 하는 요구사항은 다음과 같습니다.
데이터 무결성 유지 ✅
: 데이터가 사전에 허락되지 않은 방법으로 변경되지 않았다는 점을 보장해야 하고 이를 데이터 무결성 유지라고 합니다. 이중 지불 방지 ✅ : 동일한 자산을 두 번 이상 사용하려는 악의적인 시도를 탐지하고 원천적으로 차단하여 거래의 신뢰성을 확보해야 합니다. 악의적 행위 억제 ✅ : 포크 공격이나 스팸 트랜잭션, 거짓 데이터 전파 등 시스템에 해를 끼치거나 부당한 이득을 취하려는 노드의 행위를 경제적/기술적으로 어렵게 만들어 정직한 참여를 유도해야 합니다.
2. BFT와 Non-BFT 🎯
BF(Byzantine Fault) ✅
: 분산 시스템에서 일부 노드가 단순히 고장나거나 오프라인이 되는 것이 아니라, 악의적이거나 예측 불가능한 방식으로 행동하여 합의를 방해하는 가장 심각한 형태의 장애입니다. BFT (Byzantine Fault Tolerance) ✅ : 시스템 내에서 일정 개수의 노드가 악의적 혹은 임의의 잘못된 동작을 하더라도, 나머지 정직한 노드가 올바른 합의 상태를 유지할 수 있도록 설계된 알고리즘입니다. 노드 중 최대 f개가 비잔틴이라도 노드 수를 3f+1 이상으로 구성합니다. Non-BFT (Non-Byzantine Fault Tolerance) ✅ : 악의적인 노드의 존재 자체를 전제하지 않고, 시스템 장애를 단순한 고장(Crash Fault)으로 간주하도록 설계된 알고리즘입니다. 확정적 최종성을 즉시 보장하지 못하는 합의 방식입니다.
Finality ✅
: Finality는 한 번 합의가 끝난 블록이 이후에 뒤집히거나 무효화되지 않음을 보장하는 정도를 뜻합니다. Probabilistic Finality ✅ : 확률적 최종성으로, 비트코인이나 과거의 이더리움처럼 PoW를 사용하는 블록체인에서 볼 수 있는 개념입니다. 새 블록이 생성될 때마다 체인이 길어지고, 어느 정도 블록이 쌓일수록 해당 거래를 되돌릴 가능성이 극도로 낮아지는 형태를 보입니다. 이론적으로 51% 공격을 당하면 블록을 재구성할 수는 있겠으나, 블록이 쌓일수록 되돌리는 데에 드는 비용이 기하급수적으로 증가하기에, 사실상 뒤집히기 어렵다는 의미에서 확률적 최종성이라 부릅니다. Deterministic Finality ✅ : 결정적 최종성으로, 한 번 합의가 끝난 블록은 시스템 내부 규칙상 절대 뒤집히지 않는 형태를 보입니다. 합의 과정에서 특정 임계치(3f+1, 2f+1 이상 또는 2/3 이상의 서명)를 만족하여 Commit 하면 해당 블록은 최종 상태가 됩니다. 확률적 최종성과 달리 가장 긴 체인 선호 같은 매커니즘이 존재하지 않기에, 의도적으로 네트워크를 분리하지 않는 한 그 합의 결과는 바뀌지 않습니다.
BFT 대표 사례(PBFT) ✅
: PBFT는 Miguel Castro와 Barba Liskov가 제안한 고전적인 BFT 알고리즘입니다. 노드 수 3f+1개 중 최대 f개의 노드가 악의적이어도 합의가 가능합니다.
: 리더가 블록을 제한하면 Replica들이 검증하는 Pre-prepare 단계, 노드들이 서로 Prepare 메세지를 확인하는 Prepare 단계, 최종적으로 임계치를 확인 후 승인하는 Commit 단계로 합의가 진행됩니다. : 이때 뷰 변경이란, 리더에 장애가 발생하거나 리더가 악의적 행동을 했을 시 새로운 리더를 선출하고 기존 합의 내용을 이어받아 합의를 재진행하는 매커니즘입니다. : 메시 형태로 전파하기에 적은 수의 노드 환경에서는 효과적이지만, 노드가 늘어날수록 메세지 교환 비용이 급격히 증가하기에 퍼블릭 블록체인에선 비효율적이라는 한계를 보입니다.
Non-BFT 대표 사례(Paxos/PoW) ✅
: Paxos는 Leslie Lamport가 제안한 알고리즘입니다. Proposer가 제안을 하면 Acceptor들이 그 제안에 대한 찬반 투표를 진행합니다. 다수의 Acceptor들로부터 승인을 받으면 값이 확정됩니다. 비잔틴 노드가 없다는 것을 전제로 하기에 Acceptor가 거짓 응답하는 상황은 고려하지 않습니다. : PoW는 비트코인이나 PoS 전환 전의 이더리움 등 초창기 퍼블릭 블록체인에서 채택된 방식입니다. 채굴자가 해시 퍼즐을 풀어 블록을 제안하면, 네트워크가 블록을 받아들여 체인에 추가합니다. 공격자가 51% 이상의 채굴 파워를 장악하지 않는 이상 블록체인을 뒤집기 어렵다는 경제적 안전장치 개념을 사용합니다. 최종성이 즉시 보장되지 않고 여러 블록이 동시에 나올 수 있으며, 가장 긴 체인이 정통성을 갖게 된다는 특징이 있습니다.
3. Non-BFT: Probabilistic Finality 🎯
확률적 최종성(Probabilistic Finality)은 경쟁 기반 알고리즘을 채택한 블록체인이 필연적으로 갖게 되는 특성입니다. 어떤 논리적 단계를 거치는지 확인해 보겠습니다.
지분 증명(PoS) 및 경쟁적 블록 생성 ✅
: Polygon PoS와 같은 시스템은 지분 증명(PoS)과 같은 경쟁적 메커니즘을 사용하여 합의를 이룹니다. 지분 증명이란, 코인을 많이 가지고 있고 그것을 예치한 사람들이 검증인이 될 자격을 얻은 뒤 다음 블록을 만들 권한을 부여받아 합의에 참여하는 증명 방식입니다. 블록 생성 권한은 미리 예약되거나 지정되지 않고, 모든 노드(검증자)가 다음 블록을 생성할 권한을 얻기 위해 동시에 경쟁합니다. 이것이 바로 경쟁적 블록 생성의 핵심입니다.
Fork의 발생과 Block Height ✅
: 경쟁적 블록 생성의 직접적인 결과로, 여러 노드가 거의 동시에 유효한 블록을 생성하고 네트워크에 전파하면서 체인이 일시적으로 분기(Fork) 됩니다. 분기된 체인들 속에서 각 블록의 Block Height는 블록의 고유한 주소(좌표)이며 불변성 유지의 역할을 수행합니다.
긴 체인 규칙(Longest Chain Rule) ✅
: 네트워크는 이러한 포크 상황을 해결하고 하나의 최종 경로를 선택하기 위해 긴 체인 규칙(Longest Chain Rule)을 적용합니다. 이는 Block Height를 기준으로 가장 긴 경로를 가진 체인만을 정통성 있는 체인으로 인정하는 규칙입니다. 이 규칙에 의해 짧은 체인은 버려지고 체인 재구성(Reorganization)이 발생합니다.
확률적 최종성(Probabilistic Finality) ✅
: 이러한 경쟁과 긴 체인 규칙을 통해 체인이 지속적으로 연결될수록, 특정 트랜잭션이 담긴 블록 위에 새로운 블록들(Block Height 증가)이 계속 쌓이게 됩니다. 블록이 충분히 쌓이면 해당 거래를 되돌리기 위해 필요한 비용이 기하급수적으로 증가하여, 이론적인 위험 확률이 완전히 0은 아님에도 불구하고 사실상 되돌릴 수 없는 상태에 도달합니다.
4. BFT: Deterministic Finality 🎯
BFT 합의의 3대 핵심 속성은 다음과 같습니다.
Safety ✅
: 네트워크의 모든 정직한 노드가 동일한 데이터 내용에 대해 합의하며, 모순되는 블록을 확정하지 않도록 보장합니다. Liveness ✅ : 시스템이 악의적인 노드의 방해나 단순 고장에도 불구하고 멈추지 않고 블록을 지속적으로 생성할 수 있도록 보장합니다. Deterministic Finality ✅ : 블록이 합의 과정을 통해 확정되는 순간 즉시 100% 확정되며, 확률적 최종성과 달리 절대 뒤집히지 않음을 보장합니다.
Tendermint는 DPoS 매커니즘을 결합하여 BFT의 한계였던 확장성 문제를 해결하고, 동시에 BFT의 최대 장점인 빠른 합의와 결정적 최종성을 모두 확보하는 방법을 제시합니다. BFT의 Deterministic Finality를, Tendermint의 동작 원리를 통해 설명하고자 합니다.
PoS ✅
: Proof of Stake입니다. 노드가 스테이킹(지분 자금)을 통해 블록 생성 권한을 얻는 합의 방식이었습니다. PoW처럼 엄청난 연산이 필요하지 않다는 장점이 있습니다. DPoS ✅ : Delegated Proof of Stake입니다. 네트워크 참가자들이 특정 검증자에게 자신의 지분을 위임하고 지분을 기준으로 선출된 소수의 노드가 합의 과정에 참여하는, 대의 민주주의 성격을 보이는 합의 방식입니다. 대표 노드들끼리 BFT 합의 알고리즘을 사용하면, 적은 수의 노드로 빠른 합의와 결정적 최종성을 확보할 수 있습니다. 네트워크 참가자들은 위임한 비율에 맞게 보상을 받을 수 있습니다.
이제 Tendermint가 합의하는 단계를 살펴보겠습니다.
Propose ✅
: 해당 라운드에 지정된 Proposer가 유효한 트랜잭션을 모아 후보 블록을 생성한 뒤 네트워크에 전파합니다. 후보 블록에는 이전 블록 해시, 새로운 트랜잭션, 타임스탬프, Proposer의 서명 등이 포함됩니다. Prevote ✅ : 블록을 수신한 모든 검증자는 해당 블록의 유효성을 확인합니다. 유효하다고 판단하면 Prevote 투표를 전파하고, 유효하지 않거나 블록을 받지 못하면 Nil Prevote를 전파합니다. Go 언어에서 Nil은 다른 언어의 null과 같은 역할을 합니다. Tendermint는 Go 언어로 작성되었기에 Nil이라는 표현을 사용합니다. Precommit ✅ : Prevote 단계에서 +2/3의 검증자가 특정 블록을 지지하면 해당 블록에 대해 Precommit으로 투표하고, 해당 블록을 지지하지 않는다면 Nil Precommit을 전파합니다. 이때, Precommit으로 투표했다면 Block Lock을 진행하는데, Block Lock은 해당 라운드 혹은 다음 라운드에서 다른 블록에 투표하지 않겠다는 의미입니다. Commit ✅ : Precommit 단계에서 +2/3의 검증자가 동의하면 Commit 상태가 되어 블록을 디스크에 저장하게 됩니다. 이때 해당 블록은 결정적으로 확정됩니다.
Commit이 성공적으로 이루어지지 않았을 경우, Block Height는 증가하지 않고 현재의 블록을 확정하기 위해 라운드 번호만 증가시킵니다. 이와 함께 새로운 블록 제안자를 지정하여 합의를 재시도합니다. 이전 제안자의 실패에도 불구하고 시스템이 멈추지 않고 합의를 계속 진행하도록 보장하는 Liveness 유지 장치입니다.
5. 복습 및 요약 🎯
블록체인 시스템은 ECC(타원곡선 암호)를 기반으로 한 개인키(Private Key)와 공개키(Public Key)를 통해 거래를 안전하게 서명하고 소유권을 증명하는 불변의 탈중앙화 장부입니다. 사용자는 니모닉(Mnemonic) 구문을 통해 개인 키를 백업하고, HD Wallet(계층적 결정론적 지갑) 구조를 이용해 여러 주소를 효율적으로 관리합니다. 이러한 지갑 시스템 위에서 다양한 디지털 자산이 유통되는데, ERC-20 표준은 상호 교환 가능한 토큰(FT), ERC-721 표준은 고유하고 대체 불가능한 자산(NFT)에 대한 규칙을 제공하여 블록체인 기반 경제 활동의 근간을 이룹니다.
이러한 거래 기록을 확정하기 위해 합의 알고리즘이 작동하며, 이는 시스템의 최종성(Finality)을 결정합니다. Non-BFT 방식(PoW/경쟁적 PoS)은 경쟁적 블록 생성으로 인해 포크 위험을 안고 있으며, 블록 Height가 쌓여야 확정성이 높아지는 확률적 최종성을 가집니다. 반면, BFT(비잔틴 장애 허용) 방식(Tendermint 등)은 악의적인 노드의 존재를 전제하고, 엄격한 라운드 기반 투표를 통해 2/3 초과의 검증인이 동의하면 블록을 즉시, 절대 되돌릴 수 없는 상태로 확정하는 결정적 최종성을 보장합니다.