선거 Dapp 개발 튜토리얼 #1

Antonio Kim
BlockMakers Powered by DAIOS
9 min readOct 16, 2018

Ethereum 에서 dApp을 개발하는 방법을 설명하기 전에 이전 스터디에서 진행했던 내용을 한번 더 정리하도록 하겠습니다.

# 블록체인의 정의 # 스마트컨트랙트 설명 # dApp 의 작동 원리

블록체인이란?

비유를 사용하여 블록 체인이 무엇이며 어떻게 작동 하는지 이해해 봅시다. 먼저 평범한 웹 애플리케이션을 살펴 보겠습니다.

일반적으로 웹 애플리케이션은 웹 브라우저를 통하여 인터넷 상의 어딘가 존재하는 서버를 통하여 구동 됩니다. 이 웹 애플리케이션의 모든 코드는이 서버라 부르는 물리적인 컴퓨터의 특정 소프트웨어 영역에 존재 합니다. 그리고 사용자의 데이터는 서버에 설치되 또다른 소프트웨어인 데이터베이스에 저장됩니다. 그렇다면 웹 상에서 선거를 할 수 있는 애플리케이션을 개발한다고 가정을 해 봅시다.

  • 누군가 웹 서버에 저장된 데이터베이스의 데이터를 조작하거나 변경할 수 있습니다.
  • 웹 서버의 선거에 관련된 소스코드가 임의의 조작으로 변경될 수 있습니다.

위 두가지의 문제는 선거의 투명성을 위협하는 요소가 됩니다. 위 두가지 위험 요소는 블록체인을 사용하여 애플리케이션을 개발하면 완벽히 제거될 수 있습니다. 애플리케이션 소스는 사용자의 컴퓨터와 블록체인에 기록되며 선거 데이터 또한 블록체인에서 기록되어 사용자별 투표 이외의 조작을 할 수 없게 만들 수 있습니다.

우리가 만들 이상적인 선거 애플리케이션은 서버에서 운영되는 데이터베이스 대신 블록 체인의 노드에서 공유되는 모든 트랜잭션 데이터는 블록이라고 하는 레코드 번들을 사용하며, 이 블록은 다른 인터넷상의 컴퓨터들과 함께 연결되어 공용 원장을 만듭니다. 이 공용 원장은 블록 체인의 모든 데이터를 가지고 있습니다. 공용 원장의 모든 데이터는 암호화 해싱으로 보호되고 합의 알고리즘에 의해 유효성이 검사됩니다. 네트워크상의 노드는 네트워크를 통해 분산 된 모든 데이터 사본이 동일한 지 확인합니다.

우리의 애플리케이션 사용자가 블록 체인에 투표하는 것은 어떻게 보일까요? 우선, 사용자는 “Ether” 가 들어 있는 지갑 주소가 필요합니다. 네트워크에 연결되면 투표를 한 다음 소량의 거래 수수료를 지불하여 이 거래를 블록 체인에 기록합니다. 이 거래 수수료는 “Gas”라고합니다. 투표가 진행될 때마다 채굴자라고 불리는 네트워크의 일부 노드가 이 거래를 완료하기 위해 경쟁 입찰 합니다. 이 거래를 완료 한 채굴자는 우리가 투표하기 위해 지불 한 Ether를 보상으로 받습니다.

요약하자면 투표 할 때 사용자가 Ether 를 지불하고 투표가 기록되면 네트워크에있는 컴퓨터 중 하나가 내 Ether 수수료를 받습니다. 이 과정을 트랜젝션이라고 부르며 해당 투표 트랜젝션이 완료되면 사용자는 투표가 변경 불가능하고 정확하게 기록되었다고 확신할 수 있습니다.

보시다시피 Ethereum 블록체인에 선거 애플리케이션을 운영하는 것은 Ether 라는 비용이 듭니다. 하지만 선거 애플리케이션에서 투표된 결과는 누구나 볼 수 있어야 합니다. 그래서 Ethereum 에서 데이터를 읽는 것은 무료입니다.

스마트컨트랙트

이것이 Ethereum 에서 투표 프로세스가 작동하는 방식이지만, 실제로 우리 앱을 어떤 방식으로 개발해야 하는지 알기 위해서는 스마트컨트랙트 이라는 개념을 이해해야 합니다.

스마트컨트랙트는 dApp 의모든 비지니스 로직(비지니스 로직에 대한 상세한 설명은 다음 링크에서 확인하세요 http://mommoo.tistory.com/67)이 동작하는 곳입니다. 여기서 우리는 탈 중앙화 되어 있는 비지니스 로직을 직접 코딩합니다. 스마트컨트랙트는 블록체인에 데이터를 읽고 쓰고 비지니스 로직을 실행하는 역할을 담당합니다. Ethereum 스마트컨트랙트에 프로그래밍을 할때는 Javascript와 매우 유사한 Solidity 라는 프로그래밍 언어로 작성됩니다. 단어의 뜻에서도 알 수 있듯이 스마트컨트랙트는 계약 혹은 약속을 상징합니다. 사용자의 선거 dApp의 경우, 특정 사용자의 투표가 중요시 되고, 모든 투표는 한 번만 계산되며, 가장 많은 표를 얻은 후보가 선출되어야 합니다.

이제 우리가 구축하고자 하는 선거 dApp의 구조를 간단히 살펴 보겠습니다.

우선 HTML, CSS 및 Javascript로 작성된 전통적인 프런트엔드 클라이언트가 제공됩니다. 백엔드 서버와 통신하는 대신,이 클라이언트는 우리가 설치할 로컬 Ethereum 블록 체인과 통신합니다. Solidity 프로그래밍 언어를 사용하여 투표를 위한 스마트컨트랙트에서 dApp에 대한 모든 비즈니스 로직을 작성합니다. 이 스마트컨트랙트를 로컬 Ethereum 블록 체인에 배포하고 Ether 지갑이 있는 사용자로부터 투표를 시작할 수 있도록합니다.

우리는 현재 서버에서 운영되는 데이터베이스 대신 블록 체인을 사용하여 선거 dApp를 구축하려는 이유를 살펴 보았습니다. 이제 직접 코딩을 해보도록 하겠습니다.

우리가 코딩할 선거 dApp

아래 동영상은 우리가 만들 토이 프로젝트 결과 입니다.

위 애플리케이션을 개발하기 위해서 우선 각 후보자의 ID, 이름 및 투표 수를 나열하는 후보 테이블이 있어야 합니다. 그리고 사용자가 원하는 후보자에 투표 할 수있는 폼이 있어야 합니다. 또한 사용자가 투표할 수 있는 자신의 Ethereum 지갑 계정도 있어야 합니다.

Step 1. Ethereum 라이브러리 설치

Node Package Manager (NPM)

NodeJs 의 각종 기능을 사용하기 위한 패키지 설치툴입니다. 웹 프론트, 모바일 프론트 개발자들의 바이블과 같은 존재입니다. 공식홈의 설명도 거창합니다. “npm은 JavaScript 및 세계 최대의 소프트웨어 패키지 관리툴 입니다. 재사용 가능한 코드 패키지를 찾아서 강력하고 새로운 방식으로 조립해 보세요.”

Truffle Framework

Ethereum dApp 개발할 때 필요한 귀찮고 손이 많이 가는 부분을 간편하게 만들어 줍니다. 공식 홈에는 다음과 같이 쓰여져 있네요. “Ethereum Virtual Machine (EVM)을 사용하는 블록 체인을위한 세계적인 개발 환경, 테스트 프레임 워크 및 에셋 파이프 라인으로 개발자로서의 삶을 더 쉽게 만들어줍니다.”

Ganache

Windows 개발자를 위해서 setup installer windows 버전 링크를 올립니다. https://github.com/trufflesuite/ganache/releases

Ethereum 을 테스트 할 수 있는 TestNet 과 가상의 지갑주소, Ether 를 제공합니다. 공식 홈에는 “스마트컨트랙트 배포, 응용 프로그램 개발 및 테스트 실행에 사용할 수있는 Ethereum 개발 용 개인 블록 체인. 이 도구는 데스크탑 응용 프로그램과 명령 줄 도구 (이전에는 TestRPC라고 함)로 사용할 수 있습니다. Ganache는 Windows, Mac 및 Linux에서 사용할 수 있습니다.” 라고 적혀져 있습니다.

Metamask

Ehtereum 을 전송하고 받을 수 있는 브라우저용 지갑입니다. 모든 Ethereum 개발자가 애용하는 가장 테스트하기 편하고 안전한 지갑입니다.

WebStorm / VS Code / Sublime Text

클라이언트 애플리케이션 개발 IDE / 에디터인데 필자는 JetBrain 사의 WebStorm 을 선호합니다.

Solidity Syntax Inspector

대부분의 개발툴은 솔리디티 프로그래밍 언어를 지원하지 않습니다. 하지만 최근의 블록체인 개발 열풍으로 많은 유명한 개발툴들이 솔리디티 코딩을 도와주는 코드힌트나 신택스 검사기를 플러그인으로 제공하기 시작했습니다. 본인이 선택한 개발툴 공식 홈페이지에 가면 플러그인 관련 링크를 찾을 수 있습니다.

위 튜토리얼의 원문은 아래 URL 에서 확인하시기 바랍니다.

http://www.dappuniversity.com/articles/the-ultimate-ethereum-dapp-tutorial

--

--