블록체인 합의 알고리즘 기초
블록체인 합의 알고리즘 기초 (블록체인에서의 합의 알고리즘을 이해하기 위한 기초지식).
본 글에서는 블록체인에서 사용하는 합의 알고리즘을 이해하기에 앞서 합의 알고리즘의 카테고리를 나눠보고, 태생적으로 어떤 장단점(또는 이슈)이 있는지 간단하게 알아보도록 한다. 앞으로 연재할 합의 알고리즘과 관련된 글을 이해하기 위한 기초 지식이 될 글이다.
사전 지식
BFT(Byzantine Fault Tolerance) Problem 에 대해서 먼저 알고 있어야 한다. BFT 에 대해서는 위키 또는 인터넷에 쉽게 설명된 자료가 많이 있으니 다른 자료를 참고해서 이해하고 오자. 사실 BFT Problem 은 꼭 블록체인이 생기기 이전부터 암호학이나 컴퓨터 보안분야, 또는 게임이론 등 여러 분야에서 논의해오던 문제이다. 블록체인이 새로 탄생한 기술이 아니라 기존에 있던 기술들의 집합체라는 것도 이러한 이유에서이다.
가장 대표적인 블록체인인 Bitcoin 과 Ethereum 에서는 BFT Problem 을 해결하기 위한 합의 알고리즘으로 PoW(Proof of Work)를 채택하고 있다. PoW 에 대해서 white-paper 수준의 지식정도를 가지고 있으면 본 글을 이해하기 수월할 것 같다. 이 역시도 인터넷에 쉽게 설명한 많은 자료들이 있다.
View 1 : Lottery-based vs Voting-based algorithm
Lottery-based
- 동작 방식 : 네트워크의 노드 중 블록을 제안할 노드를 당첨식으로(어느 정도 운에 따라) 결정. 해당 노드가 처리한 블록(거래)을 나머지 네트워크에 전송.
- 장점 : 노드 수가 늘어남에 따라 네트워크 규모를 쉽게 늘릴 수 있다.
- 단점 : 승자가 2명 이상이 되어서, 여러 노드가 블록을 제안할 수 있다. 이 경우에 최종 합의 시간이 오래걸린다.
- 이 경우에 체인에 분기가 생기게 된다.
- 이렇게 분기가 생긴 것을 해결하기 위해 보통은 가장 긴체인을 선택하는 게 안전하다고 판단하는데, 어떤 것이 가장 긴 체인인지 안정적으로 선택하기 위해서는 그만큼 시간이 필요하다.
- 따라서 이 분기를 해결하기 위해서 평균 합의 시간이 오래걸린다.
- PoW를 사용하는 비트코인이나, 이더리움은 평균 6개의 블럭 정도가 더 붙은 시점에서 longest chain 을 선택할 수 있다고 판단한다. 하지만 이렇게 되면 일반 상용 서비스를 제공하기에는 너무 긴 합의 시간이다.
- 예 : PoW, PoS, PoET.
하지만 lottery based consensus 가 노드가 늘어난다고 합의시간이 늘어나지 않는 것은 아니다. 합의에 참여하는 노드가 늘어날수록 분기가 생길 가능성이 커지고 그에 따라서 longest chain 을 선택하는 시간이 오래 걸리기 때문이다. EOS 가 DPOS 를 이용해서 합의에 참여하는 노드를 줄인 점으로도 미루어 볼 수 있다.
Voting-based
- 동작방식 : 네트워크에 참여한 노드들 중 다수가 트랜잭션이나 블록에 대해서 validate 하면 바로 합의와 최종 승인이 이루어진다.
- 장점 : 최종 승인까지 low-latency.
- 단점 : 노드중 다수에게 메세지를 보내고, 또 장애가 허용되지 않을 만큼의 다수 노드의 validation 까지 해야하니까 네트워크에 노드가 많아질수록 합의자체가 느려진다.
- 예 : PBFT, RBFT, Paxos
이렇게 Lottery-based 와 Voting-based 로 구분했을 때 scalability 와 speed 는 블록체인 네트워크의 합의에 있어서 trade-off 관계인 속성임을 확인할 수 있다. 자연스럽게 Lottery-based 합의 알고리즘의 주요 해결 이슈는 속도가 되고, Voting-based 합의 알고리즘은 scalability 임을 알 수 있다. 앞으로 블록체인 네트워크 또는 특정 합의 알고리즘을 분석하거나 새로 만들려고 할 때, 합의 방식이 이런 태생적인 단점들을 어떻게 극복하려고 하는지에 관심을 가져보는 것도 좋을 것 같다.
Hyperledger Architecture WG(Working Group) 에서 내놓은 분석 자료를 봐도 그렇고 다른 분석 글들을 보아도 Lottery-based 는 public 과 permissioned 로 분류했는데 반해 Voiting-based 는 permissioned 영역에만 속해있다. 그렇다면 public 영역에서 voting-based algorithm 은 구현할 수가 없는 것인가? 이는 재미있는 연구 주제이다.
public 영역에서 voting-based 합의가 가능하게 하는 이슈는 단순 알고리즘이 아니라 거버넌스와 연결지어서 생각해서 풀 수도 있는 문제이다. 실제로 Zilliqa 에서는 PBFT 류의 합의 알고리즘을 거버넌스의 통제아래 사용해서 scalability 문제를 풀어가고 있다. 거래를 네트워크 전체가 합의하는 것이 아닌 네트워크에 분산된 각 shard 에서 PBFT 로 합의하고, 각 shard 의 대표 노드만 전체 네트워크의 데이터를 동기화하기 위해서 합의하는 PBFT 에 참여한다. 이런 방식으로 일정규모(약 800노드)의 네트워크에서 voting based 의 장점인 빠른 합의를 보장하고, 전체 네트워크에서의 데이터 정합성도 유지할 수 있다.
EOS의 합의 방식 또한 재미있다. EOS에서 선택하고 있는 DPOS(Delegated Proof of Stake)도 PoS 작업을 21 개의 BP 에 위임하고 이 위임 권한을 투표로 결정한다는 점에서 voting 방식이 결합된 것이냐 라고 생각할 수도 있다. 하지만 블록/거래의 합의 과정에 투표는 들어가지 않으므로 voting-based 합의는 아니라고 생각할 수도 있다.
View 2 : Broadcast-based vs Chain-based
Broadcast 는 트랜잭션이나 블록을 합의를 위해서 모든(혹은 다수) 노드에게 broadcasting 을 수행한다. 이에 반해 Chain-based 알고리즘은 받은 메세지를 한 노드에서 다른 한 노드로 chaining 방식으로 전파한다고 보면 된다. 앞서 언급한 PoW, PoS, PBFT, RBFT 등 많은 합의 알고리즘이 Broadcast 방식이다.
Broadcast 와 비교한 Chain-based 알고리즘의 장단점은 다음과 같다.
- 장점 : high throughput. 그리고 동시에 요청이 증가할 수록 Broadcast-based 보다 latency 가 적다.
- 단점 : 네트워크의 장애/공격에 대해서 덜 resilient 하다.(적절한 한국어 단어가 없는거 같은데, 설명하자면 회복이 힘들다. 잘 대처하지 못한다. 로 이해하면 되겠다.)
- 그래서 fail 이 발생하면 성능 손해를 많이 봐서 Broadcast 보다 안좋다.
- 예 : Chain-based 도 View 1 에서 언급한 Lottery-based 와 Voting-based 로 나눌 수 있다. 아직은 voting-based 위주로 연구가 되어왔다.
- voting-based : Alphi-chain, BChain, Hyperledger-Iroha 의 Sumeragi
- lottery-based : Hashgraph
위와 같은 성질에 따라서 Chain-based 합의 알고리즘은 fail 상황에 얼마나 잘 대처하는지가 주요 이슈이다.
지금까지는 voting 방식의 Chain-based 알고리즘 위주로 연구가 진행되었다. 하지만 이것도 Broadcast-based 합의 알고리즘이 활발히 연구된 것에 비해서는 연구 풀이 빈약하다. Lottery-based & Chain-based 성질의 합의 알고리즘은 Hashgraph 외에 별다른 것을 찾지 못했다. 예로 든 Hashgraph 는 사실 논문형식으로 자세히 나와있는 것도 없고 자신의 성질을 Lottery-based & Chain-based 로 밝히지도 않았다. 따라서 Lottery-based & Chain-based 성질의 합의 알고리즘을 개척하고 발전시켜 보는 것도 좋은 연구주제이다.
View 3 : relation with Governance
블록체인에서 어떤 합의 방식을 채택하느냐도 중요하다. 하지만 블록체인에서는 합의 알고리즘을 알고리즘으로서만 받아들이는 것은 무리가 있다. 왜냐하면 블록체인에서 합의는 네트워크의 거버넌스와 직, 간접적인 상관관계가 있기 때문이다. 따라서 합의 알고리즘 자체를 이해하고 개선해보는 것도 중요하지만, 합의 알고리즘을 거버넌스와 함께 바라보는 것도 중요하다. 알고리즘 적으로 해결하기 어려운 이슈를 거버넌스를 이용해서 개선할 수 있기 때문이다. 또 반대로 이미 운영되고 있는 네트워크의 거버넌스에 문제가 생겼을 때 합의 방식을 바꾸어서 개선해볼 수 도 있다. 거버넌스가 어떤 합의 방식에 deeply dedicated 되어있다면 해당 거버넌스와 합의에 아직 발견되지 못한 잠재위험이 나중에 발견되다면 네트워크 전체에 큰 손해를 입힐 수도 있는 점을 주의해야 한다.
Over the algorithm
첫 번째, 세 번째 관점에서 밝힌 것 처럼 블록체인에서 합의 알고리즘은 단순히 아카데믹한 알고리즘으로서만 기능하지 않는다. 블록체인 네트워크는 그 자체가 하나의 유기적인 사회의 속성을 띈다. 이 네트워크는 정해져 있던 운영 방식 뿐 아니라 네트워크에 참여한 사람들의 활동, 네트워크 외부 환경의 변화에 따라서 블록체인 네트워크의 미래는 예측하지 못한 방향으로 변화할 것이다. 따라서 합의 알고리즘을 단순히 computational logic 으로만 바라보면 블록체인 네트워크에 적용하고 운영할 때 큰 위험이 따를 것이다. 합의 알고리즘 또한 이러한(네트워크가 유기체라는) 맥락하에서 바라보아야 하고, 이 또한 재미있는 연구주제이다.
다가오는 미래에는 많은 사회학자, 심리학자들이 블록체인 네트워크 상에서 사회와 사람에 대한 연구를 수행할 것으로 기대된다. 블록체인에 기록된 기록 자체가 신뢰성 있는 데이터 이기 때문에 기존 연구방식에서는 발견할 수 없었던 새롭고 재미있는 연구를 수행할 수 있을 것이다. 사실 소프트웨어를 전공하기 전에 사회심리학을 공부하고 싶었는데, 블록체인을 연구하면서 나중에 여유가 된다면 이 주제로 박사과정을 해보고 싶다는 생각도 들었다. 소프트웨어를 하면서 소프트웨어를 기초로 이렇게 재미있게 해볼 수 있는게 많다는 것을 느낄때 참 행복하다.