This page is a machine translation of the English text.
Please contact faunsu https://twitter.com/faunsu19000 or symbol-community.com/community for language proofreading of articles.

## 목차
* Symbol 노드 정보
* 노드의 특징과 서버의 기본 사양
* Symbol Node 구축 절차
* Tips

## 심볼 노드에 대하여

블록체인 노드는 트랜잭션 데이터를 시간순으로 기록하며 과거 내용을 확인할 수 있습니다. 분산 원장으로서 여러 노드가 동일한 데이터를 공유하고 누구나 트랜잭션 데이터를 볼 수 있습니다. Symbol의 블록체인은 전 세계 노드 네트워크에 의해 구축되고 유지됩니다. 노드는 트랜잭션을 실행하고 검색을 수행하며 해당 데이터를 블록으로 원장에 기록합니다.

## 노드 기능 및 기본 서버 사양

Symbol 노드에는 세 가지 유형이 있습니다. 순서대로 설명하겠습니다.

-피어 노드
- API 노드
- 투표 노드

### 피어 노드

Harvester 노드라고도 하며 네트워크를 지원합니다. 주로 트랜잭션을 검증하여 블록체인에 새 블록을 추가하고 그 과정에서 수수료를 징수합니다.

![심볼-빌드-노드-피어-노드](../images/symbol_build_node_peer_node_45ccd0a42e.png)

### API 노드

API 노드의 주요 역할은 MongoDB에 데이터를 읽을 수 있는 형식으로 저장하는 것입니다.
API 노드는 또한 완료된 채권 거래에 대한 공동 서명을 수집할 책임이 있으며 이는 완료된 경우에만 처리됩니다.

![기호-빌드-노드-api-노드](../images/symbol_build_node_api_node_4deaa356b7.png)

* 단일 노드는 피어 노드와 API 노드를 동시에 실행할 수 있습니다. 이 경우 Dual Node로 표현됩니다.

### 투표 노드

Symbol은 최종화 수단으로 투표 노드를 제공합니다. 투표 노드는 그녀의 300만 xym을 가진 사용자만 만들 수 있습니다. 블록은 완료되면 완료된 것으로 간주됩니다. Symbol의 마무리는 [pBFT](https://pmg.csail.mit.edu/papers/osdi99.pdf)를 채택하고 투표 노드의 67% 이상이 승인해야 합니다. 예를 들어, 금융 기관이 블록체인에서 결제 처리를 구현할 때 생성된 블록이 변경되지 않도록 보장해야 합니다. 파이널라이즈를 이용하면 금융기관은 블록이 확정되었음을 알 수 있고 결제 처리를 원활하게 구현할 수 있다.

투표 노드는 심볼 블록체인에서 선택 사항입니다. 새로운 네트워크를 구축할 때 네트워크 설정에서 끌 수 있으며 단일 플러그인으로 배치됩니다. 종료가 중지되더라도 PoS+ 로직에 따라 블록이 계속 생성됩니다. 최종화를 위한 사용 사례로, 블록체인에서 비즈니스를 수행하려는 조직 및 산업은 강력한 PoS+ 체인에서 최종화 기능을 추가로 활성화하고 업계 내에서 블록 확인 타이밍을 공유하기 위해 투표 노드를 운영 및 관리할 수 있습니다. 인식을 사용하고 운영하기 쉬운 퍼블릭 컨소시엄 체인을 실행할 수 있습니다.

## 심볼노드 구축 절차

다음과 같은 환경으로 서버를 구성해주세요. 서버 운영이 걱정되신다면 [Allnode](https://www.allnodes.com/) 서비스 이용을 고려해보세요. Debian 이외의 Linux OS 배포판도 사용할 수 있지만 아래에 설명된 샘플 스크립트는 Debian을 기반으로 합니다.

- 필수 하드웨어 사양 이상의 서버(별도 표)
- 데비안 OS 10 이상
- 포트 80, 443, 3000, 3001, 7900

### (부록) 필수 하드웨어 사양

필수 요구 사항은 다음과 같습니다.

| 최소 사양 | 피어 노드 | API 노드 | 이중 / 투표 |
| --- | --- | --- | --- |
|CPU|2코어|4코어|4코어|
| 램 | 8GB | 16GB | 16GB |
| 디스크 크기 | 500GB | 750GB |
| 디스크 IOPS | 1500 IOPS SSD | 1500 IOPS SSD | 1500 IOPS SSD |


다음 표에는 권장 요구 사항이 나열되어 있습니다. 그것들을 사용하면 보다 부드러운 경험을 제공하고 어느 정도의 미래 보장을 제공할 것입니다.

권장사양 | 피어 노드 | API 노드 | 이중 / 투표 |
| --- | --- | --- | --- |
| CPU | 4코어 | 8코어 | 8코어 |
| 램 | 16GB | 32GB | 32GB |
| 디스크 크기 | 500GB | 750GB |
| 디스크 IOPS | 1500 IOPS SSD | 1500 IOPS SSD | 1500 IOPS SSD |

### 평소에 서버를 구축하지 않는 분들을 위한 주의사항

노드를 구축하기 전에 다음 보안 조치를 구현하십시오. 보안 조치가 부적절하면 본인 이외의 사람이 무단으로 액세스할 수 있습니다.

- 방화벽 설정
- SSH 통신을 위해 루트 로그인을 금지하고 공개키로 인증
- 원칙적으로 22, 80, 3000, 3001, 7900을 제외한 PORT는 닫혀 있어야 함

### 포트 사용

**22**: SSH 연결. 작업
**80**: Let's Encrypt + 기호 노드 목록
**3000**: HTTP REST 게이트웨이
**3001**: HTTPS REST 게이트웨이
**7900**: catapult-client와 노드 간 통신

### 서버 초기 설정

서버에 연결하고 먼저 서버에서 운영 계정을 만듭니다.

``` 강타
추가 사용자 기호
usermod -aG sudo 기호
수 - 기호
```

### 필수 소프트웨어 설치

다음 스크립트를 실행하여 환경을 구축합니다.

``` 강타
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/ymuichiro/symbol-node-builder/main/scripts/install.sh)"
```

일반적으로 다음과 같은 작업이 필요하지만 위의 스크립트가 자동으로 설정합니다.

- nvm, node.js 16, npm 설치
- docker 설치, docker-compose
- npm을 통해 symbol-bootstrap 설치
- `~/symbol-bootstrap/**` 폴더 생성

### Symbol-Bootstrap 시작 및 설정

다음 명령으로 Symbol-bootstrap을 시작합니다.

``` 강타
시디~/
심볼 부트스트랩
심볼 부트스트랩 마법사
```


1. 네트워크 선택 노드를 구축할 네트워크를 선택합니다.

```
네트워크 선택: (화살표 키 사용)
❯ 메인넷 노드
      테스트넷 노드
      부트스트랩 로컬 네트워크
      사용자 지정 네트워크 노드('custom-network-preset.yml' 파일 및 'nemesis-seed' 폴더 필요)
```


2. 노드 유형 선택 노드 유형 선택

```
어셈블리 선택: (화살표 키 사용)
❯ 듀얼 노드
    피어 노드
    API 노드
    데모 노드. Faucet 및 Explorer를 포함하는 이중 노드.
```


3. 개인 키를 처리하므로 오프라인을 권장합니다. 인터넷에 연결되어 있지 않으면 VPS 등을 사용할 수 없으므로 Y를 눌러 진행하십시오.

```
? Symbol Bootstrap은 민감한 정보(개인 키)로 작업을 시작할 예정이므로 다음을 적극 권장합니다.
계속하기 전에 네트워크 연결을 끊습니다. 오프라인이거나 관심이 없다면 YES라고 말하세요. (예/아니요)
```


4. Symbol 부트스트랩에 사용할 암호를 입력합니다.

```
사용자 지정 사전 설정, address.yml 및 preset.yml 파일을 암호화하고 해독하는 데 사용되는 암호를 입력합니다.
암호, 개인 키가 암호화됩니다.
```


5. 수확 설정에는 4개의 계정이 필요합니다. 그들 중 기본 계정을 지정하십시오. 새 계정을 만들거나 기존 계정의 개인 키를 입력하세요.

```
? 기본 계정을 어떻게 만드시겠습니까: (화살표 키 사용)
❯ 새 계정 생성
     개인 키 입력
     기본 계정의 64 HEX 개인 키를 입력하십시오(또는 Enter를 눌러 옵션을 다시 선택하십시오).
```


6. 5번에 개인키를 입력했다면 계정 주소가 나옵니다. 차이가 없으면 y를 선택하십시오.

```
? 메인 계정으로 사용할 예상 주소 TCDNP********************55KCQ입니까? (예/아니요)
```


7. 전송 계정과 기본 계정을 지정합니다.

```
? 운송 계정을 어떻게 만드시겠습니까: (화살표 키 사용)
❯ 새 계정 생성
    개인 키 입력
```


8. VRF 계정도 비슷합니다.

```
? VRF 계정을 어떻게 만드시겠습니까: (화살표 키 사용)
❯ 새 계정 생성
     개인 키 입력
```


9. 원격 계정도 비슷합니다.

```
? 원격 계정을 어떻게 만드시겠습니까: (화살표 키 사용)
❯ 새 계정 생성
    개인 키 입력
```


10. HTTP 설정을 구성합니다. 두 번째 자동 ~ 을 선택하면 자동으로 HTTPS를 설정할 수 있습니다.

```
REST 게이트웨이는 기호 탐색기에서 인식할 수 있도록 HTTPS(보안 프로토콜)에서 실행되어야 합니다.
? HTTPS 설정 방법 선택: (화살표 키 사용)
❯ 기본 지원, SSL 인증서와 키가 있습니다.
     자동, letencyrpt를 사용하여 모든 키와 인증서가 자동으로 생성/갱신됩니다.
     없음
```


11. 호스트 이름을 입력합니다. IP 주소 또는 도메인을 지정합니다.

```
? 아웃바운드 호스트 IP를 가리키는 공개 도메인 이름(예: node-01.mysymbolnodes.com)을 입력하세요. 이 값은
HTTPS에서 실행할 때 필요합니다!
```


12. 친숙한 이름을 입력합니다.

```
노드의 친숙한 이름을 입력하십시오.
```


13. 4가지 유형의 계정(키) 중 암호화할 계정 수를 선택합니다.

```
? 사용하려는 보안 유형 선택: (화살표 키 사용)
     PROMPT_MAIN: 부트스트랩은 인증서 업그레이드를 수행할 때 기본 개인 키를 요청할 수 있습니다. 다른 키는 암호화됩니다.
❯ PROMPT_MAIN_TRANSPORT: 부트스트랩은 인증서를 재생성할 때 기본 및 전송 개인 키를 요청할 수 있습니다.
키가 암호화됩니다.
     암호화: 모든 키가 암호화되어 비밀번호만 묻습니다.
```


15. 투표 노드를 등록하거나 선택합니다. 300만 xym을 소유하지 않으면 투표 노드가 될 수 없습니다.

```
투표 노드를 만들고 있습니까? (예/아니요)
```

모든 질문에 답하면 `~/custom-preset.yml`이 완성됩니다. 기본적으로 BenefitAddress는 지정되지 않습니다. 파일을 열고 올바른 값을 지정하십시오. 아래에 샘플이 나와 있습니다.

```yaml
조립: 이중
프리셋: 메인넷
privateKeySecurityMode: PROMPT_MAIN_TRANSPORT
노드:
      -
          호스트: example.org
          최대 잠금 해제 계정: 30
          혜택 주소: ${your-symbol-address}
          투표: 거짓
          friendlyName: ${귀하의 이름}
          mainPrivateKey: ${your-node-main-privatekey}
          vrfPrivateKey: ${your-node-vrf-privatekey}
          remotePrivateKey: ${your-node-remote-privatekey}
          transportPrivateKey: ${your-node-transport-privatekey}
https프록시:
      -
          excludeDockerService: 거짓
```

**호스트** … 노드에 할당된 IP 주소 또는 도메인을 입력합니다.
**maxUnlockedAccounts** … 노드에 위임할 수 있는 최대 주소 수를 지정합니다.
**beneficiaryAddress** … 노드가 받은 하베스팅 보상의 지불 목적지 주소 지정
**friendlyName** … 모든 노드의 이름을 지정합니다.

### 심볼 노드 시작

다음 명령을 실행하여 `~/custom-preset.yml`을 로드하고 symbol-bootstrap을 시작합니다.

``` 강타
cd ~/기호-부트스트랩
심볼-부트스트랩 구성 -p 메인넷 -a 듀얼 -c custom-preset.yml
기호-부트스트랩 시작 -d
심볼-부트스트랩 healthCheck
```

다음은 symbol-bootstrap의 시작 및 중지 명령 목록입니다.

`기호-부트스트랩 시작 -
d` 처음 부팅할 때만 지정됩니다.
`symbol-bootstrap run -d` 두 번째 및 후속 부팅에 대해 지정하십시오.
`symbol-bootstrap stop` 언제 일시 중지할지 지정합니다. 실행 명령으로 다시 시작할 수 있습니다.

* `-d`를 지정하면 백엔드에서 시작할 수 있습니다. symbol-bootstrap에서 오류가 발생하고 디버그해야 하는 경우를 제외하고 원칙적으로 `-d`를 추가하십시오.

이 작업은 symbol-bootstrap의 새로운 구성을 완료합니다. 2023년 3월부터 새로운 symbol-bootstrap이 시작되며 모든 블록이 동기화되는 데 약 1.5~2일이 소요됩니다. 위임자를 모집할 때는 모든 블록이 동기화되었을 때 수행하십시오.

다음은 다양한 팁에 대해 설명합니다.

##팁

### 노드 인증서 업데이트

노드 인증서는 노드가 구축된 후 약 1년 후에 만료됩니다. 노드 인증서를 갱신하지 않는 노드는 무효화됩니다.

1. healthCheck로 노드 SSL 인증서 만료 확인

```
심볼-부트스트랩 healthCheck

> 노드 노드에 대한 node.crt.pem 인증서가 2023년 8월 2일 14:30:34 GMT에 만료됩니다. 아직 갱신할 필요가 없습니다.
```

2. 인증서 갱신

```
symbol-bootstrap 갱신 인증서
```

### Symbol Node 목록에 노드 정보 표시

자신의 노드 정보를 [심볼 노드 목록](https://symbol-tools.com/symbolTools/view/tool/nodeList.html)에 게시할 수 있습니다. 게시 방법에는 두 가지가 있습니다.

1. 결제로 등록(권장)

[댓글 등록](https://symbol-tools.com/symbolTools/view/tool/nodeAdminManual.html) 페이지에 접속하여 게시 정보를 생성하고 10xym(2023/03/09 기준 수수료 금액)을 지불하면 됩니다. 납부하여 반영합니다.

2. 노드에 nodeSetting.json을 설정하여 등록

무료로 지정할 수 있습니다. 자체 서버를 소유하고 있고 서버에서 설정을 구성할 수 있는 경우 이 방법을 선택할 수 있습니다. 다음 단계를 수행하는 방법을 모르는 경우 1단계를 권장합니다.

**설치 방법**

- 노드의 다음 경로에 구성 파일을 배치합니다.
      - `http://xxx.xxx.xxx.xxx:80/nodeSetting.json`
- symbol-bootstrap이 실행 중이며 포트 80, 443에서도 수신 대기 중입니다. 따라서 다음 또는 이와 동등한 작업을 수행해야 합니다.
      - `~/symbol-bootstrap/target/docker/docker-compose.yml`을 편집하고 `nodeSetting.json`이 nginx에서 자신의 경로에 마운트되도록 볼륨 정보를 다시 작성합니다.
      - `symbol-bootstrap compose` 등으로 컨테이너를 다시 빌드하고 노드를 시작합니다.

* 이 과정은 symbol-bootstrap 업데이트나 프리셋 업데이트 시 `docker-compose.yml` 파일을 덮어쓰게 되므로 매번 재등록이 필요합니다.

* 2 Allnodes 사용자는 사용할 수 없습니다.

### MongoDB 인덱스 검토

참고문헌은 아래에 게시

[https://qiita.com/nem_takanobu/items/8e39cc02df1b7adccfee](https://qiita.com/nem_takanobu/items/8e39cc02df1b7adccfee)

### custom-preset.yml 업데이트 시

`custom-preset.yml`은 symbol-bootstrap 작동 중 변경될 수 있습니다. 이 경우 파일을 업데이트한 후 변경 사항을 반영하기 위해 다음과 같이 실행해야 합니다.

``` 강타
기호-부트스트랩 중지
심볼-부트스트랩 구성 -p 메인넷 -a 듀얼 -c custom-preset.yml --upgrade
기호-부트스트랩 작성 --업그레이드
기호-부트스트랩 실행 -d
```

### 노드 오류 원인 확인 방법

어떤 이유로 노드가 다운될 때 오류의 원인을 확인하는 방법에는 여러 가지가 있습니다.

1. symbol-bootstrap의 로그 출력 확인

symbol-bootstrap을 시작할 때 `-d` 옵션을 생략하면 로그를 확인하면서 시작할 수 있습니다. 다음을 실행하여 로그를 볼 수 있습니다.

``` 강타
심볼 부트스트랩 실행
```

2. docker의 로그 기능 사용

1단계는 모든 컨테이너의 로그를 문제로 출력합니다.
다음 명령을 실행하면 문제가 있는 컨테이너를 확인할 수 있습니다.

``` 강타
기호-부트스트랩 중지
기호-부트스트랩 실행 -d
도커 ps -a
```

또한 정상이라면 다음과 같이 출력됩니다. 샘플로 설명합니다.

``` 강타
기호@xxxxxxxxxxxxxxxxxxx:~$ docker ps -a
컨테이너 ID 이미지 명령 생성 상태 포트 이름
8d44313c93d6 steveltn/https-portal:1.19 "/init" 40시간 전 최대 40시간 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:3001->443/tcp, :::3001->443/tcp https-프록시
71fa6d455cf6 symbolplatform/symbol-server:gcc-1.0.3.5 "/bin/bash /symbol-c…" 40시간 전 최대 40시간 0.0.0.0:7900->7900/tcp, :::7900->7900/tcp 노드
542ca6019607 symbolplatform/symbol-server:gcc-1.0.3.5 "/bin/bash /symbol-c…" 2일 전 최대 40시간 브로커
5b6765426fd2 symbolplatform/symbol-rest:2.4.2 "docker-entrypoint.s…" 2일 전 최대 40시간 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp rest-gateway
19c9ac8edce9 mongo:4.4.3-bionic "docker-entrypoint.s…" 2일 전 최대 40시간 27017/tcp db
```

STATUS가 Exec(0)인 컨테이너가 있으면 오류가 발생한 것입니다. 해당 컨테이너에 대한 로그만 확인하고 싶다면 다음과 같이 실행한다. ${CONTAINER ID}는 Exec(0)이 출력한 컨테이너의 ID를 지정합니다.

``` 강타
도커 로그 ${CONTAINER ID}
```

## 링크

- [Symbol 노드를 이전하는 방법](https://symbol-community.com/ko/docs/30)
- [심볼 도구 - 심볼 노드 목록](https://symbol-tools.com/symbolTools/view/tool/nodeList.html)
- [심볼 노드 - 노드](https://symbol-tools.com/symbolTools/view/tool/nodeList.html)
- [심볼 문서](https://docs.symbol.dev/en/guides/network/running-a-symbol-node.html)
- [Symbol 부트스트랩 저장소](https://github.com/fboucquez/symbol-bootstrap)
