이더리움 개발환경 구축 (나만의 프라이빗 블록체인)

Denver
POCS
Published in
7 min readJun 2, 2018

포스팅 목적 및 타겟:

1) 목적:이더리움에서 동작하는 스마트 컨트랙트 배포 및 여러 가지 테스트를 하고 싶은데, 개발환경 구축에 어려움을 겪고 있는 분들에게 도움이 되고자 함

2) 타겟: AWS와 같은 고급(?)기술을 이용하거나 이더리움 메인넷에 접속하지 않고 테스트만을 위한 쉽고 빠른 환경 구축을 하고자 하는분들을 위함.

준비물:
1. ethereum geth client
2. Mist
3. geth 실행파일 및 Mist 실행파일의 위치를 반드시 사전 확인

환경변수가 따로 설정되어 있다면 실행파일의 위치를 몰라도 어떤 위치에서든지 geth, Mist 명령어로 각각 geth클라이언트와 Mist지갑 애플리케이션을 실행할 수 있지만 그렇지 않은 경우를 기준으로 설명한다.
필자의 맥북에서 Mist를실행하기 위해서 터미널에 입력해야 하는 명령어는
/Applications/Mist.app/Contents/MacOS/Mist이다.

절차 설명:
1. 바탕화면 혹은 유저 디렉토리(폴더) 안에 임의의 폴더를 하나 생성한다.생성한 폴더는 앞으로의 프로젝트들이 저장될 루트 디렉토리 개념이라고 생각하면 된다.

필자의 경우 홈디렉토리 안에 Ethereum이라는 이름의 디렉토리(폴더)를 생성했다. 아래의 사진에 보면~/Ethereum로 경로가 설정되어 있는 것이 보일 것이다. 다음의 설명은 필자의 Ethereum 폴더 기준으로 진행된다.

그 후 Ethereum폴더 안에 자신이 원하는 이름으로 디렉토리를 하나 생성한다. 프라이빗 네트워크의 정보가 담길 소중한 폴더이다. 필자는 waca-private으로 생성하였다.

2. Ethereum 디렉토리 내에 genesis.json파일을 생성한다. 아래의 코드를 그대로 복붙하여 파일을 생성하면 된다.
단, 그대로 가져다 쓸 때 chainId 필드값 자신의 폰 번호 등의 어느정도 고유한 숫자를 쓰길 권한다. 너무 적은 수, 예를 들면 0~15 정도의 범위의 값을 chainId 필드에 할당해버리면 프라이빗 네트워크가 아닌, 기존에 사용되고 있는 체인에 연결될 수 있기 때문이다. 우린 지금 자신만 사용할 수 있는 프라이빗 네트워크를 구축 중이다!

{"config": {    "chainId": 52687550,    "homesteadBlock": 0,    "eip155Block": 0,    "eip158Block": 0},"difficulty" : "0x20000","gasLimit"   : "0x2fefd8","alloc"      : {},"coinbase"   : "0x0000000000000000000000000000000000000000","extraData"  : "","nonce"      : "0x0000000000000042","mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000","parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000","timestamp"  : "0x00"}

3. 지금부터 아래에 나오는 명령어들을 순차적으로 Ethereum 폴더 안에서 터미널 2개를 띄워 실행시킨다. 터미널1에는 command1, command2를 실행시킬 것이고 터미널2에는 command2를입력할 것이다.
이때 command2의 geth 명령어 옵션 중 — networkid 52687550 파트는 genesis.json 파일에서 본인이 지정했던 chainId값과 일치시켜준다.

<command1>: geth --datadir waca-private init genesis.json
<command2>: geth --datadir waca-private --networkid 52687550 console
<command3>: /Applications/Mist.app/Contents/MacOS/Mist --rpc waca-private/geth.ipc

command1 설명:

geth를 실행하기 전에 반드시 거쳐야 하는 단계로, genesis.json 파일에 적힌 내용을 바탕으로 실행환경이조성이된다. 이 명령어를 통해 geth의 사용 이력 및 블록체인이 저장될 디렉토리를 초기화하는 것이다.

command2 설명:
geth client를 시작할 때는 여러가지 옵션을 지정해줄 수 있고 그 중 실습에 꼭 필요한 것들만 옵션으로 주었다.
— datadir 옵션의 경우 프라이빗 체인을 구성하려면 여러 가지 데이터가 필요할테고 그 자료들을 담아 놓을 하나의 기준점(디렉토리)이 필요한데, 그 디렉토리의 경로를 지정하는 옵션이다. 현재 디렉토리내에 waca-private 디렉토리가 있으므로 단지 waca-private 이라고 기술해주면 되는 것이다.
— networkid 옵션의 경우 자신의 chainId와 일치시켜 다른 컴퓨터에서도 자신이 만드는 프라이빗 네트워크에 연동할 수 있게끔 설정한다.
console: 이 명령어를 주지 않으면, geth 안에서 명령어를 실행시킬 수 없다.

command3 설명:
현재 필자의 터미널이 위치한 디렉토리는 Ethereum이고 이 내부에 waca-private 폴더가 존재하는 것이다. geth를 성공적으로 실행하면 ‘IPC endpoint opened’ 메시지와 함께 waca-private 내에 geth.ipc 파일이 생성될 것이다.
이 파일을 이용하여 Mist가 geth에 연동하여 geth의 정보를 Mist의 UI에 반영할 수 있는 것이다. 현재 디렉토리에서 Mist를 실행하려면, Mist가 설치되어 있는 위치를 알아낸 후 해당 경로를 포함하여 (해당 경로)/Mist로 실행한다.

— rpc 옵션은 remote procedure call 옵션으로 Mist 어플리케이션 내에서 계정을 생성하거나 트랜잭션을 발생시킬 때, 사실상 geth를 이용하는 것이므로 geth를 원격으로 호출하여 사용하는 작업이 포함되어 있는 것이다. 따라서 rpc 옵션으로 원격으로 geth와 통신할 수 있게끔 설정해놓는 것이다.

Mist를 사용하는 이유는 본래 geth만 이용해도 되는 것이지만, 시각적으로 함께 체인의 상태를 보는 것이 개발할 때 훨씬 편리하기 때문임을 명심하자. Mist에서 할 수 있는 모든 것은 geth만으로도 가능하다.

4. 1 ~ 3번을 그대로 진행했다면 아래와 같은 화면으로 구성되어 있을 것이다. 좌측 상단에는 geth를 실행시키는 터미널 창, 좌측 하단에는 Mist를 실행시킨 터미널 창, 우측에는 Mist 어플리케이션이 실행된 모습이다.

필자는 기존에 이미 어느 정도 테스트를 진행해 놓은 상태기 때문에 계정이 3개가 존재하고 각각 이더 또한 존재한다. 각자 원하는 내용의 실습을 진행해보자.

이렇게 나만의 프라이빗 이더리움 네트워크를 구성이 끝났다. 사실 단일 노드환경이라 프라이빗 네트워크라 하기엔 뭔가 좀 부족하다. 그러나 일단 이 환경에서 트랜잭션을 발생시켜 보거나 컨트랙트를 만드는 등의 여러 테스트를 진행해보자.

2편에서는 실제 블록체인 환경과 좀 더 유사하게끔 리눅스 가상 머신과 함께 프라이빗 네트워크를 구성하는 방법을 소개하겠다.

--

--

Denver
POCS
Editor for

Curious and fast-acting person. Software Egnineer. 😊