본문으로 건너뛰기

포크: 소프트포크와 하드포크

비트코인에는 대표나 이사회가 없습니다. 그런데도 소프트웨어는 계속 고쳐집니다. 포크는 참가자들이 따르는 규칙집이 갈라지는 일을 가리키는 말입니다. 소프트웨어를 고치는 일과 실제 사슬이 나뉘는 일을 함께 부르기도 하므로, 문맥에 따라 뜻을 구분해야 합니다.

누가 규칙을 바꾸는가

처음 설계가 완벽할 수는 없습니다. 오류가 나오기도 하고 더 나은 방법이 제안되기도 합니다. 하지만 비트코인에는 고치라고 명령할 대표가 없습니다. 누구나 개선안을 제안할 수 있지만, 어떤 소프트웨어를 사용할지는 각자가 정합니다.

개발자는 코드를 제안하고, 노드 운영자는 어떤 버전을 실행할지 고릅니다. 채굴자는 어떤 규칙으로 블록을 만들지 정하고, 이용자와 사업자도 어느 쪽을 사용할지 선택합니다. 개발자가 코드를 바꾸었다고 해서 모두가 자동으로 따라가는 것은 아닙니다.

개선안은 공개 문서로 제안하고 번호를 붙여 관리합니다. 누구나 읽고 의견을 내며, 오랫동안 검토하고 다듬은 뒤에야 코드가 됩니다. 코드를 합치는 권한을 가진 사람이 있더라도, 아무도 그 코드를 실행하지 않으면 규칙으로 자리 잡을 수 없습니다.

같은 규칙을 따라야 하는 이유

비트코인 참가자들이 서로 다른 규칙을 사용하면 유효하다고 인정하는 장부와 블록이 달라질 수 있습니다. 그래서 규칙을 바꾸는 일은 조심스럽습니다. 합의가 충분하지 않으면 사슬이 둘로 나뉠 수 있습니다.

마을 사람들이 같은 규칙집을 보고 살아간다고 생각해 보겠습니다. 누군가 고친 판을 내놓아도, 그 판을 사용할지는 각자가 정합니다. 대부분이 새 판으로 옮기면 새 판이 마을의 기준이 될 수 있지만, 소수만 옮기면 새 판이 힘을 얻지 못할 수도 있습니다.

양쪽이 팽팽하게 나뉘면 한쪽은 새 규칙을, 다른 쪽은 옛 규칙을 따르는 두 사슬이 남을 수 있습니다. 같은 이름을 쓰던 공동체가 둘로 나뉘는 경우입니다. 다만 포크라는 말이 언제나 영구적인 체인 분리를 뜻하는 것은 아닙니다. 잠시 사슬이 둘로 나뉘었다가 정리되는 경우도 포크라고 부릅니다.

소프트포크와 하드포크

규칙 변경은 옛 규칙과의 호환성에 따라 크게 소프트포크와 하드포크로 나눌 수 있습니다.

소프트포크

소프트포크는 규칙을 더 엄격하게 조이는 개정입니다. 새 규칙이 옛 규칙보다 좁아지기 때문에, 옛 소프트웨어도 새 규칙에 맞는 블록을 받아들일 수 있습니다.

건물의 출입문 폭을 2미터에서 1미터로 줄이는 상황에 비유할 수 있습니다. 1미터짜리 짐은 새 문과 옛 문을 모두 통과합니다. 옛 규정을 따르는 경비원도 문제 삼지 않습니다.

따라서 갱신하지 않은 노드도 사슬을 따라올 수 있습니다. 하지만 구형 노드는 새로 추가된 합의 조건을 스스로 검증하지 못할 수 있습니다. 새 규칙을 어긴 블록이 겉으로 옛 규칙에 맞아 보이면 이를 거부하지 못하고 따라갈 위험이 있습니다. 새 기능을 직접 사용할 수 있는지는 노드 자체의 합의 규칙뿐 아니라 거래에 서명하는 도구인 서명 장치와 각 구현의 지원 여부에 달린 별도 문제입니다.

소프트포크는 옛 규칙의 범위 안에서 더 좁은 기준을 적용하는 방식이지만, 호환성이 안전을 보장하는 것은 아닙니다. 규칙의 설계와 활성화 방식이 적절하지 않으면 문제가 생기거나 사슬이 나뉠 수 있습니다.

하드포크

하드포크는 예전에는 허용되지 않던 것을 허용하도록 규칙을 넓히는 개정입니다. 3미터짜리 짐이 통과하도록 문을 넓히면, 옛 규정을 따르는 경비원은 그 짐을 막습니다. 새 규칙을 따르는 노드가 보기에는 정상적인 블록도 옛 노드에는 잘못된 블록이 됩니다.

옛 소프트웨어와 새 소프트웨어가 서로 다른 판단을 내리므로, 모두가 갱신하지 않으면 사슬이 둘로 남을 수 있습니다. 그래서 하드포크는 소프트포크보다 더 높은 수준의 합의가 필요합니다.

개정이 실제로 적용되는 과정

개정안이 코드에 들어갔다고 즉시 적용되는 것은 아닙니다. 참가자들이 찬성 신호를 보내도록 하거나, 정해진 블록 높이에 도달할 때까지 기다리는 방식이 사용될 수 있습니다.

이 과정에서 찬성과 반대 의견이 드러납니다. 개정 내용뿐 아니라 언제, 어떤 방식으로 활성화할지도 논쟁의 대상이 되기도 합니다.

비트코인의 큰 개정들은 대체로 체인 분리를 피하려는 이유로 소프트포크 방식으로 이루어져 왔습니다. 하드포크가 필요한 제안도 있을 수 있지만, 모두의 합의를 얻기는 훨씬 어렵습니다.

포크가 곧 사고는 아니다

포크라는 말은 사고나 분열을 떠올리게 하지만, 많은 포크는 미리 논의하고 진행하는 계획된 개선입니다. 반대로 잠깐 발생한 사슬의 나뉨도 포크라고 부를 수 있으므로, 그 말이 어떤 상황을 가리키는지 먼저 살펴봐야 합니다.

사슬이 갈라지면 분리 전 잔액이 양쪽에 남아 비트코인이 공짜로 두 배가 된 것처럼 보일 수 있습니다. 그러나 새 사슬의 이름과 값어치는 별개의 문제입니다. 어떤 사슬이 계속 사용될지는 이용자와 사업자, 채굴자 등이 무엇을 선택하는지에 따라 달라집니다.

느리게 바뀌는 규칙

규칙을 바꾸기 어렵다는 점은 답답하게 보일 수 있습니다. 그러나 합의 없이 함부로 바꾸지 못하는 성질은 비트코인의 안전과 연결되어 있습니다. 총량을 늘리자는 제안도 같은 합의의 벽에 부딪힐 수 있습니다.

지난 십여 년 동안 여러 개선이 이루어졌고, 큰 다툼을 거친 변경도 있었습니다. 바뀌어 온 부분과 지키려는 부분이 나뉘며, 무엇을 바꿀 수 있고 무엇을 지킬 것인지가 논의의 핵심이 됩니다.

개정 소식을 접했을 때는 이름만 보기보다 두 가지를 살펴볼 수 있습니다. 옛 노드가 새 블록을 받아들이는지, 그리고 어떤 참가자들이 찬성하거나 반대하는지입니다. 이 두 가지를 보면 변경의 성격과 체인 분리 가능성을 이해하는 데 도움이 됩니다.

관련 개념은 비트코인 코어사용자 활성화 소프트포크에서 이어서 볼 수 있습니다.

링크 복사하기X에 공유페이스북에 공유쓰레드에 공유