하드 포크와 소프트 포크 설명
목차
들어가며
블록체인 네트워크에서는 누가 결정을 내리나요?
포크란 무엇인가요?
하드 포크 vs. 소프트 포크
하드 포크 vs. 소프트 포크 – 무엇이 더 좋은가요?
마치며
하드 포크와 소프트 포크 설명
아티클
하드 포크와 소프트 포크 설명

하드 포크와 소프트 포크 설명

중급
Published Nov 29, 2018Updated Aug 24, 2021
8m


목차


들어가며

여러분의 스마트폰에서 디지털 뱅킹 앱을 업데이트하라는 메시지가 표시된다면, 아마도 두 번 생각할 것도 없이 이를 진행할 것입니다. 또는 자동 업데이트를 통해 업데이트가 여러분도 모르게 진행될 수도 있습니다. 최신 소프트웨어 버전을 설치하지 않으면, 해당 서비스 접근을 거부당할 수 있기 때문에, 업데이트는 필수적인 과정입니다.

오픈 소스 암호화폐에서는 상황이 무척 다릅니다. 여러분은 비트코인을 사용하기 위해 이를 구성하고 있는 단 한 줄의 코드도 읽을 필요가 없지만, 코드를 읽을 수 있다는 선택권이 있다는 것은 중요한 사항입니다. 보시다시피 여기엔 어떠한 계층 구조도 없으며, 업데이트를 진행하고 원하는 대로 사항들을 변경하려는 은행도 없습니다. 따라서 블록체인 네트워크에서 새로운 기능을 구현하는 것은 쉽지 않은 일일 수 있습니다.
이번 아티클에서 우리는 중앙 권위가 없는 암호화폐 네트워크가 어떻게 업그레이드되는지 알아볼 것입니다. 여기에는 하드 포크소프트 포크라는 서로 다른 두 개의 메커니즘이 사용됩니다. 


블록체인 네트워크에서는 누가 결정을 내리나요?

포크가 어떻게 진행되는지 이해하기 위해서는 먼저, 당사자들이 참여하는 의사 결정 과정(거버넌스)을 이해하는 것이 중요합니다.
비트코인에는 크게 세 부류의 참여자인 개발자, 마이너, 풀 노드 사용자가 존재합니다. 이들은 네트워크에 실제로 기여하는 주체들입니다. 라이트 노드(예를 들면, 여러분의 휴대전화, 노트북 등의 지갑)는 널리 사용되지만, 네트워크의 실제 “참여자”는 아닙니다.


개발자

개발자는 코드 작성과 업데이트를 책임집니다. 일반적인 코인의 경우, 누구나 해당 과정에 기여할 수 있습니다. 코드는 공개적으로 이용할 수 있기 때문에, 코드를 변경하고 다른 개발자의 검토를 받을 수 있습니다.


마이너

마이너는 네트워크를 보호하는 주체입니다. 이들은 암호화폐의 코드를 실행하며, 새로운 블록을 블록체인에 추가하기 위해 자원을 사용합니다. 예를 들어, 비트코인 네트워크에서 마이너는 작업 증명을 통해 이를 수행합니다. 마이너는 블록 보상 형태로 자신의 수고에 대한 보상을 받습니다.


풀 노드 사용자

풀 노드는 암호화폐 네트워크의 핵심입니다. 이들은 블록과 트랜잭션을 검증, 전송, 수신하며, 블록체인 사본을 보관합니다.


여러분은 해당 카테고리가 종종 중첩된다는 것을 발견하실 것입니다. 예를 들어, 여러분은 개발자이자 동시에 풀 노드 사용자이거나 마이너이며 풀 노드 사용자일 수 있습니다. 또는 세 가지 모두이거나 그 무엇도 아닐 수 있습니다. 실제로 우리가 암호화폐 사용자라 여기는 많은 이들은 세 가지 어디에도 속하지 않습니다. 이들은 라이트 노드나 중앙화된 서비스를 이용하곤 합니다.

위의 설명을 살펴보면, 개발자와 마이너가 네트워크를 위한 결정을 내리는 이들이라고 강력히 주장할 수 있습니다. 개발자는 코드를 작성하며, 이들이 없다면 실행할 소프트웨어도 없을 뿐더러, 누구도 버그를 수정하거나 새 기능을 추가하지 않을 것입니다. 마이너는 네트워크를 보호하며, 건강한 마이닝 경쟁이 없다면, 체인은 장악되거나 서서히 작동을 멈출 수 있습니다.
그러나 개발자와 마이너가 나머지 네트워크를 좌지우지하려고 한다 해도, 쉽게 그렇게 할 수는 없습니다. 실제 힘은 다수의 풀 노드에게 존재하기 때문입니다. 이는 주로 네트워크가 사전에 동의한 기능으로, 사용자는 자신이 실행할 소프트웨어를 선택할 수 있습니다. 
개발자는 여러분의 집에 침입하여 총구를 들이대고 위협하며 비트코인 코어를 다운로드하도록 강요하지 않습니다. 마이너가 “내 뜻대로 하라”는 태도로 사용자에게 원치 않는 변화를 강요할 경우, 사용자는 그저 떠나버릴 수 있습니다. 
각 당사자들은 모두 막강한 힘을 가진 이들이며, 서비스 제공자들입니다. 사람들이 네트워크를 사용하지 않기로 결정하면, 코인은 가치를 잃게 될 것입니다. 가치가 떨어지게 되면 마이너가 직접적인 영향을 받게 됩니다(이들의 보상은 달러 대비 하락하게 됩니다). 사용자는 개발자들을 무시하게 됩니다.
이처럼 이는 소유권이 존재하는 소프트웨어와는 다릅니다. 여러분은 원하는 대로 사항을 변경할 수 있으며, 다른 사용자가 수정된 소프트웨어를 사용한다면 모두와 통신할 수 있습니다. 이러한 경우, 여러분은 소프트웨어를 포크하고, 그 과정에서 새로운 네트워크를 생성하게 됩니다.


포크란 무엇인가요?

소프트웨어 포크는 소프트웨어를 복사하고 수정하는 시점에 발생합니다. 기존 프로젝트는 계속 유지되지만, 이제 새로운 것으로 분리되어 다른 방향으로 가게 됩니다. 여러분이 가장 좋아하는 암호화폐 콘텐츠 웹사이트 팀이 일의 진행 방법에 대한 큰 의견 차이를 보였다고 해보겠습니다. 팀의 일부는 다른 도메인에 사이트를 복제할 수 있습니다. 그러나 그들은 앞으로 기존과는 다른 종류의 콘텐츠를 게시할 것입니다.

해당 프로젝트는 공통된 기반 위에 만들어졌으며, 지난 역사를 공유합니다. 하나의 길이 나중에 두 갈래로 갈라지는 것처럼, 이제 이들은 영원히 다른 길을 가게 됩니다.

한 가지 알아둘 것은 이러한 일이 비트코인이나 이더리움이 출시 되기 오래 전부터, 오픈 소스 프로젝트에서 많이 발생했다는 것입니다. 그러나 하드 포크와 소프트 포크는 블록체인 영역에만 한정되는 구분입니다. 이에 대해 조금 더 자세히 알아보도록 하겠습니다.



하드 포크 vs. 소프트 포크

하드 포크와 소프트 포크의 이름은 유사하며 궁극적으로는 동일한 기능을 수행하지만, 이 둘은 전혀 다른 것입니다. 이를 하나씩 살펴보도록 하겠습니다.


하드 포크란 무엇인가요?

하드 포크는 이후로는 호환이 불가능한 소프트웨어 업데이트입니다. 하드 포크는 일반적으로 기존 노드의 규칙과 상충되는 새로운 규칙을 추가할 때 진행됩니다. 새로운 노드는 새로운 버전을 실행하는 이들과만 통신할 수 있습니다. 그 결과 블록체인은 갈라지게 되며, 하나는 기존의 규칙을 따르고, 다른 하나는 새로운 규칙을 따르는 두 개의 서로 다른 네트워크를 만들어 내게 됩니다.


노드가 업데이트되면 파란색으로 변합니다. 이전의 노란 노드는 파란 노드를 거부하는 반면, 파란 노드는 서로 연결됩니다.


이제 두 개의 네트워크가 병렬적으로 운영됩니다. 이들은 계속해서 블록과 트랜잭션을 전파하지만, 더는 동일한 블록체인상에서 작동하지 않습니다. 모든 노드는 하드 포크 시점 이전까지는 완전히 동일한 블록체인을 보유하고 있었지만(따라서 기록은 남아 있음), 이후로는 서로 다른 블록과 트랜잭션을 보유하게 됩니다.



공통된 이전 기록이 있기 때문에, 포크 전에 코인을 보유하고 있었다면 두 개의 네트워크상에 코인을 갖게 됩니다. 여러분이 포크가 발생한 600,000 블록에서 5 BTC를 보유하고 있었다고 해보겠습니다. 여러분은 이전 체인의 600,001 블록에서 5 BTC를 사용했을 수 있지만, 이는 새로운 블록체인의 600,001 블록에서는 사용되지 않았습니다. 암호화폐가 변경되지 않았다면, 여러분의 개인 키는 포크된 네트워크상에 여전히 다섯 개의 코인을 갖고 있을 것입니다. 
2017년 하드 포크를 통해 비트코인이 기존의 체인 비트코인(BTC)과 새로운 체인 비트코인 캐시(BCH), 두 개의 별개의 체인으로 갈라진 적이 있습니다. 해당 포크는 확장성에 대한 최선의 접근 방법에 대한 상당한 논쟁 때문에 발생했습니다. 비트코인 캐시 옹호론자들은 블록 크기를 증가시키고자 했으며, 비트코인 옹호론자들은 이러한 변화에 반대했습니다.
블록 크기를 증가시키려면 규칙을 수정해야 했습니다. 이는 세그윗 소프트 포크(곧 자세히 살펴볼 예정) 이전의 것이었고, 노드는 1MB 보다 작은 블록만을 수용할 수 있었습니다. 이와 다르게 여러분이 2MB 블록을 생성했다면, 다른 노드는 이를 거부했을 것입니다.

자신의 소프트웨어를 수정하여 1MB를 초과하는 블록을 허용하도록 한 노드만이 해당 블록들을 수용할 수 있었습니다. 이는 당연히 이전 버전과 호환될 수 없게 만들었을 뿐더러, 동일하게 프로토콜을 수정한 노드만이 통신할 수 있었습니다.


소프트 포크란 무엇인가요?

소프트 포크는 이후에도 호환 가능한 업그레이드로, 업그레이드 된 노드가 업그레이드 되지 않은 노드와 여전히 통신할 수 있는 것입니다. 소프트 포크는 보통 새로운 규칙을 추가하며, 이는 이전 규칙과 충돌하지 않습니다.
일례로, 소프트 포크를 통해 블록 크기를 줄일 수 있습니다. 비트코인을 예시로 들어보겠습니다. 비트코인의 최대 블록 크기에는 제한이 있지만, 최소 블록 크기에는 제한이 없습니다. 여러분이 특정 크기 미만의 블록만을 수용하고자 한다면, 이보다 큰 블록들을 거부하면 됩니다.

그러나 그렇게 한다고 하여 네트워크로 접속이 자동으로 끊어지는 것은 아닙니다. 여러분은 계속해서 여러분의 규칙을 시행하지 않는 노드와 통신할 수 있습니다. 그러나 여러분은 그들이 여러분에게 전송하는 정보의 일부를 걸러내게 될 것입니다.

실제 소프트 포크의 좋은 예는 앞서 언급한 세그윗(Segregated Witness) 포크입니다. 이는 비트코인/비트코인 캐시가 갈라선 직후 진행되었습니다. 세그윗은 블록과 트랜잭션의 형태를 변경하는 업데이트로 기발하게 설계된 것이었습니다. 기존 노드는 계속해서 블록과 트랜잭션을 검증할 수 있으며(해당 방식은 규칙을 위반하지 않음), 단지 이를 이해하지 못할 뿐입니다. 일부 영역은 노드가 보다 새로운 소프트웨어로 전환해야 읽을 수 있는 것이며, 추가 데이터를 분석할 수 있게 합니다.



세그윗이 활성화된 지 2년이 지난 후에도, 모든 노드가 해당 업그레이드를 진행하지 않아습니다. 여기엔 장점이 존재하지만, 네트워크를 파괴하는 변경 사항은 없기 때문에 실제로 급할 것은 없습니다.


하드 포크 vs. 소프트 포크 – 무엇이 더 좋은가요?

기본적으로 두 가지 유형의 포크는 서로 다른 목적을 갖고 있습니다. 논쟁이 많은 하드 포크는 커뮤니티를 분리시킬 수 있지만, 계획된 하드 포크는 모두의 동의 하에 소프트웨어를 자유롭게 변경할 수 있게 합니다.

소프트 포크는 보다 부드러운 선택지입니다. 일반적으로 여러분의 새로운 변화가 기존의 규칙과 충돌해서는 안되기 때문에 할 수 있는 일은 보다 제한적입니다. 따라서 여러분의 업데이트가 호환 가능하게 설계될 경우, 네트워크가 분리되는 걱정은 하지 않아도 됩니다.


마치며

하드 포크와 소프트 포크는 블록체인 네트워크의 장기적인 성공에 있어 필수적인 것입니다. 이는 탈중앙화 시스템 내에서 중앙 권위 없이 변경과 업그레이드를 가능하게 합니다.

포크는 블록체인과 암호화폐가 새롭게 개발되는 기능들을 통합할 수 있게 합니다. 이러한 메커니즘이 없다면, 위계적인 통제를 받는 중앙화된 시스템이 필요할 것입니다. 그렇지 않다면, 평생토록 동일한 프로토콜 규칙을 고수해야 할 것입니다.