안녕하세요?

그 동안 “먼저 시작해 보는 블록체인” 시리즈를 통해서 오픈소스 블록체인 프로젝트인 Hyperledger Fabric 의 v0.6.x 버전을 이용하여 초기 블록체인 네트워크 환경을 만들고 체인코드를 디플로이하며, 테스트를 해봤습니다.

이번 글 부터는 Hyperledger Fabric의 정식버전이 될 v1.0을 기준으로 설명을 하겠습니다.
Fabric v1.0은 이전 버전에 대비해 아키텍처에 많은 변화가 있습니다.
이전 버전에서는 Validating Peer가 하던 역할을 Endorser, Orderer 등이 나눠서 하게 되며, REST API 가 없어지고 grpc를 통해 블록체인 네트워크와 인터페이스 해야 하는 등 많은 부분이 변경되었습니다.
새로운 버전에서의 대표적인 장점은 다음과 같습니다.

  • Chaincode trust flexibility
  • Scalability
  • Confidentiality
  • Consensus modularity

이 문서에서는 변화된 아키텍쳐에 대해서는 설명하지 않고 바로 개발환경 구성을 위한 방법에 대해서만 간단히 설명합니다.

Fabric v1.0 아키텍처에 대해서는 다음에 다시 다루고자 합니다.
변화된 아키텍처와 동작에 대해서는 다음의 링크에서 확인 바랍니다. Fabric v1.0 아키텍처 설명

1. 기본 환경 준비

  • Go – 최신버전
  • Docker – v1.13 이상
  • Docker Compose – v1.8 이상
  • Node.js + NPM – node v6.9.5, npm v3.10.10
  • xcode – Mac 사용할 경우 xcode 필요
  • nvm – nodejs 가 이미 설치되어 있어서 버전 관리가 필요할 경우 필요(Mac 에서 테스트 결과 node v6.9.5 버전일 경우 모든 과정이 정상적이었습니다.)

1.1 nodejs, npm 버전확인

node 버전은 6.9.5 이상이 되어야 합니다.
node -v
npm 버전은 3.10.10 이상이 되어야 합니다.
npm -v

1.2 nvm 을 이용한 node v6.9.5 설치

다음의 명령어를 통해서 설치합니다.

nvm install v6.9.5

2. Hyperledger Fabric v1.0 도커 이미지 빌드

적당한 위치에서 개발환경 셋팅을 위한 디렉토리를 만들어서 다음의 명령을 통해서 Fabric 아티팩트 및 어플리케이션 코드들을 다운 받습니다.

mkdir -p < 로컬 개발환경 경로 >/hackfest
cd < 로컬 개발환경 경로 >/hackfest
curl -L https://raw.githubusercontent.com/hyperledger/fabric/master/examples/sfhackfest/sfhackfest.tar.gz -o sfhackfest.tar.gz 2> /dev/null;  tar -xvf sfhackfest.tar.gz

위의 명령이 정상적으로 완료되었으면 다음과 같이 관련 파일들이 압축이 풀어진 형태로 존재합니다.

다음으로 hyperledger/fabric-ccenv 이미지를 빌드합니다.
(필요한 도커 이미지 다운로드 및 빌드 작업을 진행합니다. 약간의 시간이 필요합니다.)

docker-compose -f docker-compose-gettingstarted.yml build

위의 이미지 빌드 작업이 정상적으로 완료되었으면 다음의 명령어를 통해서 블록체인 네트워크를 실행합니다.
(빌드와 마찬가지로 필요한 도커 이미지들을 다운로드 받아서 컨테이서 생성후 시작합니다.)

docker-compose -f docker-compose-gettingstarted.yml up -d

이제, 정상적으로 빌드되어 컨테이너 실행이 되었는지 확인합니다. 다음 그림과 같이 6개의 컨테이너가 생성되면 됩니다.

docker ps

다음으로는 채널이 생성과 피어 연결이 정상적으로 완료되었는지 확인해보겠습니다. 다음의 명령과 같이 cli 컨테이너로 접속하여서 “results.txt” 파일의 내용을 확인합니다.

채널과 피어 등에 대한 설명은 다음 Fabric v1.0 아키텍쳐 설명 때 하도록 하겠습니다.

docker exec -it cli bash

cli 컨테이너로 접속되었으면 다음과 같이 터미널에 프롬프트가 떨어집니다.

/opt/gopath/src/github.com/hyperledger/fabric/peer #

“results.txt” 파일을 확인해서 다음과 같은 메세지가 있는지 확인합니다.

more results.txt

정상 처리되었으면 아래의 메세지가 보입니다.
SUCCESSFUL CHANNEL CREATION
SUCCESSFUL JOIN CHANNEL on PEER0
SUCCESSFUL JOIN CHANNEL on PEER1
SUCCESSFUL JOIN CHANNEL on PEER2

Genesis block을 확인하기 위해서는 아래의 파일을 확인합니다.

more myc1.block

3. SDK 를 이용하여 클라이언트 테스트

Fabric v1.0을 이용하여 기본적인 블록체인 네트워크가 실행 되었으면 다음으로 SDK를 이용하여 체인코드 deploy, invoke, query 가 정상동작하는지 확인합니다.
먼저, 테스트를 위한 nodejs 소스를 다운받습니다.

curl -OOOOOO https://raw.githubusercontent.com/hyperledger/fabric-sdk-node/master/examples/balance-transfer/{config.json,deploy.js,helper.js,invoke.js,query.js,package.json}

소스 다운로드 완료가 되었으면 다음의 명령을 통해서 필요한 패키지들을 설치합니다.

npm install

3.1 체인코드 deploy, invoke, query 테스트

SDK 및 클라이언트 소스가 준비가 되었으면 체인코드를 디플로이하여 정상적인 동작을 하는지 확인합니다.
테스트의 내용은 “먼저 시작하는 블록체인” 의 체인코드 테스트와 동일합니다.
다만, Fabric v1.0에서는 REST API 가 없어졌으므로 SDK를 통해서 어플리케이션을 작성하여야합니다.

3.1.1 Deploy

체인코드를 디플로이하는 과정에서 argument를 넘기는데 a = 100, b = 200 을 초기값으로 입력합니다.

  • Mac
GOPATH=$PWD node deploy.js
  • Windows
SET GOPATH=%cd%
node deploy.js

3.1.2 Invoke

Invoke 에서는 a 의 값 100을 b로 이동합니다.

node invoke.js

3.1.3 Qeury

b의 값을 조회합니다.

node query.js

모두 정상적으로 동작하시나요?
이전 버전에 비해서는 상당히 편하게 개발환경을 구성할 수 있도록 Fabric 아티팩트 들을 배포하고 있습니다.
물론, 실제 적용하고자 하는 목적에 맞는 블록체인 네트워크 환경을 구성하기 위해서는 상세한 설정 방법을 알고 있어야 하겠지만, 로컬 개발환경을 위해서는 크게 무리가 없어 보입니다.
Fabric v1.0이 아키텍처와 트랜잭션의 절차 등이 모두 변경되어서 많은 부분에서 설명을 해야 할 필요성이 있어보입니다.
차근차근 문서를 올릴 예정이니 많은 기대 바랍니다.