1년간의 블록체인 개발 경험

지난 1년 동안 블록체인 개발 프로젝트에 참여하면서, 블록체인 부트캠프에서부터 관련 세미나와 컨퍼런스, 행사도 참 많이 다녔다. 이 분야는 말 그대로 정말 ‘젊다’. 아직 성숙하지 않은 기술인 만큼 혁신을 주도하려는 열정있는 팀들이 굉장히 많고, 최신 웹 기술에 기반한 좋은 프레임워크나 툴들이 계속 개발되고 있다.

기술을 이해하는 데에는 사내 스터디가 가장 큰 도움이 됐다. JSON-RPC 인터페이스, Serialization 테크닉, P2P, Node discovery에 사용되는 Kademlia 알고리즘, 분산 시스템에서의 Consensus에 대한 논의까지. State Management 부분을 맡게 되면서 Ethereum에서 State를 관리하는 Patricia Merkle Tree 데이터 구조만 줄곧 공부했던 기억도 있다. 이 외에도 당시에는 정리하지 못하고 급하게 흡수하기 바빴던 주제들이 많은데, 생각해 보면 이런 주제들은 비단 블록체인 뿐만 아니라 네트워크와 분산 처리가 필요한 시스템을 설계할 때에도 필요한 지식이다.

그러므로 블록체인을 공부해야 하는 이유는 명확하다. 블록체인은 사실 Computer Science에서 오랫동안 연구되던 기본 기술들의 조립이다. 그리고 이 기본 기술들에 대한 이해를 통해 새로운 시스템을 만드는 능력을 성장시킬 수 있다고 믿기 때문이다. 예전에 코드를 porting하는 코더가 아니라 아키텍처를 설계하는 디자이너가 되라는 한 교수님의 말씀에 깊은 인상을 받았었다. 학교를 나와 접한 이 기술이 그에 대한 답이라고 생각했다.

하지만 블록체인이 정말 현재의 Centralized Cloud Architecture를 모두 대체할 만큼 강력한 도구인지는 확신할 수 없다. 모든 것을 분산시키고 Voting/Mining을 통해 결정을 기다릴 수만은 없다. 성능과 효율성이 더 중요한 시스템이 있고 보통은 보안과 투명성을 조금 포기하면서 속도를 택하는 쪽이 당장 현실에서는 더 매력적이지 않은가, 하는 생각도 들었다. 이 기술 자체에 관해 마냥 낙관적일 수는 없다.

블록체인이 모든 것을 해결해 줄 것이라는 과한 희망에서는 벗어날 필요가 있다. 하지만 그럼으로써 이 기술을 필요로 하는 곳을 명확히 구분해 낼 수 있을 것이다. 당장 화폐(Cryptocurrency)라는 굉장히 매력적인 Use Case가 존재하고, 신뢰와 투명성이 먼저가 되어야 하는 적용 분야들도 조금씩 드러나고 있다. 또한 오리지널 Bitcoin이 목표로 했던 완전한 분산을 조금 포기하면서, 어느 정도 현실의 Application에 통합시킬 수 있는 새로운 블록체인 프로젝트도 계속 생겨나고 있다. 기반 기술들을 재조립하고, 그 과정에서 창의력을 발휘할 수 있는 부분은 넘쳐난다. 그래서 사실 지금 이 분야만큼 재미있는 것도 없다. (개인적인 생각)

그래서 블록체인이 뭔데?

블록체인을 공부한다고 말하면 결국에는 항상 따라오는 질문이다. 투자에 대한 관심이 높아지고, 아무래도 화폐나 재화의 가치에 맞물려 있는 기술인 만큼, 자신들의 블록체인 프로젝트를 소개하는 백서를 보면 굉장히 거창하고 어려워 보이도록 포장하는 경우가 많은 것 같다. 그런 것들로 블록체인을 처음 접하게 되면 더 모호해 보일 수도 있을 것도 같다.

블록체인의 기술적 정의는 크게 어렵지 않다. 기록이 쓰여진 블록을 연결한 linked list다. 그리고 블록체인의 원본을 모든 노드가 소유한 분산 원장이라는 것.

조금 더 추가하자면 기록의 변조를 막기 위해 hash와 같은 간단한 암호학 기법이 사용된다는 것. 여기서 조금 더 추가하자면 악의적인 노드의 변조를 막기 위해 합의 알고리즘을 적용하는데, 마이닝을 하거나 또는 PBFT 계열의..

..쉽다고 하기에는 조금 내용이 방대하긴 하다. Bitcoin 하나만 판다면 그래도 괜찮겠지만, 세상엔 벌써 수많은 블록체인 프로젝트가 수많은 시도들을 하기 시작했기 때문이다. 분산시스템을 줄곧 다루던 사람이 아니라면, 또는 Computer Science에 익숙한 사람이 아니라면 꼬리에 꼬리를 물고 이어지는 ‘정말 안전할까?’ 하는 질문에 대한 답을 쉽게 찾지는 못할 것 같다.

미국에서 교환학생 중일 때 회사의 요청으로 교수님과 현지 학생들 앞에서 개발중인 블록체인 엔진에 대한 소개를 할 일이 있었다. 다만 교수님과 학생들 모두 IoT를 연구하고 블록체인에는 별 관심이 없던 분들이라 대체 PT를 어떻게 시작해야 할지 굉장히 난감했었다.

당시에는 Cryptocurrency에 대한 소개를 먼저 하고, 블록체인의 구조를 설명한 다음 분산 원장으로써의 의미를 덧붙였다. 다들 대충은(?) 이해한 눈치라서 가슴을 쓸어내리고 넘어갔는데, 영어를 더 잘했으면 질문도 좀더 유도하면서 더 좋은 방식을 찾을 수 있었을 텐데 아쉬움이 남는다. (뜬금없지만)

어떻게 더 공부할 수 있을까?

회사를 그만두게 되면서 근 한달여간은 블록체인을 적극적으로 다시 공부하거나 하지는 못했다. 앞으로 개강하고 각종 수업들에 치이게 되면 공부할 기회는 더 적어질 텐데, 나름대로 애정을 갖고 공부하던 분야였던 만큼 아쉬움이 남는다. 분산 시스템 수업 하나를 수강할 예정이기는 하지만, 이 수업에서 공식적으로 블록체인이라는 주제를 다루지는 않는 만큼 따로 계획을 세워 개인적인 공부를 이어나가고 싶다.

당장의 목표는 저 ‘블록체인은 무엇인가’ 라는 질문에 자신있게 대답할 수 있는 능숙함을 기르는 것이다. Blockchain A-Z™라는 Udemy 강의를 시작했고, 기본적인 개념들을 되짚어가며 다른 사람들에게 설명할 수 있는 지식을 다지는 것이 먼저 필요할 것 같다.

회사에서 맡은 업무는 Dapp이나 Wallet 개발보다는 클라이언트 프로그램에 집중했었는데, 외주로 맡은 ICO 프로젝트도 잠깐 참여하면서 스마트 컨트랙트를 다루는 법에 대해서도 배울 기회가 있었다. Ethereum의 스마트 컨트랙트 외에도 Tendermint를 기반으로 한 lotion.js를 통해 쉽게 Dapp 개발을 할 수 있는 라이브러리가 제공되는 것을 알게 되었다. 가장 좋은 공부는 직접 만들어 보는 것이라는 사수님의 조언에 따라 블록체인을backend로 활용하는 웹 서비스를 만들어 보는 것도 한 학기 동안 개인적인 목표다. HCI 수업 과제로 활용할 수 있다면 꿩 먹고 알 먹고..