# 풀 노드(Full Node)

진행하기에 앞서, [우미 레포지토를](https://github.com/umee-network/umee) 반드시 참조하여, 노드를 실행하려는 네트워크의 체인 ID와 umeed 버전을 확인하십시오. 오퍼레이터는 소스에서 umeed 바이너리를 설치하거나 [릴리스 페이지](https://github.com/umee-network/umee/releases)에서 특정 OS 및 아키텍처에 대한 릴리스를 다운로드하도록 선택할 수 있습니다. 소스에서 umeed 바이너리를 설치하려면 먼저 OS에 Golang [1.16+](https://golang.org/dl/)가 [설치](https://golang.org/doc/install)되어 있어야 합니다. 환경을 올바르게 설치하고 설정하는 방법에 대한 지침은 설치 페이지를 참조하십시오. 환경을 올바르게 설정했으면 Umee [리포지토리](https://github.com/umee-network/umee)를 복제하고 바이너리를 설치합니다.

```
# Replace vX.Y.Z with the relevant release version, e.g. v0.1.0
$ git clone --depth 1 --branch vX.Y.Z https://github.com/umee-network/umee.git
$ cd umee && make install
```

`umeed` 최종 버전을 확인해주세요.

```
$ umeed version
```

## 하드웨어 요구사항

우미 노드를 실행하는 데 권장되는 하드웨어 스펙은 노드의 유즈케이스 및 희망하는 기능에 따라 다릅니다. 예를들어, 노드가 아카이브 노드 역할을 하는 경우(예: `pruning=nothing`) 와 스테이트 동기화 스냅샷을 제공하 경우 상당한 양의 디스크 공간이 필요할 수 있습니다. 일반적으로 권장되는 최소 요구 사항은 다음과 같습니.

* 2+ vCPU
* 4+ GB RAM
* 120+ GB SSD

## 초기

umeed 프로세스를 시작하기 전에 먼저 노드를 초기화해야 합니다.

```bash
# Replace moniker with your desired node's moniker and the chain ID
# of the network you are joining.
$ umeed init <moniker> --chain-id <chain-id>
```

위의 명령어는 기본적으로 $HOME 경로에 `.umee` 디렉토리를 생성하고 초기화합니다. 이 디렉토리에는 기본 `genesis.json` 파일과 함께 노드를 실행하는 데 필요한 모든 구성 파일이 포함되어 있습니다. `--home` 플래그를 지정하여 `.umee` 디렉토리의 위치를 덮어쓸 수 있습니다.

{% hint style="info" %}
참고로 기존 네트워크에 접속할 때 제공된 `--chain-id` 값은 자동 생성된 `genesis.json`을 교체하게 되므로 중요하지 않습니다.
{% endhint %}

초기화에 성공하시면, 디폴트로 생성된 `genesis.json` 파일을 접속하려는 특정 네트워크의 제네시스 상 파일로 덮어쓰도록 합니다. Umee [레포지토 ](https://github.com/umee-network/umee) 다른 신뢰할 수 있는 소스에서 제네시스 상태 파일을 검색할 수 있습니다.

```bash
$ cd ~/.umee/config
$ wget https://raw.githubusercontent.com/umee-network/umee/main/.../genesis.json
```

{% hint style="info" %}
우미 레포지토리에서 참조하는 파일로 제네시스 파일 SHA256 합계를 확인하십시오.
{% endhint %}

## 설

노드를 시작하기 전에 관련 설정을 확인하고 업데이트하는 것이 중요합니다. `~/.umee/config/`에는 세 가지 기본 구성 파일이 있습니다.&#x20;

* config.toml: 텐더민트(Tendermint)를 설정하는 데 사용됩니다. 텐더민트의 자세한 [설정은 이곳](https://docs.tendermint.com/master/nodes/configuration.html)에서 확인해주십시오.
* app.toml: Umee 애플리케이션을 구성하는 데 사용됩니다. 여기에는 애플리케이션 푸르닝(pruning), 상태 동기화, 최소 수수료 및 API/gRPC 세팅과 같은 구성요소가 포함됩니다.
* client.toml: `umeed` CLI를 사용하여 네트워크와 상호 작용할 때 클라이언트 측 입력을 구성하는 데 사용됩니다. 이 구성은 전적으로 선택 사항이며 `umeed` CLI 명령에 동일한 인수를 입력하지 않아도 되는 편의를 위해 주로 사용됩니다.&#x20;

`config.toml`과 `app.toml`모두 주석이 많이 달려 있으며 설정을 조정하는 방법에 대해 참조하 사용해야 합니다.

다음 소개되는 설정 요소들을 최소한 확인해주시길 권장드립니

* `app.toml`
  * `minimum-gas-prices`: 노드가 트랜잭션을 처리할 때 최소 수수료를 요구하도록 하려면 해당 항목 비어 있지 않은 값으로 설정하십시오. e.g. `minimum-gas-prices = "0.001uumee"` 거래 수수료는 `fee = ⌈tx.gasLimit * tx.gasPrice⌉` 로 설정되므로, 거래 수수료는 반드시 최소`⌈minimumGasPrices * tx.gasPrice⌉` 이 되어야 합니다.
  * `pruning:` 애플리케이션은 잔여 상태를 프루하고, 362880 상당의 데이터의 언본딩 기간을 유지합니다. 여러분이 모든 어플리케이션 상태를 프루닝 하자고 한다면, `pruning = "everything"` 이 값을 변경해주시십시오. 반대로, 모든 어플리케이션 상태(아카이브)를 가지고 싶은 경우에는 `pruning = "nothing"`로 설정해주시십오.
  * `min-retain-blocks:` 텐더민트 블록 프루닝과 관련된 값입니다. 어플리케이션 상태와 관련되어 있기 때문에 단순히 `pruning` 하는 것과는 다릅니다. 0이 아닌 경우에는, 애플리케이션은 `min-retain-blocks` 임계값을 초과하는 블록을 프루닝 하도록 상태를 텐더민트에게 전달될 것입니다. 내부적으로는, 최소 언본딩 기간에 해당하는 블록이 안정성을 유지하도록 에플리케이션이 최소치를 강제합니다.
  * `api.enable:` 애플리케이션의 API (gRPC HTTP 게이트웨이) 서비스를 시작합니다.
  * `grpc.enable:` 애플리케이션의 gRPC 서비스를 시작합니다.
* `config.toml`&#x20;
  * `rpc.laddr`: 텐데민트의 RPC는 기본적으로 localhost 인터페이스에서 수신 대기합니다. 외부적으로, 텐더민트 RPC에 연결하려면 이 값을 `0.0.0.0`으로 설정하여 모든 인터페이스/IP에서 수신 대기합니다.
  * `p2p.external_address`: 이 값을 노드의 공용 및 고정 IP 주소로 설정합니다. 텐더민트의 p2p 가십 레이어에 있는 다른 노드가 성공적으로 노드에 도달하고 연결할 수 있도록 하는 데 도움이 됩니다. &#x20;
  * `p2p.seeds`: 사용 가능한 시드 노드 목록으로 설정합니다. 시드 노드는 순수하게 노드와 피어 정보를 교환한 다음 연결을 끊는 노드입니다. 연결할 수 있거나 알려진 피어가 없는 경우 이 값을 설정하십시오.
  * `p2p.persistent_peers`: 용 가능하고 신뢰할 수 있는 피어 목록으로 설정합니다

## Cosmovisor and Service Management

`umeed` 프로세스를 관리하기 위해 코스모스 바이너리 통제 툴인 [cosmovisor](https://docs.cosmos.network/master/run-node/cosmovisor.html) 를 [systemd](https://systemd.io/) 를 사용하기를 권장드립니다.

먼저, [cosmovisor](https://docs.cosmos.network/master/run-node/cosmovisor.html) 를 다운 받아 주십시:

```bash
$ go get github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor
```

`cosmovisor` 디렉토리를 셋업하십시

```bash
$ useradd --no-create-home --shell /bin/false cosmovisor
$ mkdir $HOME/cosmovisor
```

제네시스 폴더를 생성하 `umeed` 바이너리를 복사하십시

```bash
$ mkdir -p $HOME/cosmovisor/genesis/bin
$ cp $(which umeed) $HOME/cosmovisor/genesis/bin
$ cp $(which cosmovisor) $HOME/cosmovisor
$ chown -R cosmovisor:cosmovisor $HOME/cosmovisor
```

&#x20;`/etc/systemd/system/cosmovisor.service` 에  [systemd](https://systemd.io/) 서비스 파일을 생성하여 다음 내용을 복사하여 붙여넣어 주십시오.&#x20;

{% code title="/etc/systemd/system/cosmovisor.service" %}

```
[Unit]
Description=Cosmovisor Process Manager
After=network.target

[Service]
User=root
Group=root
Type=simple
Environment="DAEMON_NAME=umeed"
Environment="DAEMON_HOME=$HOME"
Environment="DAEMON_RESTART_AFTER_UPGRADE=true"
Environment="DAEMON_ALLOW_DOWNLOAD_BINARIES=true"
Environment="UNSAFE_SKIP_BACKUP=false"
ExecStart=$HOME/cosmovisor/cosmovisor start ...
Restart=on-failure
LimitNOFILE=4096

[Install]
WantedBy=multi-user.target
```

{% endcode %}

[systemd](https://systemd.io/) 데몬 재실행하 `cosmovisor를` `실`행하십시 .

```bash
$ sudo systemctl daemon-reload
$ sudo systemctl start cosmovisor
```

최종적으로, `cosmovisor` 가 제대로 동작 되는지 상태 체크 해주십시오.

```bash
$ sudo systemctl status cosmovisor
$ sudo systemctl enable cosmovisor
```

{% hint style="warning" %}
오직 풀노드 또는 비검증인을 운영할 때만,`DAEMON_ALLOW_DOWNLOAD_BINARIES=true으로 설정하십시오.`검증인은 업그레이드된 바이너리를 미리 다운로드 하거나 빌드하고 올바른지 확인하는 것이 좋습니다.
{% endhint %}
