본문으로 바로가기

지난 글에 이어서 하이퍼래저 패브릭의 구조에 대해 깊이 들어가보겠습니다. 

지난글 : [fabric] 하이퍼레저 패브릭 구조 (1)

 

[fabric] 하이퍼레저 패브릭 구조 (1)

하이퍼레저 패브릭의 구조에 대하 알아보겠습니다. 하이퍼레저 패브릭은 보는 방법에 따라 여러가지 구조로 볼 수 있습니다. 아래는 제가 공부하면서 정리해서 그린 하이퍼레저 패브릭의 구조입니다. (저도 공부하..

hcnam.tistory.com

하이퍼레저 패브릭의 구조에대해 클라이언트, 피어, 오더러(OSN)으로 나눠서 설명을 했었습니다.

이번에는 용어들과 함꼐 조금 더 깊게 들어가보겠습니다.

(사실 정리해놔도 빨리빨리 업데이트 되서 바뀌는 경우가 많습니다 ㅇㅅㅇ....)

 

ledger(원장)

일단 원장의 기본적인 뜻은 아래와 같습니다.

<경제> 자산이나 부채, 자본의 상태를 표시하는 모든 계정계좌를 설정하여 분개장에서 분개한 거래를 전부 기록하는 장부. 

-네이버 어휘사전-

블록체인은 거래 내용이 담긴 블록(Block)을 사슬처럼 연결(chain)해서 이를 공유하는 것으로 '분산원장기술(DLC;distributed ledger technology)' 또는 '공공거래장부'라고도 합니다. 뭐 이건 블록체인을 공부하는 사람들이라면 당연히 알것이지만 하이퍼레저 패브릭에서의 원장에 대해 좀더 자세히 보고 가려고 합니다. 

 

하이퍼레저 패브릭에서 원장은 "블록 체인(Block Chain)""전체 상태(World State)"라고도하는 데이터베이스 두 가지 별개의 부분으로 구성됩니다. 이 중에서 블록 체인은 변경할 수 없습니다 .

블록 B0는 genesis 블록이며 블록 B1은 B0에 연결되었고 블록 B2는 B1에 연결되었다. 블록체인 C는 블록 0, 1, 2를 포함한다.

"블록"은 트랜잭션의 모임(transaction set)으로 구성됩니다. 블록중 가장 첫번째 블록을 genesis block(기원블록)이라 합니다. 블록은 오더러(OSN)에 의해 생성되고 피어에 의해 검증됩니다. 이러한 블록들은 체인을 이룹니다. 해시를 기반으로 연결되며 피어는 이러한 블록을 OSN(오더러)로 부터 받아 트랜잭션을 점증하고 체인에 추가합니다. 블록에 체인을 추가 한 후에는 변경할 수 없습니다. 

"전체 상태(World State)"는 체인 트랜잭션 로그에 포함 된 모든 키의 최신 값을 나타내는 데이터베이스입니다. 체인 코드는 이 world state 데이터를 기준으로 트랜잭션을 실행합니다. 이러한 world state는 키 값이 변경 되거나(소유권 이전) 추가(생산)될 때 변경됩니다. 결과적으로, 키-값(key-value) 쌍의 현재 상태를 알아야 변경 될 수 있기 때문에 world state는 트랜잭션 흐름에 중요한 역할을 하고있습니다. 피어는 처리 된 블록에 포함 된 각 유효한 트랜잭션에 대해 원장의 world state에 최신 값을 커밋(commit)합니다. 하이퍼래저 패브릭 네트워크의 각 채널마다 하나의 논리적 원장 이 있다고 생각하면 도움 이됩니다. 채널의 모든 피어는 자체 적으로 원장의 사본을 유지 관리합니다. 이 사본은 consensus(합의) 라는 작업을 통해 다른 모든 피어의 사본과 일관성을 유지 합니다. 

 

 

체인코드 / 스마트 컨트랙트 (chain code / smart contract)

스마트 컨트랙트는 블록 체인 네트워크 외부의 클라이언트 응용 프로그램에 의해 호출되는 코드로, 전체 상태(World State) 의 일련의 키-값(key-value) 쌍에 대한 접근 및 수정을 관리합니다 .하이퍼래저 패브릭에서 스마트 컨트랙트는 체인 코드라고하니 사실 같은 말입니다. 체인 코드는 피어 노드에 설치되고 여러 채널로 인스턴스화 됩니다.

 

 

Transaction(트랜잭션, 거래)

트랜잭션은 체인코드(스마트 컨트랙트)가 설치되거나 호출될때 발생합니다. 블록체인 네트워크에서의 이벤트가 보통 트랜잭션입니다, 체인코드를 설치하는 instantiate transaction(인스턴스화 트랜잭션), 이미 배포된 체인코드를 호출하는 invoke transaction(호출 트랜잭션)이 예시 입니다. 간단히 말해서 블록체인 네트워크에서 비지니스 로직을 수행하기 위한 요청들이라 볼 수 있습니다. invoke transavtion(호출 트랜잭션)의 역할은 원장(ledger)의 읽기/쓰기(write/read) 입니다. instantiate transaction(인스턴스화 트랜잭션)은 채널(Channel)에서 체인 코드를 시작하고 초기화하는 요청입니다. 인스턴스화는 다른 피어들에게 체인코드에 대해 알리는 역할을 해줍니다 클라이언트는 endorser peer(엔도저 피어)로부터 트랜잭션에 대한 응답을 받으면 OSN(오더러)에 보내줍니다. 

 

 

Channel(채널)

채널 C는 어플리케인션 A1과 오더러 O1 그리고 피어 P2로 이루어져있습니다. (출처: 하이퍼래저 패브릭 공식 문서)

 

채널은 서로다른 노드들을 묶는 역할을 합니다. 채널을 통해 거래와 원장을 분리 가능하기 때문에 독립적인 원장을 가지는것이 가능합니다. 하나의 채널에는 하나의 원장을 가집니다. 이를 이용해서 private(비공개) 트랜잭션의 수행이 가능합니다. 다른 채널의 체인코드를 호출(invoke)하는 것은 읽기(read)만 가능합니다. 채널 별 원장은 채널의 피어간에 공유되며 거래 당사자는 해당 채널과 상호 작용하기 위해 채널에 올바르게 인증되어야합니다. 

 

 

Organization(조직)

노드들을 특정 목적에 따라 구분한 논리 집합인것에서 채널과 유사합니다. 멤버(member)라고도 합니다. MSP(Membership Service Provider)를 통해 조직을 네트워크에 가입시키며 이는 블록체인 네트워크 서비스를 제공하는 기업등에서 수행합니다. 조직의 크기는 재각각입니다. 개인만큼 작을 수도 있고 기업만큼 클 수도 있습니다. 조직 내에서 트랜잭션의 끝에는 피어(peer)가 존재합니다. 이러한 조직들이 모여서 Consortium(컨소시움)을 구성하는데 모든 조직이 컨소시움의 일원은 아닙니다.(모든 조직은 블록체인 네트워크의 일원입니다.) 

 

 

Consortium(컨소시엄, 협회)

Consortium(컨소시엄)은 조직의 집합입니다. 네트워크당 여러개 존재 가능하지만 보통 한개가 존재합니다. 컨소시움의 조직들은 각각 피어를 가지고 채널을 형성하거나 채널에 참여합니다. 컨소시엄을 구성하면 그 조직들은 트랜잭션 내역을 공유할 수 있게 됩니다. 채널을 새로 만들 때에는 채널에 추가 된 모든 조직은 컨소시엄의 일부여야 가능합니다.  그러나 컨소시엄에 정의되지 않은 조직은 기존 채널에 합류가 가능합니다. 

 

 

그렇다면 이제 구성된 예시를 봅시다.(대충 그려서 오류가 있을 수 있습니다.)

구성 예시

위 그림을 설명해봅시다. 피어 노드는 0~5번까지 총 5개가 존재하고 피어 0,1이 조직 0을 구성하고 피어 2,3이 조직 1, 피어 4,5가 조직 2를 구성하고 있습니다. 조직 0이 네트워크를 만들어 네트워크 관리 권한을 가졌다고 가정합니다. 이때 조직 0과 조직 1은 컨소시엄을 구성하고 있습니다. 이 컨소시엄 내에서 피어1과 피어2는 채널을 구성하고 있습니다. 

 

다음 글에서는 MSP에 대해 설명할 예정입니다.

 

 

References

논문: Hyperledger Fabric: A Distributed Operating System for Permissioned Blockchains

공식 홈페이지 문서: https://hyperledger-fabric.readthedocs.io/en/release-1.4/index.html 

SPRI FORUM 발표자료: https://spri.kr/download/21810

IBM 홈페이지 관련 게시물: https://developer.ibm.com/kr/cloud/blockchain/blockchain-special-series/

Youtube(박승철의블록체인및정보보호론강의): https://www.youtube.com/watch?v=hh9NXQQRtx4