1.5 이더리움 아키텍쳐

이더리움 아키텍쳐

image
그림에서 알 수 있듯이, 모든 클라이언트(브라우저)는 응용 프로그램의 자체 인스턴스와 통신합니다. 모든 클라이언트가 연결할 중앙 서버가 없습니다. 즉, 이상적인 탈중앙화 세계에서, Dapp(탈중앙화 애플리케이션)과 상호 작용하려는 모든 사람은 컴퓨터/스마트콘 등의 기기에 실행중인 블록체인의 전체 복사본이 필요합니다. 즉, 애플리케이션을 사용하려면 먼저 전체 블록체인을 다운로드한 다음 애플리케이션 사용을 시작해야 합니다.

우리가 사는 세계는 이상적인 세계가 아니기에, 모든 사람들이 이러한 앱을 사용하기 위해 블록체인 서버를 운영할 것으로 기대하는 것은 무리입니다. 하지만 탈중앙화의 배경은 단일/중앙화된 서버에 의존하지 않는 것입니다. 그래서 제안된 몇 가지 솔루션(블록체인 서버 호스팅 서비스, Metamask 등)를 사용하면 하드 디스크와 RAM을 많이 사용하지 않아도 블록체인의 전체 복사본을 다운로드하고 실행하면서도 탈중앙화를 훼손하지 않을 수 있습니다. 앞으로의 이어지는 레슨에서 이러한 방식을 경험할 것입니다.

자, 그럼 이더리움 블록체인이 정확히 무엇일까요? 블록체인에는 2가지 구성 요소가 있습니다:

  1. 데이터베이스: 네트워크의 모든 트랜잭션은 블록체인에 저장됩니다. 응용 프로그램을 배포하는 행위도 트랜잭션으로 간주됩니다. 후보자 투표를 위한 투표 응용 프로그램을 예로 들면 하나하나의 투표가 트랜잭션로 간주됩니다. 이러한 모든 트랜잭션은 공개되며 누구나 볼 수 있고 확인할 수 있습니다. 이 데이터는 절대로 조작할 수 없습니다. 네트워크의 모든 노드에 동일한 데이터 복사본이 있는지 확인하고, 유효하지 않은 데이터가 이 데이터베이스에 기록되지 않도록 하기 위해 이더리움은 작업증명(Proof of Work)이라는 알고리즘을 사용하여 네트워크를 보호합니다. (http://ethereum.stackexchange.com/questions/14/what-proof-of-work-function-does-ethereum-use)

  2. 코드: 블록체인의 데이터베이스 요소는 트랜잭션을 저장합니다. 그렇다면 투표 응용 프로그램에서 투표에 대한 모든 논리는 어디에 담길까요? 이더리움 세계에서는 솔리디티(Solidity)라는 언어로 논리/응용 프로그램 코드(스마트 계약)를 작성합니다. 그런 다음 솔리디티 컴파일러를 사용하여 이더리움 바이트코드(Ethereum Byte Code)로 컴파일한 다음 해당 바이트 코드를 블록체인에 배포합니다 (스마트 계약 작성에 사용할 수 있는 다른 언어가 조금 있긴 하지만, 가장 인기 있고 상대적으로 쉬운 것이 솔리디티). 따라서, 이더리움 블록체인은 트랜잭션을 저장할 뿐 아니라 스마트 계약 코드를 저장하고 실행합니다.

즉, 기본적으로 블록체인은 데이터를 저장하고 코드를 저장하며 코드를 EVM (Ethereum Virtual Machine)에서 실행합니다. 이후 이어지는 절에서 바이트코드 및 EVM에 대해 자세히 배울 예정입니다.

이더리움에는 웹 기반 Dapp을 만들기 위해 web3.js라는 편리한 자바스크립트 라이브러리가 있습니다. 이 라이브러리는 블록체인 노드에 연결됩니다. 따라서 reactjs, angularjs 등의 유명한 js 프레임워크에 이 라이브러리를 포함시킬 수도 있습니다.

강의에 등록된 질문이 없습니다. 궁금한 부분이 있으면 주저하지 말고 무엇이든 물어보세요.