합의의 시작, 작업증명(Proof-of-Work) 완벽 가이드
핵심 인사이트
이 글은 작업증명(PoW)의 기원과 발전 과정을 따라가며, 처음에는 자원 남용 방지를 위한 도구로 시작해 비트코인 분산 블록체인의 기반이 된 과정을 설명해요. PoW가 채굴자들이 연산 퍼즐을 풀어 거래를 안전하게 처리하고 이중 지불을 막는 원리와 함께, 확장성 및 에너지 소모 문제도 짚어요. 이런 한계를 극복하기 위해 블록체인 레이어와 새로운 합의 방식이 개발되어, 보안과 탈중앙성을 유지하면서 효율성을 높이고자 하는 흐름도 소개합니다.
오늘날 분산 네트워크에는 다양한 합의 메커니즘이 있지만, 그 시작은 작업증명(PoW)이었어요. 작업증명이 어떻게 탄생했고, 어떻게 작동하며, Web3의 핵심 알고리즘으로 여전히 사용되는 이유를 함께 알아볼게요.
처음에 작업증명은 분산 네트워크의 기반으로 고안된 것이 아니었어요. 암호화폐와도 관련이 없었고, 오히려 '공유 자원' 사용자를 각종 남용으로부터 보호하기 위한 방법으로 제안됐죠. 1993년에 처음 제시된 이 개념은, 특정 자원에 접근하려면 복잡한 계산을 수행하도록 요구해 남용을 막는 방식이었어요. 그리고 이 계산 결과는 누구나 쉽고 빠르게 검증할 수 있도록 설계됐죠.
실제 적용이 가능한 첫 번째 버전은 5년 뒤 Adam Back이 Hashcash 프로젝트를 내놓으면서 등장했어요. Hashcash의 주된 목적은 스팸 메일 방지였죠. 대량 메일 발송을 어렵게 만들기 위해, 메일을 보내기 전에 발신자가 복잡한 연산을 해야 했어요. 예를 들어, SHA(x) 해시값이 N개의 앞자리 0 비트를 갖도록 x 값을 찾고, 이 결과(작업증명)를 메일 헤더에 포함시키는 방식이었죠.
메일이 수신자에게 도달하려면, 발신자가 이 암호학적 문제를 풀었는지 검증해야 해요. 미리 준비된 라벨을 사용해 SHA-1을 한 번만 계산하면 아주 빠르게 확인할 수 있죠. 이 라벨은 발신자가 문제 풀이 전에 생성하며, 시스템 참가자 모두가 볼 수 있어요. 그래서 몇 통 정도는 부담 없이 보낼 수 있지만, 대량 발송을 하려면 상당한 컴퓨팅 파워가 필요해요.
익숙하게 느껴지지 않나요? 이 개념이 2008년 사토시 나카모토가 비트코인과 작업증명 블록체인을 만들 때 활용됐어요.
PoW 블록체인은 어떻게 작동할까?
나카모토(실제 인물인지, 개발자 그룹인지는 아직 미확인)의 핵심 목표는 제3자에 의존하지 않는 탈중앙 전자화폐 시스템을 만드는 것이었어요. 은행 같은 중개자 없이 직접 송금이 가능한 시스템이죠.
거래 정보는 시스템 참가자들에게 분산 저장되는 원장에 기록돼요. 거래를 묶어서 '블록' 단위로 만들고, 각 블록은 용량이 제한되어 있죠. 그리고 반드시 이전 블록 정보를 포함해야 해요. 이를 위해 거래, 이전 블록 해시, 타임스탬프 등 모든 데이터를 해시 함수로 변환해 고유한 코드(해시)로 만들어요. 비트코인의 경우 SHA-256 해시 함수가 사용돼요. 체인 관리는 '풀노드'가, 새 블록 생성은 '마이너 노드'가 담당해요.
여기서 중요한 점은, 같은 데이터 세트라면 항상 같은 해시가 나온다는 거예요. 아주 작은 변화만 있어도 완전히 다른 해시가 생성돼요.
앞서 말했듯, 마이너는 블록의 해시를 계산해 체인에 추가해야 해요. 이 자체는 시간이 오래 걸리지 않지만, 문제 풀이가 너무 빨리 끝나지 않도록 네트워크는 2,016블록마다 연산 난이도를 조정해요. 약 2주마다 한 번씩이죠. 이를 통해 블록 생성 시간을 약 10분으로 맞춰, 블록체인이 안정적으로 운영돼요.
실제로는 어떻게 진행될까요? 마이너는 블록을 입력받아 해시를 계산해요. 하지만 네트워크는 이 해시가 특정 값보다 낮아야 한다고 요구해요. 그런데 해시는 바꿀 수 없다고 했는데, 어떻게 가능한 걸까요? 여기서 '논스(nonce)'가 등장해요. 논스는 블록에 추가되어 마이너가 계산할 때마다 바꿀 수 있는 값이에요. 논스를 조정하면 해시가 달라지죠. 마이너는 해시값이 목표 난이도보다 크면 논스를 바꿔 다시 계산해요. 이 과정을 목표값 이하의 해시가 나올 때까지 반복하는데, 수백만 번 반복되기도 해요.
이 작업의 규모를 감 잡을 수 있도록 아래 숫자를 보세요:
115792089237316195423570985008687907853269984665640564039457584007913129639936
이 수는 SHA-256 해시의 가능한 조합 개수예요. 우주에 있는 별의 수보다 1,150억 배나 많아요.
거래의 흐름
실제 거래가 어떻게 처리되는지 살펴볼게요. 예를 들어, BTC를 누군가에게 보낸다고 해요. 개인 키로 거래를 생성하고 서명한 뒤 네트워크에 전송해요. 풀노드는 거래의 유효성을 확인하고, 문제가 없으면 네트워크에 전파해요. 다른 노드들도 검증을 거쳐 미확인 거래(멤풀) 대기열에 넣어요.
마이너는 멤풀에서 거래를 골라(보통 수수료가 높은 순서로) 블록에 담고, 연산을 시작해요. 누군가 문제를 풀면 풀노드가 결과를 검증하고, 맞으면 마이너는 보상을 받아요. 이때 블록은 '채굴'된 것으로 간주되어 블록체인에 추가되고, 정보가 모든 참가자에게 전파돼요. 이후 마이너들은 다음 블록 작업을 시작하죠. 또, 거래가 포함된 블록 뒤에 더 많은 블록이 쌓일수록 거래의 확정(컨펌) 수준이 높아져요.
쉽게 말하면, 거래가 정당하다고 인정받으려면 네트워크 내 대부분의 노드가 해당 블록이 올바르게 계산됐다고 동의해야 해요.
이 과정이 꼭 필요할까?
나카모토 이전에도 탈중앙 시스템을 만들려는 시도는 있었지만, 작업증명 합의 방식을 적용한 것은 처음이었어요. 작업증명 없이는 이중 지불(같은 자금을 시스템이 확인하기 전에 두 번 쓰는 문제)을 막을 수 없었죠. 마이너는 멤풀에서 거래를 받을 때마다 이중 지불 여부를 확인해요.
PoW 블록체인에서는 두 명의 마이너가 동시에 같은 블록을 채굴하는 경우도 있어요. 이는 악의적인 행위가 아닐 수도 있고, 거의 동시에 계산을 마쳐 한쪽이 이미 채굴된 사실을 제때 받지 못할 때 발생해요. 이 경우 잘못된 블록에서 시작하는 '분기'가 생겨요. 잘못된 '가지'를 없애기 위해 합의 메커니즘은 두 체인을 비교해 더 긴 쪽에 우선권을 줘요.
문제점과 한계
PoW의 가장 큰 문제는 확장성이에요. 예를 들어 비트코인 블록체인은 초당 약 7건의 거래만 처리할 수 있어요. 이 때문에 트래픽이 몰리면 멤풀이 가득 차고, 수수료가 낮은 거래는 몇 시간 또는 며칠씩 지연될 수 있어요. 블록 크기를 키우거나 채굴 속도를 높이면 해결될 것 같지만, 그렇게 단순하지 않아요.
블록 크기를 늘리면 더 많은 컴퓨팅 파워가 필요해지고, 결국 대형 마이너나 채굴 풀만 남아 탈중앙성이 약화돼요.
처리 속도를 줄이면 네트워크 노드들이 합의에 도달하기 전에 새 블록이 생성될 위험이 있어요. 이 경우 블록체인에 '분기'가 늘어나 이중 지불 가능성이 커져요.
이 모든 문제는 '블록체인 트릴레마'라는 개념에 담겨 있어요. 즉, 탈중앙 네트워크는 탈중앙성, 보안, 확장성 세 가지 중 두 가지만 동시에 달성할 수 있다는 거예요. PoW의 한계를 극복하기 위해 블록체인 레이어가 활용돼요. 이는 메인 시스템 위에서 작동하며 거래 처리 속도를 높여줘요.
또한, PoW와 함께 작동하는 새로운 합의 프로토콜도 개발되고 있어요. 예를 들어 Kaspa는 PoW를 네트워크 보안 메커니즘으로 사용하면서, 블록을 블록체인이 아닌 방향성 비순환 그래프(DAG) 구조로 묶어 마이너가 여러 블록을 병렬로 처리할 수 있게 해요.
더 현실적인 문제도 있어요. 블록체인의 컴퓨팅 파워가 커질수록 연산 난이도가 올라가고, 채굴에 필요한 에너지도 크게 늘어나요.