사전 노드
용어함정

노드

gabury1

노드는 맥락마다 다른 것을 가리키는 말입니다. 기계 한 대일 때도 있고 문서 안의 글자 한 조각일 때도 있습니다. 어느 세계의 이야기냐를 먼저 알아야 뜻이 정해집니다.

쉽고 빠른 이해

무슨 일을 하는 물건인가 — 노드는 한 가지 물건에 붙은 이름이 아닙니다. 분야마다 다른 것에 붙는 이름입니다. 클러스터에 서버를 한 대 더하면 그 서버가 노드이고, 웹 문서 안의 글자 한 조각도 노드입니다.

왜 이렇게 하나 — 분야마다 자기 문서에서 노드를 따로 정의해 두었습니다. 어느 하나가 정답이라서 나머지가 틀린 것이 아니라, 정의가 선 자리가 여럿입니다.

어떻게 도나

  1. 지금 읽는 문서가 어느 분야 것인지 먼저 봅니다.
  2. 그 분야 문서가 적어 둔 정의로 노드를 읽습니다.
  3. 익숙한 분야의 뜻을 다른 분야 문서에 옮겨 붙이지 않습니다.

대가 — 노드라는 말만으로는 뜻이 서지 않아서 맥락 이름을 늘 함께 대야 합니다. 익숙한 뜻 하나로 밀어붙이면 빠지는 것이 생깁니다. 노드를 서버로만 옮겨 읽으면 라우터가 통째로 빠집니다.

상세

노드라는 말은 자리마다 따로 정의됩니다. 정의를 적어 둔 문서가 자리마다 다르고, 그 문서가 가리키는 대상도 다릅니다.

쿠버네티스에서 노드는 기계 한 대입니다. 쿠버네티스 문서는 컨테이너를 파드에 담아 노드 위에서 돌리는 방식으로 워크로드를 실행한다고 적습니다. 노드는 클러스터에 따라 가상 머신일 수도 물리 머신일 수도 있습니다. Elasticsearch 문서도 클러스터에 더하는 서버를 노드라고 부릅니다.

DOM(Document Object Model, 문서 객체 모델)에서 노드는 객체입니다. WHATWG DOM 표준은 Node 인터페이스를 구현한 객체를 노드라고 적고, 그 노드들이 트리에 참여한다고 적습니다. 요소도 텍스트도 주석도 문서 자신도 전부 노드입니다. 여기서 노드는 기계와 아무 상관이 없습니다.

트리와 그래프 이야기에서 노드는 구조상의 한 점입니다. RFC(Request for Comments) 1034 는 도메인 이름 공간이 트리 구조이고 트리 위의 각 노드와 잎이 리소스 집합 하나에 대응한다고 적습니다. 그 한 점이 구현에서 무엇이 되는지는 또 자리마다 다릅니다.

RFC 8200 에서 노드는 장치입니다. IPv6(Internet Protocol version 6)를 구현한 장치가 전부 노드입니다. 클러스터에 속했는지는 이 정의가 따지지 않습니다.

그래서 노드라는 말만으로는 무엇을 가리키는지가 정해지지 않습니다. 맥락 이름을 먼저 대야 뜻이 섭니다. 클러스터에서 파드를 담아 돌리는 머신과 Node 인터페이스를 구현한 객체는 같은 이름을 쓸 뿐 다른 물건입니다.

맥락별 뜻

맥락 뜻 출처
오케스트레이션 · 분산 시스템 클러스터에 속해 워크로드를 돌리는 머신 한 대. 가상 머신이거나 물리 머신 Kubernetes Documentation, Nodes · Elastic Docs, Clusters, nodes, and shards
웹 문서 트리 Node 인터페이스를 구현한 객체. 요소 · 텍스트 · 주석 · 문서가 전부 여기에 든다 DOM Living Standard, 4.2 Node tree · 4.4 Interface Node
트리 · 그래프 자료구조 데이터를 담고 다른 노드를 가리키는 구조상의 한 점 RFC 1034 §3.1 · SQLite Database File Format 1.6
네트워크 프로토콜 IPv6 를 구현한 장치. 호스트와 라우터를 아우르는 상위 말 RFC 8200 §2 Terminology

오케스트레이션과 분산 시스템

쿠버네티스 문서는 노드를 워크로드가 실제로 도는 자리로 적습니다. 쿠버네티스는 컨테이너를 파드에 담아 노드 위에서 돌립니다. 노드는 클러스터에 따라 가상 머신일 수도 물리 머신일 수도 있습니다. 각 노드는 제어 평면이 관리하고, 파드를 돌리는 데 필요한 서비스들을 담고 있습니다. 보통은 클러스터에 노드가 여럿 있습니다. 학습용이거나 자원이 제한된 환경에서는 노드가 하나뿐일 수도 있습니다. 노드 위에 놓이는 구성요소로 문서가 드는 것은 kubelet 과 컨테이너 런타임과 kube-proxy 입니다.

Elasticsearch 문서도 같은 뜻으로 씁니다. 용량을 늘리려면 클러스터에 서버를 더하고, 그 서버가 노드입니다. Elasticsearch 는 데이터와 쿼리 부하를 사용 가능한 노드 전체에 자동으로 분산합니다. 데이터를 노드에 나눠 놓는 방식은 인덱스를 샤드로 쪼개는 것입니다.

두 문서가 가리키는 것은 같습니다. 클러스터를 이루는 기계 한 대입니다.

웹 문서 트리

DOM 표준에서 노드는 Node 를 구현한 객체입니다. 표준은 노드들이 트리에 참여하며 그 트리를 노드 트리라고 부른다고 적습니다. 실제로 다루게 되는 것은 더 구체적인 객체들이라는 단서도 함께 답니다. 이 명세에서 문서라는 말은 마크업 기반 자원 전부를 가리킵니다. 짧은 정적 문서부터 멀티미디어가 실린 긴 글, 그리고 온전한 대화형 애플리케이션까지입니다. 그런 문서 하나하나가 노드 트리로 표현됩니다. 트리 안의 어떤 노드는 자식을 가질 수 있고, 어떤 노드는 언제나 잎입니다.

노드의 종류는 Node 인터페이스가 상수로 매겨 둡니다. ELEMENT_NODE 가 1, ATTRIBUTE_NODE 가 2, TEXT_NODE 가 3, COMMENT_NODE 가 8, DOCUMENT_NODE 가 9, DOCUMENT_FRAGMENT_NODE 가 11 입니다. 인터페이스는 parentNode · childNodes · firstChild · lastChild 같은 속성도 함께 정의합니다. 텍스트 한 조각도 주석 한 줄도 이 정의 안에서는 노드입니다.

트리와 그래프 자료구조

RFC 1034 는 도메인 이름 공간이 트리 구조라고 적습니다. 트리 위의 각 노드와 잎은 리소스 집합 하나에 대응하고, 그 집합은 비어 있을 수도 있습니다. 도메인 시스템은 내부 노드와 잎의 쓰임을 구분하지 않고, 이 문서는 둘 다 노드라는 말로 부른다고 밝힙니다. 각 노드는 길이가 0 에서 63 옥텟인 라벨을 하나 갖습니다. 형제 노드끼리는 같은 라벨을 가질 수 없지만, 형제가 아닌 노드끼리는 같은 라벨을 써도 됩니다. 길이 0 라벨 하나는 루트용으로 예약되어 있습니다. 어떤 노드의 도메인 이름은 그 노드에서 루트까지 가는 경로 위의 라벨 목록입니다.

같은 한 점이 구현에서는 디스크 한 장이 되기도 합니다. SQLite 파일 포맷 문서는 노드라는 낱말을 쓰지 않고 페이지라고 적습니다. 다만 그 페이지가 트리에서 하는 일은 노드가 하는 일과 같습니다. b-tree 페이지는 내부 페이지이거나 잎 페이지입니다. 잎 페이지는 키를 담고, 테이블 b-tree 라면 키마다 데이터가 딸립니다. 내부 페이지는 k 개의 키와 함께 자식 b-tree 페이지를 가리키는 포인터 k+1 개를 담습니다. 여기서 포인터는 자식 페이지 번호인 32비트 부호 없는 정수입니다. 모든 b-tree 페이지는 부모 페이지를 많아야 하나 갖습니다. 부모가 없는 페이지는 루트 페이지라고 부릅니다.

네트워크 프로토콜

RFC 8200 은 용어 절 첫 줄에서 노드를 IPv6 를 구현한 장치라고 적습니다. 라우터는 자기 앞으로 명시적으로 보내지지 않은 IPv6 패킷을 전달하는 노드입니다. 호스트는 라우터가 아닌 모든 노드입니다. 링크는 노드들이 IPv6 바로 아래 계층에서 통신할 수 있는 통신 설비나 매체를 말합니다. 문서가 드는 예는 이더넷, PPP(Point-to-Point Protocol) 링크, X.25, 프레임 릴레이, ATM(Asynchronous Transfer Mode) 네트워크, 그리고 IPv4(Internet Protocol version 4, 인터넷 프로토콜 4판) 나 IPv6 자신 위에 올린 터널입니다. 같은 링크에 붙은 노드들은 네이버이고, 노드가 링크에 붙는 자리는 인터페이스입니다.

이 정의는 클러스터를 말하지 않습니다. 쿠버네티스 노드와 겹쳐 보이지만 걸려 있는 조건이 다릅니다. 한쪽은 클러스터에 속해 파드를 돌리는 머신이고, 다른 한쪽은 클러스터와 무관하게 프로토콜을 구현한 장치입니다.

서 있는 층도 다릅니다. 쿠버네티스에서 노드는 클러스터 아래에 놓여 파드를 얹는 자리입니다. RFC 8200 에서 노드는 라우터와 호스트를 아우르는 위쪽 말입니다.

flowchart TD
    subgraph k8s["쿠버네티스"]
        C["클러스터"] --> N1["노드"]
        N1 --> P["파드"]
    end
    subgraph rfc["RFC 8200"]
        N2["노드"] --> R["라우터"]
        N2 --> H["호스트"]
    end

경계

라우터도 노드인가. 맞습니다.

RFC 8200 은 노드를 IPv6 를 구현한 장치로 정의하고, 라우터를 자기 앞으로 명시적으로 보내지지 않은 IPv6 패킷을 전달하는 노드로 정의합니다. 호스트는 라우터가 아닌 모든 노드입니다. 노드가 위에 있고 그 아래에서 호스트와 라우터가 갈리는 모양입니다. 그래서 이 문서를 읽을 때 노드를 서버로만 옮기면 라우터가 통째로 빠집니다.

이 정의가 긋는 선은 한 군데입니다. 노드와 노드가 아닌 것을 가르는 선은 IPv6 를 구현했느냐입니다. 구현하지 않은 장치는 여기서 노드가 아닙니다.

관련 항목

노드의 뜻이 갈리는 분야

오케스트레이션 · 분산 시스템 · 네트워크

노드가 속하는 시스템과 그 기계 형태

클러스터 · 쿠버네티스 · Elasticsearch · 가상 머신 · 물리 머신

노드를 관리하거나 그 위에서 도는 구성 요소

제어 평면 · kubelet · 컨테이너 런타임 · kube-proxy

노드 위에서 나뉘어 도는 실행 단위와 데이터 조각

파드 · 워크로드 · 컨테이너 · 샤드 · 인덱스

DOM에서 노드가 나뉘는 하위 종류

요소 · 텍스트 노드 · 주석 노드 · 문서 노드 · 문서 조각 · 속성 노드 · 문서 타입 노드

노드가 이루는 문서 트리와 그 관계

문서 객체 모델 · 노드 트리 · 자식 노드 · 부모 노드

노드가 속하는 자료구조와 이름 공간 표준

트리 · 그래프 · 도메인 이름 공간 · DNS

트리에서 노드를 구별하는 개념

잎 · 루트 · 라벨 · 집합

SQLite가 노드를 페이지로 구현하는 B-tree 구조

B-tree · 페이지 · 포인터 · 루트 페이지 · 내부 페이지 · 오버플로 페이지 · 테이블 · SQLite

IPv6에서 노드가 갈리는 장치 종류와 이웃 관계

호스트 · 라우터 · 네이버 · 인터페이스

노드가 통신하는 경로와 프로토콜

링크 · 패킷 · IPv6 · IPv4 · 링크 계층 · 터널

다른 이름: node