Hyperledger Fabric(v0.6) Network Configuration

Hyperledger Fabric v0.6에 대한 Fabric Network 구성 방법을 정리한다. 아쉽게도 이 글은 아직 미완성이다. 그런데, 얼마전 Hyperledger Fabric v1.0이 릴리즈 되었고, v1.0에 대한 Configuration Cheat Sheet을 작성해서 따로 포스팅했다. v1.0은 운영(production) 버전으로 불리고 있고, v0.6과 차이가 많기 때문에 굳이 v0.6을 사용해야 하는 상황이 아니라면 v1.0을 구성할 것을 권고한다.
 
Ubuntu를 기준으로 Hyperledger를 설치하는 방법을 기술한다. Ubuntu의 버전은 16.04.2 LTS 이며, VMware Player에 설치하였다. 또한, 모든 작업은 root 권한으로 실행하였다.
Hyperledger의 설치는 Docker를 얼마나 능숙하게 사용할 수 있느냐에 달려있다고 해도 과언이 아니다. Docker에 익숙하지 않다면, Docker에 먼저 익숙해 지는 것이 좋다.
아주 많은 글을 참고하였으나, 가장 많이 참고한 글은  IBM Developer Center의 “먼저 시작해 보는 블록체인“이다. 이 글을 보고 따라하면, 개발 모드에서 블록을 생성해 보는 것은 어렵지 않을 것이다.
 
먼저 도커부터 설치하자. 우분투에서 도커를 설치하는 건 어렵지 않다.

아래는 Docker-Machine 설치와 관련한 명령어이다. 그러나, Docker-Machine의 설치는 일단 보류한다. Ubuntu에서는 불필요한 것으로 판단된다.

이제 도커로 Hyperledger 이미지를 다운로드하자. 일단 블록이 생성되는 걸 보고 싶다면, 더 높은 버전이 있더라도 똑같은 버전으로 설치하는 걸 권장한다.

이제 멤버서비스(membersrvc)와 피어(peer) 이미지로 컨테이너를 생성해야 하는데, Docker-Compose를 사용한다. Docker-Compose를 사용하기 위해서는 docker-compose.yml 를 만들어야 한다. 파일 생성 위치는 아무 곳이나 상관없다. docker-compose.yml를 만들 때 주의해야 할 사항은 들여쓰기이다. 탭(tab)을 사용하지 말고 스페이스(space)를 이용하는 것이 좋다.

매핑된 포트는 아래와 같은 역할을 수행한다.

 
일단 개발 모드에서 블록이 생성되는 걸 보자. docker-compose.yml 파일을 생성한 위치에서 아래 명령을 실행한다.

블록이 만들어졌다고 해도, 확인할 방법이 없다. 물론 피어에 REST API로 요청하면 볼 수 있긴한데 불편하니 Hyperledger Explorer를 설치하자.

블록체인의 스마트 컨트랙트를 Hyperledger에서 구현하기 위한 코드를 체인코드라고 한다. Hyperledger에서 블록을 생성하려면, 체인코드를 Deploy해야 한다. 체인코드는 Go나 Java를 사용할 수 있다.

이제부터 운영 모드를 다룰 것이다. 많은 시행착오가 있었지만 막상 정리하려고 보니, 개발 모드와 큰 차이점은 없다. docker-compose.yml의 설정이 변경되는 것이 거의 전부다. 아래는 Validating Peer를 4개 구성하기 위한 docker-compose.yml의 예시이다. vp0 환경 설정의 CORE_VM_ENDPOINT가 핵심이다.

운영 모드에서 체인 코드의 배포는 개발 모드와 많은 차이가 있다. 먼저 개발 모드에서는 체인 코드를 로컬에서 빌드하고 VP로 전달하였다. 하지만 운영 모드에서는 이런 과정이 생략된다. 체인 코드의 빌드는 지금까지 한 번도 등장하지 않았던 baseimage가 담당한다. 순서는 다음과 같다.

  1. 체인코드를 VP의 $GOPATH/src 아래에 저장한다.
  2. REST API로 위의 경로를 포함하여 deploy 한다.
  3. VP는 Docker의 Docker Remote API를 호출하여, baseimage 컨테이너를 생성한다.
  4. baseimage는 체인코드를 빌드하고, 다른 VP에게 전달한다.

이런 순서로 동작하는데, 3번의 Docker Remote API를 호출하기 위해서 CORE_VM_ENDPOINT 설정이 필요하다. 위에서 docker-compose.yml이 거의 전부라고 했다. 남아있는 건, Docker Remote API의 설정이다. 다음과 같이 설정해 주고 도커 서비스를 재시작 한다.