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