[루디움 렉쳐] 이더리움 베이직_kingyoungdae 학습 내용 정리 (노드와 클라이언트)

이더리움 네트워크 이해하기

네트워크의 정의

P2P(Peer-to-Peer) 컴퓨팅은 중앙 서버 없이 네트워크에 참여한 모든 컴퓨터가 동일한 역할과 기능을 수행하는 컴퓨팅 처리방식을 말한다. 각 컴퓨터가 클라이언트인 동시에 서버가 된다. 이더리움의 P2P 네트워크에서 노드는 데이터를 저장하고 블록체인 네트워크에 참여하며, 클라이언트는 사용자가 노드를 통해 블록체인에 접근하고 상호작용할 수 있게 한다.

이더리움 플랫폼은 P2P 기반에 컴퓨터 프로세스, 파일, 메세지 공유 기능을 활용하여 다양한 응용 서비스의 개발을 지원하는 플랫폼으로 발전하고 있다.

이더리움 네트워크가 추구하는 방향성

노드간 직접 연결하는 P2P네트워크는 다양한 연결 방식이 존재하는데 그중 이더리움은 완전 분산형 P2P토폴로지로 구성된다. 네트워크 토폴로지(Network Topology)란, 컴퓨터 네트워크를 구성하는 노드 간의 연결 방식을 말한다. 또한 자율적으로 다른 노드들을 발견하고 탐색하는 퓨어P2P방식을 사용한다.

ethernodes.org에서 현재 이더리움 네트워크에 연결되어 있는 노드 정보를 확인할 수 있다.

이더리움이 완전 분산형 방법을 사용하는 이유는 참여 노드 모두가 동등한 권한과 권리를 갖고 이더리움 네트워크에 참여하는 것을 기본 철학으로 갖기 때문이다.

  • 완전 분산형의 장점
    • 확장성 : 누구나 네트워크에 참여할 수 있어 확장성이 좋다.
    • 가용성 : 서로 연결되어 있어 일부 노드에 문제가 발생해도 시스템은 정상적으로 작동한다.
    • 탈중앙화 : 동등한 노드들로 구성되어 있어 관리 및 감독 기능이 별도로 없기 때문에 책임이 없고 자율적이다.
  • 완전 분산형의 단점
    • 관리의 어려움 : 중앙 관리자 없이 모두 동등한 권한의 노드들로 구성되어 있어 관리 또는 규제가 어렵다.
    • 신뢰성 우려 : 연결된 노드가 안전한지 검증이 어려워 신뢰성이 떨어진다.
    • 성능 문제 : 노드마다 컴퓨팅 파워, 네트워크 속도 등이 달라 전체 성능이 저하될 수 있다.

네트워크가 불안정한 노드들이 많으면 전체 네트워크의 신뢰성이 떨어지고, 노드 간 정보 전달 시의 지연 시간으로 인해 성능 저하 문제가 생길 수도 있다.

이더리움은 자체 P2P네트워크 프레임워크인 DevP2P를 구현하여 신뢰성 있는 노드를 구별해 내고 이들을 연결하여 전체 네트워크의 안정화를 위해 노력하고 있다.

이더리움 네트워크

이더리움 네트워크는 이더리움 프로토콜을 사용해 서로 통신하는 컴퓨터의 그룹을 말한다.

현재 이더리움은 크게 퍼블릭 네트워크인 메인넷과 테스트넷, 그리고 프라이빗 네트워크로 구분할 수 있다.

  • 퍼블릭 네트워크
    퍼블릭 네트워크는 인터넷에 연결된 모든 사람이 접근할 수 있다. 누구나 거래를 실행하고 검증할 수 있다.
    • 이더리움 메인 네트워크
      실제 트랜잭션이 이루어지는 이더리움 블록체인 네트워크이다. 실제 가치 및 결과를 가진다. 우리가 흔히 거래소에서 볼 수 있는 이더는 메인넷의 이더를 말한다.
    • 테스트 네트워크
      이더리움 공개 테스트 블록체인 및 네트워크이다. 메인 네트워크에 컨트랙트를 배포하기전 유사 환경에서 테스트할 때 사용한다. 테스트넷의 이더는 가치가 없다. 현재 Sepolia, Goerli 테스트넷이 있다. Sepolia는 기본 권장 테스트넷으로서 계약 및 애플리케이션을 테스트 할 수 있고, Goerli는 검증 및 스테이킹을 테스트 할 수 있다.
  • 프라이빗 네트워크
    퍼블릭 네트워크(메인넷 또는 테스트넷)와 연결되지 않고 별개로 자체 구성된 네트워크이다. 제한된 환경에서 이더리움의 기능을 활용하고자 할 때 사용된다.

노드와 클라이언트

이더리움은 블록과 거래 데이터를 검증할 수 있는 소프트웨어를 실행하는 컴퓨터(노드)의 분산 네트워크이다. 노드와 클라이언트에 대해 조금 더 자세히 살펴보고자 한다.

노드는 이더리움 네트워크에 연결하는데 필요한 소프트웨어를 실행하는 컴퓨터를 말한다. 노드들은 서로 연결되어 데이터를 저장하기 위해 정보를 주고 받는다. 블록(데이터)을 생성하고, 트랜잭션(거래내역)을 검증하며, 유효한 데이터를 제공하고 저장한다.

이더리움 클라이언트는 이더리움 사양을 구현하고 다른 이더리움 클라이언트와 P2P네트워크를 통해 통신하는 소프트웨어 애플리케이션이다.
따라서 클라이언트는 노드를 구현하는 도구라고 할 수 있다.

기본적으로 노드는 합의 클라이언트와 실행 클라이언트라는 두 개의 클라이언트를 실행해야 한다.

  • 실행 클라이언트(Execution client, Execution Engine)는 네트워크에서 전파된 새로운 거래를 수신하고, EVM에서 이를 실행하며 현재 모든 이더리움 데이터의 최신 상태와 데이터베이스를 보관한다.
  • 합의 클라이언트(consensus client, Beacon Node)는 네트워크가 실행 클라이언트의 검증된 데이터를 기반으로 합의를 달성할 수 있도록 지분 증명 합의 알고리즘을 구현한다. 합의 클라이언트에 추가하여 노드가 네트워크 보안에 참여할 수 있도록 하는 검증자 클라이언트(Validator clinet) 가 포함되어 있다.

클라이언트들은 함께 작동하여 이더리움 체인의 헤드를 추적하고 사용자가 네트워크와 상호 작용할 수 있도록 한다.

출처:https://ethereum.org/ko/developers/docs/nodes-and-clients/

노드 유형

클라이언트 구현 방식에 따라 다양한 유형의 노드로 나눠볼 수 있는데 이더리움 노드의 역할을 기준으로 구분해보자면, 마이닝 작업을 수행하는 마이너 노드와 일반 사용자 노드로 나눠 볼 수 있다. 또한, 블록체인 데이터의 동기화 방식에 따라 전체 블록체인 데이터를 동기화 하는 풀노드(Full Node)와 블록 헤더 정보 등 일부 데이터만 동기화를 하는 라이트 노드(Light Node), 풀노드에 저장된 것 외에도 모든 상태(state)를 저장하는 아카이브 노드(Archive Node) 로도 구분할 수 있다.

풀 노드

풀 노드는 블록 본문과 각 블록의 상태 데이터를 다운로드하고 검증하는 등 블록체인의 블록 단위 유효성 검사를 수행한다. 풀 노드에는 여러 클래스가 있는데, 일부는 첫번째 블록(제네시스 블록)에서 시작하여 블록체인의 전체 기록에 있는 모든 블록을 검증한다. 다른 노드는 유효하다고 신뢰하는 최근 블록에서 검증을 시작한다(예: Geth의 '스냅 동기화'). 검증이 시작되는 위치에 관계없이 풀 노드는 비교적 최근의 데이터(일반적으로 가장 최근의 128개 블록)의 로컬 사본만 보관하므로 디스크 공간을 절약하기 위해 이전 데이터를 삭제할 수 있다. 이전 데이터는 필요할 때 다시 생성할 수 있다.

  • 전체 블록체인 데이터를 저장한다(해당 데이터는 주기적으로 정리되어 모든 상태 데이터를 저장하지는 않는다).
  • 블록 유효성 검사에 참여하여 모든 블록과 상태를 검증한다.
  • 모든 상태는 로컬 저장소에서 검색하거나 '스냅샷'을 통해 다시 생성할 수 있다.
  • 네트워크에 서비스를 제공하고 요청 시 데이터를 제공한다.

아카이브 노드

아카이브 노드는 모든 블록을 검증하고 다운로드 된 데이터를 절대 삭제하지 않고 모두 보존하는 노드이다. 풀 노드는 최근 128개 블록의 상태만 가지고 있는데 아카이브 노드는 모든 상태를 보존하여 History Methods를 통해 과거의 정보를 조회할 수 있다.

  • 풀노드의 모든 정보를 저장하고 최근 상태뿐만 아니라 과거 상태까지 모두 저장한다.
  • 테라바이트 단위의 큰 용량이기 때문에 일반 사용자 보다 블록 탐색기, 지갑 공급업체 및 체인 분석과 같은 서비스에 유용할 수 있다.

라이트 노드

네트워크에 참여하기 위해 모든 데이터를 모든 노드가 유지하는 건 네트워크 확장에 제약이 될 수 있다. 라이트 노드는 모든 블록의 데이터가 아닌 블록 헤더만 다운로드한다. 헤더에는 블록 내용에 대한 요약 정보가 포함되어 있어 검증을 위한 다른 정보는 풀 노드에 요청한다. 사용자는 풀 노드를 실행하는 데 필요한 컴퓨팅 자원이 부족해도 이더리움 네트워크에 참여할 수 있게 된다. 라이트 노드는 합의에 참여하지 않지만(채굴자/검증자가 될 수 없음) 풀 노드와 동일한 기능 및 보안 보장을 통해 이더리움 블록체인에 액세스할 수 있다.

클라이언트 유형

기준 사양과 표준 통신 프로토콜을 준수한다면, 서로 다른 이더리움 클라이언트끼리 상호운용(interoperate)이 가능하다.

이더리움은 황서(yellow paper)를 통해 다양한 개선 제안과 이더리움 클라이언트의 표준 작동 방식을 정의하고 있다. 구현 사항에 대해 명확한 기준을 제시하고 있기 때문에 독립적으로 개발된 클라이언트들도 대부분 상호운용이 가능하다.

이더리움 커뮤니티는 다양한 프로그래밍 언어를 사용하여 개발한 여러 오픈 소스 클라이언트를 유지 관리한다. 다양한 클라이언트를 사용함으로서 서로의 문제점을 개선하고 결과적으로 네트워크의 보안을 강화하는데 도움이 된다.

실행 클라이언트

  • Go-Ethereum
    Go-Ethereum(Geth)은 가장 널리 퍼진 이더리움 클라이언트 중 하나이다. 사용자 기반이 가장 크고 사용자와 개발자를 위한 다양한 기능을 제공한다. Go언어로 작성되었으며, 오픈 소스이다.
  • Nethermind
    Nethermind는 LGPL-3.0 라이선스를 받은 C# .NET 기반의 고성능 이더리움 실행 클라이언트이다. ARM을 포함한 모든 주요 플랫폼에서 실행된다.

합의 클라이언트

  • Prysm
    Prysm은 Go언어로 작성된 오픈소스 합의 클라이언트 이다. 웹 앱UI를 제공하고 사용자경험, 문서화 및 구성 가능성을 우선시 한다.
  • Lighthouse
    Lighthouse는 Rust로 작성된 속도와 보안에 중점을 둔 합의 클라이언트이다. 다양한 환경에서 안전하고 성능이 뛰어나다.

이더리움 네트워크에 대한 느낀점

이더리움 네트워크가 완전 분산형 P2P 구조를 채택하고 있다는 점은 사용자에게 자유도와 참여의 기회를 제공하며, 이는 블록체인의 핵심 가치인 탈중앙화를 잘 보여줍니다. 또한, 다양한 노드 유형과 클라이언트의 존재로 인해 시스템 전체의 안정성과 신뢰성을 높이는 방식이 인상적이었습니다. 그러나 관리의 어려움과 신뢰성 우려와 같은 단점 또한 존재하기 때문에 지속적인 기술 발전이 필요하다는 생각이 듭니다. 🌐✨