[케블리] #66. Hyperledger Fabric 이해해보기 (1) - Fundamental terms
![hyperledgerlogo.png](https://steemitimages.com/640x0/https://cdn.steemitimages.com/DQmSbR2Gf2uBcT82FXsznHhUN4Wvb9MzDUp8NFvcaJA8cYZ/hyperledgerlogo.png)
Hyperledger Fabric & Composer를 이제 막 입문했습니다. 재미있기도 하고, 워낙 알아야 하는 프로그래밍과 네트워크 관련 기반지식이 필요해서 고생하고 있기도 합니다. 한편으로는, Hyperledger 관련 한글 리소스가 '하이퍼렛저 프로젝트 개요'와 '개발환경 설치 세팅 + sample 실행'으로 나뉘어 있는 것 같아 아쉬웠습니다. 그래서 'Hyperledger Fabric'의 기틀을 코드 없이도 설명해보는 시도를 해봤습니다.
Hyperledger란?
HyperLedger는 리눅스 재단에서 2015년부터 진행한 Umbrella project입니다. Umbrella project란 큰 틀에서 특정 주제나 규칙을 공유하는 몇몇의 독립된 프로젝트와, 그 프로젝트 안에서 진행되는 서브프로젝트들의 총합을 말합니다. 보통 HyperLedger 하면 가장 먼저 떠올리는 IBM은 "Hyperledger Fabric"이라는 분산원장 프레임워크(DLT Framework)를 주도하는 회사입니다. DLT로써의 블록체인 기술 장점을 활용하고 싶은 기업들이 가장 활발하게 쓰고 있다 보니, Hyperledger 프로젝트 중 가장 활발하게 운영되고 있습니다. Private Blockchain 영역에서 R3corda 진영 위상이 예전만 못한 지금에는 거의 독보적인 위상을 보여주는 프로젝트이기도 합니다.
-> Hyperledger에서 진행하는 프로젝트에 어떤 것들이 있는지는 하이퍼레저 개요글을 통해 확인하실 수 있습니다. 본 글에서는 가장 널리 알려진 Private Blockchain Framework인 Hyperledger Fabric을 살펴보고자 합니다.
![hyperledger.png](https://steemitimages.com/640x0/https://cdn.steemitimages.com/DQmRWW6DAC8TAyE5umML8sphKbQjodPe3NJ5WeUjpWwA21f/hyperledger.png)
Fabric의 핵심 특징
Hyperledger Fabric을 한 줄로 요약하면 '비즈니스를 위한 허가형 블록체인 네트워크'입니다. Linux Foundation 홈페이지에서 설명하는 Hyperleger Fabric은 아래와 같습니다.
Hyperledger Fabric is a blockchain framework implementation and one of the Hyperledger projects hosted by The Linux Foundation. Intended as a foundation for developing applications or solutions with a modular architecture, Hyperledger Fabric allows components, such as consensus and membership services, to be plug-and-play. Hyperledger Fabric leverages container technology to host smart contracts called “chaincode” that comprise the application logic of the system. Hyperledger Fabric was initially contributed by Digital Asset and IBM, as a result of the first hackathon.
먼저, Fabric을 'framework'라고 정의했습니다. 오라클이나 아파치 같은 ready platform이 아니라, 모듈화된 오픈 소스 소프트웨어입니다. 또한, Consensus와 Membership service를 제공합니다. 사용자가 원하는 주체만 블록체인 네트워크에 포함시킬 수 있고, Fabric에서 제공하는 transaction ordering service - Kafka - 를 통해 모든 장부의 거래기록을 동일하게 관리할 수 있습니다. 또한 "ChainCode"라는, 이더리움의 스마트 컨트랙트와 같은 기능을 제공해 프로그래밍으로 비즈니스 로직을 구현할 수 있게 해 놓았습니다.
IBM에서는 Hyperledger Fabric의 특징을 네 가지로 요약해 정리했습니다.
Permissioned Network: 누구라도 블록체인 네트워크에 참여할 수 있는 Public Blockchain과 달리, 접근 권한을 부여받은 주체들만이 블록체인 네트워크에서 활동할 수 있습니다.
Confidential transaction: 모든 거래내역을 공개하는 Public Blockchain과 달리, 네트워크 내의 특정 구성원에게만 거래 기록을 공유할 수 있습니다.
No cryptocurrency to participate: 거래를 검증하는 네트워크 구성원에게 경제적 인센티브를 제공해야 하는 Public Blockchain과 달리, 네트워크 내에서 거래를 검증할 주체를 지정하는 방식이기 때문에 암호화폐라는 경제적 보상이 필요하지 않습니다.
Programmable: Chaincode를 통해 스마트 컨트랙트를 구현할 수 있기에 네트워크 내에서의 비즈니스 프로세스를 자동화할 수 있습니다.
Fabric에서 쓰이는 용어 정리
Hyperledger Fabric에서 기본이 되는 문서는 readthedocs입니다. 그런데 readthedocs의 구성이 18.07.25 현재까지도 가독성이 그다지 좋지는 않습니다. 이곳저곳에서 용어들이 등장하지만, 그 용어의 뜻이 무엇인지 명확히 정의한 문서가 아직까지는 안 보입니다. Hyperledger Fabric의 기틀을 이루는 용어들이지만, readthedocs를 읽다 보면 두루뭉술하게 잡히는 용어들을 정리해 보았습니다.
Fabric을 구성하는 기본 재료
Asset: '디지털화 가능한 모든 자산'을 의미합니다. Chaincode를 통해 자산의 상태를 변화시킬 수 있으며, 비즈니스에서 거래 또는 교환으로 가치를 제공할 수 있는 거의 모든 것을 지칭한다고 이해할 수 있습니다.
Chaincode: Hyperledger Fabric에서의 '스마트 컨트랙트'. 이더리움이 solidity라는 언어를 쓴다면, Chaincode에서는 Go라는 언어를 사용합니다. Asset의 데이터 구조를 설계하고, 네트워크 내에서의 거래를 가능하게 해 주는 요소입니다. 이더리움의 '스마트 컨트랙트'에 대응되는 개념입니다.
Ledger: 모든 asset 거래를 추적할 수 있는 장부입니다. 네트워크의 구성원 중 peer들이 Ledger의 사본을 보유하고 있으며, Ledger의 통일성은 네트워크의 구성원 중 Orderer가 보증합니다.
Fabric 네트워크를 구성하는 요소들
cf. Fabric에서는 네트워크의 구성요소들과 각 구성요소가 하는 역할이 서로 복잡하게 얽혀 있습니다. 이번 글에서는 구성요소의 정의 설명에 주안점을 두었고, 다음 글에서는 각 구성요소가 네트워크 유지를 위해 어떤 역할을 담당하는지를 주로 설명하려 합니다.
일반적으로 비즈니스를 할 때는 거래 상대방이 누구인지 알고 있습니다. 내가 거래할 상대방이 법적으로, 금융적으로 문제가 없는지를 쉽게 검증할 수 있죠. 법적인 지위는 보통 국가가 보증하고, 금융에 관련한 문제는 보통 은행이나 금융기관을 통해 검증합니다. Hyperledger Fabric 네트워크 내에서도 '참여 주체의 지위를 누가 보증할 것인가?'라는 의문이 들 수 있습니다.
Member
"Legally separated, independent entity"를 말합니다. 즉 현실에서의 법을 참여 주체의 지위를 보증하는 수단으로 사용합니다. 자동차 산업을 Fabric에 적용한다고 할 때, BMW와 같은 자동차 제조사, 자동차를 판매하는 딜러, 자동차를 수리하는 Repair shop 등이 각각 Member가 될 수 있습니다.
cf. Fabric에서는 특정 Member에게 "Membership Service Provider(MSP)"라는 권한을 부여합니다. 해당 권한이 있는 Member는 자신의 Organization에 포함되는 새로운 Member를 생성할 수 있습니다. BMW라는 회사로 비유하자면, BMW 회사에 포함된 직원들을 Fabric 네트워크의 Member로 만들 수 있다고 볼 수 있겠죠. 자동차 판매 딜러 연합이 MSP를 보유한 Member라면, 연합에 소속된 자동차 딜러들은 Fabric 네트워크에 편입될 수 있는 겁니다. 물론 BMW 직원은 BMW라는 organization에 소속되어 있을 거고, 자동차 딜러는 자동차 판매 딜러 연합이라는 organization 소속일 겁니다.
Identity
Fabric 네트워크에서는 Member의 유효성을 네트워크에서 발급하는 Certificate를 통해 인정합니다. 네트워크의 어떤 Member, 이를테면 BMW 제조사가 Fabric 네트워크의 검증을 거쳐 유효한 존재로 인정받으면 Certificate가 발급됩니다. 이 경우 BMW는 Fabric 네트워크에서 Identity를 인정받은 것이 됩니다.
Certificate
Fabric에서 Certificate는 X.509 Standard 방식을 따릅니다. (X.509 방식은 public key certificate의 형식을 정의하는 방법 중 하나라고 합니다.) 네트워크의 참가자가 새로 생기면, 그 참가자는 자신의 존재를 증명하기 위해 반드시 Certificate을 발급받아야 합니다. 네트워크에서 어떤 거래를 만들기 위해서는 참가자 Certificate에 있는 private key로 서명해야 하며, 거래를 검증하는 Validator는 private key에 대응되는 public key를 사용합니다.
![identity.diagram.8.png](https://steemitimages.com/640x0/https://cdn.steemitimages.com/DQmVCgWtJRhcgQQBAVTQk3neGm9NtoaJ8K7Kwepfys12QeB/identity.diagram.8.png)
Node
블록체인 네트워크에서 Communication을 담당합니다. 이더리움과 같은 Public network에서는 모든 노드가 동등한 권한을 부여받지만, Fabric에서는 노드를 크게 세 종류로 구분합니다.
- Client Node: 네트워크에 거래를 전파하기 위해 사용하는 노드
- Peer node: 각자 Ledger를 가지고 있으며, Orderer node가 전송한 거래를 받아 모든 peer의 ledger에 업데이트하는 역할을 합니다.
- Orderer node: "Communication Backbone of Network." 전체 Ledger의 거래기록이 동일한 순서이도록 관리하는 역할을 합니다.. Kafka나 Solo라는 개념이 여기서 쓰이며, Fabric의 합의(더 직관적인 의미로는 ledger의 일관성)를 담당합니다.
cf. 노드의 identity와 participant의 identity는 다릅니다. Member와 마찬가지로 노드도 Certificate를 발급받으며, 이를 통해 유효성을 확인할 수 있습니다. 이를테면 거래를 진행한 Member의 identity에 문제가 없다 해도, 거래를 네트워크에 전파하기 위해 사용한 Client Node의 identity에 문제가 있다면 거래를 네트워크에 전파할 수 없습니다. Client Node의 Certificate가 만료되거나 폐지되었을 경우가 보통 이에 해당합니다.
Channel
Fabric 네트워크 내의 '소규모 조직'에 해당합니다. 하나의 Member가 여러 채널에 속할 수 있습니다. 모든 종류의 거래는 채널을 바탕으로 이루어지며,각 채널마다 독립된 Ledger가 있습니다. 한 채널에 연결된 Peer node는 다른 채널의 ledger를 열람할 수 없도록 Default 설정이 되어 있습니다.
![그림1.png](https://steemitimages.com/640x0/https://cdn.steemitimages.com/DQmUs9JgyZD9cdKLJhzN9tSzWyWSvnzGJrbYcFbNZXrKMGp/%EA%B7%B8%EB%A6%BC1.png)
이해를 돕기 위해 그림을 덧붙이자면, A와 B가 하나의 채널입니다. A와 B는 서로 독립된 ledger를 가지고 있고, 기본적으로는 A에 있는 peer node가 B 채널의 ledger를 열람할 수 없습니다. 두 채널에 모두 소속된 한 개의 node만이 A와 B 채널의 ledger에 전부 접근할 수 있습니다.
Hyperlegder Fabric 프레임워크를 구성하는 핵심 개념들을 짚어보았습니다. 사실 개념 설명만으로는 '그래서 Fabric이 정확히 어떻게 움직이는 건데?'를 답하기가 쉽지 않네요. 심지어 네트워크의 작동 방식을 제대로 설명하려면 위의 개념들 중 몇 가지는 다시 분화되어야 합니다. 이를테면 Peer node는 맡은 역할에 따라 Anchor node와 Endorser로 또 구분되죠. 다음 시리즈에서는 위에 설명한 개념에 더해 몇 가지를 추가로 설명하면서 Fabric이 어떻게 동작하는지를 써 보려 합니다. Certificate Authority, Orderer, Anchor Node, Endorsement Policy 등등이 추가로 등장합니다. Member가 네트워크에 참여하기 위해 Certificate를 발급받는 절차가 어떻게 되는지, Client 노드가 transaction을 어디로 보내는지, 네트워크의 누가 어떻게 해당 거래를 검증하고 네트워크에 전파하는지 등등을 알려드릴까 합니다.
이 글을 쓰는 저도 Fabric은 처음 접해서 공부하고 있다 보니 설명이 애매하거나 미진할 수 있습니다. 아시는 내용이 이 글의 내용과 다르거나 보충 설명이 필요하다면 언제든 댓글 부탁드립니다. 감사합니다.
Reference
- 하이퍼렛저(Hyperledger) 개요
- Ultimate Guide To Consensus in Hyperledger Fabric
- Hyperledger Fabric readthedocs
- IBM Blockchain Hyperledger
- IBM Blockchain Hyperledger 한국어
- 리눅스 재단 홈페이지
- 하이퍼렛저 Readthedocs introduction 번역
- Coursera
- Udemy course
패브릭의 한계에 대한 자세한 설명 감사합니다:)