비트코인은 누구에 의해 유지되고 있을까?
시리즈 1편부터 정주행 하기 -> [쉽게 배우는 비트코인 작동원리]
우리는 지금까지 블록체인의 형태, 개인지갑의 의미, 거래의 작동방식등을 거시적인 측면에서 알아보았다.
여기서 기술적으로 더 깊은 수준의 이해를 하려면 각 네트워크 참여자들의 역할과 견제와 균형(checks and balances) 방식에 대한 공부가 선행되어야 한다.
이제껏 비트코인을 "여러 컴퓨터가 유지하는 공통장부" 정도로 알고 있었다면 다음 단계로 넘어가기 전, 누가 이 시스템을 떠받는지 알아볼 차례다.
이전 글 [5. 비트코인 전송 과정에서 일어나는 일들]에서는 네트워크에 전파된 거래를 확인하고 그 유효성을 검증하는 노드에 대해 간략하게 서술했었다. 이제 이 노드의 개념에 대해 자세히 알아보자.
비트코인 네트워크에서 노드(Node)란 비트코인 스프트웨어를 실행하는 컴퓨터를 지칭한다.
비트코인은 P2P(peer to peer), 즉 개인 대 개인 간 네트워킹 방식을 사용한다. 따라서 노드들은 네트워크에 존재하는 다른 노드들과 일대일로 소통을 하며, 모든 노드는 같은 수준의 권력을 가지고 있다.
다른 노드들보다 큰 목소리를 지니고 있거나 특별 권한이 있는 중앙 노드가 없기 때문에 비트코인은 탈중앙화 되었다고 말할 수 있다.
그러나 모든 노드가 동일한 역할을 수행하는 것은 아니다. 노드는 크게 네 가지 유형으로 나뉜다.
1. 풀 노드 (Full Node)
2. SPV 노드 (Simple Payment Verification Node)
3. 축소 노드 (Pruned Node)
4. 마이닝 노드 (Mining Node)
풀 노드 (Full Node)는 네트워크의 검증자라고 할 수 있다.
풀 노드는 2009년부터 현재 2025년까지 15년 치 블록체인의 모든 데이터라고 할 수 있는 장부를 직접 다운로드하며, 포함된 모든 거래의 유효성을 직접 검증한다.
운용 비용은 매우 저렴하다. 약 500GB 이상의 저장 공간과 인터넷에 연결된 소형 컴퓨터만 있으면 인류 역사상 가장 견고한 탈중앙 네트워크의 장부 검증자 역할을 할 수 있다.
아래는 필자의 실제 풀 노드 작동 화면이다. 최근에 초기화를 진행한 적이 있어 전체 장부를 다시 다운로드하는 중이다.
만약 지구상 다른 모든 컴퓨터가 망가지거나 블록체인 데이터를 삭제하더라도 이 작은 노드 한 개만 살아남는다면 비트코인 네트워크를 다시 부활시킬 수 있다.
또한 인터넷 사용이 어려운 척박한 환경에서도 노드들은 라디오 전파 신호를 통해 장부를 검증하고 업데이트시킬 수 있다. (예시)
SPV 노드 (Simple Payment Verification Node)는 풀 노드의 검증 기능 중 일부만 수행한다.
첫 블록부터 지금까지의 모든 거래내역을 저장하는 풀 노드와 달리, SPV 노드는 각 블록헤더 정보만을 받아와 간략하게 거래 유효성을 검증한다.
블록헤더란 블록체인에서 각 블록을 대표하는 요약 정보라고 할 수 있다. 따라서 전체 내용보다는 블록 자체의 유효성을 검증하기 위한 최소한의 정보만을 담고 있다.
SPV 노드를 이용하면 적은 용량으로 빠르게 본인의 거래가 블록체인에 포함되었는지 확인할 수 있지만, 해당 거래의 유효성과 세부 정보는 다른 풀 노드에게 의존해서 아웃소싱하게 된다.
보통 스마트폰용 비트코인 지갑들이 해당 노드 방식을 구현해 사용한다.
축소 노드 (Pruned Node)는 풀 노드의 모든 검증 기능을 수행하지만 공간 절약을 위해 과거 데이터를 삭제하는 노드이다.
과거 데이터를 얼마나 저장해 둘지는 사용자가 직접 설정할 수 있다. 간단한 예시를 통해 알아보자.
1. 초기 동기화 시작: 모든 블록을 풀 노드처럼 순차적으로 다운로드한다.
2. 설정한 한계(10GB)에 도달하면 가장 오래된 블록의 데이터부터 삭제하기 시작한다.
3. 신규 블록 검증과 과거 블록 삭제를 반복하며 가장 최신 10GB만을 저장한다.
이렇게 축소 노드를 운영하면 검증의 신뢰성은 포기하지 않으면서, 저장공간에서 오는 부담을 줄일 수 있다.
마이닝 노드 (Mining Node)는 풀 노드의 기능을 포함하면서 추가적으로 블록 생성 과정에 참여한다. 따라서 블록체인 검증과 창조의 과정에 모두 관여한다고 할 수 있다.
이런 마이닝 노드를 줄여서 채굴자(Miner)라고 부른다.
채굴의 상세한 개념과 채굴 경쟁 과정은 다음 글에서 다룰 예정입니다.
비트코인 초창기
오늘날 우리는 풀 노드와 마이닝 노드라는 개념을 분리해서 사용하지만 비트코인 초창기 시절에는 이를 구분하는 단어가 존재하지 않았다.
가장 처음 출시된 비트코인 노드 소프트웨어는 자동으로 두 가지 일을 동시에 수행했다.
1. 블록체인 검증(풀 노드)
받은 거래 내역과 장부의 유효성에 대한 검증 절차
2. 새로운 블록 생성(채굴)
블록, 즉 새 장부를 만들어 추가하고 비트코인으로 보상을 받는 절차
초창기 비트코인 네트워크에서의 노드는 = 풀 노드 + 마이닝 노드라고 할 수 있다.
당시에는 비트코인 사용자가 매우 적었고, 가격도 매우 적어 블록 생성에 있어 거의 경쟁이 없었다.
따라서 누구나 컴퓨터 한 대만 있으면 네트워크 검증과 채굴을 동시에 진행할 수 있었다.
오늘날의 비트코인
시간이 지나면서 비트코인 네트워크에 참여하는 사람들이 늘어나고 비트코인의 가치가 오르기 시작했다.
그 결과 커진 채굴 보상을 얻기 위해 많은 사람들이 경쟁적으로 블록을 생성하기 시작했다.
전문적인 장비인 ASIC과 GPU를 사용해서 채굴 경쟁에 참여하다 보니 일반 가정용 컴퓨터를 사용하는 유저들은 자연스럽게 경쟁에서 밀려나게 되었다.
따라서 계속해서 경쟁에 참여하는 사용자를 마이닝 노드 또는 채굴자라 부르고, 더 이상 경쟁에 참여하지 않고 주어진 블록과 거래내역을 검증하기만 하는 사용자를 풀 노드라고 부르게 되었다.
모든 풀 노드가 마이닝을 하는 것은 아니지만 모든 마이닝 노드는 풀 노드이다.
지금까지 알아본 여러 종류의 노드들은 현존하는 비트코인 네트워크의 규칙을 준수하는 존재들이다.
그러나 비트코인은 소프트웨어이기에 합의 가능한 규칙을 제안하고 유지 및 보수하는 주체가 필요하다. 이들을 비트코인 코어 개발자(Bitcoin Core Developer)들이라고 부른다.
비트코인 코어 개발자들은 비트코인 소프트웨어를 관리하며 버그 수정과 기능 개선, 네트워크의 발전 방향을 제시하는 역할을 수행한다.
여기서 놓치면 안 되는 점은, 코어 개발자들은 비트코인 네트워크에 대한 결정권을 지니지 않는다는 사실이다.
이들이 만약 새로운 기능을 추가하더라도, 풀 노드 운영자들이 해당 소프트웨어로 업데이트하지 않을 경우 그 기능은 적용되지 않는다.
따라서 개발자들은 어디까지나 제안하는 주체로서 존재하는 것이지, 결정적인 힘은 장부를 검증하는 참여자들에게 있다.
비트코인 네트워크는 이처럼 풀 노드, 마이닝 노드, 코어 개발자들을 통해 검증과 창조의 균형을 이룬다.
이 질서 안에서는 누구도 절대적인 권한을 갖지 않고 서로의 역할이 맞물리며 탈중앙 네트워크를 구성하는 권력의 평형 상태(equilibrium)를 관찰할 수 있다.
다음 글에서는 이 구조 속 마이닝 노드가 어떻게 블록을 생성하는지 채굴의 미학에 대해 다뤄볼 예정이다.
Antonopoulos, Andreas. Mastering Bitcoin, 2nd Edition. O’Reilly Media, Inc, 2017.