Create Infrastructure for the Virtual Machine

내 진행 상황 확인하기

/ 30

Create a Swap File on the VM and Mount the Attached Disk on the VM

내 진행 상황 확인하기

/ 20

Create a User on the VM and Install the Ethereum software

내 진행 상황 확인하기

/ 20

Start Geth as a background process and use the snap sync mode

내 진행 상황 확인하기

/ 10

Configure Cloud Operations

내 진행 상황 확인하기

/ 20

이 실습에는 학습을 지원하는 AI 도구가 통합되어 있을 수 있습니다.
이 콘텐츠는 아직 휴대기기에 최적화되지 않음
최상의 경험을 위해 데스크톱 컴퓨터에서 이메일로 전송된 링크를 사용하여 방문하세요.

GSP1116

Google Cloud 사용자 주도형 실습

개요

보안, 규정 준수, 성능 또는 개인 정보 보호를 위해 자체 블록체인 노드를 호스팅해야 할 수 있습니다. 복원력이 우수하며 지속 가능한 분산형 네트워크는 모든 블록체인 프로토콜의 중요한 기반입니다. 웹3 개발자는 웹3 개발을 위한 완전 관리형 노드 호스팅 솔루션인 Google Cloud의 블록체인 노드 엔진을 사용할 수 있습니다. 또한 조직은 Google Cloud에서 자체 노드를 구성하고 관리할 수도 있습니다. 웹3 인프라의 신뢰할 수 있는 파트너인 Google Cloud는 안전하고 안정적이며 확장 가능한 노드 호스팅 인프라를 제공합니다. Google Cloud에서 노드를 호스팅하는 방법을 자세히 알아보려면 블로그 게시물 블록체인 노드 엔진 소개: 웹3 개발을 위한 완전 관리형 노드 호스팅을 참조하세요.

자체 관리형 블록체인 노드를 클라우드에 배포할 때 고려해야 할 기술적 사항과 아키텍처 결정에 관해 자세히 알아보려면 블로그 게시물 웹3을 위한 Google Cloud를 확인하세요.

블록체인 네트워크와 dApp을 포함하는 전용 노드 호스팅 다이어그램

이 실습에서는 가상 머신(VM)을 만들어 Ethereum RPC 노드를 배포합니다. Ethereum RPC 노드는 네트워크에서 블록체인 업데이트를 수신하고 RPC API 요청을 처리할 수 있습니다. 부팅 디스크 20GB, 가상 CPU(vCPU) 4개, RAM 16GB가 포함된 e2-standard-4 머신 유형을 사용합니다. 블록체인 데이터를 위한 공간을 충분히 확보하기 위해 200GB의 SSD 디스크를 인스턴스에 연결합니다. Ubuntu 20.04를 사용하고, 두 가지 서비스 즉 '실행 계층'인 Geth와 '합의 계층'인 Lighthouse를 배포합니다. 이 두 서비스는 함께 작동하여 Ethereum RPC 노드를 구성합니다.

목표

이 실습에서는 다음 작업을 수행하는 방법을 알아봅니다.

  • 영구 디스크가 있는 Compute Engine 인스턴스를 만듭니다.
  • 고정 IP 주소 및 네트워크 방화벽 규칙을 구성합니다.
  • 정기 백업을 예약합니다.
  • Ethereum의 실행 계층인 Geth를 배포합니다.
  • Ethereum의 합의 계층인 Lighthouse를 배포합니다.
  • Ethereum RPC 호출을 수행합니다.
  • Cloud Logging을 구성합니다.
  • Cloud Monitoring을 구성합니다.
  • 업타임 체크를 구성합니다.

설정 및 요건

실습 시작 버튼을 클릭하기 전에

다음 안내를 확인하세요. 실습에는 시간 제한이 있으며 일시중지할 수 없습니다. 실습 시작을 클릭하면 타이머가 시작됩니다. 이 타이머는 Google Cloud 리소스를 사용할 수 있는 시간이 얼마나 남았는지를 표시합니다.

실무형 실습을 통해 시뮬레이션이나 데모 환경이 아닌 실제 클라우드 환경에서 실습 활동을 진행할 수 있습니다. 실습 시간 동안 Google Cloud에 로그인하고 액세스하는 데 사용할 수 있는 새로운 임시 사용자 인증 정보가 제공됩니다.

이 실습을 완료하려면 다음을 준비해야 합니다.

  • 표준 인터넷 브라우저 액세스 권한(Chrome 브라우저 권장)
참고: 이 실습을 실행하려면 시크릿 모드(권장) 또는 시크릿 브라우저 창을 사용하세요. 개인 계정과 학습자 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.
  • 실습을 완료하기에 충분한 시간(실습을 시작하고 나면 일시중지할 수 없음)
참고: 이 실습에는 학습자 계정만 사용하세요. 다른 Google Cloud 계정을 사용하는 경우 해당 계정에 비용이 청구될 수 있습니다.

실습을 시작하고 Google Cloud 콘솔에 로그인하는 방법

  1. 실습 시작 버튼을 클릭합니다. 실습 비용을 결제해야 하는 경우 결제 수단을 선택할 수 있는 대화상자가 열립니다. 오른쪽에는 다음과 같은 항목이 포함된 실습 설정 및 액세스 패널이 있습니다.

    • Google Cloud 콘솔 열기 버튼
    • 이 실습에 사용해야 하는 임시 사용자 인증 정보(사용자 이름 및 비밀번호)
    • 필요한 경우 실습 진행을 위한 기타 정보

    실습 타이머는 페이지 상단에 있으며 남은 시간을 표시합니다.

  2. Google Cloud 콘솔 열기를 클릭합니다(Chrome 브라우저를 실행 중인 경우 마우스 오른쪽 버튼으로 클릭하고 시크릿 창에서 링크 열기를 선택합니다).

    실습에서 리소스가 가동되면 다른 탭이 열리고 로그인 페이지가 표시됩니다.

    팁: 두 개의 탭을 각각 별도의 창으로 나란히 정렬하세요.

    참고: 계정 선택 대화상자가 표시되면 다른 계정 사용을 클릭합니다.
  3. 필요한 경우 아래의 사용자 이름을 복사하여 로그인 대화상자에 붙여넣습니다.

    {{{user_0.username | "Username"}}}

    실습 설정 및 액세스 패널에서도 사용자 이름을 확인할 수 있습니다.

  4. 다음을 클릭합니다.

  5. 아래의 비밀번호를 복사하여 시작하기 대화상자에 붙여넣습니다.

    {{{user_0.password | "Password"}}}

    실습 설정 및 액세스 패널에서도 비밀번호를 확인할 수 있습니다.

  6. 다음을 클릭합니다.

    중요: 실습에서 제공하는 사용자 인증 정보를 사용해야 합니다. Google Cloud 계정 사용자 인증 정보를 사용하지 마세요. 참고: 이 실습에 자신의 Google Cloud 계정을 사용하면 추가 요금이 발생할 수 있습니다.
  7. 이후에 표시되는 페이지를 클릭하여 넘깁니다.

    • 이용약관에 동의하세요.
    • 임시 계정이므로 복구 옵션이나 2단계 인증을 추가하지 마세요.
    • 무료 체험판을 신청하지 마세요.

잠시 후 Google Cloud 콘솔이 이 탭에서 열립니다.

참고: Google Cloud 제품 및 서비스에 액세스하려면 탐색 메뉴를 클릭하거나 검색창에 제품 또는 서비스 이름을 입력합니다. 탐색 메뉴 아이콘 및 검색창

이 실습에서는 다음 도구를 사용합니다.

  • Ubuntu 24.04
  • Geth
  • Lighthouse
  • curl
  • gcloud

작업 1. 가상 머신을 위한 인프라 만들기

공개 고정 IP 주소, 방화벽 규칙, 서비스 계정, 스냅샷 일정을 만들고 새 IP 주소로 가상 머신을 만듭니다. 이것이 Ethereum이 배포되는 인프라 환경입니다.

공개 고정 IP 주소 만들기

이 섹션에서는 가상 머신에 사용되는 공개 IP 주소를 설정합니다.

  1. Cloud 콘솔에서 탐색 메뉴(탐색 메뉴 아이콘) > VPC 네트워크 > IP 주소로 이동합니다.
  2. IP 주소 카드에서 외부 예약을 클릭하여 고정 IP 주소를 만듭니다.
  3. 고정 주소 구성 시 다음을 사용합니다.
속성 값(입력 또는 선택)
이름 eth-mainnet-rpc-ip
네트워크 서비스 등급 프리미엄
IP 버전 IPv4
유형 리전
리전
연결 대상 없음
앞서 언급한 필드가 포함된 고정 주소 구성 페이지
  1. 예약을 클릭합니다.

방화벽 규칙 만들기

VM이 지정된 포트에서 통신할 수 있도록 방화벽 규칙을 만듭니다.

Geth는 P2P 통신에 TCP 및 UDP의 30303 포트를 사용합니다. Lighthouse는 P2P 통신에 TCP 및 UDP의 9000 포트를 사용합니다. Geth RPC는 TCP 8545 포트를 사용합니다.

  1. Cloud 콘솔에서 탐색 메뉴(탐색 메뉴 아이콘) > VPC 네트워크 > 방화벽으로 이동합니다.
  2. 방화벽 규칙을 만들려면 작업 모음에서 방화벽 규칙 만들기를 클릭합니다.
  3. 다음과 같이 방화벽을 구성합니다.
속성 값(입력 또는 선택)
이름 eth-rpc-node-fw
로그 사용 안함
네트워크 기본값
우선순위 1000
트래픽 방향 인그레스
일치 시 작업 허용
대상 지정된 대상 태그
대상 태그 eth-rpc-node(값을 입력한 후 Enter 키를 누름)
소스 필터 IPv4 범위
소스 IPv4 범위 0.0.0.0/0(값을 입력한 후 Enter 키를 누름)
지정된 프로토콜 및 포트 TCP: 30303, 9000, 8545 UDP: 30303, 9000
앞서 언급한 필드가 포함된 방화벽 규칙 만들기 페이지
  1. 만들기를 클릭합니다.

서비스 계정 만들기

VM이 사용할 서비스 계정을 만듭니다.

  1. Cloud 콘솔에서 탐색 메뉴(탐색 메뉴 아이콘) > IAM 및 관리자 > 서비스 계정으로 이동합니다.
  2. 작업 모음에서 서비스 계정 만들기를 클릭하여 서비스 계정을 만듭니다.
  3. 다음과 같이 서비스 계정을 구성합니다.
속성 값(입력 또는 선택)
서비스 계정 이름 eth-rpc-node-sa
서비스 계정 ID eth-rpc-node-sa
앞서 언급한 필드가 포함된 서비스 계정 만들기 페이지
  1. 만들고 계속하기를 클릭합니다.
  2. 다음 역할을 추가합니다.
속성 값(입력 또는 선택)
역할 Compute OS Login, Service Controller, Logs Writer, Monitoring Metric Writer, Cloud Trace Agent, Compute Network User
앞서 언급한 역할이 표시된 '이 서비스 계정에 프로젝트에 대한 액세스 권한 부여' 페이지
  1. 계속을 클릭합니다.
  2. 완료를 클릭합니다.

스냅샷 일정 만들기

이 섹션에서는 블록체인 데이터가 포함된 가상 머신의 연결된 디스크에 적용할 스냅샷 일정을 설정합니다. 이렇게 하면 체인 데이터를 백업할 수 있습니다.

  1. Cloud 콘솔에서 탐색 메뉴(탐색 메뉴 아이콘) > Compute Engine > 스냅샷으로 이동합니다.
  2. 스냅샷 일정 만들기를 클릭하여 스냅샷 일정을 만듭니다.
  3. 다음과 같이 스냅샷 일정을 구성합니다.
속성 값(입력 또는 선택)
이름 eth-mainnet-rpc-node-disk-snapshot
리전
리전
일정 옵션 주기: Daily, 시작 시간(UTC): 6:00 PM - 7:00 PM, 자동 삭제 전 스냅샷 보관 기간(일): 7
삭제 규칙 스냅샷 유지
  1. 만들기를 클릭합니다.
앞서 언급한 필드가 포함된 '스냅샷 일정 만들기' 페이지

가상 머신 만들기

이 섹션에서는 Ethereum 배포에 사용되는 가상 머신을 설정합니다.

  1. Cloud 콘솔에서 탐색 메뉴(탐색 메뉴 아이콘) > Compute Engine > VM 인스턴스로 이동합니다.

  2. 인스턴스 만들기를 클릭하여 VM을 만듭니다.

  3. 머신 구성에서

    다음 필드에 값을 입력합니다.

    속성 값(입력 또는 선택)
    이름 eth-mainnet-rpc-node
    리전
    영역
    시리즈 E2
    머신 유형 e2-standard-4
  4. OS 및 스토리지를 클릭합니다.

    변경을 클릭하고 다음 값을 선택합니다.

    속성 값(입력 또는 선택)
    운영체제 Ubuntu
    버전 Ubuntu 24.04 LTS(x86/64)
    부팅 디스크 유형 SSD 영구 디스크
    크기 50GB

    선택을 클릭합니다.

    추가 디스크에서 새 디스크 추가를 클릭합니다.

    속성 값(입력 또는 선택)
    이름 eth-mainnet-rpc-node-disk
    디스크 소스 유형 빈 디스크
    디스크 유형 SSD 영구 디스크
    크기 200GB(대규모 설치의 경우 2,000GB)

    저장을 클릭합니다.

  5. 데이터 보호를 클릭합니다.

    스냅샷 일정에서 eth-mainnet-rpc-node-disk-snapshot을 선택합니다.

  6. 네트워킹을 클릭합니다.

    속성 값(입력 또는 선택)
    네트워크 태그 eth-rpc-node(값을 입력한 후 Enter 키를 누름 - 방화벽 설정과 일치)
    • 네트워크 인터페이스에서 기본값을 클릭합니다.

    • 네트워크 인터페이스 카드에서 gVNIC를 선택합니다.

    • 외부 IPv4 주소: eth-mainnet-rpc-ip(앞에서 만든 고정 IP 주소 선택)

      완료를 클릭합니다.

  7. 보안을 클릭합니다.

    • ID 및 API 액세스에서 서비스 계정 eth-rpc-node-sa를 선택합니다.

    • 만들기를 클릭합니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.

가상 머신을 위한 인프라 만들기

작업 2. 가상 머신 설정 및 설치

이제 SSH를 통해 VM에 연결하고 명령어를 실행하여 소프트웨어를 설치합니다.

SSH를 통해 VM에 연결

  1. Cloud 콘솔에서 탐색 메뉴(탐색 메뉴 아이콘) > Compute Engine > VM 인스턴스로 이동합니다.
  2. eth-mainnet-rpc-node와 같은 행에서 SSH를 클릭하여 SSH 창을 엽니다.
  3. 브라우저에서 SSH를 통해 VM에 연결하도록 허용하라는 메시지가 표시되면 승인을 클릭합니다.

VM에 스왑 파일 만들기

프로세스에 추가 RAM을 제공할 수 있도록 스왑 파일을 만듭니다. 스왑 파일은 필요에 따라 VM이 사용할 수 있는 RAM의 용량을 늘리는 데 사용됩니다.

  1. 다음 명령어를 실행하여 40GB 스왑 파일을 만듭니다.
sudo dd if=/dev/zero of=/swapfile bs=1MiB count=40KiB

첫 번째 명령어는 실행하는 데 시간이 조금 걸립니다.

  1. 스왑 파일의 권한을 업데이트합니다.
sudo chmod 0600 /swapfile
  1. 스왑 파티션으로 사용할 파일을 지정합니다.
sudo mkswap /swapfile
  1. 재부팅 시 마운트된 드라이브가 인식되도록 /etc/fstab에 스왑 파일 구성을 추가합니다.
echo "/swapfile swap swap defaults 0 0" | sudo tee -a /etc/fstab
  1. 스왑 파일을 사용 설정합니다.
sudo swapon -a
  1. 스왑이 인식되었는지 확인합니다.
free -g

다음과 유사한 줄이 포함된 메시지가 표시됩니다.

출력:

total used free shared buff/cache available Mem: 15 0 0 0 15 15 Swap: 24 0 24

VM에 연결된 디스크 마운트

VM 설정 과정에서 연결된 디스크를 만들었습니다. 그러나 VM은 이를 자동으로 인식하지 않습니다. 그러므로 이 디스크를 사용하려면 먼저 포맷하고 '마운트'해야 합니다.

  1. 연결된 디스크를 확인합니다. 크기가 200GB인 sdb 항목이 표시됩니다.
sudo lsblk
  1. 연결된 디스크를 포맷합니다.
sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb
  1. 폴더를 만들고 연결된 디스크를 마운트합니다.
sudo mkdir -p /mnt/disks/chaindata-disk sudo mount -o discard,defaults /dev/sdb /mnt/disks/chaindata-disk
  1. 프로세스가 폴더를 읽고 쓸 수 있도록 폴더의 권한을 업데이트합니다.
sudo chmod a+w /mnt/disks/chaindata-disk
  1. 마운트된 드라이브의 디스크 ID를 검색하여 드라이브가 마운트되었는지 확인합니다.
sudo blkid /dev/sdb

아래 출력 상자에 표시된 것과 유사한 메시지가 표시됩니다.

출력:

/dev/sdb: UUID="7fa9c421-0054-4555-b0ca-b470a97a3d84" TYPE="ext4"
  1. 마운트된 디스크의 디스크 ID를 가져와 /etc/fstab 파일에 추가합니다. 이 파일은 VM이 다시 시작되더라도 드라이브가 계속 마운트되도록 보장합니다.
export DISK_UUID=$(findmnt -n -o UUID /dev/sdb) echo "UUID=$DISK_UUID /mnt/disks/chaindata-disk ext4 discard,defaults,nofail 0 2" | sudo tee -a /etc/fstab
  1. df 명령어를 실행하여 디스크가 정상적으로 마운트 및 포맷되고 올바른 크기가 할당되었는지 확인합니다.
df -h

새로 마운트된 볼륨과 크기를 보여주는 다음과 유사한 메시지가 표시됩니다.

출력:

/dev/sdb 196G 28K 196G 1% /mnt/disks/chaindata-disk

나중에 디스크 크기를 조절해야 하는 경우 이 안내를 따르세요.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.

VM에 스왑 파일 만들기 및 VM에 연결된 디스크 마운트

VM에 사용자 만들기

프로세스를 실행할 사용자를 만듭니다.

  1. 다음 명령어를 실행하여 ethereum이라는 이름의 사용자를 만듭니다.
sudo useradd -m ethereum sudo usermod -aG sudo ethereum sudo usermod -aG google-sudoers ethereum
  1. ethereum 사용자로 전환합니다.
sudo su ethereum
  1. Bash 명령줄을 시작합니다.
bash
  1. ethereum 사용자의 홈 폴더로 이동합니다.
cd ~

Ethereum 소프트웨어 설치

  1. 운영체제를 업데이트합니다.
sudo apt update -y sudo apt-get update -y
  1. 공통 소프트웨어를 설치합니다.
sudo apt install -y dstat jq software-properties-common
  1. Google Cloud 운영 에이전트를 설치합니다.
curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh sudo bash add-google-cloud-ops-agent-repo.sh --also-install
  1. 다운로드한 스크립트 파일을 삭제합니다.
rm add-google-cloud-ops-agent-repo.sh
  1. Geth 및 Lighthouse 클라이언트의 로그와 체인 데이터를 저장할 폴더를 만듭니다.
mkdir /mnt/disks/chaindata-disk/ethereum/ mkdir /mnt/disks/chaindata-disk/ethereum/geth mkdir /mnt/disks/chaindata-disk/ethereum/geth/chaindata mkdir /mnt/disks/chaindata-disk/ethereum/geth/logs mkdir /mnt/disks/chaindata-disk/ethereum/lighthouse mkdir /mnt/disks/chaindata-disk/ethereum/lighthouse/chaindata mkdir /mnt/disks/chaindata-disk/ethereum/lighthouse/logs
  1. 패키지 관리자에서 Geth를 설치합니다.
sudo add-apt-repository -y ppa:ethereum/ethereum sudo apt-get -y install ethereum
  1. Geth가 최신 버전이며 사용 가능한 상태인지 확인합니다.
geth version

다음과 유사한 줄이 포함된 메시지가 표시됩니다.

출력:

Geth Version: 1.14.11-stable Git Commit: ea9e62ca3db5c33aa7438ebf39c189afd53c6bf8 Architecture: amd64 Go Version: go1.23.1 Operating System: linux GOPATH= GOROOT=
  1. Lighthouse 클라이언트를 다운로드합니다. 이 스크립트는 GitHub에서 최신 출시 버전을 다운로드합니다.
# Fetch the latest release information from GitHub API RELEASE_URL="https://api.github.com/repos/sigp/lighthouse/releases/latest" LATEST_VERSION=$(curl -s $RELEASE_URL | jq -r '.tag_name') # Download the latest release using curl DOWNLOAD_URL=$(curl -s $RELEASE_URL | jq -r '.assets[] | select(.name | endswith("x86_64-unknown-linux-gnu.tar.gz")) | .browser_download_url') curl -L "$DOWNLOAD_URL" -o "lighthouse-${LATEST_VERSION}-x86_64-unknown-linux-gnu.tar.gz"
  1. Lighthouse tar 파일의 압축을 풀고 삭제합니다.
# Extract the tar file tar -xvf "lighthouse-${LATEST_VERSION}-x86_64-unknown-linux-gnu.tar.gz" # Remove the tar file rm "lighthouse-${LATEST_VERSION}-x86_64-unknown-linux-gnu.tar.gz"
  1. Lighthouse 바이너리를 /usr/bin 폴더로 옮기고 권한을 업데이트합니다.
sudo mv lighthouse /usr/bin
  1. Lighthouse가 최신 버전이며 사용 가능한 상태인지 확인합니다.
lighthouse --version

다음과 유사한 줄이 포함된 메시지가 표시됩니다. 버전 번호는 다를 수 있습니다.

출력:

Lighthouse v5.3.0-d6ba8c3 BLS library: blst-portable BLS hardware acceleration: true SHA256 hardware acceleration: false Allocator: jemalloc Profile: maxperf Specs: mainnet (true), minimal (false), gnosis (true)
  1. 공유 JWT 보안 비밀을 만듭니다. 이 JWT 보안 비밀은 실행 클라이언트의 RPC 엔드포인트를 호출할 수 있는 사용자를 제한하는 보안 메커니즘으로 사용됩니다.
cd ~ mkdir ~/.secret openssl rand -hex 32 > ~/.secret/jwtsecret chmod 440 ~/.secret/jwtsecret

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.

VM에 사용자 만들기 및 Ethereum 소프트웨어 설치

작업 3. Ethereum 실행 및 합의 클라이언트 시작

Ethereum에는 두 개의 클라이언트가 있습니다. 실행 계층인 Geth와 합의 계층인 Lighthouse입니다. 이 두 개의 클라이언트는 서로 병렬로 실행되며 함께 작동합니다. Geth는 Lighthouse가 호출할 authrpc 엔드포인트와 포트를 설정합니다. 이 엔드포인트는 로컬에 저장된 공통 보안 토큰으로 보호됩니다. Lighthouse는 실행 엔드포인트와 보안 토큰을 사용하여 Geth에 연결합니다.

Geth가 합의 클라이언트에 연결하는 방법에 대한 자세한 내용은 Connecting to Consensus Clients 문서를 참조하세요. Lighthouse가 실행 클라이언트에 연결하는 방법에 대한 자세한 내용은 Merge Migration - Lighthouse Book 문서를 참조하세요.

Geth 시작

다음은 Geth 실행 클라이언트를 시작합니다.

  1. 먼저 gcloud에서 인증합니다. SSH 세션 내에서 다음을 실행합니다.
gcloud auth login

'계속하시겠어요(Y/n)?' 메시지가 표시되면 Enter 키를 누릅니다.

  1. 새 탭에 표시된 링크로 이동합니다.

  2. 활성 사용자 이름()을 클릭하고 '허용'을 클릭합니다.

  3. 로그인하려는 머신의 gcloud CLI에 다음 인증 코드를 입력합니다 메시지가 표시되면 복사 버튼을 클릭한 다음 SSH 세션으로 돌아가서 승인 코드 입력: 메시지에 코드를 붙여넣습니다.

  4. 외부 IP 주소 환경 변수를 설정합니다.

export CHAIN=eth export NETWORK=mainnet export EXT_IP_ADDRESS_NAME=$CHAIN-$NETWORK-rpc-ip export EXT_IP_ADDRESS=$(gcloud compute addresses list --filter=$EXT_IP_ADDRESS_NAME --format="value(address_range())")
  1. 다음 명령어를 실행하여 Geth를 백그라운드 프로세스로 시작합니다. 이 실습에서는 라이트 노드인 'snap' 동기화 모드를 사용합니다. 풀 노드로 동기화하려면 동기화 모드로 'full'을 사용합니다. 명령줄에서 직접 실행하거나, 먼저 .sh 파일에 저장한 후 실행할 수 있습니다. systemd를 사용하여 서비스로 실행되도록 구성할 수도 있습니다.
nohup geth --datadir "/mnt/disks/chaindata-disk/ethereum/geth/chaindata" \ --http.corsdomain "*" \ --http \ --http.addr 0.0.0.0 \ --http.port 8545 \ --http.corsdomain "*" \ --http.api admin,debug,web3,eth,txpool,net \ --http.vhosts "*" \ --gcmode full \ --cache 2048 \ --mainnet \ --metrics \ --metrics.addr 127.0.0.1 \ --syncmode snap \ --authrpc.vhosts="localhost" \ --authrpc.port 8551 \ --authrpc.jwtsecret=/home/ethereum/.secret/jwtsecret \ --txpool.accountslots 32 \ --txpool.globalslots 8192 \ --txpool.accountqueue 128 \ --txpool.globalqueue 2048 \ --nat extip:$EXT_IP_ADDRESS \ &> "/mnt/disks/chaindata-disk/ethereum/geth/logs/geth.log" &

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.

Geth를 백그라운드 프로세스로 시작하고 'snap' 동기화 모드 사용
  1. 다음 명령어를 실행하여 프로세스 ID를 확인합니다.
ps -A | grep geth
  1. 로그를 살펴보고 프로세스가 올바르게 시작되었는지 확인합니다.
tail -f /mnt/disks/chaindata-disk/ethereum/geth/logs/geth.log

아래 출력 상자에 표시된 것과 유사한 메시지가 표시됩니다. Geth 클라이언트는 합의 클라이언트와 페어링될 때까지 체인을 추적할 수 없습니다.

출력:

Looking for peers peercount=1 tried=27 static=0 Post-merge network, but no beacon client seen. Please launch one to follow the chain!
  1. Ctrl+C를 입력하여 로그 모니터링을 중단합니다.

Lighthouse 시작

이제 Lighthouse 합의 클라이언트를 시작합니다.

  1. 다음 명령어를 실행하여 Lighthouse를 백그라운드 프로세스로 실행합니다. 명령줄에서 직접 실행하거나, 먼저 .sh 파일에 저장한 후 실행할 수 있습니다. systemd를 사용하여 서비스로 실행되도록 구성할 수도 있습니다.
nohup lighthouse bn \ --network mainnet \ --http \ --metrics \ --datadir /mnt/disks/chaindata-disk/ethereum/lighthouse/chaindata \ --execution-jwt /home/ethereum/.secret/jwtsecret \ --execution-endpoint http://localhost:8551 \ --checkpoint-sync-url https://sync-mainnet.beaconcha.in \ &> "/mnt/disks/chaindata-disk/ethereum/lighthouse/logs/lighthouse.log" &
  1. 다음 명령어를 실행하여 프로세스 ID를 확인합니다.
ps -A | grep lighthouse
  1. 로그 파일을 확인하여 프로세스가 올바르게 시작되었는지 확인합니다. 표시되는 데 몇 분 정도 걸릴 수 있습니다.
tail -f /mnt/disks/chaindata-disk/ethereum/lighthouse/logs/lighthouse.log

다음과 유사한 메시지가 표시됩니다.

출력:

INFO Syncing INFO Synced INFO New block received
  1. Ctrl+C를 입력하여 로그 모니터링을 중단합니다.

  2. Geth 로그를 다시 살펴보고 로그가 올바르게 생성되고 있는지 확인합니다.

tail -f /mnt/disks/chaindata-disk/ethereum/geth/logs/geth.log

아래 출력 상자에 표시된 것과 유사한 메시지가 표시됩니다.

출력:

Syncing beacon headers

노드가 블록체인과 동기화되었는지 확인

노드가 아직 동기화 중인지 확인합니다. 노드가 동기화되는 데 다소 시간이 걸립니다. (실습을 완료하기 위해 노드가 동기화될 때까지 기다릴 필요는 없습니다. 출력에 false 대신 동기화가 진행 중임을 나타내는 JSON이 표시되더라도 이는 정상입니다.) 동기화 상태를 확인하는 방법에는 Geth와 RPC 호출이라는 두 가지 방법이 있습니다.

  1. 다음 Geth 명령어를 실행하여 노드가 아직 동기화 중인지 확인합니다. 출력 결과가 'false'이면 네트워크와 완전히 동기화되었음을 의미합니다. 그러나 이 실습 중에는 계속 동기화가 진행 중인 상태일 가능성이 높습니다.
geth attach /mnt/disks/chaindata-disk/ethereum/geth/chaindata/geth.ipc
  1. Geth 콘솔에서 다음을 실행합니다.
eth.syncing

다음과 유사한 내용이 표시됩니다.

출력:

#If not synced: { currentBlock: 5186007, healedBytecodeBytes: 0, healedBytecodes: 0, healedTrienodeBytes: 0, healedTrienodes: 0, healingBytecode: 0, healingTrienodes: 0, highestBlock: 16193909, startingBlock: 0, syncedAccountBytes: 2338698797, syncedAccounts: 9417189, syncedBytecodeBytes: 302598044, syncedBytecodes: 58012, syncedStorage: 42832820, syncedStorageBytes: 9263550660 } #If synced: false
  1. exit를 입력하여 Geth 콘솔을 종료합니다.
  2. 다음 curl 명령어를 실행하여 노드가 아직 동기화 중인지 확인합니다. 명령줄 도구 'jq'는 curl 명령어의 JSON 출력 형식을 지정합니다. 'false' 출력은 네트워크와 동기화되었음을 의미합니다.
curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","id":67}' http://localhost:8545 | jq

출력:

#If not synced: { "jsonrpc": "2.0", "id": 67, "result": { "currentBlock": "0x4d70e9", "healedBytecodeBytes": "0x0", "healedBytecodes": "0x0", "healedTrienodeBytes": "0x0", "healedTrienodes": "0x0", "healingBytecode": "0x0", "healingTrienodes": "0x0", "highestBlock": "0xf71975", "startingBlock": "0x0", "syncedAccountBytes": "0x8b65b62d", "syncedAccounts": "0x8fb1e5", "syncedBytecodeBytes": "0x1209479c", "syncedBytecodes": "0xe29c", "syncedStorage": "0x28d93b4", "syncedStorageBytes": "0x2282690c4" } } #If synced: {"jsonrpc":"2.0","id":67,"result":false}
  1. 다음 curl 명령어를 실행하여 외부 IP 주소를 통해 노드에 액세스할 수 있는지 확인합니다.
curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","id":67}' http://$EXT_IP_ADDRESS:8545 | jq

출력:

#If not synced: { "jsonrpc": "2.0", "id": 67, "result": { "currentBlock": "0x4d70e9", "healedBytecodeBytes": "0x0", "healedBytecodes": "0x0", "healedTrienodeBytes": "0x0", "healedTrienodes": "0x0", "healingBytecode": "0x0", "healingTrienodes": "0x0", "highestBlock": "0xf71975", "startingBlock": "0x0", "syncedAccountBytes": "0x8b65b62d", "syncedAccounts": "0x8fb1e5", "syncedBytecodeBytes": "0x1209479c", "syncedBytecodes": "0xe29c", "syncedStorage": "0x28d93b4", "syncedStorageBytes": "0x2282690c4" } } #If synced: {"jsonrpc":"2.0","id":67,"result":false}

작업 4. Cloud 운영 구성

Google Cloud에서는 Ethereum 노드를 관리할 수 있는 여러 운영 서비스를 제공합니다. 이 섹션에서는 Cloud Logging, Managed Prometheus, Cloud Monitoring, Cloud 알림을 구성하는 방법을 자세히 알아봅니다.

Cloud Logging 구성

기본적으로 Geth와 Lighthouse는 각각 선언된 로그 파일에 로깅합니다. 로그 데이터를 Cloud Logging으로 가져와야 합니다. Cloud Logging에는 강력한 검색 기능이 있으며 특정 로그 메시지에 대한 알림을 만들 수도 있습니다.

  1. Cloud 운영 구성 파일을 업데이트할 수 있도록 파일 권한을 업데이트합니다.
sudo chmod 666 /etc/google-cloud-ops-agent/config.yaml
  1. Cloud Logging에 로그 데이터를 전송하도록 Cloud 운영 에이전트를 구성합니다. 이 운영 에이전트 구성을 포함하도록 '/etc/google-cloud-ops-agent/config.yaml' 파일을 업데이트합니다. 이 구성 파일은 Cloud Logging으로 가져올 Geth 및 Lighthouse 로그 파일을 정의합니다.
sudo cat << EOF >> /etc/google-cloud-ops-agent/config.yaml logging: receivers: syslog: type: files include_paths: - /var/log/messages - /var/log/syslog ethGethLog: type: files include_paths: ["/mnt/disks/chaindata-disk/ethereum/geth/logs/geth.log"] record_log_file_path: true ethLighthouseLog: type: files include_paths: ["/mnt/disks/chaindata-disk/ethereum/lighthouse/logs/lighthouse.log"] record_log_file_path: true journalLog: type: systemd_journald service: pipelines: logging_pipeline: receivers: - syslog - journalLog - ethGethLog - ethLighthouseLog EOF
  1. 저장한 후 다음 명령어를 실행하여 에이전트를 다시 시작하고 변경사항을 적용합니다.
sudo systemctl stop google-cloud-ops-agent sudo systemctl start google-cloud-ops-agent sudo systemctl status google-cloud-ops-agent
  1. Ctrl+C를 입력하여 상태 화면을 종료합니다.
  2. 상태에 오류가 있는 경우 다음 명령어를 사용하여 자세한 내용을 확인합니다.
sudo journalctl -xe | grep "google_cloud_ops_agent_engine"
  1. Cloud Logging을 살펴보고 콘솔에 로그 메시지가 표시되는지 확인합니다. Cloud 콘솔에서 탐색 메뉴(탐색 메뉴 아이콘)로 이동하여 모든 제품 보기를 클릭하고 모니터링 가능성에서 Logging을 클릭합니다. 왼쪽 메뉴에서 로그 탐색기를 클릭합니다. 다음과 유사한 메시지가 표시됩니다.
여러 메시지와 미리보기가 나열된 쿼리 결과 페이지

Managed Prometheus 구성

geth 및 lighthouse 클라이언트를 --metrics 플래그로 시작했으므로, 두 클라이언트 모두 http 포트를 통해 측정항목을 출력합니다. 이러한 측정항목은 Prometheus와 같은 시계열 데이터베이스에 저장할 수 있으며, 유용한 정보를 제공하는 Grafana 대시보드에 데이터를 제공하는 데 사용할 수 있습니다. 일반적으로는 VM에 Prometheus를 설치해야 하지만, Cloud 운영 에이전트에서 간단한 구성을 통해 측정항목을 캡처하고 Google Cloud의 Managed Prometheus 서비스에 저장할 수 있습니다.

  1. VM의 명령줄에서 Geth 측정항목 엔드포인트가 활성 상태인지 확인합니다.
curl http://localhost:6060/debug/metrics/prometheus

출력:

...... # TYPE vflux_server_clientEvent_deactivated gauge vflux_server_clientEvent_deactivated 0 # TYPE vflux_server_clientEvent_disconnected gauge vflux_server_clientEvent_disconnected 0 # TYPE vflux_server_inactive_count gauge vflux_server_inactive_count 0
  1. VM의 명령줄에서 Lighthouse 측정항목 엔드포인트가 활성 상태인지 확인합니다.
curl http://localhost:5054/metrics

출력:

...... gossipsub_heartbeat_duration_bucket{le="300.0"} 5679573 gossipsub_heartbeat_duration_bucket{le="350.0"} 5679573 gossipsub_heartbeat_duration_bucket{le="400.0"} 5679573 gossipsub_heartbeat_duration_bucket{le="450.0"} 5679573 gossipsub_heartbeat_duration_bucket{le="+Inf"} 5679573 ......
  1. 측정항목 데이터를 Managed Prometheus로 전송하도록 Cloud 운영 에이전트를 구성합니다. 이 운영 에이전트 구성을 포함하도록 '/etc/google-cloud-ops-agent/config.yaml' 파일을 업데이트합니다. 이 구성 파일은 Managed Prometheus로 가져올 Geth 및 Lighthouse 측정항목 엔드포인트를 정의합니다.
sudo cat << EOF >> /etc/google-cloud-ops-agent/config.yaml metrics: receivers: prometheus: type: prometheus config: scrape_configs: - job_name: 'geth_exporter' scrape_interval: 10s metrics_path: /debug/metrics/prometheus static_configs: - targets: ['localhost:6060'] - job_name: 'lighthouse_exporter' scrape_interval: 10s metrics_path: /metrics static_configs: - targets: ['localhost:5054'] service: pipelines: prometheus_pipeline: receivers: - prometheus EOF
  1. 저장한 후 다음 명령어를 실행하여 에이전트를 다시 시작하고 변경사항을 적용합니다.
sudo systemctl stop google-cloud-ops-agent sudo systemctl start google-cloud-ops-agent sudo systemctl status google-cloud-ops-agent
  1. Ctrl+C를 입력하여 상태 화면을 종료합니다.
  2. 상태에 오류가 있는 경우 다음 명령어를 사용하여 자세한 내용을 확인합니다.
sudo journalctl -xe | grep "google_cloud_ops_agent_engine"
  1. Cloud Logging을 확인하여 콘솔에 측정항목이 표시되는지 확인합니다. Cloud 콘솔에서 탐색 메뉴(탐색 메뉴 아이콘)로 이동하여 모든 제품 보기를 클릭하고 모니터링 가능성에서 Monitoring을 클릭합니다. 왼쪽 메뉴에서 측정항목 탐색기를 클릭합니다.

  2. <> PromQL 옵션을 선택합니다. 쿼리 상자에 Lighthouse 측정항목 gossipsub_heartbeat_duration_bucket을 입력합니다. 쿼리 실행을 클릭합니다. 다음과 유사한 결과가 표시됩니다.

요청된 데이터 측정항목과 해당 값을 나열하는 PROMQL 쿼리 결과 페이지

Geth 측정항목(예: rpc_duration_eth_blockNumber_success_count)에 대해서도 동일한 작업을 수행하여 Geth 측정항목이 표시되는지 확인할 수 있습니다.

Cloud Monitoring 보기

가상 머신에 Cloud Monitoring이 이미 활성화되어 있어야 합니다.

  1. Cloud 콘솔에서 탐색 메뉴(탐색 메뉴 아이콘) > Compute Engine > VM 인스턴스로 이동합니다.
  2. VM eth-mainnet-rpc-node를 클릭합니다.
  3. 모니터링 가능성 탭을 클릭합니다.
  4. 모든 섹션에 VM의 다양한 측정항목 그래프가 표시됩니다.
네트워크 트래픽, CPU 사용률 등 다양한 측정항목 그래프가 포함된 모니터링 가능성 탭 페이지
  1. 하위 메뉴와 기간을 다양하게 클릭하며 VM에서 바로 캡처되는 다양한 유형의 측정항목을 확인합니다.

알림 채널 구성

알림을 보낼 알림 채널을 구성합니다.

  1. Cloud 콘솔에서 탐색 메뉴(탐색 메뉴 아이콘)로 이동하여 모든 제품 보기를 클릭하고 모니터링 가능성에서 Monitoring을 클릭합니다. 왼쪽 메뉴에서 알림을 클릭합니다.
  2. 알림 채널 수정을 클릭합니다.
  3. 이메일 아래에서 새로 추가를 클릭합니다.
  4. 알림을 받을 사람의 이메일 주소와 표시 이름을 입력합니다.
  5. 저장을 클릭합니다.

측정항목 알림 구성

VM 측정항목을 기반으로 알림을 구성합니다.

  1. 왼쪽 메뉴의 감지 섹션에서 알림을 클릭합니다.
  2. 정책 만들기를 클릭합니다.
  3. 측정항목 선택을 클릭합니다.
  4. VM 인스턴스 > 디스크 > 디스크 사용률을 클릭하고 적용을 클릭합니다.
  5. 필터를 추가합니다.
속성 값(입력 또는 선택)
기기 /dev/sdb
상태 사용됨
앞서 언급한 필드가 포함된 정책 만들기 페이지
  1. 다음을 클릭합니다.
  2. 기준 값으로 90%를 입력합니다.
앞서 언급한 필드가 포함된 알림 트리거 구성 페이지
  1. 다음을 클릭하고 다음 값을 선택합니다.
속성 값
(입력 또는 선택)
알림 채널 사용 선택
알림 채널 이전에 만든 알림 채널 선택
사고 종료 시 알림 확인
사고 자동 종료 기간 2일
문서 VM의 디스크 공간 확인
이름 VM - 디스크 공간 알림 - 사용률 90%
앞서 언급한 필드가 포함된 '알림 구성 및 완료' 페이지 문서 및 알림 정책 이름 지정 텍스트 필드와 '다음' 버튼
  1. 다음을 클릭합니다.
  2. 정책 만들기를 클릭합니다.

업타임 체크 구성

HTTP 엔드포인트에 대한 업타임 체크를 구성합니다.

  1. 왼쪽 메뉴의 감지 섹션에서 업타임 체크를 클릭합니다.
  2. 업타임 체크 만들기를 클릭합니다.
  3. 다음 값을 사용하여 업타임 체크를 구성합니다.
속성 값
(입력 또는 선택)
프로토콜 HTTP
리소스 유형 URL
호스트 이름 [인스턴스의 외부 IP]
경로 /
'대상 옵션 더보기' 펼치기
요청 메서드 GET
포트 8545
'계속' 클릭 기본값 수락
'계속' 클릭 기본값 수락
알림 채널 선택 이전에 만든 알림 채널 선택
제목 eth-mainnet-rpc-node-uptime-check
  1. 테스트를 클릭합니다(성공을 나타내는 200 OK가 표시되어야 함).
  2. 만들기를 클릭합니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.

Cloud 운영 구성

수고하셨습니다

이 실습에서는 영구 디스크가 있는 Compute Engine 인스턴스를 만들고, 고정 IP 주소를 구성하고, 네트워크 방화벽 규칙을 구성하고, 백업을 예약하고, Geth 및 Lighthouse Ethereum 클라이언트를 배포하고, Ethereum RPC 호출로 설정을 테스트하고, Cloud Logging 및 Monitoring을 구성하고, 업타임 체크를 구성했습니다.

다음 단계/더 학습하기

Ethereum 여정을 계속하려면 다음 리소스를 확인하세요.

  • Ethereum 클라이언트(실행 계층)에 관한 자세한 내용은 Geth를 참조하세요.
  • Ethereum 클라이언트(합의 계층)에 대한 자세한 내용은 Lighthouse를 참조하세요.
  • Ethereum 전반에 대해 자세히 알아보려면 Ethereum을 참조하세요.
  • 웹3을 위한 Google Cloud에 대한 자세한 내용은 웹3을 위한 Google Cloud 웹사이트를 참조하세요.
  • Google Cloud용 블록체인 노드 엔진에 관한 자세한 내용은 블록체인 노드 엔진 페이지를 참조하세요.

Google Cloud 교육 및 자격증

Google Cloud 기술을 최대한 활용하는 데 도움이 됩니다. Google 강의에는 빠른 습득과 지속적인 학습을 지원하는 기술적인 지식과 권장사항이 포함되어 있습니다. 기초에서 고급까지 수준별 학습을 제공하며 바쁜 일정에 알맞은 주문형, 실시간, 가상 옵션이 포함되어 있습니다. 인증은 Google Cloud 기술에 대한 역량과 전문성을 검증하고 입증하는 데 도움이 됩니다.

설명서 최종 업데이트: 2026년 7월 27일

실습 최종 테스트: 2026년 7월 27일

Copyright 2026 Google LLC. All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.

시작하기 전에

  1. 실습에서는 정해진 기간 동안 Google Cloud 프로젝트와 리소스를 만듭니다.
  2. 실습에는 시간 제한이 있으며 일시중지 기능이 없습니다. 실습을 종료하면 처음부터 다시 시작해야 합니다.
  3. 화면 왼쪽 상단에서 실습 시작을 클릭하여 시작합니다.

시크릿 브라우징 사용

  1. 실습에 입력한 사용자 이름과 비밀번호를 복사합니다.
  2. 비공개 모드에서 콘솔 열기를 클릭합니다.

콘솔에 로그인

    실습 사용자 인증 정보를 사용하여
  1. 로그인합니다. 다른 사용자 인증 정보를 사용하면 오류가 발생하거나 요금이 부과될 수 있습니다.
  2. 약관에 동의하고 리소스 복구 페이지를 건너뜁니다.
  3. 실습을 완료했거나 다시 시작하려고 하는 경우가 아니면 실습 종료를 클릭하지 마세요. 이 버튼을 클릭하면 작업 내용이 지워지고 프로젝트가 삭제됩니다.

현재 이 콘텐츠를 이용할 수 없습니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

감사합니다

이용할 수 있게 되면 이메일로 연락드리겠습니다.

한 번에 실습 1개만 가능

모든 기존 실습을 종료하고 이 실습을 시작할지 확인하세요.

시크릿 브라우징을 사용하여 실습 실행하기

이 실습을 실행하는 가장 좋은 방법은 시크릿 모드 또는 시크릿 브라우저 창을 사용하는 것입니다. 개인 계정과 학생 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.