
스마트폰에 설치된 어플리케이션을 최신버전으로 업데이트하지 않아 해당 어플리케이션 접근이 안되었던 경험이 있었다면 누구라도 업데이트가 얼마나 중요한 프로세스인지 잘 알고 있을 것입니다.하지만, 오픈소스 기반의 가상자산 환경에서는 이러한 프로세스에 차이가 있습니다. 무엇보다 수직적 구조하에서 업데이트를 강제화하지 않기 때문에 블록체인 네트워크에서 새로운 기능을 도입한다는 것은 결코 쉽지만은 않은 과정입니다.
중앙에서의 통제가 부재한 상태에서, 가상자산 네트워크의 업그레이드는 하드포크와 소프트포크로 분류되는 각기 다른 구조를 통해 진행됩니다. 모든 소프트웨어가 그렇듯 오류를 수정하고 성능을 향상시키기 위해 지속적인 업데이트를 필요로 하며, 가상자산 환경에서는 이러한 업데이트를 포크(forks)라고 부릅니다.
블록체인 네트워크에서의 의사결정
우선 포크가 어떻게 작동하는지 알기 위해선 네트워크의 의사결정과정에 참여하는지에 대한 이해가 필요합니다. 비트코인에서는 크게 개발자, 채굴자, 풀노드 이용자 등 3개의 참여집단으로 네트워크에 기여하는 집단을 구분할 수 있습니다. 광범위하게 사용되고 있는 라이트노드 경우 스마트폰 또는 PC 등에 설치된 접속권한을 부여하는 지갑 정도로, 진정한 참여집단으로 구분되긴 어렵습니다.
개발자집단
개발자들은 코드를 생성하고 업데이트합니다. 대표적인 많은 코인들의 경우 오픈소스로 공개되어 있어 누구나 참여, 기여하며 다른 개발자들의 리뷰를 받을 수 있습니다.
채굴자집단
채굴자들은 네트워크의 보안을 책임집니다. 가상자산의 코드를 돌리며 블록체인에 새로운 블록을 추가하기 위한 리소스를 제공합니다. 비트코인 네트워크 경우 작업증명(PoW)으로 이뤄지며 이러한 기여에 대한 대상로 보상을 받습니다.
풀노드 이용자
풀노드는 가상자산 네트워크의 중추적 역할을 담당합니다. 풀 노드는 네트워크의 모든 거래정보 저장하고 검증하며 블록체인 네트워크를 유지합니다.
이러한 구분에서 종종 역할들이 겹치는 경우도 있습니다. 예로, 개발자이자 풀노드 또는 채굴자이자 풀노드가 될 수 있습니다. 3곳의 집단에 모두 포함되거나 전혀 포함 안될 수도 있습니다. 우리가 일반적으로 접하는 가상자산 이용자들은 이러한 역할을 전혀 담당하지 않는 경우가 대부분으로, 라이트 노트 또는 중앙화 서비스 이용을 선택합니다.
위 사례에서 확인할 수 있듯이 개발자와 채굴자는 네트워크의 의사결정과정에 중요한 기능을 합니다. 개발자들의 코드 생성없이는 소트프웨어가 돌아갈 수 없고 버그를 개선하거나 새로운 기능을 추가하는 것이 불가능합니다. 네트워크의 보안을 책임지는 채굴자들의 건전한 채굴경쟁이 없다면 네트워크는 멈추거나 외부세력으로부터 장악될 수도 있습니다.
한편으로, 이러한 집단은 엄청난 권력 보유자가 아닌 서비스 제공자로써 이용자들에게 선택받지 못하게 된다면 그 코인은 가치를 잃게 될 수밖에 없습니다. 이렇듯 가상자산 세계에서 소프트웨어는 누구의 전매특허가 아니며 누구나 원한다며 고칠 수 있고 내가 수정한 소프트웨어를 누군가 사용한다면 이를 그들과 함께 나눌 수 있습니다. 이것이 바로 소프트웨어의 포크이며 그 과정에서 새로운 네트워크를 생성하게 됩니다. 오픈 소스라는 가상자산의 본질적인 특성과 더불어 많은 개인과 집단들이 서로 다른 목표를 가지고 가상자산 공간에 들어옴에 따라, 포크는 가상자산 생태계의 발전을 위해 필수 불가결하게 계속될 것입니다.
포크란?
소프트웨어 포크는 소프트웨어를 복제하고 수정하는 지점에서 발생합니다. 기존 프로젝트는 유지되는 동시에 새롭게 분리된 것은 새로운 방향으로 나아가야 됩니다. 이들은 공통된 기초아래 역사를 같이 하여왔지만 포크가 진행되는 지점에서부터 두갈래의 다른 길로 나아가게 됩니다.
이러한 프로젝트들은 오픈소스에 많이 발생하며, 비트코인이나 이더리움의 등장 훨씬 이전부터 많은 선례들이 있어 왔습니다. 하지만, 하드 포크(Hard Forks)와 소프트 포크(Soft Forks)로의 구분은 거의 유일하게 블록체인 세계에서만 발생됩니다. 궁극적으로 같은 목적을 두고 있지만 전혀 다른 두 포크는 모두 암호 화폐 프로토콜이 작동하는 방식을 근본적으로 변화시킵니다.
하드### 포크
하드 포크는 기존의 프로토콜을 바꾸거나 개선하거나, 더 나아가 새롭고 독자적인 프로토콜과 블록체인을 만드는데 사용할 수 있습니다.
하드 포크는 이전의 버전들과 호환되지 않는 소프트웨어의 업데이트로, 일반적으로 노드에 새로운 규칙을 추가했을 때 이전 버전들의 규칙과 충돌하게 될 때 발생합니다. 새로운 버전으로 업데이트 하지 않은 노드들은 트랜잭션을 처리할 수 없으며, 블록체인에 새로운 블록들을 기록할 수 없습니다. 그 결과 블록체인이 분리되어 두개의 다른 네트워크가 만들어지게 되며, 결국 더 이상 같지 않은 블록체인 위에서 서로 다른 두개의 네트워크가 병행하게 됩니다. 포크가 발생하기 전까지 모든 노드들은 동일한 블록체인을 가지고 있으나 포크 이후에는 다른 블록과 거래정보를 담게 됩니다. 이전 버전과 호환이 되기 때문에 별다른 업데이트 없이 사용이 가능한 소프트 포크와는 달리, 하드포크는 강제적으로 신버전으로 업그레이드가 필요하며 이에 따라 특정비율의 참여자들의 합의도 필요합니다. 대표적인 예로는, 비트코인/비트코인캐시, 이더리움/이더리움클래식의 하드 포크가 있습니다.

포크는 기존의 블록체인에 바탕을 두고 있기에, 새로운 포크에는 기존 블록체인의 모든 트랜잭션들이 복사됩니다. 만약 여러분이 코인 A라 불리는 100개의 가상자산을 가지고 있었다면, 그리고 하드 포크를 통해 코인 B라 불리는 가상자산이 만들어졌어졌다면, 여러분은 100개의 코인 B 또한 갖게 됩니다.
기존 비트코인이 비트코인(BTC)과 비트코인 캐시(BCH) 두개로 갈라진 2017년 하드 포크의 사례를 살펴보면, 그 시작은 블록 확장성에 대한 논쟁이었습니다. 비트코인캐시 지지자들은 블록사이즈를 키우기를 원했고 비트코인 지지자들은 이러한 변화를 반대하였습니다. 블록 사이즈의 증가는 프로토콜 규칙의 수정을 요구하게 됩니다. 업데이트된 노드만이 특정사이즈가 넘는 블록을 수락하게 되며 기존의 업데이트 되지 않은 노드들은 이 블록이 유효하지 않다고 보고 거부하게 됩니다.
여러 하드포크 사례에서 확인할 수 있듯이, 하드 포크는 계획을 따라 진행되거나 논쟁적 이슈를 불러일으키기도 합니다. 계획을 따라 진행되는 포크의 경우 참여자들은 기존의 버전 대신 새로운 규칙을 따르기 위해 자발적으로 소프트웨어를 업데이트하겠지만 업데이트를 하지 않은 이들의 경우 거의 사용하지 않는 기존의 체인에 남아 마이닝을 계속하게 될 수도 있습니다.
소프트### 포크
소프트 포크는 기존 블록체인의 일부 성능 개선을 위한 이전 버전과 호환이 가능한 업그레이드입니다. 이는 업데이트 되지 않은 노드들이 새로운 프로토콜의 규칙들을 위반하지 않는 선에서 트랜잭션을 처리할 수 있으며 새로운 블록을 블록체인에 추가할 수 있음을 의미합니다. 기존 페인을 포크하여 업그레이드한 후 다시 체인에 덧붙이는 방식으로, 원본을 복사하여 복사본을 업그레이드한 후 원본에 다시 붙이게 됩니다.

소프트 포크의 대표적인 사례로는 이오스(EOS), 에이다(ADA) 등의 프로젝트와 소프트웨어 업그레이드를 지칭하는 세그윗(SegWit) 등이 있습니다. Segregated Witness의 약자인 세그윗을 통해 비트코인 블록에서 디지털 서명 부분을 분리함으로써 블록당 저장 용량을 늘리는 소프트웨어 업그레이드를 진행하였습니다. 기존 비트코인은 거래내역을 기록하는 블록 크기가 1MB에 불과하여 초당 7건, 하루 최대 60만건의 거래내역밖에 처리하지 못하는 한계를 지니고 있던 상황에서 디지털 서명부분을 따로 분리시켜 더 많은 거래를 처리할 수 있도록 블록당 저장용량을 늘리는 업그레이드 하였습니다.

