> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# getClusterNodes 사용 방법

> getClusterNodes 사용 사례, 코드 예제, 요청 매개변수, 응답 구조 및 팁을 학습합니다.

[`getClusterNodes`](https://www.helius.dev/docs/api-reference/rpc/http/getclusternodes) RPC 메서드는 현재 Solana 클러스터에 참여하고 있는 모든 알려진 노드의 목록을 반환합니다. 이 정보는 네트워크 분석, 대체 RPC 엔드포인트 발견 또는 조회된 노드의 관점에서 현재 네트워크 토폴로지를 이해하는 데 유용할 수 있습니다.

## 일반적인 사용 사례

* **네트워크 토폴로지 분석:** 클러스터 내 알려진 노드의 스냅샷을 얻고, 공개 키 및 네트워크 주소(gossip, TPU, RPC)를 포함합니다.
* **RPC 엔드포인트 발견:** 클러스터 내 다른 잠재적인 RPC 서버 식별 (가용성과 속도 제한은 다를 수 있음).
* **노드 버전 모니터링:** 클러스터 내 다양한 노드에서 실행되는 소프트웨어 버전을 관찰합니다.

## 요청 매개변수

이 메서드는 매개변수를 필요로 하지 않습니다.

## 응답 구조

JSON-RPC 응답의 `result` 필드는 객체 배열이 될 것입니다. 각 객체는 노드를 나타내며 다음 필드를 포함합니다:

* **`pubkey`** (string): base58로 인코딩된 노드의 공개 키(identity).
* **`gossip`** (string | null): 노드의 gossip 서비스에 대한 IP 주소와 포트입니다. 사용 가능하지 않으면 `null`일 수 있습니다.
* **`tpu`** (string | null): 노드의 트랜잭션 처리 유닛(TPU)을 위한 IP 주소와 포트입니다. 직접적인 트랜잭션 제출에 사용됩니다. `null`일 수 있습니다.
* **`rpc`** (string | null): 노드의 JSON-RPC 서비스에 대한 IP 주소와 포트입니다. 이 노드에 의해 RPC 서비스가 활성화되지 않거나 광고되지 않는 경우 `null`일 수 있습니다.
* **`version`** (string | null): 노드의 소프트웨어 버전입니다. 버전 정보가 사용 가능하지 않으면 `null`일 수 있습니다.
* **`featureSet`** (u32 | null): 노드의 기능 세트의 고유 식별자입니다. `null`일 수 있습니다.
* **`shredVersion`** (u16 | null): 이 노드가 블록(절편)을 저장하고 전송하는 데 사용되는 데이터 구조의 버전입니다. `null`일 수 있습니다.

## 예제

### 1. 모든 알려진 클러스터 노드 가져오기

이 예제는 조회된 RPC 엔드포인트에 알려진 모든 노드의 목록을 가져옵니다.

<CodeGroup>
  ```bash cURL theme={"system"}
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getClusterNodes"
    }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  const { Connection } = require('@solana/web3.js');

  async function getNodesInCluster() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const clusterNodes = await connection.getClusterNodes();
      console.log(`Found ${clusterNodes.length} cluster nodes:`);
      clusterNodes.forEach(node => {
        console.log(
          `  PubKey: ${node.pubkey}, Gossip: ${node.gossip || 'N/A'}, RPC: ${node.rpc || 'N/A'}, Version: ${node.version || 'N/A'}`
        );
      });
      // For full details:
      // console.log(JSON.stringify(clusterNodes, null, 2));
    } catch (error) {
      console.error('Error fetching cluster nodes:', error);
    }
  }

  getNodesInCluster();
  ```
</CodeGroup>

## 개발자 팁

* **노드의 관점:** 반환된 목록은 특정 RPC 노드에 알려진 노드를 반영합니다. 다른 RPC 노드는 네트워크 변경 중에 클러스터에 대한 약간 다른 관점을 가질 수 있습니다.
* **RPC 가용성:** 나열된 모든 노드의 RPC 포트가 반드시 열려 있거나 공개적으로 접근 가능한 것은 아닙니다. `rpc` 필드가 null이 아니면 광고된 RPC 엔드포인트임을 나타내지만, 접근성이나 성능을 보장하지는 않습니다.
* **동적 목록:** 클러스터 토폴로지는 동적입니다. 노드는 가입하고 떠날 수 있으며, 따라서 목록은 시간이 지남에 따라 변경될 수 있습니다.
* **큰 응답:** 메인넷 베타와 같은 큰 네트워크에서는 응답이 상당히 광범위할 수 있으며, 많은 노드를 나열합니다.

이 가이드는 Solana 클러스터 내의 노드를 발견하고 이해하기 위해 `getClusterNodes` RPC 메서드를 사용하는 데 필요한 정보를 제공합니다.
