안녕하세요?
그 동안 블록체인이 무엇인지, Hyperledger Fabric은 무엇인지에 대해서 알아보았습니다. 새로운 무언가를 배울 때 개념적인 부분도 중요하지만 기술을 하는 사람의 하나로 보다 중요한 것 중 하나가 실제로 적용시켜 보는 것일 겁니다.
지금부터는 Hyperledger Fabric을 이용해서 블록체인의 런타임 환경은 어떻게 구성하며, 어떻게 동작하며, 체인코드는 어떻게 개발되어 디폴로이 되는지 등, Hyperledger Fabric 기반의 블록체인 개발환경을 구성하면서 하나씩 알아보도록 하겠습니다.

Hyperledger Fabric은 기본적으로 Docker 이미지로 배포가 됩니다 ( 매뉴얼하게 빌드해서도 사용은 가능합니다.). 그리고 모둔 소스가 Golang 기반으로 작성되어 있습니다. 물론, 런타임 환경을 구성하는데는 Golang을 몰라도 상관이 없으나 스마트 컨트랙(이하, 체인코드)를 작성하기 위해서는 Golang을 알고 있는게 편합니다.
(현재 체인코드로 개발 가능한 언어는 Golang, Java입니다. Java 기반으로 체인코드 개발을 위해서는 Faric의 재빌드가 필요함으로 이번 문서에서는 Golang 기반으로 설명합니다.)

1. 개발을 위한 필수 환경

앞서 설명한 것과 같이 Hyperledger Fabric은 Docker 이미지로 배포되므로 블록체인 런타임 환경 구성을 위해서는 Docker engine이 필수적입니다.
이 문서에서는 docker-machine 을 통해서 모든 진행이 이루어 집니다. Docker engine 및 VirtualBox 가 필수적이니 아래 필수 설치 사항을 반드시 확인 바랍니다.
또한, Golang 기반의 체인코드 개발을 위해서는 Golang 바이너리 설치도 합니다.

윈도우즈의 경우 최신 Docker는 Windows 10 을 최소사향으로 지원합니다. 이전 버전의 Windows는 Docker Toolbox 를 설치하시기 바랍니다.
맥이나 윈도우즈 10과 같은 경우 VirtualBox를 별도로 설치해야 합니다.

2. 선행 기술

아래의 선행기술은 가급적 잘 알아두면 Hyperledger Fabric 기반의 환경 구성 및 개발을 쉽게 할 수 있습니다.
Docker 같은 경우는 실제로 개발/운영 환경을 Docker 기반으로 관리하는 회사도 점점 더 많아지고 있으니 시간내어 공부를 하는 것도 많은 도움이 될 것 같습니다.
Golang의 경우 체인코드 작성을 위해서는 알아야하는 언어입니다. 물론, Java나 다른 언어들도 향후 지원이 될 것이나 현재는 기본 언어이므로 이번 기회에 공부를 해보는 것도 추천드립니다.( 이 강좌에서는 Golang을 심도있게 사용하진 않습니다.)

  • Docker
  • Golang

3. Docker VM 환경 생성

자, 이제 기본적인 환경 준비가 다 되었으면 본격적으로 블록체인 런타임 환경을 만들어 보겠습니다. 다음의 명령어를 통해서 docker 사용을 위한 VM을 생성합니다.

$ docker-machine create --driver virtualbox blockchain

다음으로 새로 생성된 VM의 환경변수를 Host에 적용하기 위해서 다음의 명령어를 실행합니다.
(OS 별로 결과 내용이 틀릴수 있습니다. 그리고 터미널을 새로 접속 하시면 똑같이 환경변수를 설정해주셔야 합니다.)

$ docker-machine env blockchain

위의 명령을 실행하시면 다음과 같은 결과 화면이 나옵니다.

  • MacOS

  • Windows

의의 사진의 마지막 내용과 같이 각 OS에 맞춰서 다음의 명령을 실행합니다.

  • MacOS
$ eval $(docker-machine env blockchain)
  • Windows
@FOR /f "tokens=*" %i IN ('docker-machine env blockchain') DO @%i

최종적으로 Docker 사용을 위한 환경 설정이 잘 되었는지 확인합니다.

docker images

4. Hyperledger Fabric Docker 이미지 받기

Docker 설치가 정상적으로 완료되었으면 다음으로 Hyperledger 이미지를 각각 다운 받습니다.
다운받는 이미지의 종류와 버전은 다음과 같으며 네트워크 환경에 따라 다운받는 시간이 길어질 수도 있습니다.

Fabric 컴포넌트 이미지 명 태그
Fabric base 이미지 hyperledger/fabric-baseimage x86_64-0.2.2
멤버쉽 서비스 hyperledger/fabric-membsrsrvc x86_64-0.6.1-preview
피어 서비스 hyperledger/fabric-peer x86_64-0.6.1-preview

다음의 명령을 통해서 모든 이미지를 받습니다.

docker pull hyperledger/fabric-baseimage:x86_64-0.2.2
docker pull hyperledger/fabric-membersrvc:x86_64-0.6.1-preview
docker pull hyperledger/fabric-peer:x86_64-0.6.1-preview

이미지를 다 받으셨으면 docker images 명령을 통해서 이미지 리스트를 확인합니다.

docker images

그리고 baseimage의 경우 Tab를 latest로 태깅을 해야 합니다. 향후 블록체인의 운영모드에서 체인코드 디플로이를 할 경우 baseimage를 통해 체인코드 구동을 위한 Docker 이미지를 만드는데 hyplerledger/fabric-baseimage:latest 를 사용합니다.

docker tag hyperledger/fabric-baseimage:x86_64-0.2.2 hyperledger/fabric-baseimgae:latest
docker images

자, 여기까지 완료되었으면 Hyperledger Fabric 기반의 블록체인 환경구성을 위한 준비가 끝났습니다.
다음은 오늘의 마지막 단계로 멤버쉽 서비스와 Validating Peer 하나씩으로 구성된 기본적인 런타임 환경을 구동시켜 보겠습니다.
개발 PC의 특정 디렉토리에서 docker-compose.yml 파일을 하나 생성하고, 내용은 다음과 같이 입력합니다.

docker-compose.yml 파일은 일반적으로 yml, yaml 확장자로 만들어지는 파일로 데이터 직렬화된 양식입니다. 일반적으로 프로퍼티 등의 설정파일로 많이 쓰입니다.
특징은 공백은 탭이 아닌 스페이스로 반드시 타이핑해야하며, 들여쓰기의 위치를 아래 문서와 동일하게 해야 정상동작합니다.
자세한 정보는 다음의 위키피디아나 웹에서 검색해 보시기 바랍니다.
위키피디아 – YAML

membersrvc:
  image: hyperledger/fabric-membersrvc:x86_64-0.6.1-preview
  ports:
    - "7054:7054"
  command: membersrvc
vp0:
  image: hyperledger/fabric-peer:x86_64-0.6.1-preview
  ports:
    - "7050:7050"
    - "7051:7051"
    - "7053:7053"
  environment:
    - CORE_PEER_ADDRESSAUTODETECT=true
    - CORE_LOGGING_LEVEL=DEBUG
    - CORE_PEER_ID=vp0
    - CORE_PEER_PKI_ECA_PADDR=membersrvc:7054
    - CORE_PEER_PKI_TCA_PADDR=membersrvc:7054
    - CORE_PEER_PKI_TLSCA_PADDR=membersrvc:7054
    - CORE_SECURITY_ENABLED=true
    - CORE_SECURITY_ENROLLID=test_vp0
    - CORE_SECURITY_ENROLLSECRET=MwYpmSRjupbT
  links:
    - membersrvc
  command: sh -c "sleep 5; peer node start --peer-chaincodedev"

yml 파일의 특성으로 잘못 작성될 경우(빈 공백에 탭문자등 스페이스가 아니 다른 문자가 들어갈 경우나 탭의 위치가 맞지 않을 경우 등) docker 컨테이너 시작이 되지 않으므로 작성된 파일을 공유합니다. 아래의 링크에서 받으시기 바립니다.
https://github.com/mjkong/blockchain_hyperledger/blob/master/docs/Setup/devmode/docker-compose.yml

파일을 생성했으면 docker-compose.yml파일이 있는 디렉토리에서 다음의 명령어를 실행합니다.
아래 스크린샷과 같은 메세지가 에러없이 보이면 정상적으로 블럭체인 서버가 실행된 것입니다.

docker-compose up

Hyperledger Fabric의 실행이 완료되면 아래 메세지를 확인 할 수 있습니다.

vp0_1         | 09:50:27.129 [rest] StartOpenchainRESTServer -> INFO 054 Initializing the REST service on 0.0.0.0:7050, TLS is disabled.

여기까지 블록체인 런타임 구축을 위한 기본환경 설정을 완료하였습니다.
방금 docker-compose를 통해서 실행한 환경은 앞서 Hyperledger Fabric 소개시 설명한 Single Validating Peer 토폴로지에 해당합니다. 그리고 또한 개발모드로 런타임을 실행한 환경입니다.
이 구성을 통해 앞으로 개발모드에서의 체인코드 디플로이 및 테스트, 운영모드로 블록체인 런타임 실행, 체인코드 디플로이 및 테스트 등을 설명할 것입니다.