본문으로 건너뛰기
0%

Geth 노드란 무엇이며 실행하는 방법

Alchemy team headshot

작성자 Alchemy

2022년 4월 18일에 게시됨3분 읽기

Geth와 노드 소개

Ethereum 노드는 Ethereum 블록체인 네트워크에 속한 컴퓨터입니다. 이 노드들은 블록을 검증하고, 저장하고, 때로는 생성하는 소프트웨어를 실행하는 실제 컴퓨터입니다.

"클라이언트"는 이 소프트웨어를 가리키는 이름입니다. 클라이언트를 통해 JSON-RPC API로 블록체인과 상호작용하고, 블록체인을 읽고 검증하며, 스마트 컨트랙트를 읽거나 쓸 수 있습니다.

Geth는 이러한 클라이언트 중 하나이며 가장 널리 쓰이는 클라이언트입니다. Go 프로그래밍 언어로 작성되었으며, Ethereum Foundation 소속 인력과 그 외 기여자들로 구성된 그룹이 계속 유지보수하고 있습니다.

Geth의 몇 가지 특징:

  • "geth console" 명령으로 실행할 수 있는 JavaScript 콘솔이 내장되어 있습니다.
  • 이 클라이언트는 다른 JavaScript 클라이언트(web3js)와 함께 동작할 수 있습니다.
  • Sepolia를 비롯한 테스트넷이 기본 내장되어 있습니다(또는 자체 프라이빗 Ethereum 네트워크를 구성할 수 있습니다).
  • 다른 Ethereum 노드들의 표준으로 여겨지는 경우가 많습니다.

이번 Alchemy 블로그에서는 Geth 노드를 설치하고 실행하는 방법을 알아봅니다.

네트워크(Mainnet vs testnet)와 Geth

Geth 노드를 이해하려면 먼저 Ethereum의 여러 네트워크를 이해해야 합니다.

Ethereum에는 모든 트랜잭션이 실제로 처리되는 단일 핵심 네트워크(Mainnet)가 있지만, 그 외에도 테스트를 위해 구축된 여러 테스트 네트워크(Testnet)도 존재합니다. 로컬호스트를 벗어나 블록체인 기능을 실험해보고 싶다면 이런 "실험용" 블록체인을 사용해볼 것을 고려해보세요.

1. Mainnet

Ethereum mainnet은 실제 Ethereum을 생성하는 데 사용되는 네트워크입니다. ETH는 채굴하거나 거래소에서 거래할 수 있으며, 항상 사용 가능한 상태입니다.

2. Sepolia

Sepolia는 현재 Geth 개발자들이 사용해야 하는 Ethereum 테스트넷입니다. Ethereum 코어 개발자들이 유지관리하는 지분증명(proof-of-stake) 네트워크이며, Ropsten, Rinkeby, Kovan, Goerli, Kiln 같은 이전 테스트넷들은 지원이 종료되었습니다.

Sepolia에서 개발을 시작하려면 faucet에서 Sepolia ETH를 받으세요.

Geth 노드란 무엇인가?

Ethereum의 Geth 노드 유형 다이어그램: light, full, archive 노드

Geth를 이용하면 자신만의 프라이빗 Ethereum 네트워크를 구축할 수 있습니다. Ethereum 네트워크의 블록체인은 제네시스 블록이라 불리는 최초 블록에서 시작합니다. 제네시스 블록에는 트랜잭션이 없습니다.

Ethereum 노드에는 여러 종류가 있지만, Geth 노드는 라이트 노드, 풀 노드, 아카이브 노드의 세 가지로 구분됩니다.

라이트 노드

라이트 노드는 모든 블록을 검증하지 않기 때문에 Ethereum 블록체인의 사본을 보관하지 않습니다. 그 결과, 풀 노드로부터의 데이터에 의존합니다. 라이트 노드를 실행하면 더 빠른 시작 속도, 더 적은 스토리지 사용량, 더 적은 연산/메모리 요구량 등 여러 장점이 있습니다. 다만 라이트 노드는 신뢰 수준이 낮고 많은 경우 풀 노드에 의존해야 하는데, 이는 문제가 될 수 있습니다.

라이트 노드는 다음과 같습니다:

  • 헤더 체인을 저장하고 나머지는 요청합니다.
  • 블록 헤더의 상태 루트와 대조하여 데이터의 유효성을 검증합니다.
  • 기가바이트 단위의 블록체인 데이터를 저장할 수 없는 임베디드 기기나 모바일 폰 같은 저용량 장치에 활용됩니다.

풀 노드

풀 노드는 블록 내 트랜잭션이 Ethereum Yellow Paper에 명시된 기준을 따르는지 검증합니다. 이를 통해 네트워크상에서 전달되는 블록이 진짜임을 보장합니다. 풀 노드의 작업은 신뢰할 수 있습니다. 풀 노드는 이러한 검증 방식을 통해 네트워크가 Ethereum의 요구사항에 맞게 유지되도록 합니다.

풀 노드는 다음과 같습니다:

  • 전체 블록체인 데이터를 저장합니다.
  • 블록 검증에 참여하며 모든 블록과 상태를 검증합니다.
  • 모든 상태를 도출합니다.
  • 네트워크에 데이터를 제공하고 요청을 처리합니다.

아카이브 노드

아카이브 노드는 전체 트랜잭션 히스토리를 저장하는 노드입니다. 네트워크의 건전성과 구조는 이 노드들에 의존합니다.

아카이브 노드는 다음과 같습니다:

  • 풀 노드가 저장하는 모든 것을 저장하며, 과거 상태들의 아카이브를 구축합니다. 계정 잔액이나 온체인 데이터를 조회하려는 경우, 또는 OpenEthereum을 이용해 채굴하지 않고 자신의 트랜잭션 세트를 간단하고 안정적으로 테스트하려는 경우 이것이 필요합니다.
  • 테라바이트 단위의 데이터를 제공합니다. 이 때문에 일반 사용자에게는 덜 적합하지만, 블록 탐색기, 지갑 서비스, 체인 분석 서비스 같은 용도에는 유용합니다.
네트워크 전반에서 proof-of-work 합의에 도달하는 Ethereum 노드 다이어그램
source: https://ethereum.org/en/developers/docs/nodes-and-clients/

‍

Geth 설치 요구사항

  • 멀티코어 CPU(RAM 7GB 이상)
  • 약 600GB 이상의 여유 공간이 있는 로컬 SSD 드라이브
  • (선택 사항) 캐싱을 통한 최적화된 성능을 위해 16/32GB 이상의 CPU 사용. 캐싱 기능을 사용하면('--cache' 플래그 사용) Geth가 하드 드라이브 대신 메모리에서 상태를 가져올 수 있습니다.
  • Mac 사용자를 위한 Homebrew
  • Linux/Ubuntu용 PPA
  • (선택 사항) Parity(자세한 내용은 parity에서 Geth로 마이그레이션하는 방법을 참고하세요)‍

Geth 설치 방법

패킷 관리자를 통해, MacOS에서는 homebrew, Ubuntu에서는 PPA를 통해, 또는 직접 다운로드하거나 docker에서 실행하거나 심지어 처음부터 직접 빌드해서 Geth를 설치할 수 있습니다.

MacOS 터미널에서 Homebrew 사용:

text
Copied
$ brew tap ethereum/ethereum $ brew install ethereum

다양한 유용한 명령어 목록은 여기에서 확인할 수 있습니다(abigen, bootnode, checkpoint-admin, clef, devp2p, ethkey, evm, faucet, geth 등). 또는 다음을 실행할 수도 있습니다:

text
Copied
$ geth --help

Linux/Ubuntu용 PPA:

text
Copied
$ sudo add-apt-repository -y ppa:ethereum/ethereum

go-Ethereum의 안정 버전 설치:

text
Copied
$ sudo apt-get update $ sudo apt-get install ethereum

Docker:

Docker는 여기에서 다운로드하세요. 그런 다음 아래를 실행합니다:

text
Copied
$ docker pull ethereum/client-go:latest

그리고 다음을 실행합니다:

text
Copied
$ docker run ethereum/client-go:latest

Geth 실행

Geth 폴더/루트 폴더의 압축을 푼 위치에서 터미널에 다음 명령을 실행하면 Geth를 실행할 수 있습니다:

text
Copied
$ ./Geth console --testnet --syncmode "light" --rpc --rpcaddr "localhost" --rpcport "8485" --rpccorsdomain "*" --rpcapi="db,eth,net,web3,personal"

이렇게 하면 곧바로 Geth 콘솔로 이동합니다.

net을 입력하면 피어가 있는지 확인할 수 있습니다. eth.syncing을 입력하면 노드가 현재 동기화 중인지 확인할 수 있습니다. 노드를 재시작해야 동기화가 시작되는 경우도 있습니다.

예를 들어, eth.syncing를 실행하면 다음과 같은 예시 쿼리 결과가 출력됩니다:

블록 동기화 진행 상태를 보여주는 eth.syncing 쿼리의 Geth 콘솔 출력

마무리

Geth는 일반 사용자들이 많이 쓰는 대다수의 웹/확장 지갑(MetaMask, Coinbase, Rainbow 등)에 이미 포함되어 있는 경우가 많습니다.

하지만 채굴을 실험해보거나 자신만의 커스텀 Ethereum 소프트웨어를 개발하고 싶다면, Geth를 직접 설치하고 실행해보는 것은 충분히 해볼 만한 일입니다. 또한 서드파티 소프트웨어에 의존하지 않고 직접 노드와 지갑 키를 관리하고 싶은 경우(제3자 소프트웨어 대신 직접 트랜잭션에 서명하는 경우)에도 유용합니다. Geth를 사용하면 Ethereum 개발의 새로운 세계를 열어볼 수 있습니다!

Background gradient

블록체인 매직을 만드세요

Alchemy는 가장 강력한 Web3 개발자 제품 및 도구를 리소스, 커뮤니티, 그리고 전설적인 지원과 결합합니다.