이더리움 프라이빗 블록체인 구축 (여러 노드들을 연결)

Denver
POCS
Published in
5 min readJul 2, 2018

포스팅 주제

  • 하나의 노드가 아닌 여러 개의 노드를 동작시켜 프라이빗 블록체인을 구성하는 방법을 설명한다.
  • 하나의 노드만으로 프라이빗 블록체인을 구성하고 싶다면 전에 있던 게시물(Ethereum01–01)을 참조하도록 한다.

준비물:

  • 윈도우 및 우분투가 설치되어 있는 컴퓨터 혹은 VirtualMachine

절차 설명:

<1>

이전 게시물 Ethereum01–01을 참조하여 메인 노드역할을 하는 컴퓨터에 geth를 실행할 수 있는 환경을 조성한다. 필자의 경우 MAC 데스크톱에 실행환경을 조성했다. 단, 전 게시물을 참고할 때 댓글란을 꼭 보도록 하자. 잘못된 내용에 대해 수정한 사안이 있기 때문이다.

이때 중요한 건, genesis.json 파일이다. genesis.json 파일 안에 있는 정보 중, “chainId”: 52687550 필드값이 가장 중요했다. chainId 로 분기되어 있는 이더리움의 수많은 체인 중 자신의 체인을 유일하게 식별할 수 있는 값이기 때문이다.

만약 유일한 값을 할당하기 어렵다면, 기존에 존재하는 체인 아이디 (0, 1, 2, …)를 할당하고 geth를 실행할 때 --nodiscover옵션을 주면 된다. 이 옵션을 할당하면, 기존에 존재했던 체인들과 체인 아이디가 같아도 별도의 체인으로 구축할 수 있다. 프라이빗일 경우에만 해당이 된다.

메인 노드의 geth를 실행시켰다면, console 명령으로 admin.nodeInfo.enode 명령어로 enode 값을 확인하도록 한다.

참고로 명령어를 입력할 때, tab 기능을 활용한다면 일일이 타이핑을 하지 않아도 된다.

결과로 출력되는 enode의 값을 따로 클립보드 혹은 메모장에 복사해둔 후에 다음 절차를 진행하도록 하자.

<2>

이제는 메인 노드의 역할을 하는 컴퓨터와 동일한 환경으로 여러 대의 컴퓨터를 준비할 차례다. 본 포스팅에서는 편의상 Ubuntu 16.04 LTS 운영체제를 설치한 가상머신만을 이용해서 메인 노드와 연결 해보도록 하겠다. 아래 내용은 geth를 이미 설치했다는 가정 하에 진행된다.

먼저 홈 디렉토리에 genesis.json 파일을 위치시켜준다. 물론, genesis.json 파일은 메인 노드를 초기화할 때 사용했던 파일과 정확히 일치해야 한다.

홈 디렉토리에 임의의 폴더를 생성한다. 필자의 경우 waca-private 라는 폴더를 생성했다. 이 디렉토리에는 앞으로 실행할 블록체인에 대한 정보들이 기록이 될 것이다. geth를 실행하기 전 환경 구축을 먼저 하는 과정이라고 생각하면 된다.

자, 이제 명령어를 입력하도록 하자.
geth --datadir waca-private init genesis.json 명령으로 해당 디렉토리를 초기화 시켜준다.

이렇게 해당 디렉토리를 초기화 해준 후에, geth --datadir waca-private --networkid 52687550 console 명령어로 geth를 실행시켜 준다. --networkid 52687550 파트는 정확하게 genesis.json 파일 안의 chainId: 52687550 필드 값과 일치해야 한다.

<1>번 과정에서 메인 노드의 geth console에서 우리는 메인 노드의 enode 값을 따로 저장해뒀다. 지금부터, 메인 노드와 연결을 시도해보도록 하자.

admin.addPeer("enode://d5d94092e79de457b540fcfd5f309ed877cdc6b9ee1e51c2ca32d0de684ecc29a35cc250a3be6db7e94bf238c9a35563013126db70b7a34494645e0ecbc97823@182.172.130.70:30303" 과 같이 명령어를 입력하도록 하자. 여기서의 enode 값은 실습할 때마다 바뀔 것이다.

이렇게 연결을 시도하면, 두 대의 서로다른 머신이 동기화를 시도할 것이다.

만약 제대로 동기화가 이루어지지 않거나 아무 로그도 출력되지 않는다면 반대로 연결을 시도해본다. 즉, 메인 노드에서 다른 노드의 enode 정보를 알아낸 후 추가하는 방법을 사용하도록 해보자. 아래의 사진은, MAC에서 우분투 머신에서 동작 중인 enode 정보를 알아낸 후에 연결을 시도한 화면이다.

위와 같이 연결을 시도한 후에, admin.peers 명령어를 실행하면 위의 사진의 출력과 같이 연결된 머신에 대한 정보를 출력해줄 것이다. 성공적으로 연결이 된 것이다.

곧 있으면 체인 싱크가 일어날 것이다. ChainId가 겹치지 않는다면 싱크가 성공적으로 될 것이다. 만약 제대로 되지 않는다면, --nodiscover 옵션을 추가하여 geth를 실행하거나 더 유니크한 체인 아이디를 할당해준 후에 다시 실습해보도록 하자.

--

--

Denver
POCS
Editor for

Curious and fast-acting person. Software Egnineer. 😊