블록체인의 하드 포크와 소프트 포크

    이번달 중순에 드디어 이더리움이 콘트탄티노플 하드포크를 합니다. 원래 작년 10월에 할 것으로 여겨 졌으나, 하드포크를 단행하기 전에 테스트를 하는 서버(롭스텐)에서 10월 13일 하드포크 수행 중 결함이 발견되어 하드포크 계획을 연기하였고  7,080,000 번째 블록에서 하드포크를 재시도를 하자는 합의를 하였는데 해당 블록은 1월 중순 즈음이 될 것으로 예상하고 있습니다.


    하드포크는 최근에 들어서 참 이슈가 많습니다. 그 이유는 수많은 메이저 코인들이 이미 안정화 단계에 진입하였고 새롭게 주목을 받는 코인들이 없습니다. ICO는 번번히 실패하고 있으며 암호화폐 업계는 메이저 코인들이 좀 더 부상해서 캐리를 해주길 바랍니다.


    그러다보니 기존의 코인들을 위협하는 코인들이 나오지 않고 있고, 기존의 코인들이 이제 곧 성능을 비약적으로 끌어올리는 작업들을 단행할 예정이며 이를 위해서는 하드포크를 해야 되는 경우가 많기 때문입니다. 암호화폐를 투자하기 위해서는 기술들을 명확히 이해를 해야 할 것입니다. 그래서 이번 시간은 소프트포크와 하드포크에 대한 것들을 쉽고 자세하게 설명을 해보겠습니다.



    포크(Fork)란?


    암호화폐를 어느정도 하신 분들은 누구나 들어봤을 하드포크와 소프트포크.. 대다수의 분들이 암호화폐의 기술력에 대해서 분석은 못하더라도 하드포크가 있을 경우 가격이 오르거나 내리는 현상은 알고 있을 것입니다.


    많은 블로그나 강의를 보면 하드포크는 빡센 패치를 위해서 하는 것, 그리고 소프트포크는 약한 패치를 위해서 단행하는 걸로 설명하는 곳들이 많습니다. 결론적으로 말씀드리자면 반은 맞고 반은 틀리다는 것입니다. 하드포크도 종류가 있고, 여러가지 사유로 인해서 포크를 수행하게 되는데 우선 포크가 무엇인지 알아야 될 것입니다.


    하드 포크와 소프트 포크, 처음 저 용어를 들었을 때 떠올랐던 것은 다름 아닌 음식을 먹을 때 쓰는 "포크(Fork)" 였습니다. 결론적으로 말하자면 그 포크가 맞습니다. 하드포크나 소프트포크를 하면서 생기는 모양이 포크처럼 보인다는 것에서 유래가 된 용어입니다.


    source, https://cryptographics.info/cryptographics/blockchain/hard-soft-forks/



    source, https://busy.org/@bcox1/what-the-fork-hard-forks-soft-forks-and-their-fallout


    위 이미지들을 보는 것처럼 비트코인이 포크로 인해서 분리되는 모습을 보면 포크처럼 보입니다. 이런 모양으로 Fork라는 용어를 쓰게 되는 것입니다.



    소프트 포크(Soft Fork)


    사실, 블록체인이 소프트포크만 있었다고 한다면, 포크라는 용어를 쓰지 않았을 것입니다. 소프트포크는 위 그림들처럼 체인이 분리되지 않기 때문입니다. 



    우리가 휴대폰에서 어떤 게임을 했다고 가정을 해보겠습니다. 열심히 게임을 즐기고 있는데 갑자기 어느날 대규모 패치를 한다고 합니다. 우리는 설레이겠죠. 늘 상 지겹게 똑같은 놈들만 패고 있는데 대규모 패치를 한다고 하니까요. 


    패치날 게임을 실행하니 별도의 앱을 다시 깔지 않고 데이터를 전송받은 상태에서 즐겁게 게임을 하게 되었습니다. 이런 것이 소프트포크입니다. 즉 잘 짜여진 설계로 만들어진 구조안에 약간의 손을 봐주는 상황만으로 게임이 실행하게 되는 것이죠. 이를 블록체인의 상황으로 말을 바꾸면 "잘 짜여진 설계로 만들어진 블록체인 구조안에 약간의 손을 봐주는 상황만으로 블록체인이 더 좋게 실행이 되는 것" 정도로 소프트포크를 설명할 수 있을 것입니다.



    이번엔 장부와 소스 입장으로 다른 예를 들어보겠습니다.


    어떤 블록체인에 위와 같은 장부가 있다고 가정을 해보겠습니다. 송신자, 수신자, 메모, 증인이 있는 데이터 구조인데 어느날 증인의 공간이 불필요하다는 것을 깨닫게 됩니다. 그래서 개발자들끼리 토론을 해서 증인 항목을 남기지 말자라고 말을 합니다.



    그러나 별 쓰잘대기 없는걸로 하드포크를 하는 것인 너무 리스크가 클 것 같아서 개발자들끼리 장부는 그냥 냅두고 증인에 대한 별도의 처리만 하지 않는 것으로 합의를 합니다. 즉 기록은 하지만 쓰지는 말자는 것이고 다음 하드포크 일정 시기에 없애기로 합니다.


    증인이 필요 없을 경우, 장부의 기록은 건드리지 않고 수정만으로 성능을 개선시킬 수 있음


    위와 같은 상황에서는 증인처리만 하지 않았는데 성능이 개선이 될 겁니다. 내부 알고리즘은 증인을 별도로 처리하지 않아서 트랜잭션 처리 속도가 올라갈 수 있게 됩니다. 궁극적으로 말해서 소프트포크는 현재의 블록들이 그대로 있어도 큰 문제가 없을 경우를 뜻합니다. 다만 노드의 프로그램은 패치해야 될 것입니다.



    하드포크(Hard Fork)



    신규 기능 추가


    반대로 장부에 증인이라는 개념이 없었는데 필요해졌다고 가정을 해보겠습니다. 그러면 장부를 새로 써야 될 것입니다. 프로그램도 패치해야 되고 기존의 장부를 쓰지 못하는 상황이 올 경우 하드 포크를 하게 됩니다.



    즉, 있는걸 안쓰는건 소프트포크로 되지만 없는걸 만들어 내는 것은 소프트포크로 불가능한 것이 되는 것이죠. 그래서 이러한 경우 새로운 장부를 만들어야 될 것입니다.



    블록 크기의 확장


    블록 크기의 변화가 있을 경우 하드포크를 단행할 수 있습니다. 정확히는 블록 크기를 확장 시켜야 되는 경우겠지요. 블록크기가 불필요하게 커도, 사용할 수는 있지만 블록크기가 작으면 기록이 계속 밀리게 되면서 거래의 처리속도가 계속 늦어질 것입니다.



    이런 케이스를 예로 들면, 갑자기 어느날 인기가 수직 상승해서 기존의 블록 크기에 거래 기록을 담지 못할 수도 있습니다. 그래서 내부적으로는 블록의 크기를 늘려야 한다고 말하고 하드포크를 수행합니다. 이렇게 하드포크를 단행한 사례는 대표적으로 비트코인에서 하드포크된 비트코인 캐시가 있습니다.



    해커의 공격


    해킹 공격등을 당해서 긴급하게 기존의 장부 등의 내용이 바뀔수도 있습니다. 장부를 조작한 상황이 발생한다면 개발진들이 장부를 다시 클리어하는 하드포크를 단행할 수 있습니다. 이런 상황은 결코 좋은 모습은 아닐것입니다.



    그리고 장부가 아니더라도 현재의 노드가 해킹에 취약한 구조, 예를 들어 51% 공격에 취약한 구조라면 패치를 통해서 채굴을 하는 방식등을 조정할 수 있을 것입니다.



    새로운 코인을 만들 경우


    재단과 다른 방향으로 현재의 체인을 이용해서 새로운 코인을 만들고 싶을 경우도 하드포크를 수행할 수 있습니다. 여태까지 설명한 방식은 기존의 체인이 휴지조각이 되는 모습이지만, 지금 설명하는 건 주체가 재단이 아니라 제 3자라는 것입니다.



    이러한 케이스에는 대표적으로 이더리움 클래식이 있고, 비트코인 캐시도 동일하며, 최근에는 비트코인 캐시 전쟁등으로 탄생한 사토시 비전같은 코인이 있습니다.



    로드맵에 있는대로 진행하는 경우


    로드맵에 정해져 있는 일정대로 하드포크를 하는 단계도 있을 수 있습니다.


    사실 가장 이상적인 하드포크이며, 비트코인 캐시같은 케이스는 투기성은 강하지만 이러한 경우는 기술이 발전이 되는 것이기 때문에 블록체인 시장의 입장에서 긍정적인 방향이라고 볼 수 있습니다곧 있을 이더리움 하드포크는 이러한 케이스입니다.



    마치며...


    지금까지 소프트포크와 하드포크에 대해서 알아봤습니다사실 하드포크는 로드맵대로 진행이 되지 않을 경우 수행이 되는 것은 현재 설계가 뭔가 잘못되었다는 반증이기도 합니다하드포크나 소프트포크를 너무 자주 수정을 하는 것도 사실 좋은 것은 아닙니다이는 미리 설계를 확실히 하지 않고 주먹구구식으로 진행을 했다는 말과 같을 수 있습니다


    이제 16일에 콘스탄티노플이 포크를 단행할 것인데 과연 이더리움의 상승으로 다시 ICO 붐이 올지 모르겠습니다.






    댓글

    Designed by JB FACTORY