본문으로 건너뛰기
Change page

노드 아키텍처

이더리움 노드는 실행 클라이언트합의 클라이언트라는 두 가지 클라이언트로 구성됩니다. 노드가 새로운 블록을 제안하려면 검증자 클라이언트도 실행해야 합니다.

이더리움이 작업증명 (PoW)을 사용했을 때는 실행 클라이언트만으로도 전체 이더리움 노드를 실행하기에 충분했습니다. 하지만 지분 증명 (PoS)을 도입한 이후부터는 실행 클라이언트를 합의 클라이언트라는 다른 소프트웨어와 함께 사용해야 합니다.

아래 다이어그램은 두 이더리움 클라이언트 간의 관계를 보여줍니다. 두 클라이언트는 각각 자체 피어 투 피어(P2P) 네트워크에 연결됩니다. 실행 클라이언트는 P2P 네트워크를 통해 트랜잭션을 가십(gossip)하여 로컬 트랜잭션 풀을 관리할 수 있게 하고, 합의 클라이언트는 P2P 네트워크를 통해 블록을 가십하여 합의 및 체인 성장을 가능하게 하므로 별도의 P2P 네트워크가 필요합니다.

Diagram of Ethereum node architecture showing execution and consensus layers

실행 클라이언트에는 에리곤, 네더마인드, Besu를 포함한 여러 가지 옵션이 있습니다.

이 두 클라이언트 구조가 작동하려면 합의 클라이언트가 트랜잭션 묶음을 실행 클라이언트에 전달해야 합니다. 실행 클라이언트는 트랜잭션을 로컬에서 실행하여 트랜잭션이 이더리움 규칙을 위반하지 않는지, 제안된 이더리움 상태 업데이트가 올바른지 검증합니다. 노드가 블록 생성자로 선택되면 해당 노드의 합의 클라이언트 인스턴스는 새 블록에 포함할 트랜잭션 묶음을 실행 클라이언트에 요청하고, 이를 실행하여 글로벌 상태를 업데이트합니다. 합의 클라이언트는 Engine API (opens in a new tab)를 사용하는 로컬 RPC 연결을 통해 실행 클라이언트를 구동합니다.

실행 클라이언트는 무슨 일을 하나요?

실행 클라이언트는 상태 관리 및 이더리움 가상 머신(EVM) 지원과 함께 트랜잭션 검증, 처리 및 가십을 담당합니다. 블록 생성, 블록 가십 또는 합의 로직 처리는 담당하지 않습니다. 이러한 작업은 합의 클라이언트의 소관입니다.

실행 클라이언트는 트랜잭션 목록, 업데이트된 상태 트라이 및 기타 실행 관련 데이터인 실행 페이로드를 생성합니다. 합의 클라이언트는 모든 블록에 실행 페이로드를 포함합니다. 또한 실행 클라이언트는 새 블록의 트랜잭션을 재실행하여 유효한지 확인하는 역할도 담당합니다. 트랜잭션 실행은 이더리움 가상 머신(EVM)으로 알려진 실행 클라이언트의 내장 컴퓨터에서 수행됩니다.

실행 클라이언트는 또한 사용자가 이더리움 블록체인을 쿼리하고, 트랜잭션을 제출하며, 스마트 컨트랙트를 배포할 수 있게 해주는 RPC 메서드를 통해 이더리움에 대한 사용자 인터페이스를 제공합니다. 일반적으로 RPC 호출은 Web3js (opens in a new tab), Web3py (opens in a new tab)와 같은 라이브러리나 브라우저 지갑과 같은 사용자 인터페이스에 의해 처리됩니다.

요약하자면, 실행 클라이언트는 다음과 같습니다.

  • 이더리움으로 가는 사용자 게이트웨이
  • 이더리움 가상 머신, 이더리움의 상태 및 트랜잭션 풀의 본거지

합의 클라이언트는 무슨 일을 하나요?

합의 클라이언트는 노드가 이더리움 네트워크와 동기화 상태를 유지할 수 있도록 하는 모든 로직을 처리합니다. 여기에는 피어로부터 블록을 수신하고 포크 선택 알고리즘을 실행하여 노드가 항상 (검증자 유효 잔액으로 가중치가 부여된) 증명이 가장 많이 누적된 체인을 따르도록 보장하는 작업이 포함됩니다. 실행 클라이언트와 마찬가지로 합의 클라이언트도 자체 P2P 네트워크를 가지고 있으며, 이를 통해 블록과 증명을 공유합니다.

합의 클라이언트는 블록을 증명하거나 제안하는 데 참여하지 않습니다. 이 작업은 합의 클라이언트의 선택적 애드온인 검증자가 수행합니다. 검증자가 없는 합의 클라이언트는 체인의 헤드(head)만 따라가며 노드가 동기화된 상태를 유지하도록 합니다. 이를 통해 사용자는 올바른 체인에 있다는 확신을 가지고 실행 클라이언트를 사용하여 이더리움과 트랜잭션을 수행할 수 있습니다.

검증자

스테이킹을 하고 검증자 소프트웨어를 실행하면 노드가 새로운 블록을 제안하도록 선택될 자격을 얻게 됩니다. 노드 운영자는 예치 컨트랙트에 32 ETH를 예치하여 합의 클라이언트에 검증자를 추가할 수 있습니다. 검증자 클라이언트는 합의 클라이언트와 번들로 제공되며 언제든지 노드에 추가할 수 있습니다. 검증자는 증명 및 블록 제안을 처리합니다. 또한 노드가 보상을 축적하거나 페널티 또는 슬래싱을 통해 ETH를 잃을 수 있게 합니다.

스테이킹에 대해 더 알아보기.

노드 구성 요소 비교

실행 클라이언트합의 클라이언트검증자
P2P 네트워크를 통해 트랜잭션을 가십함P2P 네트워크를 통해 블록과 증명을 가십함블록을 제안함
트랜잭션을 실행/재실행함포크 선택 알고리즘을 실행함보상/페널티를 축적함
수신되는 상태 변경을 검증함체인의 헤드를 추적함증명을 수행함
상태 및 영수증 트라이를 관리함비콘 상태(합의 및 실행 정보 포함)를 관리함32 ETH를 스테이킹해야 함
실행 페이로드를 생성함RANDAO(검증자 선택 및 기타 합의 작업을 위해 검증 가능한 무작위성을 제공하는 알고리즘)에 누적된 무작위성을 추적함슬래싱될 수 있음
이더리움과 상호작용하기 위한 JSON-RPC API를 노출함정당화(justification) 및 완결성(finalization)을 추적함

더 읽어보기