[Ethereum] - ch3. 이더리움 클라이언트

‍허진·2023년 3월 14일
0

Blockchain

목록 보기
16/19
post-thumbnail

본 글은 'Mastering Ethereum(Andreas M.Antonopoulos, Gavin Wood 저)'을 바탕으로 작성되었습니다.

이더리움 클라이언트는 이더리움 사양을 구현하고 다른 이더리움 클라이어늩와 피어투피어 네트워크를 통해 통신하는 소프트웨어 어플리케이션이다. 기준 사양과 표준 통신 프로토콜을 준수한다면, 서로 다른 이더리움 클라이언트들끼리 상호운용(interoperate)이 가능하다.

이더리움은 오프 소스 프로젝트이며, 모든 주요 클라이언트의 소스 코드는 오픈 소스 라이선스(ex. LGPL v3.0)하에서 사용할 수 있다. 또한 이더리움은 공개 기여자 커뮤니티에 의해 개발되어 누구든지 수정할 수 있다. 참여자가 많을수록 신뢰할 수 있는 코드가 된다.

이더리움은 영어와 수학(공식) 사양이 결합되어 문서화되어 있다. 이 공식 사양은 다양한 이더리움 개선 제안과 함께 이더리움 클라이언트의 표준 작동 방식을 정의한다. 이 공식 사양은 '황서(Yellow paper)'라고 불린다.

이더리움 황서 원문
이더리움 황서 한글 - 과거버전임을 참고해주세요.

황서는 이더리움에 주요 변경사항이 적용됨에 따라 주기적으로 업데이트된다.

> 이더리움 네트워크

이더리움 기반 네트워크는 이더리움, 이더리움 클래식(classic), 엘라(Ella), 익스팬스(Expanse), 유비크(Ubiq), 뮤지코인(Musicoin) 및 기타 여러 네트워크가 있다. 대부분 프로토콜 수준에서 호환되는 반면, 이더리움 클라이언트 소프트웨어의 관리자가 각 네트워크를 지원하기 위해 작은 변경을 요구하는 기능 또는 속성을 갖고 있는 경우가 많다. 이 때문에 이더리움 클라이언트 소프트웨어의 모든 버전이 모든 이더리움 기반 블록체인을 실행하는 것은 아니다.

현재 여섯 가지 언어로 작성된 이더리움 프로토콜의 여섯 가지 기본 구현이 있다.

  • Rust로 작성된 패리티(Parity)
  • Go로 작성된 게스(Geth)
  • C++로 작성된 cpp-ethereum
  • 파이썬(Python)으로 작성된 pythereum
  • 스칼라(Scala)로 작성된 맨티스(Mantis)
  • 자바(Java)로 작성된 하모니(Harmony)

> 풀 노드를 실행해야 하는가?

블록체인의 건전성(health), 복원력(resilience), 검열 저항(censorship resistance) 특성은 독립적으로 운용되고 지리적으로 분산된 풀 노드(full node)가 얼마나 많은지에 달려 있다. 각각의 풀 노드는 다른 새 노드가 블록 데이터를 얻어 작업을 부트스트랩(bootstrap)하고, 운영자에게 모든 트랜잭션 및 컨트랙트에 대해 신뢰할 수 있고 독립적인 검증을 제공할 수 있도록 도와준다.

그러나 풀 노드를 실행하면 80~100GB 정도의 데이터를 다운로드해야 하며, 로컬 하드 디스크에 저장해야 한다는 어려움이 존재한다.

이더리움 개발에는 라이브 메인넷(mainnet) 네트워크에서 실행 중인 풀 노드가 필요하지 않다. 테스트넷(testnet) 노드(작은 공개 테스트 블록체인 중 하나에 연결), 가나슈(Ganache) 같은 로컬 사설 블록체인 또는 인퓨라(Infura) 같은 서비스 공급자가 제공하는 클라우드 기반 이더리움 클라이언트로 원하는 대부분의 작업을 수행할 수 있다.

메타마스크(Metamask), 에메랄드 지갑(Emerald Wallet), 마이이더월렛(MyEtherWallet), 마이크립토(MyCrypto) 같은 원격 클라이언트도 존재한다. 이들은 지갑의 기능을 제공하며 트랜잭션을 생성하고 전파할 수 있으며, 테스트넷 또는 개인 로컬 블록체인 같은 기존 네트워크에 연결할 수 있다. 그러나 블록체인의 로컬 사본을 저장하지 않거나 블록 및 트랜잭션의 유효성을 확인하지는 않는다.

그러나 이를 비트코인의 라이트 클라이언트와 동일하다고 생각해서는 안된다. 라이트 클라이언트의 경우 풀 노드에 대해 비슷한 수준의 보안을 제공하지만, 이더리움의 원격 클라이언트는 보안 및 익명성 보장 수준이 상당히 떨어진다.

> 풀 노드의 장단점

> 장점

  • 이더리움 기반 네트워크의 복원력과 검열 저항을 지원한다.
  • 모든 트랜잭션을 정식으로 검증한다.
  • 중개자 없이 공개 블록체인의 모든 컨트랙트와 상호작용할 수 있다.
  • 중개자 없이 컨트랙트를 공개 블록체인에 직접 배포할 수 있다.
  • 블록체인 상태(계정, 스마트 컨트랙트 등)를 오프라인에서 조회할 수 있다(읽기 전용).
  • 여러분이 읽은 정보를 제3자에게 노출하지 않고 가져올 수 있다.

> 단점

  • 하드웨어와 대여폭 자원의 확대가 필요하다.
  • 처음 시작할 때 전체 동기화를 위해 여러 날이 소요된다.
  • 동기화를 유지하기 위해 관리하고, 업그레이드하고, 온라인 상태로 유지해야 한다.

> 공개 테스트넷의 장단점

> 장점

  • 테스트넷 노드는 훨씬 적은 데이터(약 10GB)와 동기화를 필요로 한다.
  • 테스트넷 노드는 몇 시간 내에 전체 동기화를 할 수 있다.
  • 컨트랙트 배포 및 트랜잭션 생성을 위한 테스트용 이더를 몇몇 Faucet으로부터 무료로 얻을 수 있다.
  • 테스트넷은 다른 많은 스마트 컨트랙트가 '동작(live)' 실행 중인 공개 블록체인이다.

> 단점

  • 사용자는 테스트넷에서 '실제(real)' 돈을 사용할 수 없다. 테스트 이더로 실행한다. 따라서 위험에 처할 만한 일이 없으므로 악의적 사용자들에 대응하는 실전 보안성 테스트를 할 수 없다.
  • 테스트넷에서는 퍼블릭 블록체인에서만큼 실전 테스트를 할 수 없는 측면이 있다. 예를 들면, 테스트넷에서는 실제 트랜잭션 시 필수적으로 발생하는 비용인 가스 수수료를 고려하지 않는다. 더구나 테스트넷은 공개 메인넷에서 때때로 발생하는 네트워크 혼잡이 없다.

> 로컬 블록체인 시뮬레이션 장단점

많은 테스트 목적에 가장 좋은 선택은 단일 인스턴스 사설 블록체인을 실행하는 것이다. 가나슈(Ganache)는 다른 어떤 참여자들 없이 상호작용할 수 있는 가장 인기 있는 로컬 블록체인 시뮬레이션 중 하나다.

> 장점

  • 동기화가 없고 디스크에 데이터가 거의 없다. 직접 첫 번째 블록을 채굴한다.
  • 테스트 이더를 얻을 필요가 없다. 테스트를 위해 사용할 수 있는 채굴 보상을 자신에게 수여한다.
  • 다른 사용자는 없고 단지 자기 자신만 존재한다.
  • 다른 컨트랙트는 없고 단지 자기 자신이 시작하고 배포한 컨트랙트만 있다.

> 단점

  • 다른 사용자가 없다는 건, 공개 블록체인과 동일하게 동작하지 않는다는 뜻이다. 트랜잭션 순서나 트랜잭션 공간을 두고 경쟁이 없다.
  • 자신 말고 채굴자가 없다는 건, 채굴이 더욱 예측 가능하다는 뜻이다. 그러므로 사용자는 공개 블록체인에서 발생하는 일부 시나리오를 테스트할 수 없다.
  • 다른 컨트랙트가 없다는 건, 테스트를 위해 의존성을 갖는 것들과 컨트랙트 라이브러리를 포함하여 사용자가 원하는 모든 것을 배포해야 한다는 것을 의미한다.
  • 사용자는 어떤 시나리오를 테스트하기 위한 공개 컨트랙트와 주소를 다시 만들지 못할수도 있다.(ex. DAO 컨트랙트)

> 이더리움 클라이언트 실행

실제 이더리움 클라이언트를 실행하는 것은 다음을 참고해보도록 하자.

Geth 설치하기

하기 전에, 최소 요구사항으로

  • 2코어 이상의 CPU
  • 적어도 80GB의 여유 스토리지 공간
  • 최소 4G RAM SSD(HDD의 경우 8GB 이상)
  • 다운로드 속도가 초당 8MBit인 인터넷 서비스

가 필요하다는 것을 인지하고 해보도록 하자.

profile
매일 공부하기 목표 👨‍💻 

0개의 댓글