사토시 나카모토가 창안한 비트코인에서 시작된 블록체인은 컴퓨터 과학 분야에 여러 기술들의 조화로 탄생한 기술입니다. 오늘은 블록체인을 지탱하는 기술 가운데 하나인 합의
알고리즘(일치된 의견을 도출하는 과정)를 간단히 다뤄보고자 합니다.
합의과정이 필요한 이유
먼저 블록체인 기술에 합의과정은 왜 필요할까요? 블록체인은 소위 우리가 장부(Ledger)라고 하는 일련의 정보를 네트워크에 참여한 모두가 동일하게 공유하는 것이 핵심입니다. 공개된 네트워크에 참여할 수 있다면 누구라도 자신의 컴퓨터(노드)를 통해서 다른 참여자와 똑같은 정보를 블록체인 형태로 갖게됩니다. 네트워크에 참여한 노드는 누구라도 블록체인에 포함할 새로운 정보를 제안할 수 있습니다. 네트워크에 소속된 누구라도 새로운 정보를 제안할 수 있다는 사실은 서로 다른 정보를 제안할 수 있다는 의미입니다. 이 때 우리는 누구의 정보를 블록체인에 포함시켜야 할 지 결정이 필요합니다. 바로 이 지점에서 의견을 하나로 모을 필요가 생깁니다.
우리가 합의를 이루는 방법
현실 사회에서 의견을 하나로 수렴하는 일은 언제나 피해갈 수 없습니다. 학창시절 반장 선거, 직장인의 점심메뉴, 심지어 프로듀스 101까지... 이렇게 합의가 필요한 때에 우리는 어떤 방식을 취할 수 있을까요? 일반적으로 다수결을 통해 다수의 의견을 취하거나 그렇지 않으면 권한을 가진 리더가 정한 의견을 선택합니다.
합의를 이루는 2가지 방법
- 투표를 통해서 다수의 의견을 채택
- 결정권자 혹은 리더의 의견을 채택
블록체인 세계의 합의
블록체인에서 노드가 제안하는 의견은 하나의 블록
이고 선택된 블록
이 블록체인에 포함되는 것이 블록체인을 지탱하는 합의 알고리즘입니다. 사실 블록체인 세계에서 합의를 이루는 방식도 우리가 일상에서 경험하는 2가지 방식과 크게 다르지 않습니다. 구체적으로 블록체인 안에서 어떻게 합의가 이뤄지는지 2가지 방식을 각각 살펴봅시다.
결정권자 혹은 리더의 의견 채택
먼저 특정한 노드의 블록을 채택하여 블록체인에 포함시키는 방식입니다. 블록체인 세상에 참여하는 노드간에는 현실 사회의 관계처럼 리더나 독재자 같은 존재는 없겠지요. 하지만 리더와 같은 역할을 할 노드를 선출하는 일은 가능합니다. 이 때 현실세계의 독재자처럼 악의적인 의견을 제안할 가능성으로부터 블록체인을 보호하기 위해 임의의 리더를 선출하는 일이 필요합니다. 블록체인에서는 이를 소위 작업증명(Proof of Work)
1이라는 방식을 통해서 구현하고 있습니다. 바로 비트코인이 PoW
라고 하는 작업증명 방식을 채택하고 있습니다.
투표를 통해서 다수의 의견을 채택
현실 세계의 민주주의와 같이 블록체인에서도 투표를 통해서 다수를 획득한 블록을 블록체인에 포함하는 방식을 사용할 수 있습니다. 투표에는 유권자가 있다면 블록체인 세상에서 유권자는 누가 될 수 있을까요? 공개된 네트워크에 누구나 참여할 수 있다는 점은 현실의 민주주의와 달리 명확하게 투표권을 부여할 기준이 없습니다. 대신 블록체인 세상에서는 지분증명(Proof of Stake)
이라는 방식을 통해서 유권자를 정의합니다. 이 방식은 민주주의 보다는 주식회사의 주주총회에 조금더 비슷하다고 할 수 있습니다. 블록체인을 운영하기 위한 인센티브로 제공되는 토큰
의 보유량을 기반으로 투표권을 갖는 방식이지요. 대표적으로 이더리움이 캐스퍼라는 프로토콜을 통해 현재 Pow
방식에서 PoS
로 전환하려고 하고 있습니다.
재미있는 부분이 하나 더 있습니다. 민주주의에도 고대 그리스 사회와 같은 직접 민주주의와 오늘날의 간접 민주주의가 있는 것처럼 유권자의 투표를 통해 위임된 노드 사이에서 다수결로 합의를 의루는 지분위임증명(Delegated Proof of Stake)
방식이란 것도 있습니다. DPoS
방식을 사용하는 블록체인으로 EOS
를 들 수 있습니다.
마치며
이상으로 블록체인을 지탱하는 기술 중 합의 알고리즘
을 현실 사회의 합의를 이루는 과정을 바탕으로 가볍게 다뤄 봤습니다. 오늘 이야기 하고 싶은 중요한 부분은 합의를 이루는 과정의 구현이 현실 사회의 역학과 무관하지 않다는 점입니다. 간략하게 정리하려다 보니 다소 과감하게 요약한 내용도 있습니다. 궁금한 내용이나 의견주실 내용이 있으면 부담없이 댓글로 알려주세요. 관심과 피드백은 언제나 환영입니다. 😀
1 작업증명의 구체적인 방법은 다른 글을 통해서 다뤄보도록 하겠습니다.