안녕하세요. 파이리입니다. 이더리움과 스마트 컨트랙이라는 주제로 글을 써보려고 합니다. 어디까지 쓰게 될지는 모르겠지만, 나중에 묶어서 책이 되었으면 하는 작은 소망이 있네요.
이더리움에 대해서는 땡글에 계신 분들에게 굳이 설명을 드리지 않아도 될 것 같습니다. 이더리움을 모르시는 분은 없겠죠. 하지만 저도 그랬던 것처럼 채굴하는 입장에서 굳이 스마트 컨트랙이 뭐고, 어떻게 개발해야 하는지에 대해서는 크게 관심이 없을 수밖에 없죠. 이 글은 채굴하시는 분들에게는 지적 호기심을 충족하는 수단이 될 것이고, 개발에 도전해보려고 하시는 분들에게는 먼저 출발한 사람이 놓고간 표지판 정도로 생각하시면 될 것 같습니다.
스마트 컨트랙은 쉽게 생각해서 계약을 코드로 옮겨둔 것입니다. 특정한 조건이 충족되면 계약을 이행하게 해둔 것이죠. 하지만 계약을 코드로 옮기려는 행위는 이전에도 존재해왔습니다. 인터넷 뱅킹이나 공인인증서 같은 것들이 바로 그것이죠. 다들 아시겠지만 블록체인을 이용한 스마트 컨트랙과 이전의 형태의 계약의 근본적인 차이는 분산 원장에 있습니다. 이전의 계약들은 단일 혹은 소수의 DB에 데이터가 저장되기 때문에 한번의 공격으로 무너질 수 있지만, 분산 원장을 해킹하기는 대단히 어렵죠. 증명이나 데이터의 정합성이 중요한 영역에서 블록체인이 떠오르는 이유도 바로 그것입니다.
이더리움 네트워크에 스마트 컨트랙을 제출하기 위해서는 solidity라는 언어로 만들어진 스마트 컨트랙을 만들어야 합니다. solidity는 javascript와 C언어를 섞어놓은 것처럼 보이는 묘한 형태인데, 컴파일한 결과를 바이트 코드로 옮겨서 사용하는 것을 보면 java와 비슷한 점도 있습니다. 이 solidity는 대중적인 언어가 아니기 때문에 처음 접하는 개발자들에게는 낯설게 느껴질 수 있습니다. syntax 자체를 익히는데도 약간의 시간이 필요하고, 이더리움 네트워크와 연결지어서 생각해야 하기 때문에 사전지식이 없는 사람에게는 이게 대체 어떻게 돌아가는지 이해하기 어려울 수 있습니다. 저도 물론 그랬고요.
개발자들을 가장 괴롭히는 것들 중에 하나는 개발 환경을 구축하는 것입니다. 더구나 뭐부터 구축해야 하는지 모르겠다면 상황은 더 심각해지죠. 아래는 이더리움 네트워크와 통신하고 solidity 언어 환경 구축을 하기 위해서 필요한 것들입니다.
web3 : 이더리움 자바스크립트 API입니다. 이더리움 네트워크와 통신하기 위해서 사용됩니다.
web3j : 이더리움 자바 API입니다.
solc : solidity 컴파일러입니다.
그리고
truffle : solidity의 빌드부터 테스트, 스마트 컨트랙 등록까지를 도와주는 framework입니다. nodejs 기반으로 사용하실 수 있습니다.
사용하실 수 있는 syntax의 폭이 넓지 않거나 이미 javascript에 익숙하신 분이라면 web3와 truffle을 사용하시는 것을 권장합니다. 빌드와 테스트까지 종합적으로 지원하는 framework가 별로 없기도 하고, javascript 하나로 개발 / 테스트 / 사용 환경을 구성할 수 있기 떄문이죠. 다만 이더리움 네트워크와 통신이 실패했을 때와 같은 예외처리가 많이 까다로운 부분이긴 합니다. 이더리움 네트워크 자체가 ICO가 몰린다거나 하면 낮은 gas로는 처리가 안되는 경우가 생기고, web3는 아직도 고쳐지지 않은 자잘한 버그들이 많으니까요.
다음에는 이어서 환경 구축에 대해서 보다 자세히 써볼까 합니다.
환경구축을 위한 주소
web3j(https://web3j.io/)
-------------------------------------
꼬리말
* 게시글 내용 삭제시 레벨 강등
* 질문은 각 주제별 게시판에.
비트코인 암호화화폐 커뮤니티 땡글~ 땡글~
-------------------------------------