블록체인 Core 개발자 - 서울대학교 디사이퍼(Decipher) 김재윤
블록체인 코어 개발자는 블록체인 네트워크에서 온전한 참여자로서 기능할 수 있는 클라이언트 프로그램을 개발하는 사람이다. 코어 개발자는 Dapp 개발자와는 다르게 블록체인을 깊게 이해해야 하고 보안이나 네트워크에 대한 해박한 지식이 필요하다.
무엇보다 블록체인 클라이언트 프로그램은 대부분 커다란 오픈소스 프로그램이므로 오픈소스 프로젝트에 기여해본 경험이 있거나, 그렇지 않더라도 큰 프로그램을 다루는 것에 대해 익숙해야 한다. 그렇지 않으면 커다랗고 복잡한 프로그램에 압도되어버릴 것이다.
대부분의 블록체인 프로젝트는 어카운트 기반의 이더리움 블록체인 클라이언트를 포크(fork)해서 만들기 때문에 코어 개발자가 되려면 우선 이더리움과 오픈소스에 대해서 깊이 이해할 필요가 있다.
이더리움의 기본적인 메커니즘
이더리움은 비트코인과 달리 어카운트 기반의 블록체인(account-based blockchain)이다. 어카운트 기반의 블록체인은 각 어카운트들의 상태를 트리(tree) 자료구조 형태로 명시적으로 가지고 있어서 어떤 트랜잭션의 유효성을 어카운트의 상태를 기준으로 판단한다. 그리고 트랜잭션이 유효하다고 판단되어 블록에 담기면 그 트랜잭션에 의해 영향을 받는 어카운트들의 상태가 변하게 된다.
예를 들면, i번째 블록에서 Alice의 잔고가 10 ETH이고, Bob의 잔고가 5 ETH인 상태에서 Alice가 Bob에게 1 ETH를 전송하는 트랜잭션을 만들어서 네트워크에 전파시킨 경우를 생각해보자.
이때, 네트워크에 참여하여 블록을 만드는 노드는 그 트랜잭션의 전자서명을 확인하여 Alice가 만든 것임을 확인한 뒤 트랜잭션의 내용이 유효한지 확인한다. Alice의 잔고가 1 ETH 이상이므로 해당 트랜잭션의 내용은 유효한 것으로 판단되고, 노드는 Alice의 잔고를 9 ETH, Bob의 잔고를 6 ETH로 만들어서 i+1번째 블록에 담음으로써 상태의 변화를 이끌어낸다.
그렇게 여러 개의 트랜잭션을 블록에 담아서 어카운트들의 상태를 변화시켰다면, 블록을 다른 노드들에게 전파하여 상태를 공유한다. 다른 노드들은 자신이 갖고 있던 상태에서 트랜잭션들을 재실행(replay)해보고 받은 블록과 같은 상태가 나온다면 그것을 최신 블록으로 인정하고 다음 블록을 만들거나 동기화한다.
안정적인 동기화
하지만 블록체인 네트워크는 누구나 참여할 수 있기 때문에 코어 개발자들은 새로운 노드가 블록체인 네트워크에 빠르고 안정적으로 진입하여 최신 블록을 동기화할 수 있도록 부트스트랩 로직을 구현해야 한다.
블록체인의 크기가 작을 때는 부트스트랩이 쉽고 빠르게 이루어질 수 있지만, 크기가 커질수록 비용이 많이 들고, 노드가 네트워크에 빠르게 참여하지 못하거나 참여 노드 수가 줄어들면 네트워크의 안정성이 떨어지기 때문이다.
두 번째로 네트워크에 두 개 이상의 상태가 공존할 수 있는 위험이 있다. 여러 상태가 공존하게 되면 어떤 트랜잭션의 유효성과 실행 후의 상태기 무엇인지에 대해서 결정할 수가 없으므로 하나의 상태로 합의를 이룰 수 있도록 합의 알고리즘을 정의해야 한다. 그리고 여러 상태의 공존은 자연적으로 발생할 수 있지만 악의적인 공격으로도 발생할 수 있으므로 코어 개발자는 두 가지 모두 고려하여 클라이언트를 만들어야 한다.
안정적이고 성능이 높은 Dapp 지원
요즘에 블록체인 코어를 만드는 프로젝트들은 Dapp을 안정적으로 빠르게 지원하는 것에 초점을 맞추는 경우가 많다. 따라서 안정된 네트워크는 기본이고, 그 위에서 Dapp의 보안성을 높이거나 성능을 끌어올리는 방법에 대해서 연구를 해야 할 수도 있다.
아직까지 이러한 목표를 달성한 팀은 없는 것으로 알고 있지만, 많은 프로젝트들이 이러한 목표를 위해서 달려가고 있다. 그러한 목표는 개발을 잘한다고 달성되는 것이 아니라 프로그래밍 언어에 대한 깊은 지식과 가상 머신에 대한 지식이 있어야 한다.
하지만 두 분야 모두 굉장히 마이너한 연구 주제들이라서 연구하는 사람이 많지 않은 데다가 진입 장벽이 높다. 그래서 많은 프로젝트들이 관련 학문을 전공한 박사들을 고용하여 클라이언트를 개발하고 있다.
결론
나도 블록체인 코어 개발은 해보지 않았기 때문에 내가 경험한 것 위주로 글을 서술하였다.
그래서 여기에 언급되지 않은 많은 문제점이나 할 일이 많이 있을 것이다. 하지만 이 글에서 독자들에게 전달하고자 하는 것은 블록체인 코어 개발은 결코 쉽지 않은 일이고, 누가 시키는 일이나 구글링만 잘해서는 절대로 할 수 없다는 것이다.
거대한 프로그램 속에서 구현된 것은 무엇이고, 내가 해야 할 일은 무엇이고, 어떻게 해야 목표를 이룰 수 있을지 끊임없이 생각해야 하기 때문에 코어 개발은 진입 장벽이 매우 높다. 반대로 얘기하면 코어 개발자는 아주 희소하므로 진입 장벽을 뚫기만 하면 대체 불가능한 사람으로 성장할 수 있을 것이다.
지금 INBEX를 방문해보세요!
Congratulations @cqinbex! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :
You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word
STOP
To support your work, I also upvoted your post!
Vote for @Steemitboard as a witness to get one more award and increased upvotes!