전체장부
통장 앱을 열면 잔액이 보이지만, 그 숫자가 휴대전화 안에 기록되어 있는 것은 아닙니다. 은행 전산실의 장부에 기록된 내용을 휴대전화가 보여 주는 것입니다.
비트코인에서도 돈은 결국 기록입니다. 누가 얼마를 가지고 있고, 누가 누구에게 얼마를 보냈는지 적어 둔 장부가 없으면 디지털 돈이 성립하기 어렵습니다. 컴퓨터 파일은 얼마든지 복사할 수 있으므로, 같은 돈을 두 번 쓰지 않았는지 판정할 기록이 필요합니다.
한 곳에만 있는 장부의 약점
지금까지는 은행 같은 중앙 기관이 거래 장부를 관리해 왔습니다. 편리하고 익숙하지만, 장부를 한 곳이 독점하면 그곳에 권한과 위험이 함께 몰립니다.
중앙 기관이 실수하거나 운영을 멈추거나 기록을 지워도, 외부에서는 실제 장부를 확인하기 어려울 수 있습니다. 옛날 마을 계모임에서 계주 한 사람이 장부를 도맡아 적었다고 생각해 보겠습니다. 계주가 마음먹고 숫자를 고치면 다른 사람이 막기 어렵고, 장부를 들고 사라지면 기록 전체가 사라질 수도 있습니다.
기록을 한 사람이 쥐고 있다는 사실 자체가 약점이 되는 구조입니다.
모두가 나누어 갖는 장부
이제 마을 사람 모두가 똑같은 장부를 한 권씩 갖는 방식을 생각해 보겠습니다. 누군가 돈을 보내면 광장에서 큰 소리로 알리고, 들은 사람들은 각자 자기 장부에 같은 내용을 적습니다.
한 사람이 밤에 몰래 자기 장부를 고쳐도 다음 날 이웃들의 장부와 대조하면 차이가 드러납니다. 다만 비트코인은 사본의 수를 세어 다수결로 기준을 정하는 방식이 아닙니다. 각 노드는 독립적으로 규칙을 검증하고, 경쟁하는 유효한 체인이 있으면 누적 작업량이 가장 큰 체인을 따릅니다. 비트코인 개발자 문서
비트코인의 전체장부는 이 마을 장부를 전 세계 규모로 확장한 것과 같습니다. 비트코인의 모든 거래 기록을 처음부터 현재까지 담은 장부 사본이 전 세계 여러 컴퓨터에 나누어 보관됩니다. 원본을 보관하는 별도의 한 장소가 있는 것이 아닙니다.
블록으로 이어지는 장부
전체장부는 한 권의 책이고, 블록은 그 책의 페이지라고 볼 수 있습니다.
- 거래가 생기면 네트워크에 전파됩니다.
- 거래는 일정 시간 동안 다른 거래들과 함께 모입니다.
- 거래 묶음이 블록으로 봉인되어 책의 맨 뒤에 추가됩니다.
블록은 평균 10분마다 한 장씩 추가되지만 정확한 간격은 일정하지 않습니다. 첫 블록 이후의 각 블록은 바로 앞 블록의 요약값인 해시를 자신의 헤더에 기록합니다. 따라서 페이지마다 앞 장의 지문을 새기는 것처럼 블록들이 순서대로 연결됩니다.
중간의 한 블록을 고치면 그 블록의 해시가 달라지고, 이를 기록한 다음 블록과 연결이 맞지 않게 됩니다. 그 뒤의 블록들도 연달아 어긋납니다. 그 블록부터 뒤따르는 블록들의 작업증명을 다시 수행해야 하므로, 뒤에 블록이 많이 쌓인 기록일수록 고치기 어려워집니다.
비트코인의 전체장부는 2009년 제네시스 블록에서 시작했습니다. 그 뒤의 거래가 같은 장부에 계속 쌓여 왔으며, 페이지는 지금도 계속 추가되고 있습니다.
사본의 독립적인 검증
새 블록이 만들어지면 그 소식은 그물망처럼 연결된 컴퓨터들을 타고 퍼져 나갑니다. 각 컴퓨터는 받은 블록이 규칙에 맞는지 스스로 검사합니다.
블록의 연결이 올바른지, 작업증명 조건을 충족하는지, 포함된 거래가 유효한지 확인합니다. 유효하지 않은 블록은 거절하고, 경쟁하는 유효한 체인이 있으면 누적 작업량이 가장 큰 체인을 자신의 활성 체인으로 선택합니다. 한 대의 컴퓨터가 거짓 기록을 끼워 넣으려 해도 다른 컴퓨터들이 각자 규칙을 적용해 거절할 수 있는 구조입니다.
이렇게 과거는 블록마다 새겨진 앞 장의 지문과 누적 작업으로 보호되고, 현재는 사본의 수를 세는 방식이 아니라 각 노드의 규칙 검증과 유효한 체인 선택으로 관리됩니다. 중앙 관리자가 없어도 여러 참여자가 같은 기록을 기준으로 삼을 수 있는 이유입니다.
왜 ‘전체장부’라고 부르는가
전체장부라는 이름은 블록을 잇는 기술뿐 아니라, 참여자들이 거래 이력 전체를 함께 확인한다는 역할을 드러냅니다.
2008년 백서에서 설계한 것은 관리자 없이 운영되는 돈이었고, 블록이 이어진 장부는 그 돈의 기록을 지키기 위한 수단이었습니다. 돈의 기록을 지키는 장부가 먼저이고, 기술은 그 장부를 지키는 도구라는 순서입니다.
전체장부에는 비용도 따릅니다. 기록이 쌓일수록 책이 두꺼워지고, 장부 전체를 보관하려면 더 많은 저장 공간이 필요합니다. 전체 블록을 내려받아 검증한 뒤 오래된 블록 데이터를 삭제하는 프루닝 방식은 검증을 수행한 상태에서 저장 공간을 줄이는 방법입니다. 반면 헤더와 거래 포함 증명 등을 활용하는 경량 검증 방식은 전체 블록과 모든 거래 규칙을 직접 검증하는 방식과 검증 범위와 신뢰 조건이 다릅니다. 따라서 무엇을 얼마나 직접 보관하고 확인할지는 사용하는 사람이 선택할 문제입니다.
정리
비트코인의 전체장부는 모든 거래 기록을 담고, 여러 컴퓨터가 사본을 나누어 갖는 장부입니다. 새 거래와 블록은 네트워크에 전파된 뒤 각 컴퓨터에서 독립적으로 규칙 검증을 받습니다.
블록은 앞 블록의 해시를 기록하며 시간 순서대로 연결됩니다. 따라서 과거는 연결된 블록의 지문과 누적 작업으로 보호되고, 현재는 사본의 개수가 아니라 각 노드의 규칙 검증과 유효한 체인 사이의 누적 작업량 비교로 지켜집니다. 중앙 관리자가 없어도 같은 거래 기록을 기준으로 삼을 수 있는 구조입니다.