먼저 시작해 보는 블록체인 – 02. Hyperledger Fabric

안녕하세요?
지난 블록체인 기본에 이어 이번 글에서는 블록체인 런타임 환경을 구성하기 위한 전 단계로 오픈소스 블록체인 프로젝트인 Hyperledger Fabric에 대해서 좀 더 자세히 알아보겠습니다.

Hyperledger 하위 프로젝트

블록체인과 관련된 다양한 기술을 다루고 있는 Hyperledger 프로젝트에는 여러 하위 프로젝트를 가지고 있습니다. 그 중 대표적인 프로젝트에 대해서 간략히 소개합니다.
하위 프로젝트에 대한 자세한 정보는 다음 링크에서 확인 하시기 바랍니다. Hyperledger 하위 프로젝트 소개

Blockchain Explorer

Blockchain Explorer 는 블록체인 런타임에 대한 다양한 정보를 보여주기 위한 웹 기반 어플리케이션을 만드는 프로젝트로, 블록, 트랜잭션이나 그 외 관련된 정보를 조회하거나, 체인코드 및 원장의 정보들을 모니터링 하기 위한 기능을 포함하고 있습니다.

Fabric

Fabric은 블록체인의 기술을 구현한 프로젝트로 블록체인의 엔진을 만드는 프로젝트라고 생각하셔도 됩니다. 모듈방식의 아키텍처를 채용하여, 합의 알고리즘이나 사용자 인증 서비스등 필요한 시점에 추가할 수 있도록 되어 있으며, 체인코드라고도 부르는 스마트 컨트랙 코드를 통해 적용하고자 하는 산업군 또는 요구조건에 맞는 비즈니스 로직을 개발 할 수 있도록 하였습니다. 앞으로 포스팅될 문서는 대부분 이 Fabric을 기반으로 한 설명이 될 것입니다.

Iroha

Iroha는 기존의 시스템에 분산원장의 기능을 쉽게 통합하고자 하기위한 목적으로 개발되어지고 있는 프로젝트 입니다.
대표적인 기능은 다음과 같습니다.:

  • 기존 시스템과의 쉬운 통합
  • 최신의 도메인 지향 C++ 디자인
  • 모바일 애플리케이션 지원에 초첨
  • Sumeragi 라고 부르는 비잔티움 장애 허용 합의 알고리즘 채택

Sawtooth Lake

다양한 기능과 확장성을 위해 설계된 Sawtooth Lake 프로젝트는 인텔의 모듈라 방식의 블럭체인 제품군입니다. 분산 원장 기술은 IoT에서 금융에 이르기까지 다양한 분야에서 잠재력이 있습니다. 이 아키텍처는 해당 스펙트럼에서 요구 사항의 다양성을 인식합니다. Sawtooth Lake는 허가 된 배포와 무단 배포를 모두 지원합니다. 여기에는 새로운 합의 알고리즘 인 경과 시간 증명 (Poet)이 포함됩니다. PoET는 자원 소비를 최소화하면서 대규모 분산 유효성 검사기를 대상으로합니다. 트랜잭션 비즈니스 로직은 컨센서스 계층에서 제한되거나 자유로운 의미를 허용하는 트랜잭션 패밀리로 분리됩니다.

Hyperledger Fabric

용어

다음은 Fabric 기반 블럭체인의 기술을 익히기 위해서 필요한 용어들입니다. 용어들은 가급적 한글화를 하지 않고 영문 용어를 그대로 사용했습니다. 그리고 대부분 시스템 용어라고 생각하시면 이해하는데 도움이 될 것 같습니다.

  • Transactor : 트랜잭션(거래)을 일으키는 엔티티를 말합니다. 대표적으로 클라이언트 애플리케이션이 됩니다.
  • Transaction : 트랜잭션은 블럭체인 네트워크에 대해서 비즈니스 로직을 수행하기 위한 요청입니다. 트랜잭션의 유형은 deploy, invoke 및 query dlau, 체인코드를 통해서 사전 정의된 인터페이스에 대한 함수를 구현합니다.
  • Ledger : Ledger : 트랜잭션과 현재 세계 상태를 포함하는 일련의 암호 학적으로 링크 된 블록. 이전 거래의 데이터 외에도 원장에는 현재 실행중인 체인 코드 애플리케이션의 데이터가 포함되어 있습니다.
  • World state : 트랜잭션에 의해서 체인코드가 호출될 때 상태 및 데이터 저장을 위한 Key-value 데이터베이스 입니다.
  • Chaincode : 다양한 트랜잭션의 유형을 구현한 블록체인에 임베드되는 로직입니다. 개발자에 의해 체인코드가 작성되고 블록체인 네트워크로 디플로이 합니다. 최종 사용자는 블록체인 네트워크를 구성하는 피어 또는 노드와 인터페이스 되어 있는 클라이언트 애플리케이션을 통해서 체인코드를 실행시킵니다. 체인코드는 트랜잭션을 일으키고 유효성이 확인되면 공유원장에 추가하고 World state를 수정합니다.
  • Validating peer (VP) : 블록체인 네트워크에서 원장을 관리 유지하기 위해서 트랜잭션의 유효성을 검증하는 합의 프로토콜을 실행하는 노드입니다. 검증된 트랜잭션은 원장에 블록 단위로 추가됩니다. 트랜잭션이 합의에 실패하면 블록에서 제거되므로 장부에 기록되지 않습니다. Validating peer는 체인코드를 deploy, invoke, query 할 권한을 가집니다.
  • Non-validating peer (NVP) : Transactor가 Validating peer에 접속 할 수 있도록 프록시 역할을 하는 노드입니다. Non-validating peer (NVP) 는 호출된 요청을 Validating peer로 전달하며, 이벤트 스트림, REST 서비스를 담당하는 노드입니다.
  • Consensus : 블록체인 네트워크의 트랜잭션(deploy, invoke) 순서를 유지하는 프로토콜, Validating 노드들은 합의 프로토콜을 구현하여 트랜잭션을 승인하기 위해서 함께 동작합니다.
  • Permissioned network : 각 노드는 블록체인 네트워크에서 접근 권한을 관리해야 하는 노드이며, 각 노드는 권한이 있는 사용자만 접근할 수 있습니다.

아키텍처

블록체인 기본에서도 보여준 아키텍처 그림과 같이 블록체인의 엔진으로 볼수 있는 Fabric은 크게 3가지 서비스로 구성이 되어 있습니다.

1. Membership Services

멤버십 서비스는 블록체인 네트워크에서 인증 서비스를 제공합니다. Non-permissioned 블록체인의 경우 사용자 인증이 필요없으며, 모든 노드는 동등하게 트랜잭션 처리가 가능하고 블록에 트랜잭션 정보를 입력할 수 있습니다. 멤버쉽 서비스는 PKI(Public Key Infrastructure)와 분산화/합의 컴포넌트를 non-permissioned 블록체인에서 permissioned 블록체인으로 변환시킵니다. Permissioned 블록체인에서는 엔티티가 장기적인 인증서(enrollment certificates)를 획득하기 위해 등록절차를 거치게 되며, 엔티티 유형에 따라 구별될 수 있습니다. 사용자의 경우 TCA (Transaction Certificate Authority)가 인증서를 발급 할 수 있습니다. 여기서 획득한 인증서는 트랜잭션을 발생시킬때 인증하는데 사용됩니다.

2. Blockchain Services

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

3. Chaincode Services

체인코드 서비스는 Validating 노드에서 안전하고 가볍운 방법으로 체인코드가 실행되도록 보장합니다. 환경은 보안 OS 및 체인 코드 언어, Go, Java 및 Node.js의 런타임 및 SDK 계층을 포함하는 일련의 서명 된 기본 이미지와 함께 “잠긴”보안 컨테이너입니다. 필요한 경우 다른 언어를 사용할 수 있습니다.

4. 그외 기능
4.1 Events

Validating peers 와 체인코드는 블록체인 네트워크에서 이벤트를 발생 할 수 있습니다. 이벤트 발생을 대기하고 있는 애플리케이션에 필요한 노티를 보냅니다. 이벤트는 미리 정의된 이벤트 혹은 커스텀 이벤트를 발생 할 수 있으며, 하나 이상의 어댑터를 통해 이벤트 수신 할 수 있습니다. 또한 Web hooks나 Kafka 등을 이용하여 이벤트 수신도 가능합니다.

4.2 Application Programming Interface (API)

Fabric에 대한 기본 인터페이스는 REST API 입니다. API 호출을 통해 사용자 등록, 블록체인에 대한 쿼리, 트랜잭션 발생 들을 할 수 있습니다. 특히 체인코드와 상호작용하기 위한 API를 통해서 트랜잭션을 관리 할 수 있습니다.

4.3 Command Line Interface (CLI)

REST API의 일부 기능을 지원하는 CLI기능을 통해서 체인코드의 디플로이 및 트랜잭션 처리 등을 빠르게 진행할 수 있도록 합니다. CLI는 Golang으로 제작이 되었으며 다양한 OS를 지원합니다.

토폴로지

Fabric을 통한 볼록체인 네트워크는 하나의 멤버쉽 서비스와 다수의 Validating peer 와 non-validating peer 들로 이루어 질 수 있습니다. 이 모든 컴포넌트를 통해 하나 또는 다수의 체인을 운영 할 수 있습니다.

1. Single Validating Peers

기능적으로 non-validating peer는 validating peer의 서브셋입니다. 그러므로 모든 non-validating peer의 기능은 validating peer로 사용이 가능합니다. 그래서 가장 간단한 블록체인의 네트워크는 하나의 validating peer로 구성된 블록체인 네트워크입니다. 이 토폴로지는 보통 개발을 위한 환경으로 적합합니다.

SingleValidatingPeer

이 토폴로지는 합의 알고리즘 사용을 할 수 없습니다. 그래서 기본으로 설정되어있는 합의 모듈인 noops 플러그인을 적용해서 사용합니다.

2. Multiple Validating Peers

운영환경이거나 개발 환경일 경우 다양한 validating peer와 non-validating peer를 이용하여 블록체인 네트워크를 구성해야 합니다. 이 구성에서 non-validating peer는 이벤트 처리 및 REST API 서비스 관리등의 역할을 하게 되는 노드입니다.

MultipleValidatingPeer

Validating peers 들은 블록체인 네트워크 상에서 일어나는 모든 이벤트, 트랜잭션 등의 데이터를 공유하게 됩니다.

3. Multichain

각각 블록체인 네트워크는 validating peer와 non-validating peer로 이루어져 있습니다. 다양한 목적에 따라서 이와 같은 조합으로 다양한 블록체인을 구성 할 수 있습니다.

정리하며

여기까지 Hyperledger Fabric 을 구성하는 컴포넌트 및 용어들 그리고 구성 가능한 토폴로지등에 대해서 간략히 알아봤습니다.
이 기본적인 정보를 이용하여 다음 부터는 실제로 환경을 만들어 보면서 테스트 해보도록 하겠습니다.