Node — VM 노드와 관련된 함수
Node — VM 노드와 관련된 함수
여러 Elixir(Erlang) 노드가 네트워크로 서로 연결되어 클러스터를 이루는 경우가 있어요. Node 모듈은 그런 VM 노드(node)에 관련된 함수들을 모아 둔 모듈이에요.
출처: Node
본문
이 모듈의 함수 중 일부는 컴파일러가 인라인(inline) 처리해요. Kernel 모듈의 함수들과 비슷한 방식으로요. 그런 함수들은 문서에 "인라인되는 함수(inlined by the compiler)"라고 명시적으로 표시돼 있어요. 인라인 함수에 대해 더 알고 싶다면 Kernel 모듈을 확인해 보세요.
인라인이 된다는 건 성능에 좋다는 뜻이지만, 동시에 그 함수들이 컴파일 시점에 특별 취급을 받는다는 의미예요. 노드처럼 분산 시스템의 핵심 개념을 다루는 모듈에서 이런 최적화가 어떻게 이뤄지는지 이해해 두면, 실제 운영 환경에서 노드를 다룰 때 훨씬 수월해져요.
이 모듈로 노드에 이름을 붙이고(Node.start/1), 노드 간 연결을 맺고(Node.connect/1), 클러스터에 속한 노드 목록을 얻는(Node.list/0) 작업을 할 수 있어요. 분산 Elixir를 시작하는 첫걸음이 바로 이 모듈이에요.
노드는 분산 Erlang/Elixir의 기본 단위예요. 각각의 BEAM VM이 하나의 노드가 되고, 서로 이름으로 식별되며 암호화된 분산 연결(epmd 기반)을 맺어요. 두 노드를 연결하면 한 노드에서 다른 노드의 프로세스로 메시지를 보내고, 함수를 원격에서 실행할 수도 있어요. 다만 노드 간 연결은 커널 전역 설정(:net_kernel)과 맞물려 있어서, 실제 분산을 쓸 땐 연결 범위와 보안을 함께 고민해야 해요.
Node 모듈의 함수를 쓰면 이런 분산 환경을 코드로 제어할 수 있어요. 하나의 시스템이 커서 한 VM으로 감당하기 어려울 때, 노드 수평 확장으로 문제를 나누는 시나리오에서 특히 유용하죠.
더 알아보기
Node.start/2,Node.connect/1— 노드 시작과 클러스터 연결Node.list/0,Node.ping/1— 클러스터 상태 확인Node.spawn/2,Node.spawn_link/2— 원격 노드에서 프로세스 실행- 분산 Elixir 가이드 — 노드 기반 분산 처리 시작하기