이더리움 dApp 개발 프로젝트가 끝난 후...

이더리움 dApp 개발 프로젝트가 끝난 후...

2019, Aug 05    

이번 방학은 꽤 알차게 보내고 있는 것 같다. 졸업 필수 요건으로 들어야 하는 영어 수업을 치우는 데 성공했고, 지금은 자대 연구실에서 연구참여를 진행중이다. 여기에 이번 주 화요일 힘들었던 블록체인 프로젝트가 드디어 끝났다.


프로젝트는 정말 예상치 못한 일이었다. 정확히 말하자면, 이 프로젝트를 중심으로 진행된 블록체인 & 암호화폐 입문 과목을 수강한 것이 예상치 못한 일이었다. 나는 평소 블록체인에 대해 별로 관심이 없었고- 뭐 정확히는 굳이 이 분야에 대한 흥미와 공부할 필요성을 크게 느끼지 않았다- 또 전망을 그렇게 긍정적으로 평가하지도 않는다. 개인적인 의견으로, 몇몇 분야를 제외하고 블록체인이 제공하는 정보의 신뢰성과 무결성의 가치가 이를 유지하는 데 필요한 컴퓨팅 파워와 리소스의 가치보다 크지 않다고 본다. 예를 들어, CryptoKitties에서 내가 갖고 있는 가상 고양이의 정보와 그 유일성이 굳이 수많은 사람들의 컴퓨팅 파워와 저장 공간을 사용해서까지 보장되어야 할까? Steemit은 정보를 중앙화된 서버에 저장하는 다른 블로깅 서비스와 비교해 블록체인을 활용함으로써 얻은 획기적인 이득이 있는가? 나는 아니라고 본다.

한낱 전자고양이 한 마리를 위한 수많은 컴퓨터들의 희생...

하여튼, 나의 짧은 식견에 따르면 블록체인이 최소한 두 분야에서는 세상을 바꿀 수 있다. 첫째는 금융, 둘째는 정치다. 두 분야의 공통점은 간단하다- 신뢰를 필요로 한다는 것. 정치는 차치하고, 금융에 대해서만 잠시 살펴보겠다. 은행을 비롯한 금융 기관은 고객의 개인 정보와 자산 기록을 안전하게 보호할 의무를 가진다. 갑자기 내 통장에 들어있던 돈이 누군가의 해킹으로 모두 사라졌다고 생각해 보자. 금융 정보가 중앙화되어 있다면 해커는 몇 개 되지 않는 컴퓨터, 혹은 서버를 공격하는 것만으로 목적을 달성할 수 있다. 그러나 내 통장 잔고에 대한 정보가 블록체인 기술을 바탕으로 여기저기 저장되어 있다면 해커는 많은 컴퓨터들을 동시에 공격해야지만이 원하는 바를 이룰 수 있고, 네트워크가 광범위하게 분산되어 있다면 이는 사실상 불가능하다.


서론이 길어졌는데, 이런 생각을 가지고 있던 내가 과목을 수강한 후에도 크게 생각이 달라지지는 않았지만… 이 과목을 수강한 동기는 순전히 방학에 전공 학점을 딸 수 있다는 점이었다. 많은 공대에서 그렇듯이 포항공대에서는 전공 과목을 방학에 열지 않는다. 그런데 작년부터 시작한 POSTECH-연세대 개방‧공유캠퍼스 프로젝트의 일환인지, 두 학교 학생들이 함께 프로젝트를 진행하며 5주 동안 블록체인에 대해 집중적으로 배울 수 있는 과목이 개설되었다. 어차피 방학에도 학교에 남아 이것저것 해야 할 일들과 공부를 할 생각이었던 나는 겸사겸사 학점도 채울 겸 이 과목을 신청했었다. 사실 신청할 때까지만 해도 “지필고사가 없는 5주짜리 프로젝트 과목이라니! 그것도 방학에 학점을 준다고? 이런 과목은 꼭 들어야 해!” 라며 편하게 졸업을 향해 한 발짝 더 다가설 생각을 하고 있었다. 물론 프로젝트가 진행되며 이러한 기대는 산산히 부서졌다.

어머! 이 과목은! 들어야해! 아니야....

결론적으로 말하자면- 지금 이 글을 쓰고 있는 시점에 프로젝트는 성공적으로 종료된 상태다. 내가 속한 팀은 이더리움 dApp (decentralized App) 플랫폼으로 배달 서비스 애플리케이션을 만들었는데, 개발 과정에서 지금까지 경험해본 플젝과 비교할 수 없을 정도로 많은 버그와 에러 그리고 밤샘을 만날 수 있었다. 개발 중 발생한 대표적인 문제들을 정리하자면

  1. 이더리움 dApp 개발에 필요한 요소들과 개발 환경들이 아직 개발중이다. 이 때문에 호환성 문제가 계속해서 발생했고, 업데이트된 부분이 공식 도큐멘트나 스택오버플로우 답변과 판이하게 다른 경우가 많았다. 특히 웹 프론트엔드와 이더리움 네트워크 사이 연동을 책임지는 Metamask 프로그램이 최근에 업데이트되었는데, 이 부분에 대해 제대로 된 설명을 찾을 수 없어 한참 동안 헤맸다. (Metamask에 대한 자세한 설명은 공식 홈페이지 참조)

  2. 스마트 컨트랙트 (블록체인 네트워크에서 실행되는 프로그램이라고 생각하면 된다) 코드 크기에 40000바을트 정도의 제한이 있다. 쉽게 말해, dApp의 기능을 구현한 코드가 조금만 길어져도 네트워크에 올려지지 않거나 제대로 작동하지 않는다. 문제는 코드가 대략 700~800줄만 넘어가도 제한에 걸린다는 점이다. 이로 인해 에러가 발생했을 때, 문제의 원인을 몰랐던 탓에 컴파일러 버전을 바꾸고, 이더리움 네트워크를 초기화하는 등 3~4일을 밤새가며 온갖 삽질시도를 했지만 해결하지 못했는데, 마침내 그 원인을 밝혀내고 난 후에는 허탈함을 금치 못했다. 내가 작성한 코드가 다 합쳐서 1000줄 정도 되었는데, 세상에 이 정도 되는 코드를 실행하지 못하는 플랫폼이 존재한다는 사실이 조금 어이가 없었다. 결그 이 문제를 해결하기 위해 우리는 온갖 최적화를 진행하고 기능을 쳐내 400줄 정도로 코드 길이를 줄였다.

  3. 무엇보다 플랫폼이 개발된 지 얼마 되지 않아 애초에 정보가 부족했다. 특히 개발자들의 영원한 멘토, 구글과 스택오버플로우에도 문제를 속시원하게 해결해주는 답변이 거의 없었다. 누군가 “뭐뭐가 안돼요 어떡해요” 라고 올린 글에 “저도 안되는데” 라는 답변만 달려 있던 경우가 부지기수였고, 심지어 “껐다가 2시간 후에 켜니까 갑자기 됨 ㄷㄷ” 같은 쓸모없는 답변도 심심찮게 볼 수 있었다.

또한, 이더리움 자체의 한계도 기능 구현을 어렵게 만들었다. 예컨데, 이더리움 네트워크상에 보낸 요청이 너무 늦게 처리되는 탓에 실시간으로 무언가 변화해야 하는 기능(예를 들어 주문 알림 기능)을 구현하기 어려웠다. 또한, 스마트 컨트랙트 작성에 사용되는 Solidity 언어 역시 그 한계점이 명확해 복잡한 함수를 작성하기에는 애로사항이 있었다. 여담으로, 프로젝트가 끝난 지금 돌아보면 이더리움이 대신 EOS 플랫폼을 활용했으면 좀 더 원활한 개발을 할 수 있지 않았을까 싶다. EOS는 블록이 생성되는 속도가 이더리움과 비교해 굉장히 빨라 실시간으로 실행되어야 하는 기능을 구현하기 용이하고, 나를 포함한 대부분의 프로그래머들에게 익숙한 C/C++를 사용해 스마트 컨트랙트를 작성할 수 있어 복잡한 기능 역시 편하게 개발 가능하다.


여기까지 내 삽질시도에 대해 구구절절 변명을 늘어놨는데, 위에서도 언급했듯이 어떻게 어떻게 하다 보니 개발에 성공하긴 했다. 그리고 여기에 대한 내 소감은- dApp 개발은 개발자로써, 혹은 개발자를 꿈꾸는 컴퓨터과학/공학도로써 한번쯤 해 볼 만한 경험이라는 것이다. 물론 난 개발자를 절대절대 절대절대 하지 않을 것이다. 대학원제발

그 이유를 간단히 설명하자면, 첫째로, 현재 이더리움 dApp 개발은 블록체인 네트워크와 프론트엔드를 연결해주는 javascript Web3 라이브러리에 상당 부분 의존하고 있는 탓에 좋든 싫든 웹 프로그래밍과 비동기 프로그래밍에 대해 공부해야 한다. 또한, 스마트 컨트랙트 작성 시 블록체인의 특성을 고려한 최적화를 진행해야 하고, 이는 새로운 경험이 될 것이다. 쉽게 이야기하자면- 블록체인에 무엇인가를 기록하는 연산은 네트워크에 참여하는 모든 노드(컴퓨터)에 데이터를 저장해야 하기 때문에 그냥 아무 노드에서 정보를 읽어오면 되는 읽기 연산에 비해 굉장히 비싸고, 그렇기에 데이터를 읽어오는 것이 아무리 비효율적이여도 기록하는 것이 효율적이면 장땡이다.

마지막으로, 뭐가 되었든 블록체인 기술은 4차 산업 혁명을 이끌 중요한 요소임이 틀림없다. 위에서도 말했듯이 난 블록체인에 대해 다소 부정적인 입장이다. 그럼에도 블록체인은 미래의 경제 구조를 혁명적으로 바꿀 기술이고, 앞으로 많은 수요를 필요로 할 것이라 생각한다. 그렇기에, 그냥 까놓고 말하자면, 다른 분야에 종사하더라도 블록체인에 한 발 걸쳐 놓는 것이 절대 손해는 아닐 것이다.