> ## Documentation Index
> Fetch the complete documentation index at: https://daehan-base.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 노드 실행

> Base 노드를 설정하고 실행하는 방법을 안내하는 튜토리얼입니다. Docker를 사용한 노드 동기화부터 플래시블록 활성화까지 단계별로 설명합니다.

이 튜토리얼은 자체 [Base 노드](https://github.com/base/node)를 설정하는 방법을 안내합니다.

## 목표

이 튜토리얼을 마치면 다음을 할 수 있습니다:

* Base 노드 배포 및 동기화
* 200ms 사전 확인을 위한 플래시블록 활성화

## 사전 요구 사항

<Warning>
  노드 실행은 시간이 많이 걸리고, 리소스가 많이 필요하며, 비용이 발생할 수 있습니다. 자체 노드를 실행하려는 이유를 아직 모르신다면 아마 필요하지 않을 것입니다.

  막 시작하는 중이고 RPC URL이 필요하다면 무료 엔드포인트를 사용할 수 있습니다:

  * **메인넷**: `https://mainnet.base.org`
  * **테스트넷 (Sepolia)**: `https://sepolia.base.org`

  **참고:** 우리의 RPC는 속도가 제한되어 있으며 프로덕션 앱에는 적합하지 않습니다.

  앱을 강화하고 사용자의 속도 제한을 피하고 싶다면 [파트너](/base-chain/node-operators/node-providers) 중 하나의 엔드포인트를 고려해 보세요.
</Warning>

### 하드웨어 요구 사항

노드를 실행하기 위해 이 구성을 권장합니다:

* 8코어 CPU
* 최소 16 GB RAM
* 로컬로 연결된 NVMe SSD 드라이브
* 충분한 스토리지 용량:
  * 최소: `(2 × 체인_크기) + 스냅샷_크기 + 20% 버퍼`
  * 스냅샷 복원(해당 시)과 체인 데이터 고려

<Note>
  Amazon Elastic Block Store (EBS)를 사용하는 경우, 초기 동기화 중 Base에 추가되는 새 블록 속도와 함께 지연 문제를 피하기 위해 타이밍 버퍼 디스크 읽기가 충분히 빠른지 확인하세요; `io2 block express`를 권장합니다.
</Note>

### 네트워킹

피어 발견 및 동기화를 위해 다음 포트가 접근 가능한지 확인하세요(방화벽으로 차단되지 않도록):

| 포트      | 프로토콜    | 목적                     |
| ------- | ------- | ---------------------- |
| `30303` | TCP/UDP | P2P 발견 (discv4) & RLPx |
| `9222`  | TCP/UDP | Reth 발견 v5 (discv5)    |

<Note>
  포트 `9222`는 Reth 피어 발견에 매우 중요합니다. 이 포트가 차단되면 노드가 피어를 찾고 동기화하는 데 어려움을 겪을 수 있습니다.
</Note>

### Docker

이 튜토리얼은 [Docker](https://www.docker.com/)에 익숙하고 머신에서 실행 중이라고 가정합니다.

### L1 RPC URL

자체 L1 RPC URL이 필요합니다. 직접 실행하거나 [파트너](/base-chain/node-operators/node-providers)와 같은 서드파티 제공업체를 통해 사용할 수 있습니다.

## 노드 실행

1. [저장소](https://github.com/base/node)를 클론합니다.
2. 이더리움 L1 풀 노드 RPC가 준비되어 있는지 확인하고(Base가 아님) `OP_NODE_L1_ETH_RPC`와 `OP_NODE_L1_BEACON`을 설정합니다(`docker-compose`를 사용하는 경우 `.env.*` 파일에서). 자체 L1 노드를 실행하는 경우 Base가 완전히 동기화되려면 L1 노드가 먼저 동기화되어야 합니다.
3. `docker-compose.yml`의 2개 `env_file` 키 아래 네트워크에 해당하는 줄(`.env.sepolia` 또는 `.env.mainnet`)의 주석을 해제합니다.
4. `docker compose up`을 실행합니다. 다음에서 응답이 오는지 확인합니다:

```bash Terminal theme={null}
curl -d '{"id":0,"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["latest",false]}' \
  -H "Content-Type: application/json" http://localhost:8545
```

<Warning>
  노드 동기화는 **며칠**이 걸릴 수 있으며 요청 할당량을 많이 소비합니다. 사용량을 모니터링하고 필요하면 플랜을 업그레이드하세요.
</Warning>

### 스냅샷

Base 노드 운영자이고 초기 동기화에 상당한 시간을 절약하고 싶다면 [스냅샷에서 복원](/base-chain/node-operators/snapshots#restoring-from-snapshot)할 수 있습니다. 스냅샷은 매주 업데이트됩니다.

### 동기화

다음으로 동기화 진행 상황을 모니터링할 수 있습니다:

```bash Terminal theme={null}
echo Latest synced block behind by: $((($(date +%s)-$( \
  curl -d '{"id":0,"jsonrpc":"2.0","method":"optimism_syncStatus"}' \
  -H "Content-Type: application/json" http://localhost:7545 | \
  jq -r .result.unsafe_l2.timestamp))/60)) minutes
```

노드를 사용하여 배포하려고 할 때 `Error: nonce has already been used`가 발생하면 동기화가 완료되지 않은 것입니다.

***

## 플래시블록 활성화

노드가 동기화되면 애플리케이션에 200ms 사전 확인을 제공하는 플래시블록을 활성화할 수 있습니다.

### 설정

플래시블록을 활성화하려면 다음 환경 변수로 노드를 시작합니다:

```sh theme={null}
NODE_TYPE=base CLIENT=reth RETH_FB_WEBSOCKET_URL="wss://mainnet.flashblocks.base.org/ws" docker-compose up
```

| 변수                      | 설명                         | 값      |
| ----------------------- | -------------------------- | ------ |
| `NODE_TYPE`             | 플래시블록이 있는 base reth 노드 활성화 | `base` |
| `CLIENT`                | 실행 클라이언트                   | `reth` |
| `RETH_FB_WEBSOCKET_URL` | 플래시블록 WebSocket 엔드포인트      | 아래 참조  |

### WebSocket 엔드포인트

| 네트워크    | URL                                     |
| ------- | --------------------------------------- |
| 메인넷     | `wss://mainnet.flashblocks.base.org/ws` |
| Sepolia | `wss://sepolia.flashblocks.base.org/ws` |

<Warning>
  **이 WebSocket 엔드포인트는 노드 인프라 전용입니다.**

  애플리케이션은 `wss://mainnet.flashblocks.base.org/ws`에 직접 연결하지 않아야 합니다. 대신 앱은 RPC 노드에 플래시블록 데이터를 조회해야 합니다. 자세한 내용은 [앱 통합 가이드](/base-chain/flashblocks/app-integration)를 참조하세요.
</Warning>

<Note>
  [base](https://github.com/base/base) 바이너리는 플래시블록 WebSocket 스트림을 수신하고 사전 확인 데이터를 캐시합니다. 플래시블록 인식 RPC 메서드가 호출되면 이 캐시에서 데이터를 반환합니다. 전체 메시지 스키마 및 페이로드 구조는 [플래시블록 API 개요](/base-chain/api-reference/flashblocks-api/flashblocks-api-overview)를 참조하세요.
</Note>

### 플래시블록 기능 확인

대기 중인 블록을 조회하여 노드가 플래시블록을 제대로 제공하고 있는지 테스트합니다:

```sh theme={null}
curl -X POST \
  --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["pending", false],"id":1}' \
  http://localhost:8545
```

성공적인 응답에는 최신 플래시블록의 블록 데이터가 포함됩니다. 플래시블록을 일시적으로 사용할 수 없는 경우 노드는 최신 최종 확정 블록을 반환하도록 폴백합니다.

### 사용 가능한 RPC 메서드

플래시블록 인식 노드는 모든 표준 이더리움 JSON-RPC 메서드와 플래시블록 전용 메서드 및 WebSocket 구독을 지원합니다. 코드 예시 및 파라미터 세부 사항을 포함한 전체 목록은 [플래시블록 API 참조](/base-chain/api-reference/flashblocks-api/flashblocks-api-overview)를 참조하세요.
