C 2018. 윤대근 All Rights Reserved 1 쇄발행 2018 년 11 월 30 일 지은이윤대근 펴낸이장성두 펴낸곳주식회사제이펍 출판신고 2009 년 11 월 10 일제 406-2009 - 000087 호 주소경기도파주시회동길 159 3 층 3-B 호 전화 070-8201 - 9010 / 팩스 02-6280 - 0405 홈페이지 www.jpub.kr / 원고투고 jeipub@gmail.com 독자문의 readers.jpub@gmail.com / 교재문의 jeipubmarketer@gmail.com 편집부이종무, 황혜나, 최병찬, 이슬, 이주원 / 소통 기획팀민지환 / 회계팀김유미 교정 교열장성두 / 본문디자인북아이 / 표지디자인미디어픽스 용지에스에이치페이퍼 / 인쇄한승인쇄 / 제본광우제책사 ISBN 979-11-88621-45-3 (93000) 값 24,000 원 이책은저작권법에따라보호를받는저작물이므로무단전재와무단복제를금지하며, 이책내용의전부또는일부를이용하려면반드시저작권자와제이펍의서면동의를받아야합니다. 잘못된책은구입하신서점에서바꾸어드립니다. 제이펍은독자여러분의아이디어와원고투고를기다리고있습니다. 책으로펴내고자하는아이디어나원고가있는분께서는 책의간단한개요와차례, 구성과저 ( 역 ) 자약력등을메일로보내주세요. jeipub@gmail.com
드리는말씀 이책에기재된내용을기반으로한운용결과에대해저자, 소프트웨어개발자및제공자, 제이펍출판사는일체의책임을지지않으므로양해바랍니다. 이책에기재한회사명및제품명은각회사의등록상표 ( 또는상표 ) 이며, 본문중에는 TM, C, R 등의기호를생략하고있습니다. 이책에서설명하고있는실제제품버전은독자의학습시점에따라책의버전과다를수있습니다. 책내용과관련된문의사항은지은이나출판사로연락해주시기바랍니다. - 지은이 : ykudfor1@gmail.com - 출판사 : readers.jpub@gmail.com
차례 머리말 추천사 베타리더후기 ix xiii xv CHAPTER 1 블록체인이해하기 _ 1 1.1 블록체인이란? 1 1.1.1 분산원장 1 1.1.2 스마트컨트랙트 3 1.1.3 합의 3 1.2 블록체인은어떻게사용될수있을까? 4 1.2.1 오늘날의비즈니스모델 4 1.2.2 블록체인비즈니스모델 5 1.3 하이퍼레저패브릭소개 6 1.3.1 하이퍼레저프로젝트소개 6 1.3.2 하이퍼레저패브릭개요 8 1.3.3 하이퍼레저패브릭특징 11 차례 v
CHAPTER 2 하이퍼레저패브릭핵심분석 _ 13 2.1 하이퍼레저패브릭구성요소 13 2.1.1 Peer 13 2.1.2 Chaincode 16 2.1.3 DApp 22 2.1.4 Endorsement Policy 26 2.1.5 Organization 27 2.1.6 Channel 30 2.1.7 Ledger 31 2.1.8 Gossip 38 2.1.9 Identity 41 2.1.10 MSP 49 2.1.11 Orderer 54 2.2 네트워크구축과정 61 2.2.1 오더링서비스노드구축 63 2.2.2 채널생성 64 2.2.3 채널참여 65 2.2.4 체인코드 / 분산애플리케이션설치 66 2.2.5 새로운조직 / 채널추가 67 2.2.6 새로운조직의남은구성요소설치 68 2.3 트랜잭션처리과정 69 2.3.1 트랜잭션생성 70 2.3.2 트랜잭션보증 70 2.3.3 시뮬레이션결괏값 / 디지털인증서확인 71 2.3.4 최신블록생성 72 2.3.5 최신블록검증 73 2.3.6 최신블록업데이트 74 2.4 합의 75 vi 차례
CHAPTER 3 하이퍼레저패브릭실습 _ 77 3.1 패브릭설치 77 3.1.1 사전준비 77 3.1.2 하이퍼레저패브릭설치 89 3.2 멀티호스트환경운영 (Cryptogen) 93 3.2.1 네트워크구축 95 3.2.2 MSP 생성 99 3.2.3 Genesis block 생성 107 3.2.4 채널설정 110 3.2.5 MSP 디렉터리배포 112 3.2.6 Peer 구동 113 3.2.7 Kafka-Zookeeper 구동 116 3.2.8 Orderer 구동 119 3.2.9 채널생성 121 3.2.10 Peer의채널참여 123 3.2.11 Anchor peer 업데이트 125 3.2.12 체인코드설치 126 3.2.13 체인코드인스턴스생성 129 3.2.14 분산원장의데이터읽기 131 3.2.15 분산원장에데이터기록 132 3.2.16 트러블슈팅 134 3.3 멀티호스트환경운영 (Fabric-CA) 136 3.3.1 네트워크구축 138 3.3.2 Fabric-CA 서버실행및 Fabric-CA 서버의운영자계정생성 143 3.3.3 Fabric-CA 서버운영자 MSP 생성 144 3.3.4 조직생성및조직운영자 MSP 생성 145 3.3.5 Peer 및 Orderer 노드 MSP 생성 160 3.3.6 Orderer 구동 169 차례 vii
3.3.7 Peer 구동 172 3.3.8 채널생성 174 3.3.9 Peer의채널참여 174 3.3.10 Anchor peer 업데이트 175 3.3.11 체인코드설치 176 3.3.12 체인코드인스턴스생성 177 3.3.13 분산원장의데이터읽기 177 3.3.14 분산원장에데이터기록 179 3.4 Intermedia CA 운영 180 3.4.1 네트워크구축 181 3.4.2 Root CA 구동 185 3.4.3 Intermediate CA 구동 189 CHAPTER 4 프라이빗데이터 _ 195 4.1 프라이빗데이터콜렉션이란? 196 4.2 프라이빗데이터콜렉션사용예시 197 4.3 프라이빗데이터트랜잭션처리과정 199 4.4 개인정보관리 201 APPENDIX A 버추얼박스를이용한멀티호스트 VM 네트워크구성 _ 203 APPENDIX B Atom 설치및사용법 _ 207 APPENDIX C crypto-config 디렉터리구조 _ 209 찾아보기 216 viii 차례
머리말 머리말 블록체인현황 4차산업혁명시대의흐름에따라기존의중앙화된세상은점점탈중앙화된세상으로바뀌고있습니다. 예를들어, 방송국의지위는유튜브등에서활동하는 1인방송크리에이터로인해점차하락하고있으며, 기존대기업의사업영역에영향을미칠만큼우버, 에어비엔비, 렌딩클럽등의공유경제기업이성장해가고있습니다. 이러한시대를맞이하기위한가장중요한기술세가지를꼽으라면단연 빅데이터, 인공지능, 블록체인 이라할수있습니다. 이세가지기술의공통점은무엇일까요? 기술의핵심이데이터에있다는것일겁니다. 빅데이터는대량의데이터를효율적으로처리하는기술이고, 인공지능은데이터를이용해기계를똑똑하게만들어주는기술이며, 마지막으로블록체인은여러의견이있겠지만필자는중앙기관이독점하고있는데이터의주권을각각의사용자에게돌려주는기술이라고생각합니다. 이러한세가지기술이모두조화를이루어야만진정한 4차산업의시대가완성될수있다고생각합니다. 그러나빅데이터와인공지능은오래전부터많은관심속에서기술의성숙도가무르익어가고있는반면, 블록체인기술은현재가지고있는잠재력과장점에비해기술의완성도가아직까지는매우부족한실정입니다. 대표적으로, 전세계적으로가장활발하게개발되고있는이더리움만보더라도실생활에사용하기까지아직수많은기술적장벽들이남아있습니다. 머리말 ix
시중에블록체인개론서와서비스, 코인관련서적에비해기술을다루는책은극히일부라는것을알고난뒤책을집필하기로마음먹었습니다. 하이퍼레저패브릭또한많은사람의관심을받고있는블록체인플랫폼임에도불구하고관련기술서적이현재국내에단한권도없습니다. 이책은시중에많이출간되어있는블록체인기술개론서보다는한걸음더들어가서하나의대표적인프라이빗블록체인플랫폼에대한구조를분석하고시스템을직접운영해볼수있는내용을담고있습니다. 이책이여러분이블록체인전문가가될수있는좋은발판이되었으면하고, 더나아가블록체인기술발전에조금이나마이바지할수있게되면좋겠습니다. 하이퍼레저패브릭이란? 2015년, 리눅스재단에서는기업용블록체인개발을위해하이퍼레저 (Hyperledger) 프로젝트를만들었는데, 오픈소스형태의프로젝트로서전세계기업과개발자들이자발적으로기술개발에참여하는프로젝트입니다. 하이퍼레저패브릭은가장왕성하게활동중인하이퍼레저프로젝트로서초기에 IBM이제공한 44,000여줄의코드를바탕으로현재전세계개발자들이개발에참여하고있습니다. 허가형프라이빗블록체인 (Permissioned and Private Blockchain) 형태로개발되었으며, 이더리움, 비트코인등누구나참여할수있는퍼블릭블록체인과는달리 MSP(Membership Service Provider) 라는인증관리시스템에등록된사용자만이하이퍼레저패브릭블록체인에참여할수있습니다. 하이퍼레저의패브릭참여자들은비즈니스목적에알맞은형태로블록체인플랫폼을구축하는것을목표로개발되고있습니다. 예를들어금융, 물류, 의료등다양한형태의비즈니스데이터를원장에기록할수있으며, 비즈니스시스템에적합한블록생성알고리즘이나트랜잭션보증정책을선택할수도있습니다. 또한, 채널 (Channel) 이라는개념을도입해서블록체인참여자들간의프라이버시를강화할수도있습니다. x 머리말
이책의구성 이책은블록체인에대한간략한설명 (1장 ), 하이퍼레저패브릭구조분석 (2장 ), 하이퍼레저패브릭시스템운영실습 (3장 ), 프라이빗트랜잭션 (4장 ) 으로구성되어있습니다. 1장 : 블록체인에대한전반적인설명과함께하이퍼레저프로젝트, 하이퍼레저패브릭을간략하게설명합니다. 2장 : 하이퍼레저패브릭을구성하는각각의구성요소의역할과기능에대하여설명합니다. 다음으로, 하이퍼레저패브릭에서블록체인네트워크구축과정을학습한후구축된블록체인네트워크에서트랜잭션이처리되는흐름에대해자세히알아볼것입니다. 3장 : 버추얼박스로 VM을생성한후실제네트워크환경과유사한멀티호스트네트워크환경에서하이퍼레저패브릭을직접운영해봅니다. 하이퍼레저패브릭에서제공하는도구인 cryptogen을이용하여시스템을구축하는방법, Fabric-CA 를이용하여시스템을구축하는방법, 마지막으로 Intermediate CA 를포함하여시스템을구축하는실습내용을담고있습니다. 4장 : 하이퍼레저패브릭 1.2 버전에서추가된프라이빗트랜잭션에대한설명과개인정보관리기능에대해알아봅니다. 이책의대상독자 다음과같은분들이이책을읽는다면블록체인기술을습득하는데많은도움이되리라생각합니다. 블록체인기술을배우고싶은 IT 전공자 블록체인플랫폼혹은서비스를개발중인개발자 자신의회사 / 기관등에블록체인기술적용을고려중인관리자 그밖에블록체인기술에관심있는 IT 업계종사자 머리말 xi
집필후기및감사인사 8월의무더운여름에책을쓰기시작했는데쌀쌀한늦가을이되어서야출판이눈앞에보이네요. 책을쓰기로마음먹고원고를탈고하기까지업무시간과약간의수면시간을제외한대부분의시간에는원고만썼습니다. 이렇게많은노력을기울였음에도막상원고를탈고하고나니아쉬움이많이남네요. 부족하지만이책이여러분을블록체인전문가로만들수있는좋은입문서적이되면좋겠습니다. 책의부족한부분에대한피드백은언제든지환영입니다. 제이메일 (myhoneydressing@gmail.com) 로연락해주시면빠른시간안에답변드리도록하겠습니다. 이책은많은사람의도움으로탄생했습니다. 먼저, 원고를멋진책으로편집해주신제이펍출판사관계자분들께감사드립니다. 편집과정에서너무나잘도와주셨기때문에한층더완성도있는책을출판할수있었습니다. 제가 ETRI 블록체인기술연구센터에소속되지않았다면이책은세상에나오지못했을겁니다. 연구에집중할수있도록항상신경써주시고부족한저를잘이끌어주시는 ETRI 블록체인기술연구센터연구원들께도감사드리고, 국가 IT 기술발전을위해항상노력하는 ETRI 구성원모두에게도감사드립니다. 그리고이렇게좋은직장에입사하여좋은동료들을만나기까지저에게물심양면무한한도움을주신부모님께감사드립니다. 마지막으로, 뭐든지할수있는용기를주고항상옆에서힘이되어주는, 서로의정신적인버팀목이자사랑하는저의피앙세최지혜에게도고맙다는말을전합니다. 나도지혜가뉴욕에서힘든전공의과정을무사히마치고더훌륭한의사가될수있도록곁에서힘이되어줄게! 윤대근 xii 머리말
_ IBM IBM 2014 2015 Proof of Concept IBM IBM 2015 12 2016 2 IBM 30 11 IBM 2015 44 000 Open Blockchain xiii
_ 1 3 2 Public Blockchain IBM IT xiv
베타리더후기 김용현 ( 마이크로소프트MVP) 이책은블록체인기술의한축인하이퍼레저패브릭에대한개념과실습환경을친절한설명과예제를통해제공해줍니다. 하이퍼레저패브릭을처음접하거나블록체인기술에대한개념을쉽고간략하게실습을통해익히고싶은분들에게추천합니다. 깔끔한내용과쉬운설명, 그리고간결하면서확실한환경설명, 모나지않고반드시실행되는실습이매우인상깊었습니다. 개인적으로조금만더깊은내용을다루거나, 아니면응용사례와같은내용이있으면더좋았을것같기도하지만, 초심자를대상으로하는도서인만큼기획의도에충분히부합하는책인것같습니다. 김종욱 ( 네이버 ) 하이퍼레저패브릭이무엇인지한눈에파악할수있도록잘정리된책입니다. 본도서를통해하이퍼레저의개념과용도그리고기존의블록체인방식과무엇이다른지를손쉽게파악할수있었습니다. 다만, 책의수준은어디까지나처음입문하는사람의눈높이에맞추었기때문에하이퍼레저패브릭을어느정도아시는분이라면보다심화된내용을다루는책을찾아읽기를권합니다. 베타리더후기 xv
박재유 (LG전자) 올해의 IT 기술트렌드는단연블록체인일것입니다. 많은사람들이비트코인과블록체인을혼동하지만, 사실블록체인이라는기술자체는금융뿐만아니라다른산업에도광범위하게응용이가능한, 암호학기술의결정체라할수있습니다. 하이퍼레저패브릭은리눅스재단의주도로만들어진오픈소스블록체인프로젝트입니다. 퍼블릭혹은프라이빗형태로도운영이가능하므로, 관련사업을새롭게추진하려는분들에게이책이좋은지침서가될것같습니다. 손승하 ( 삼성전자 ) 리눅스파운데이션에의해시작된하이퍼레저패브릭은엔터프라이즈콘텍스트에서사용하도록설계된오픈소스프로젝트입니다. 이도서는많은개발자가참여하여빠르게성장하고있는프로젝트를쉽게명확하게설명하고있습니다. 전체구조와동작원리를쉽고빠르게접하길원하시는분들에게이책을추천합니다. 장성만 (incowiz) 프라이빗블록체인플랫폼이자다양한산업군에범용적으로도입가능한하이퍼레저패브릭에대한개념을빠르게잡기에좋은책입니다. IBM이깃허브를통해제공하는예제보다실제운영구축에필요한사항이세세하게정리되어있는것이이책의큰장점입니다. 실제구축환경이자세히설명되어있어서아주만족스러웠습니다. 제이펍은책에대한애정과기술에대한열정이뜨거운베타리더들로하여금출간되는모든서적에사전검증을시행하고있습니다. xvi 베타리더후기
CHAPTER 1C 1.1 블록체인이란? 하이퍼레저패브릭 (Hyperledger Fabric) 을소개하기에앞서블록체인 (Blockchain) 을처음접하시는분들을위해블록체인의주요개념을간단하게짚고넘어가겠습니다. 1장에서는블록체인의동작방식과핵심구성요소인분산원장, 스마트컨트랙트, 합의를간략하게설명한후하이퍼레저패브릭이기존의블록체인과비교해서어떠한특징이있는지설명하겠습니다. 1.1.1 분산원장 분산원장 (Distributed Ledger) 은블록체인을구성하는가장중요한요소중하나입니다. 또한, 블록체인을탈중앙화된시스템으로만들어주는핵심기술입니다. 거래기록등의데이터를저장하는데이터베이스 ( 원장 ) 를중앙화된서버가소유하는것이아니라, 블록체인에참여하는모든사람이동일한원장을소유하고관리하는기술을일컫습니다. 기존의시스템에서는동일한비즈니스네트워크에서도사용자마다서로다른원장에비즈니스정보를기록하는것과는달리블록체인에서는블록체인사용자모두동일한원장에비즈니스정보를기록하고관리합니다. 예를들어, A 은행을이용하는고객들은각각의서로다른고유한 1.1 블록체인이란? 1
계좌 ( 원장 ) 를가지고금융정보를기록하는반면, 다들잘알고있는비트코인, 이더리움등과같은블록체인플랫폼의경우모든사용자에대한거래기록이하나의비트코인원장에모두기록됩니다. 하지만이러한구조에서는프라이버시문제가발생할수있는데, 하이퍼레저패브릭에서는채널 (Channel) 개념을도입하여프라이버시문제를해결하였습니다. 채널에대해서는 2장에서좀더자세히다루겠습니다. 원장 A 원장 B 원장 C 원장 D 공통원장 오늘날비즈니스네트워크 VS 블록체인비즈니스네트워크 블록체인분산원장의또다른특징은모든정보가해시화되어 Append-only 방식으로만원장에저장되기때문에한번원장에기록된정보들은절대수정할수없습니다. 이와같은불가변성 (immutability) 의특성은블록체인데이터에대한악의적인변조를불가능하게만들어데이터에대한신뢰도를향상시켜주는역할을하게됩니다. 최신블록 수정불가 Block 4 Block 3 Block 2 Block 1 Block 0 데이터기록 블록체인의 Append-only 저장방식 2 CHAPTER 1 블록체인이해하기
1.1.2 스마트컨트랙트 트랜잭션전송트랜잭션수집스마트컨트랙트 원장에기록 New Block Block 4 Block 3 Block 2 Block 1 Block 0 스마트컨트랙트를통한분산원장접근예시 블록체인참여자는스마트컨트랙트 (Samat Contract, 스마트계약 ) 를통해서분산원장에정보를기록하거나불러올수있습니다. 또한, 스마트컨트랙트를이용하여단순히거래정보를읽고쓰는것뿐만아니라프로그래밍을통해거래자동화등의다양한응용프로그램을만들수도있습니다. 예를들어, 그룹공동명의의계좌를만들어서특정인원수이상의서명이있어야잔액을출금할수있는기능이나, 특정날짜에월급이입력되는기능등을스마트컨트랙트를통해구현할수있습니다. 또한, 스마트컨트랙트를좀더편리하게사용하기위해개발되는프로그램을분산애플리케이션 (Decentralized Application, DApp) 이라고하는데, 하이퍼레저패브릭에서스마트컨트랙트와분산애플리케이션이어떻게동작하는지는 2장에서좀더자세히살펴보겠습니다. 1.1.3 합의 앞절에서블록체인에참여하는모든사람이동일한원장을소유해야한다고설명했습니다. 이러한조건을만족시키기위해비트코인과이더리움에서는블록체인에참여한모든노드중암호화된퍼즐의답을가장먼저찾아내는노드의블록을최신 1.1 블록체인이란? 3
블록으로업데이트하는 PoW(Proof of Work) 방식이있습니다. EOS는블록체인참여자가 21명의블록생성자를선출하여선출된블록생성자가최신블록을생성하는 DPoS(Delegated Proof of Stake) 방식을사용합니다. 이밖에도대부분의블록체인플랫폼에서 PoW와 PoS 알고리즘을기반으로 PBFT(Practical Byzantine Fault Tolerance), Casper PoS, RPCA(Ripple Protocol Consensus Algorithm) 등으로변형하여합의과정에사용하고있습니다. 하이퍼레저패브릭에서는조금다른관점으로합의알고리즘을정의합니다. 하이퍼레저패브릭의합의과정은 PoW, PoS 혹은 BFT와같이합의과정을특정알고리즘에국한시키지않고아래세가지일련의과정을통틀어합의과정이라고말합니다. 보증정책확인 트랜잭션을정해진순서에맞춰정렬 정렬된트랜잭션의유효성검증후최신블록업데이트 각항목별로자세한합의과정은 2 장에서설명할예정입니다. 1.2 블록체인은어떻게사용될수있을까? 1.2.1 오늘날의비즈니스모델 오늘날대부분의비즈니스모델에서는신뢰성있는거래를위해중개자 (intermediary) 가꼭필요하게됩니다. 현금보유량을증명하려면은행이현금보유량에대한증명을대신해줘야하고, 토지소유에대한증명은부동산이토지에대한증명을대신해줘야만합니다. 이렇게중개자를거치는거래방식은높은수수료를유발함과동시에자산증명에많은시간이소요됩니다. 또한, 각각의중개자마다데이터를기록하는시스템이모두다르기때문에중개자들간에자산을증명하는작업에도상당한시간과비용이소모되고있습니다. 4 CHAPTER 1 블록체인이해하기
3. 토지거래 3. 토지거래 2. 공증응답 2. 공증응답 1. 공증요청 한국토지공사 1. 공증요청 유럽토지공사 서로다른시스템으로인해공증에어려움이있음 오늘날의비즈니스네트워크 예를들어, 한국부동산에등록된토지재산을유럽에서증명해야한다고가정해봅시다. 먼저, 한국에서부동산 ( 복덕방 ) 등을통해토지에대한공증을받은후유럽으로관련서류를보내야겠죠. 한국으로부터토지증명서류를수신한유럽에서는다른언어혹은다른양식으로기록된해당공증에대한확인에큰비용과시간이소요될것입니다. 1.2.2 블록체인비즈니스모델 블록체인비즈니스모델에서는현금보유량이나토지증명등을중개자없이거래참여자들간에수행할수있습니다. 거래당사자들간에직접수행하는합의알고리즘 (Consensus Algorithm) 을통해중개자없이도신뢰성있는거래가가능하게되는것입니다. 또한, 원장에한번기록된정보는수정이나변경이불가능하여거래기록에대한신뢰성이제공됩니다. 이러한블록체인비즈니스모델에서는중개자가없기때문에중개수수료를절감함과동시에하나의일관된시스템에서거래가발생하므로자산증명에대한시간과비용을절약할수있습니다. 1.2 블록체인은어떻게사용될수있을까? 5
토지증명 한국인 미국인 토지증명 토지증명 공동토지원장 영국인 토지증명 블록체인비즈니스네트워크 중국인 1.3 하이퍼레저패브릭소개 1.3.1 하이퍼레저프로젝트소개 2015년, 리눅스재단에서는기업용블록체인개발을위해하이퍼레저 (Hyperledger) 프로젝트를만들었는데, 오픈소스형태의프로젝트로서전세계기업과개발자들이자발적으로기술개발에참여하는프로젝트입니다. IBM, Cisco, American Express, 화웨이등외국계기업뿐만아니라카카오페이, 삼성SDS 등국내기업도함께참여하고있습니다 (2018년기준 ). 하이퍼레저프로젝트는다음과같이크게두가지로나뉩니다. 하이퍼레저프레임워크 (Hyperledger Frameworks) 하이퍼레저툴 (Hyperledger Tools) 6 CHAPTER 1 블록체인이해하기
하이퍼레저프레임워크하이퍼레저프레임워크 (Hyperledger Frameworks) 는분산원장, 스마트컨트랙트, 합의알고리즘등블록체인에대한원천적인기술을개발하는프로젝트입니다. 대표적으로, 다음과같은하이퍼레저프레임워크가있습니다. 하이퍼레저프레임워크프로젝트소개 프로젝트이름 특징 가장활발하게활동중인하이퍼레저프로젝트로서 IBM 이제공한 44,000 줄의코드를기반으로개발되고있습니다. MSP(Membership Service Provider) 기반의접근제어기능을제공하고, 트랜잭션을블록에정렬한후합의하는방법으로는현재 Solo, Kafka, SBFT( 향후개발예정 ) 가있습니다. Intel 의 Intel Distributed Ledger 를바탕으로개발되었으며, SGX(Secure Guard Extension) 를이용해구현한 PoET(Proof of Elapsed Time) 합의알고리즘을사용합니다. 하이퍼레저패브릭과마찬가지로동시처리를지원하고높은확장성과모듈화를추구하는블록체인플랫폼입니다. 블록해시에대한투표로합의를수행하는 YAC(Yet Another Consensus) 합의알고리즘기반의블록체인플랫폼입니다. ios, Android, JavaScript 등모바일과웹을위한인프라를제공하기때문에블록체인참여자들에게간편한거래환경을제공할수있는것이특징입니다. Sovrin foundation 주도로개발되고있는블록체인플랫폼입니다. 인터넷환경에서중개자없이신원을제공하는것을목표로개발중인블록체인플랫폼입니다. BFT(Byzantine Fault Tolerance) 합의알고리즘기반의블록체인플랫폼입니다. 대표적인특징으로는이더리움의 DApp 을 Hyperledger Burrow 플랫폼에서작동시킬수있습니다. 하이퍼레저툴하이퍼레저툴 (Hyperledger tools) 은블록체인시스템의성능측정, 운영, 개발을쉽게할수있도록도와주는툴을개발하는프로젝트입니다. 대표적으로, 다음과같은하이퍼레저툴이있습니다. 1.3 하이퍼레저패브릭소개 7
하이퍼레저툴프로젝트소개 프로젝트이름 특징 블록체인성능측정을위한프로젝트입니다. 현재 Hyperledger Fabric v1.0+, Sawtooth 1.0+ Iroha 플랫폼성능측정을지원하며, TPS(Transaction Per Second), Latency, Resource utilisation 등에대한성능을측정할수있습니다. 블록체인의운영및관리를위한프로젝트로서블록체인플랫폼의생명주기를관리하고대시보드를통한시스템상태확인과자원확장등의기능을제공합니다. 현재는 Hyperledger Fabric v1.0 까지지원합니다. 하이퍼레저패브릭의애플리케이션개발과기존비즈니스시스템, 블록체인시스템의통합에편의성을제공해주는프로젝트입니다. Github 를통해소스코드를다운로드하여사용할수있고, IBM 의 Bluemix 클라우드에서서비스를제공하기도합니다. IBM 과 DTCC 의주도로개발중인블록체인모니터링툴입니다. 현재는하이퍼레저패브릭 v1.0 에대한모니터링을지원하고노드, 채널, 블록, 트랜잭션등에대한모니터링을할수있습니다. 서로다른원장간연동프로토콜을개발하는프로젝트로서 Ripple 과 NTT Data 에서처음프로젝트를시작하였습니다. 현재는분산원장과일반원장사이의지급시스템연동을목표로개발되고있습니다. 1.3.2 하이퍼레저패브릭개요 이번절에서는본격적으로하이퍼레저패브릭의구조를공부하기앞서간략하게몇가지특징을설명하겠습니다. 하이퍼레저패브릭은가장왕성하게활동중인하이퍼레저프로젝트로서, 초기에 IBM 이제공한 44,000여줄의코드를바탕으로현재약 30여개의조직에서개발에참여하고있습니다. 허가형프라이빗블록체인 (Permissioned and Private Blockchain) 형태로개발되었으며, 이더리움, 비트코인등누구나참여할수있는퍼블릭블록체인과는달리 MSP(Membership Service Provider) 라는인증관리시스템에등록된사용자만이하이퍼레저패브릭블록체인에참여할수있습니다. MSP와관련해서는 2.1.9 Identity 절과 2.1.10 MSP 절에서자세히설명하겠습니다. 8 CHAPTER 1 블록체인이해하기
하이퍼레저의패브릭참여자들은비즈니스목적에알맞은형태로블록체인플랫폼을구축할수있습니다. 예를들어금융, 물류, 의료등다양한형태의비즈니스데이터를원장에기록할수있으며, 비즈니스시스템에적합한블록생성알고리즘이나트랜잭션보증정책을선택할수도있습니다. 또한, 채널 (Channel) 이라는개념을도입해서블록체인참여자들간의프라이버시를강화할수있습니다. A 기관 B 기관 공동거래채널 부동산거래채널 금융거래채널 C 기관 D 기관 채널개념예시 모든사용자가동일한원장을가지고모든정보를공유할수있을뿐만아니라, 비즈니스에민감한내용을공유하고싶은참여자들간에만채널을통해서별도의원장을생성하여정보를공유할수도있습니다. 위그림에서보는바와같이모든조직이거래하는공동거래채널이존재할수있고, 또한 A-C 기관과 B-C-D 기관만이거래내용을공유할수있는부동산 / 금융채널도생성할수있습니다. NOTE 위예제에서 C 기관은부동산거래채널과금융거래채널의데이터를모두사용할수있지만, 서로다른채널간의분산원장전달은불가능합니다. 예를들어, A 기관으로부터받은원장을 B 와 D 기관으로전달할수없고반대의경우도마찬가지입니다. 1.3 하이퍼레저패브릭소개 9
하이퍼레저패브릭의원장 (Shared Ledger) 은다음과같이두가지구성요소로이루어져있습니다. 월드스테이트 (World state) 블록체인 (Blockchain) World state block 2( 현재블록 ) 잔액 - 400 원저축 - 1,000 원 block 1 잔액 - 900 원카드대금결제 - 500 원 block 0 잔액 - 1,000 원 A 마트결제 - 100 원 Blockchain Transaction Log 원장구조예시 월드스테이트 (World state) 는원장의현재상태를말합니다. 은행잔고를예로들면, 현재가지고있는금액이바로 World state입니다. 블록체인 (Blockchain) 은원장의전체기록을일컫습니다. 마찬가지로은행을예로들면, 계좌를만든후부터현재까지결제한모든기록이바로블록체인입니다. 은행과블록체인의다른점은은행은본인계좌의현재상태와거래기록밖에확인할수없지만, 블록체인은모든참여자계좌의현재상태와결제기록을확인할수있다는점입니다 ( 블록체인의이러한특성때문에하이퍼레저패브릭은채널개념을도입하여채널에참여한사용자의정보만을확인할수있도록프라이버시를강화하였습니다.) 하이퍼레저패브릭에서스마트컨트랙트는체인코드 (Chaincode) 에쓰여집니다. 체인코드는기존의스마트컨트랙트와같이원장에데이터를읽고쓰기위해사용될수있습니다. 다만, 스마트컨트랙트와의차이점은시스템체인코드 (System chaincode) 라는특수한체인코드를이용하여블록체인시스템설정이가능하다는특징이있습니다. 체인코드에대한내용은 2장에서좀더자세하게다루겠습니다. 참고로, 체인코드는현재 Go와 Node.js 언어를지원하고있습니다. 10 CHAPTER 1 블록체인이해하기
블록체인의합의알고리즘은 IT 관련학계에서활발하게연구가이루어지고있습니다. PBFT(Practical Byzantine Fault Tolerance) 알고리즘은블록체인네트워크의전체노드가 n개라고가정했을때악의적인노드가 (n-1)/3 개이하면정상적인합의를이끌어낼수있는알고리즘입니다. 비트코인과이더리움등은블록체인네트워크의모든노드가동시에암호화된수학퍼즐을푸는작업을수행하여가장빠른시간안에답을찾아낸노드가자신의원장을새로운공동원장이라고전파하여합의를진행하는알고리즘입니다. 하이퍼레저패브릭의합의알고리즘은 PBFT나비트코인의 PoW(Proof of Work) 등의합의방식과는달리, 트랜잭션의생성부터새로운블록생성까지모든과정을통칭해서합의과정이라고말합니다. 하이퍼레저패브릭의합의방식도 2장에서좀더자세히설명하겠습니다. 1.3.3 하이퍼레저패브릭특징 하이퍼레저패브릭의대표적인특징은다음과같습니다. 프라이버시와기밀성 작업구간별병렬처리 체인코드 모듈화된디자인 하이퍼레저패브릭은블록체인참여조직간에채널개념을도입하여프라이버시와기밀성을제공합니다. 예를들어, 블록체인참여기업중특정정보를특정회사에만공유하고싶은경우를가정해봅시다. 해당기업들은정보를공유하고싶은회사와협정을맺은후채널을생성하여정보를공유할수있습니다. 같은블록체인네트워크에있다고하더라도채널에소속되지않은조직은채널의거래내용을확인할수없습니다. Execute Order Validation 하이퍼레저패브릭의 3 단계데이터처리과정 1.3 하이퍼레저패브릭소개 11
하이퍼레저패브릭에서는트랜잭션의생성부터합의하는과정까지단계별로분리하여처리할수있습니다. 첫번째실행 (Execute) 단계에서는트랜잭션을실행하고결괏값을검증하는작업을수행합니다. 두번째단계인정렬 (Order) 단계에서는실행단계에서검증이끝난트랜잭션을취합하여순서에맞게정렬한후블록을생성하는작업을수행합니다. 마지막으로, 검증 (Validation) 과정에서는블록에포함된모든트랜잭션에대한결괏값검증을수행하고, 각종디지털인증서등을확인한후이상이없을시최신블록을업데이트하게됩니다. 이처럼작업을분리하여처리하게되면트랜잭션을실행하고검증하는노드와트랜잭션을정렬하는노드의부하를줄일수있고, 동시에두가지이상의작업을수행하는병렬처리가가능하기때문에시스템의성능또한향상하게됩니다. 체인코드는기존블록체인의스마트컨트랙트와동일한기능을가지고있으며, Go와 Node.js를이용해서다양한형태의응용프로그램으로개발될수있습니다. 또한, 시스템체인코드는트랜잭션의보증, 블록검증, 채널설정등시스템레벨에서의설정이필요할때사용되는체인코드입니다. 마지막으로, 하이퍼레저패브릭은시스템구축시인증, 합의알고리즘, 암호화등의기능을참여자들이원하는형태로선택해서블록체인을운영할수있도록모듈화된디자인을지원합니다. 이와같이모듈화된디자인은하이퍼레저패브릭블록체인을다양한비즈니스모델에맞추어개발할수있는유연성을제공합니다. 12 CHAPTER 1 블록체인이해하기
HAPTER 2C 2.1 하이퍼레저패브릭구성요소 2.1.1 Peer peer는하이퍼레저패브릭블록체인을구성하는네트워크노드중하나입니다. 앞장에서블록체인의가장중요한세가지요소는바로분산원장, 스마트컨트랙트, 합의라고설명했었습니다. 이중에서분산원장과스마트컨트랙트를 peer가관리하는역할을수행합니다. 하이퍼레저패브릭블록체인참여자는 peer에설치된스마트컨트랙트를호출하여분산원장에저장된정보에접근할수있습니다. 이번절에서는 peer의시점에서분산원장과스마트컨트랙트가어떻게동작하는지알아보겠습니다. NOTE 하이퍼레저패브릭에서는스마트컨트랙트라는용어대신체인코드 (Chaincode) 라는용어를사용합니다. 그리하여이책에서도앞으로스마트컨트랙트대신체인코드라는용어를사용하겠습니다. 2.1 하이퍼레저패브릭구성요소 13
체인코드 분산원장 peer peer 노드개념도 위그림과같이분산원장과체인코드는 peer 에저장되고설치되기때문에하이퍼레저 패브릭참여자는 peer 를통해서만분산원장과체인코드에접근할수있습니다. 체인코드 1 체인코드 2 체인코드 3 분산원장 1 분산원장 2 peer 여러개의체인코드와원장을소유한 peer 노드 필요에따라서 peer는복수개의분산원장과체인코드를가질수도있습니다. 위그림에는하나의 peer가 2개의분산원장과 3개의체인코드를각각호스팅하고있습니다. 체인코드1은분산원장1에데이터를저장하고읽어오는데사용되고, 체인코드 3은분산원장2에데이터를저장하고읽어오는데사용됩니다. 또한, 체인코드 2처럼분산원장 1 과분산원장2 모두접근하여데이터를기록하고읽어올수있게개발할수도있습니다. 14 CHAPTER 2 하이퍼레저패브릭핵심분석
체인코드 1 분산원장 1 분산원장 2 peer 분산원장 1 만접속가능한체인코드를소유한 peer 노드 위의그림처럼분산원장에접근가능한체인코드가없는경우도가능합니다만하이퍼레저패브릭공식문서에서는권장하지않는설정입니다. 공식문서에서는하나의 peer 에서최소한개이상의분산원장과체인코드호스팅을권장하고있습니다. 체인코드 1 분산원장 1 peer1 사용자 A 체인코드 1 2 분산원장 1 분산원장 2 peer2 peer 노드네트워크예시 사용자 B 마지막으로, 앞의그림을토대로 peer 네트워크가어떻게작동하는지설명하겠습니다. 2.1 하이퍼레저패브릭구성요소 15
peer1은체인코드 1과분산원장1을호스팅하고있고, peer2는체인코드 2와분산원장1, 분산원장2를호스팅하고있습니다. 또한, 사용자A 는 peer1에연결되어있으며체인코드1을통해분산원장1 에데이터를기록하거나읽어올수있고, 만약데이터를기록하는작업을요청한다면뒷장에서설명할 orderer 노드와함께합의과정을진행하여분산원장1을업데이트하게됩니다. 사용자B는 peer2에연결되어있습니다. 사용자B는체인코드2를통해분산원장1 과분산원장2에모두접근하여데이터를기록하거나읽어올수있으며, 분산원장에데이터를기록하는경우마찬가지로합의과정을통해분산원장을업데이트할수있게됩니다 2.1.2 Chaincode 블록체인의핵심은한번기록된데이터는위 / 변조가불가능한분산원장에있습니다. 하이퍼레저패브릭에서는분산원장에데이터를기록하거나읽기위해서체인코드 (Chaincode) 가필요한데, 주로비즈니스모델에맞는분산애플리케이션 (DApp) 과함께개발되어사용됩니다. 사용자 A 송금트랜잭션생성요청 결괏값반환 DApp R E S T S D K 송금트랜잭션 결괏값반환 peer 체인코드 분산원장 block 10( 현재블록 ) 사용자 A: -1,000 원사용자 A 잔액 : 8,000 원사용자 B: +1,000 원사용자 B 잔액 : 11,000 원 송금트랜잭션생성 block 9 사용자 A 잔액 : 9,000 원사용자 B 잔액 : 10,000 원... 16 CHAPTER 2 하이퍼레저패브릭핵심분석
예를들어, 사용자A 가사용자B에게 1,000원을송금하는트랜잭션을분산애플리케이션을이용하여생성한후체인코드로전달하면체인코드는분산원장에있는사용자A 의계좌잔액기록을 1,000원을뺀금액으로수정하고, 사용자B의계좌잔액기록에서는 1,000원을더한금액으로수정하게됩니다. 잔액확인트랜잭션생성요청 사용자 B 결괏값반환 DApp1 R E S T S D K 잔액확인트랜잭션 결괏값반환 peer 체인코드 분산원장 block 10( 현재블록 ) 사용자 A: -1,000 원사용자 A 잔액 : 8,000 원사용자 B: +1,000 원사용자 B 잔액 : 11,000 원 block 9 사용자 A 잔액 : 9,000 원사용자 B 잔액 : 10,000 원... 잔액확인트랜잭션생성 마찬가지로, 사용자 B 는잔액을확인하는트랜잭션을분산애플리케이션을통해생성 한후체인코드로전달하면체인코드는분산원장에있는사용자 B 의잔액기록을반 환하여사용자 B 에게전달해줍니다. 시스템체인코드퍼블릭블록체인의스마트컨트랙트와는달리하이퍼레저패브릭은시스템체인코드 (System chaincode) 라는특수한체인코드가있습니다. 시스템체인코드는애플리케이션레벨에서원장에접근하는일반적인체인코드와는달리하이퍼레저패브릭의시스템 2.1 하이퍼레저패브릭구성요소 17
HAPTER 3C 이장에서는실습을통해하이퍼레저패브릭이어떻게작동하는지알아보겠습니다. 현재하이퍼레저패브릭에서제공하는하이퍼레저패브릭구동예제는모두하나의호스트 PC에다수의네트워크노드를설치하는도커 (Docker) 환경을바탕으로만들어져있습니다. 개인적인생각으로이러한예제를바탕으로는상용화시스템구축도어려울뿐더러도커환경에익숙하지않다면시스템을이해하는데어려움이클것으로판단됩니다. 따라서이책에서는좀더상용화환경에가깝고시스템을좀더직관적으로이해하기위해, 도커를사용하지않은멀티호스트환경에서의하이퍼레저패브릭네트워크구축실습을제공하겠습니다. 3.1 패브릭설치 3.1.1 사전준비 이번절에서는하이퍼레저패브릭실습에필요한구성요소들을설치해보겠습니다. 하이퍼레저패브릭 v1.3 기준으로다음과같은프로그램들이필요합니다. 3.1 패브릭설치 77
VirtualBox Ubuntu 18.04.1 Go v1.10.4 Docker Compose git GNU libtool openssh-server Docker 17.06.2-ce pip curl tree net-tools 각구성요소를설치하는과정을하나씩알아보겠습니다. 버추얼박스및우분투설치 이책에서는버추얼박스 (VirtualBox) 의가상머신에우분투및필수구성요소들을설치 한후에하이퍼레저패브릭네트워크를구축하겠습니다. 버추얼박스와게스트확장패키지다운로드 우선, 버추얼박스웹사이트에서호스트 PC 운영체제에맞는버추얼박스와게스트확 장패키지 (VirtualBox Extension Pack) 를다운로드합니다 ( 버추얼박스버전이바뀌게되면최신 버전을다운로드합니다 ). 78 CHAPTER 3 하이퍼레저패브릭실습
게스트확장패키지설치 버추얼박스설치부터완료한후좌측상단에파일 환경설정 확장탭으로들어가서다운받은게스트확장패키지를선택하여설치해줍니다. 다음으로, 우분투웹사이트에접속후 18.04.1 데스크탑이미지를다운로드합니다 (18.04.1 이최신버전이아니라면아래사이트에접속해서 18.04.1 버전을다운로드합니다 ). URL http://old-releases.ubuntu.com/releases/bionic/ 사이트접속후 ubuntu-18.04.1-desktop-amd64.iso 를검색해서다운로드합니다 ( 약 1.8GB). 가상머신생성 3.1 패브릭설치 79
다음으로, 왼쪽상단의 새로만들기 버튼을클릭합니다. 그리고앞의그림과같이가 상머신이름과종류, 버전을선택하고 다음 버튼을클릭합니다. 메모리설정 필자가시험한결과, 하이퍼레저패브릭노드를구동할수있는최소메모리사양은 2048MB 였기에가상머신의메모리는 2048MB 로설정해줍니다. 필요하다면가상머 신생성후에도메모리는변경할수있습니다. 하드디스크생성 80 CHAPTER 3 하이퍼레저패브릭실습
지금새가상하드디스크만들기 를선택하고 만들기 를클릭합니다. 하드디스크파일종류선택 하드디스크파일종류를 VDI 로선택합니다. 참고로, VDI 는버추얼박스에서사용하 는가상머신의하드디스크포맷방식입니다. 고정크기선택 빠른실행환경을위해 고정크기 를선택하고 다음 을클릭합니다. 3.1 패브릭설치 81