Hyperledger Sawtooth 실습하기 #1. 맥북에서 Docker를 이용한 설치

상당히 긴 여정이 될 것 같습니다.

어제 오늘 Hyperledger Sawtooth를 설치하고 튜토리얼을 따라 Genesis Block(첫 블록)을 만들고, 트렌젝션, 배치 처리, State 등에 대한 기본적인 흐름을 따라가보았습니다.

최근에 친구가 빌려준 ‘비트코인, 블록체인과 금융의 혁신(https://steemit.com/kr/@loum/5jbqud)’ 과 ‘이더리움, 솔리디티 입문(http://wikibook.co.kr/ethereum-solidity/)’ 이라는 책을 보았는데 이해하기가 쉽지 않았는데, 위의 과정을 거치다보니 대략적이나 나마 어떻게 굴러가는가보다 라는 느낌 정도를 받을 수 있었습니다.

개인적으로는 ‘코드로 이해하는 블록체인’ (http://www.popit.kr/java-%EC%BD%94%EB%93%9C%EB%A1%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EB%8A%94-%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8blockchain/) 이 사이트도 가볍게 보기에 추천합니다.

 

– 여전히 프라이빗 체인에 희망이 있는지에 대한 논란이 많은 듯 합니다. 다만 무슨 사업을 하는 것도 아니고, 좀더 실무적인 관점에서 관심을 갖고 있기에 차라리 퍼블릭 체인보다 진입장벽이 낮을 것 같다는 생각으로 출발했습니다.

– 앞으로 튜토리얼(https://sawtooth.hyperledger.org/docs/core/releases/1.0.0rc2/contents.html)에 있는 과정을 하나씩 연습해보면서 실제로 활용가능한 DB로 진행해보는 과정을 기록에 남겨두려고 합니다. node가 단 하나로도 구동이 되기 때문에 블록체인에 대한 이해를 위해 좋은 시도가 될 것 같습니다.

– Python SDK가 제공되고 있고, 샘플로 제작된 XO 게임도 파이썬으로 함수가 공개되어있습니다. 아마 실제로 구동되는 웹페이지는 Django나 Flask를 이용해서 아예 파이썬으로만 작동하도록 설계해볼까 합니다.

 

AWS, Ubuntu, Docker를 통한 튜토리얼을 제공합니다. 연습삼아 맥북에서 돌려보기엔 도커만한 것이 없어 이 것으로 진행하고자 합니다.

 

<도커(Docker)란 무엇인가?> : 잘못된 설명을 한 부분이 있으면 지적 부탁드립니다.

컨테이너 박스를 떠올리면 되는데 원하는 모듈을 장착해서 쓴다고 생각하면 될 것 같습니다. 가상머신과 비슷하나 다른 개념입니다.

안타깝게도 쓰고있는 지금도 여전히 완벽하게는 이해하지 못하고 있는 상황입니다. 다만 인터넷에서 여러 사이트를 찾아본 것 중에 가장 잘 설명된 슬라이드는 https://www.slideshare.net/pyrasis/docker-fordummies-44424016 입니다. ‘가장 빠르게 만나는 Docker’라는 책의 저자분이 작성하신 슬라이드로  책도 언제 도서관에서 한번 빌려봐야겠습니다. 이 슬라이드의 43번째 페이지에 아주 완벽히 정리된 그림이 있습니다만 저작권 문제로 붙이지는 않습니다.

쉽게 설명하면, 서버 위에서 구동되는 OS(호스트OS)가 있고, 그 위에 도커 엔진이 올라가 있습니다. 그리고 그 도커 엔진 위에서 컨테이너들이 하나하나 붙는다고 보면 됩니다.

Docker Image는 이미지 파일이고 이 것이 실행되어 운영 중인 상태를 Container라고 부릅니다.

맥북에서는 호스트 OS와 도커 엔진 사이에 Virtual Box가 한겹 더 들어갑니다.(그러나 Virtual Box를 통하지 않고 도커를 활용하지 않을 경우에도 Sawtooth가 작동을 했습니다. 다만 이 경우에는 Kitematic에서 이미지들을 인식을 하지 못하는 문제가 있습니다.)

 

<도커 설치>

도커는 아래 주소에서 다운받아 설치합니다.

https://store.docker.com/editions/community/docker-ce-desktop-mac

그리고 도커 툴박스라는 것을 설치하면 Virtual Box 및 Kitematic이라는 보조 도구들이 설치됩니다.

https://docs.docker.com/toolbox

 

처음에는 에러가 안났었던 것 같은데, 중간에 꼬이면서 VirtualBox에 자동으로 설치된 가상머신(default라는 이름)에 바로 접근이 되지 않기 시작했습니다. 나중에 알게된 해결책은 Terminal에서

$ eval $(docker-machine env default)

라고 입력해주면 됩니다. 아마 default라는 이름의 가상머신에 access하겠다..라는 의미정도가 되는 것 같습니다.

https://sawtooth.hyperledger.org/docs/core/releases/1.0.0rc2/app_developers_guide/sawtooth-default.yaml

다음은 docker-composer를 이용해서 sawtooth 구동에 필요한 이미지들을 한번에 다운받고 구동하는 과정을 거칩니다.

$ docker-compose -f sawtooth-default.yaml up

튜토리얼의 ubuntu 편을 보면 하나하나 설치하고 실행시키기 때문에 생략되는 과정을 자세히 알 수 있습니다.

composer를 통해 한번에 설치하게 되면 sawtooth에서 알아서 genesis block까지 생성해줍니다.

이제 Sawtooth CLI(command-line-interface)를 사용하기 위해 client container로 들어갑니다.

 

<Sawtooth 예제 따라하기>

$ docker exec -it sawtooth-shell-default bash

여기도 약간 이해가 안갑니다만…일단 sawtooth-shell-default 라는 컨테이너가 일반적인 linux의 쉘과 같은 기능을 한다고 이해했습니다. 그리고 이것은 그 쉘로 들어가서 bash를 실행시킴으로써 마치 가상머신 내부의 리눅스로 들어가는 것과 같지 않나하고..

아무튼 튜토리얼에서는 아래와 같이 세팅된 블록들을 불러오게 합니다.

 

 

 

 

 

 

 

 

CLI에서는 curl http://rest-api:8008/block을 사용합니다. 그리고 제대로 연결되었다면 외부(기본터미널)에서도 localhost로 접근이 가능해야합니다. 왜냐면 내 맥북에서 블록체인 서버를 열었으니까요.

그러나 아래와 같이 접근이 안되는 문제가 발생합니다. 보안문제 같습니다.

구글링을 해보니 localhost가 아닌 주어진 IP를 사용해야한다고 합니다. 여기서 Kitematic이 큰 도움을 주는데 실행하고 있는 컨테이너의 정보를 보면 우측에 IP가 적혀있습니다. 이것을 localhost 대신 사용하면 됩니다.

즉 아래와 같이 입력하면,

$ curl http://192.168.99.100:8008/blocks

우리의 첫 Genesis block을 볼 수 있습니다.

 

글을 써놓고 나니 정말 재미없는 글이 되어버렸습니다.

다음엔 XO 게임을 이용한 블록체인의 변화, 트렌젝션 등을 살펴보겠습니다.

궁극적으로는 웹브라우저에서 보이도록 만들어야하는데, 얼마나 빠르게 진행될 수 있을지는 장담하지 못하겠습니다ㅠ

0 Shares:
4 comments
  1. 안녕하세요.
    군산대 재학중인 학생입니다.
    개인적으로 블록체인을 공부하다가 블로그를 봤습니다.
    저도 맥 프로 2009년도 제품을 가지고 블록체인을 개발해보고 싶어서 댓글남깁니다.
    도커를 설치하는건 쉬웠는데 docker-compose -f sawtooth-default.yaml up 명령어에서 에러가 나옵니다.
    ERROR: .FileNotFoundError: [Errno 2] No such file or directory: ‘./sawtooth-default.yaml’
    파일이 없다고 하는데 깃허브에서 소스를 다운받고 해봐도 전혀 안되서 이렇게 남겨봅니다.

  2. 의사 선생님께서 굉장히 대단한 실력을 가지고 계시네요.
    국민을 위한 좋은 일을 하고 계시는데 거기에 블록체인, 코딩까지 정말 ㅎㄷㄷ 하군요
    응원하고 갑니다.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.