Fabric에 대해 살펴보겠습니다.(1편)

Hyperledger 프로젝트에는

여러 개의 하위 프로젝트가 존재하지만 지금부터 보시게 될 내용은 Fabric이라는 프로젝트에 대해 알아보고자 합니다.

1. Hyperledger?

리눅스 재단의 Hyperledger 프로젝트는 기업에서 적용이 가능한 표준적인 블록체인의 기술을 구현하는 목적으로 만들어진 블록체인 컨소시엄입니다. Hyperledger 프로젝트는 Blockchain Explorer, Fabric, Iroha, Sawtooth Lack등 여러 하위 프로젝트가 존재하고 있습니다.

2. Hyperledger Fabric 이란?
Hyperledger 프로젝트의 창립 멤버 중 한 명인 IBM44,000 줄의 블록체인 코드를 Hyperledger Fabric에 기부하게 되면서 프로젝트화가 진행되게 되었습니다. Fabric Hyperledger 프로젝트의 핵심 프로젝트로 블록체인의 런타임을 구현하는 프로젝트로 블록체인을 이용한 기반 기술에 대한 내용이 포함되어 있습니다.

Hyperledger Fabric은 모듈형 아키텍처 기반의 블록체인 애플리케이션 또는 솔루션 개발을 위한 근간으로 고안된 비즈니스 블록체인 프레임워크로서 리눅스 재단이 주도하고 있습니다. Hyperledger Fabric은 합의, 멤버십 서비스 등 구성요소의 플러그 앤 플레이를 지원합니다.

아래의 다른 블록체인과 Fabric의 특징을 나타낸 표입니다.

 

구분 

비트코인 

이더리움 

Fabric 

 암호화 화폐 요구

비트코인

 이더 또는 사용자가 생성한 암호화 화폐

 없음

 네트워크

 공개

 공개 또는 허가형

 허가형

 거래  익명  익명 또는 비공개  공개 또는 기밀

 합의

 작업증명

 작업증명

 SOLO(Single node, development), Kafka (crach fault tolerance), SBFT(지원예정)

 스마트 계약(Smartcontract)

 없음

 있음(Solidity, Sperpent, LLL)

 있음(Chaincode)

 언어

 C++

 Go lang, C++, Python

 Go lang, Java, Node.js

표-1 타 블록체인과의 차이점(IBM 사이트 참조)

위의 표와 같이 블록체인을 사용하더라도 네트워크, 거래방식, Smartcontract등의 차이점을 보이고 있습니다. 여기서 Fabric은 다른 블록체인들과의 차이점을 몇 가지 보여주고 있습니다. 비트코인과 이더리움을 사용할 때에는 그에 암호화 화폐를 지불하여 사용해야 하는 반면에 Fabric의 경우 이러한 지불을 해야 하는 형식이 없습니다. 또한 네트워크의 경우 Fabric은 인증서와 채널 등을 이용하여 같은 네트워크 상에 존재하더라도 인증된 그리고 허가된 사용자에 한해 같은 데이터를 보고 사용할 수 있도록 되어있습니다.

그리고 Fabric의 경우 Chaincode라는 Smartcontract의 역할을 하는 것이 존재하며 이 Chaincode의 경우 Go언어를 통해 구현 할 수 있습니다.

 

Fabric의 특징

Fabric의 특징을 간단하게 보자면 4가지로 나눌 수 있습니다.

허가형 네트워크 

 거래의 기밀유지

  집단으로 정의된 멤버십과 접근 권한을 비즈니스

  네트워크에 제공합니다.

  비즈니스의 유연성과 보안성을 제공하여 정확한 암호화 키를

  가지고 있는 당사자들에게만 거래가 보이도록 합니다.

 암호화 화폐 불필요

 설정가능

  거래를 확인하기 위해 채굴이나 값비싼 컴퓨팅을

  요구하지 않습니다.

   스마트 계약을 활용하여 네트워크 상의 비즈니스 프로세스를

   자동화 합니다.

 

 

 

 

 

 

-2 Fabric의 특징

 

3. Hyperledger 구조

Hyperledger는 다음과 같은 구조로 구성되어 있으며,  크게 Membership, Blockchain, Transaction, Chaincode로 이루어져 있습니다.

그림-1 Hyperledger 아키텍처

Membership

Fabric은 참여 권한이 있는 유저들만이 사용 참여 할 수 있는 폐쇄형 구조입니다. 그래서 유저들이 Fabric 즉 원장(Ledger)에 데이터를 기록, 수정, 삭제 등의 처리를 하기 위해서 인증서가 필요로 하며 인증서를 발급 받기 위한 기능이 필요합니다. 이 인증서를 등록 및 발급 관리 해주는 작업을 하는 것이 Membership 입니다.
이렇게 생성된 인증서를 통해 트랜잭션을 인정하고 Peer는 이 인증서를 사용하여 트랜잭션의 결과를 인증합니다.

Blockchain

Blockchain은 프라이빗 블록체인의 기본 구성요소로 블록체인에 저장하기 위한 데이터를 관리하는 분산원장 데이터베이스며, 이를 관리 및 처리하기 위한 기능으로 구성되어 있습니다. 블록체인 서비스는 HTTP/2 표준을 기반으로 P2P 프로토콜을 통해서 분산원장을 관리합니다. 데이터 구조는 해시 알고리즘을 통해 World state를 복제하는 등 관리 하는데 가장 효율적으로 관리할 수 있도록 최적화되어 있습니다. 필요에 따라 다른 합의 알고리즘 플러그인(PBFT, Raft, PoW, PoS)을 연결하고 구성 할 수 있습니다.

Transaction

프라이빗 블록체인에서 서비스나 처리에서 생성되는 트랜잭션을 관리하는 기능입니다. 거래에서는 트랜잭션을 처리하는 부분을 기초로 구성되어 있습니다. 보증 피어 기능이라는 'Endorsement Validation'과 트랜잭션을 배치 처리하고 블록을 생성해 프라이빗 블록체인망에 참여하고 있는 모든 노드들에 분기 및 정렬 역할을 하는 오더링(Ordering) 서비스가 있습니다

Chaincode

ChaincodeFabric에서 말하는 스마트 컨트랙트를 말하는 것으로 프라이빗 블록체인에서 중요한 기능입니다. Chaincode는 기업 및 컨소시엄으로 구성된 서비스에 맞게 블록체인을 활용할 수 있도록 로직을 구현, 변경 할 수 있으며 로직을 개발할 수 있도록 'Go', 'Node.js', 자바와 같은 언어로 개발을 할 수 있도록 지원하고 있습니다. Chaincode는 수신 된 트랜잭션에 대한 응답으로 메소드가 호출 되는 방식으로 되어있습니다. 즉 트랜잭션이 생성되어 전송될 때 마다 Chaincode 내에 정의되어있는 메소드가 실행되는 구조로 되어있습니다.

 

3.1 Fabric v1.0 구조

그림-2 Fabric 구조

 

위의 그림은 Fabric의 구조를 간략하게 나타낸 것입니다. 위의 구조에 대해 간략하게 설명하면 다음과 같습니다.

1.     MSP(Membership Service Provider)에 해당 Application Fabric을 사용할 수 있도록 인증서 등록을 하는 작업을 진행합니다. (0)

2.     Fabric을 이용 시 Application이 블록체인에 트랜잭션 수행을 위한 Proposal을 합니다. (1)

3.     Proposal Peer에서 수행됩니다. Endorser들은 Poroposal을 받은 뒤 내부 처리를 통해 서명을 한 뒤 Proposal responseApplication에게 보냅니다.

4.     서명된 proposal response를 받은 Application은 트랜잭션을 수행합니다. (2)

5.     Peer에 있는 체인코드를 통해 필요한 처리를 진행합니다.

6.     처리를 진행 후 트랜잭션은 모든 채널에 대해서 Orderer가 받아서 트랜잭션의 순서대로 정렬을 합니다. (3)

7.     이렇게 정렬 및 처리가 된 내용을 다시 Peer들에게 일괄적으로 전송을 하게 됩니다.

 

위의 흐름에서 Endorser는 보증된 트랜잭션을 처리하도록 하는 역할을 하게 되며, 오더링 서비스는 합의 알고리즘을 수행합니다.

추가적으로 Fabric에서는 채널이라는 것이 있는데 채널은 실제 Chaincode가 디플로이되고 트랜잭션이 실행되는 구간을 말합니다. 즉 아래와 같이 두개의 채널(파란선, 붉은선) 각각 다른 비즈니스 로직을 담고 있는 Chaincode가 실행되며, 채널이 생성될 때 해당하는 Peer를 지정할 수 있습니다. 예를 들어 아래의 붉은선을 보게 되면 모든 Peer에 사용되는 것이 아닌 지정된 Peer(1, 2, 3, 6, 8, 11)에만 실행이 되는 것을 볼 수 있습니다. 이처럼 채널이라는 개념을 통해 비즈니스적인 확장성을 제공해 줄 수 있으리라고 판단됩니다.

 

 

그림-3 Fabric 흐름도

 

 


Fabric에 대한 더 자세한 내용을 살펴보고 싶다면, 아래 링크를 클릭해주세요.

▶ Fabric에 대해 살펴보겠습니다.(2편)

▶ Fabric에 대해 살펴보겠습니다.(3편)


 

 

 

참고자료

https://developer.ibm.com/kr/developer-%EA%B8%B0%EC%88%A0-%ED%8F%AC%EB%9F%BC/2017/01/08/blockchain-basic-01-introduction-to-distributed-ledgers/

https://developer.ibm.com/kr/developer-%EA%B8%B0%EC%88%A0-%ED%8F%AC%EB%9F%BC/2017/01/15/blockchain-basic-02-hyperledger-fabric-overview/

https://godoc.org/github.com/hyperledger/fabric/core/chaincode/shim

https://www.bloter.net/archives/276774

http://fabrictestdocs.readthedocs.io/en/latest/gettingstarted.html

https://snowdeer.github.io/blog/tags/#blockchain

https://snowdeer.github.io/blockchain/2017/06/22/introduction-of-hyperledger/

http://miiingo.tistory.com/40

https://developer.ibm.com/kr/cloud/blockchain/2017/04/04/starting_blockchain_using_hyperledger_fabric/

https://developer.ibm.com/kr/developer-%EA%B8%B0%EC%88%A0-%ED%8F%AC%EB%9F%BC/2017/01/26/blockchain-basic-03-build_development_environment/

http://hihellloitland.tistory.com/24

http://hyperledger-fabric.readthedocs.io/en/latest/

http://hyperledger-fabric.readthedocs.io/en/release-1.1/getting_started.html

http://avilos.codes/infra-management/virtualization-platform/docker/docker-compose/

https://www.ibm.com/blockchain/kr-ko/hyperledger.html 

https://developer.ibm.com/kr/developer-%EA%B8%B0%EC%88%A0-%ED%8F%AC%EB%9F%BC/2017/01/15/blockchain-basic-02-hyperledger-fabric-overview/

https://mvnrepository.com/artifact/org.hyperledger.fabric-sdk-java/fabric-sdk-java/1.1.0

 

 

 

New Multi-Channel Dynamic CMS