오늘부터 "Ethereum"을 사용한 계약 조건 확인이나 이행 등을 자동화하는 "스마트 콘트랙트"의 개발 방법을 소개하겠습니다.
"스마트 콘트랙트"는 블록 체인 기술을 활용한 애플리케이션 플랫폼 내에서 계약 조건 확인과 이행 등을 자동으로 실시할 수 있도록 연구 개발이 진행되어 주목받고 있는 기술입니다. 본 글에서는, 스마트 콘트랙트의 개념이나 구조를 정리하면서 DApps(Decentralized Applications:분산 노드에서 실행되는 애플리케이션) 스마트 콘트랙트의 코딩 방법, 기업용 애플리케이션 개발의 실천 방안에 대해서 이야기해 보겠습니다.
스마트 콘트랙트를 지금까지도 보고 들어본 적이 있는 사람은 적지 않을 것입니다. 그러나 스마트 콘트랙트를 설명하라고 하면 사람들마다 내용에 차이가 나지 않을까 생각합니다. 본 글에서는 스마트 콘트랙트를 다음과 같이 정의하겠습니다.
스마트 콘트랙트의 개념은 블록 체인보다 오래 되었고 미국의 컴퓨터 사이언스/암호 기술의 연구자인 Nick Szabo에 의해서 고안됐다고 합니다. 위키페디아에 있는 "Nick Szabo"씨의 페이지에서는 스마트 콘트랙트를 다음과 같이 설명하고 있습니다.
The phrase and concept of"smart contracts"was developed by Szabo with the goal of bringing what he calls the"highly evolved"practices of contract law and practice to the design of electronic commerce protocols between strangers on the Internet.
"스마트 콘트랙트"라는 호칭과 개념은 Szabo씨에 의해서 개발되었습니다. 이 개념은 인터넷상에서 다른 사람과의 전자 상거래 프로토콜 설계에 "고도로 진화한 "계약과 실행의 관습을 구현하는 것을 목적으로 하고 있습니다.
위를 간단한 표현으로 바꾸어 말하면 다음과 같이 말할 수 있습니다.
스마트 콘트랙트는 인터넷 전자 상거래에서 계약 체결과 서비스의 실행을 자동적으로 할 수 있도록 하는 고도로 진화된 시스템이다.
이 표현이 추상적이어서 확 와닿지 않을지도 모릅니다. Szabo씨가 2004년에 미국에서 열린 IEEE워크숍에서 발언한 아래의 설명이 스마트 콘트랙트를 보다 구체적으로 생각하는데 도움이 될지도 모릅니다.
A canonical real-life example, which we might consider to be the primitive ancestor of smart contracts, is the humble vending machine.
스마트 콘트랙트의 초기 원형이라고 생각되는 일반적인 예는 자동 판매기입니다.
The machine takes in coins, and via a simple mechanism, dispense change and product according to the displayed price.
자동 판매기는 동전이 들어가면 표시된 가격에 따라서 상품을 제공합니다.
The vending machine is a contract with bearer:anybody with coins can participate in an exchange with the vendor.
자동 판매기는 상품 운반자가 준비한 계약입니다. 동전을 가진 사람은 누구나 업체와의 거래에 참가할 수 있습니다.
또 Szabo씨는 다음과 같은 설명도 하고 있습니다.
The lockbox and other security mechanisms protect the stored coins and contents from attackers, sufficiently to allow profitable deployment of vending machines in a wide variety of areas.
자동 판매기의 특별 금고 및 보안 장치는 다양한 장소에 자동 판매기 설치가 가능하도록 투입된 동전 및 판매 상품을 공격자로부터 보호하고 있습니다.
이상의 설명을 정리하면 전술한 스마트 콘트랙트의 정의가 됩니다. 정의한 내용을 가상 화폐"Bitcoin"에 비춰보면 Bitcoin은 "코인을 송금 보관하는 것에 특화된 스마트 콘트랙트"라는 것이 됩니다. 그 Bitcoin의 기능을 확장, 발전시키고 모든 거래에 대응하도록 하는 것이 지금 연구가 진행되고 있는 스마트 콘트랙트 시스템입니다.
스마트 콘트랙트는 "Ethereum"과 "Hyperledger Fabric"등의 "블록 체인 기술"을 활용한 애플리케이션 플랫폼에서 실행되는 프로그램 및 애플리케이션을 가리키는 말로 알려져 있습니다. 스마트 콘트랙트의 중요한 요소인 블록 체인은 각각의 거래에 대해 보안을 높이는 "암호화"라는 트랜잭션 특성이나 분산 노드 간의 데이터 정합성을 유지하는 "합의 알고리즘"와 같은 분산 처리등의 특성을 가진 기술입니다. 블록 체인은 이러한 특성을 가진 견고한 미들웨어로서 존재하여 스마트 콘트랙트 자동 실행 기능을 활용하기 위한 시스템 기반으로서 정비되었습니다.
자동 실행을 실현하는 시스템 기반은 사람의 수리를 필요로 하지 않는 튼튼한 기반이 바람직하다고 생각되기 때문에 그것을 블록 체인이 떠받치고 있는 것입니다.
지금까지의 설명은 주로 퍼블릭형 DApps의 스마트 콘트랙트이었습니다. 이는 다양한 장소에서 누구나 이용할 수 있습니다. 한편 기업에 있어서의 스마트 콘트랙트는 조금 다릅니다. 퍼블릭형 DApps의 스마트 콘트랙트를 예로 들면 공공 도로에 설치되어 있는 자동 판매기로 누구나 이용할 수 있는 것이고 거기에 비해 기업들의 스마트 콘트랙트는 기업의 빌딩 안에 설치되어 있는 자동 판매기와 같은 것입니다.
건물 안의 자동 판매기를 이용하려는 고객은 주로 건물의 소유 회사 및 입주 기업의 직원입니다. 이러한 자동 판매기는 이익을 얻기 위해서가 아니라 직원의 복리 후생과 만족도 향상을 목적으로 설치되고 상품 가격을 시장 가격보다 할인하고 있는 경우가 많습니다. 이 경우 외부인이 자주 이 자동 판매기의 상품을 구입할 수 있게 되어서는 곤란합니다.
기업의 스마트 콘트랙트는 접근 제어를 세세하게 설정하고 특정한 사람 이외에 쓸 수 없게 하는 것이 중요합니다. 이것이 기업 내의 스마트 콘트랙트에 요구되는 중요 요소로 일반에 공개된다 퍼블릭형 DApps의 스마트 콘트랙트와의 차이입니다.
그러면 "여러 장소에서 누구나 이용할 수 있는"것을 원하지 않는 기업 시스템에 스마트 콘트랙트를 활용하는 목적이 무엇일까요?
기업들이 스마트 콘트랙트를 활용하는 최대의 목적으로 생각되는 것은 이전에는 협력할 수 없었던 자사 이외의 플레이어, 이른바"경쟁사"와 협력한 새로운 서비스 제공을 실현하기 위해서 입니다. 혹은 자사 이외의 플레이어와 협력함으로써 서비스 수준을 비약적으로 향상시키기 위해서 입니다.
예를 들면 다음과 같은 케이스를 들 수 있습니다.
시스템 회사는 만성적인 IT기술자 부족으로 클라이언트의 안건 의뢰에 답할 수 없는 상황이 장기간 계속되는 곳이 적지 않습니다. 또 다중 하청 구조나 오프 쇼어화의 진전 등으로 기술자 역할의 세분화가 진행되어 인력 육성과 인원 증강이 어려워지고 있다는 과제가 있습니다.
한편 유저 기업은 사내 SE(시스템 엔지니어)의 주요 역할이 시스템 회사의 관리가 된 만큼 사내 IT기술자 육성 시스템 개발의 내재화가 어려워지고 있다는 과제를 안고 있습니다.
이들의 과제는 산업 구조에 기인한 문제라서 단기간에 해결하기는 어렵죠. IT기술자의 부족으로 사용자 기업의 안건에 응하지 못하는 시스템 업계의 상황을 개선하기 위해 복수의 시스템 회사가 협력하고 공동 사업체(컨소시엄)를 형성. 유저 기업의 안건 정보를 컨소시엄에서 공유하고, 넘치는 수요에 부응하기 쉽도록 하는 것이 효과적인 방법의 한가지가 될지도 모릅니다. 이 안건 공유 시스템에 블록 체인과 스마트 콘트랙트를 활용할 가능성이 있습니다.
시스템 회사는 자사가 유저 기업의 안건에 응하지 못할 경우 안건 공유 시스템에 안건의 정보를 등록하고 다른 시스템 회사에 안건을 소개. 소개한 기업은 소개 받은 기업으로 부터 소개 수수료를 받습니다. 이 소개 수수료 수수에 관한 로직을 스마트 콘트랙트에 장착하여 소개 수수료에 관한 분배를 자동화할 수 있습니다. 소개를 받는 기업은 기술력이 있지만 영업할 여유가 없는 기업 등이 예상됩니다. 이들 두 기업은 Win-Win인 관계가 되겠지요.
한편, 유저 기업은 안건 공유 시스템으로 인해 하나의 회사에 안건을 의뢰하면 많은 시스템 업체로 부터 자동적으로 인수자를 찾을 수 있어 효율적으로 수주 업체를 찾게 됩니다.
이처럼 종래의 구조를 초월한 형태로 블록 체인 및 스마트 콘트랙트가 활용된다고 되지 않을까 생각하고 있습니다.
2018년 현재 스마트 콘트랙트의 코드를 쓸 수 있는 주요 플랫폼은 3가지가 있습니다.
어느 플랫폼도 일취월장하여 개발 도중으로 결정적으로 우열을 가리기가 어려운 상황입니다. 그래서"무엇부터 배우나"라는 선택으로 고민하는 사람도 많을 것입니다. 블록 체인의 본질적인 구성 요소는 어느 플랫폼에도 공통되므로 자신의 환경에서 흔히 접할수 있는 플랫폼을 선택하기를 권합니다. 본 글에서는 스마트 콘트랙트의 개발이 용이한 Ethereum을 소재로 다루겠습니다.
Ethereum
| 항목 | 설명 |
|---|---|
| 특징 | 체제에 얽매이지 않고 모든 이론을 기술할 수 있어 자유도가 높다 |
| 개발 언어 | Solidity(독자적 언어) |
| 개발 추진자 | Ethereum Fundation |
| 튜터리얼 | https://solidity.readthedocs.io/en/develop/index.html |
Hyperledger Fabric
| 항목 | 설명 |
|---|---|
| 특징 | 일반적인 개발 언어를 채용하고 SQL에 비슷한 프레임워크에서 데이터의 읽기를 하는 등 기존의 시스템 개발 기술과 친화성이 높다 |
| 개발 언어 | Java, Go |
| 개발 추진자 | Linux Fundation |
| 튜터리얼 | http://hyperledger-fabric.readthedocs.io/en/latest/index.html |
R3 Corda
| 항목 | 설명 |
|---|---|
| 특징 | 금융 당국의 모니터링 기능 등 금융 기관이 공통으로 사용하는 기능을 플랫폼이 표준 장비 |
| 개발 언어 | Java |
| 개발 추진자 | R3 Consortium |
| 튜터리얼 | https://docs.corda.net/index.html |
오늘은 스마트 콘트랙트이란 무엇인가 그 사용법을이 어떨지에 대해서 소개했습니다. 다음 글에서는 Ethereum을 바탕으로 스마트 콘트랙트 코드 작성 방법 및 일반 공개 방법을 소개하겠습니다.