안경잡이개발자

728x90
반응형

  일반적으로 DApp을 개발하기 위해서 사용하는 대표적인 언어는 Solidity입니다. 더불어 Truffle을 이용하면 개발 환경을 매우 쉽게 구축할 수 있습니다. 더불어 메타마스크(MetaMask)는 이더리움 관련 앱을 개발하거나 사용하는 전반적인 과정에 있어서 필요하기 때문에 미리 설치해두시면 좋습니다. 말 나온 김에 MetaMask부터 설치를 진행하겠습니다.

 

  ▶ MetaMask 공식 홈페이지https://metamask.io/

 

 

  Metamask는 Chrome 확장 프로그램의 형태로 이용할 수 있습니다. 다운로드를 받아주세요.

 

 

  Metamask를 처음 시작하면, 곧바로 지갑을 생성하여 관리할 수 있습니다.

 

 

  약관에도 동의를 해주겠습니다.

 

 

  이후에 비밀번호 설정창이 나오고 비밀번호를 입력하여 생성하면 다음과 같이 접속할 수 있습니다.

 

 

  기본적으로 우리의 지갑은 [이더리움 메인넷]으로 설정되어 있습니다. 우리는 개발 목적으로 진행하고자 하므로, 일단 테스트넷으로 설정을 바꿀 필요가 있습니다.

 

 

  [Ropsten 테스트넷]으로 변경합니다. 테스트넷은 말 그대로 개발자가 테스트를 쉽게 하기 위한 목적이므로 무료로 가상 이더를 입금 받을 수 있습니다. 따라서 가상의 이더를 입금 받기 위하여 [입금]를 누릅니다.

 

 

  이후에 [이더 얻기] 버튼을 누릅니다.

 

 

  그러면 Faucet에서 이더를 무료로 송금 받을 수 있습니다.

 

 

  이 때 MetaMask가 동작하여 지갑을 연동하고 Faucet으로부터 이더를 얻게 됩니다.

 

 

  약간의 시간이 흐른 뒤에 성공적으로 이더를 송금 받은 것을 확인할 수 있습니다.

 

 

  이제 MetaMask에 대한 기본적인 사용 방법에 대해서 알아보았으므로, DApp 개발을 위한 개발환경을 구축합시다.

 

※ 사전 요구사항 구축 ※

 

  가장 먼저 파이썬이 필요합니다. 파이썬 설치가 되어 있지 않다면, 공식 홈페이지에 접속하여 파이썬을 설치합니다.

 

https://www.python.org/downloads/

 

Download Python

The official home of the Python Programming Language

www.python.org

 

  [Download] 버튼을 눌러 파이썬을 다운로드 받습니다.

 

 

  [Add Python 3.7 to PATH]에 체크하여 기본 설정 그대로 설치를 진행합니다.

 

 

  이후에 NPM을 설치하기 위해 node.js을 설치합니다. 공식 홈페이지에 접속하여 그대로 다운로드 하시면 됩니다.

 

https://nodejs.org/ko/

 

  마찬가지로 기본 설정 그대로 설치하면 됩니다.

 

 

  또한 테스트넷 이외에도 Private 블록체인 환경을 구축해 놓는 것이 좋습니다. Ganache를 이용하면 손쉽게 우리 컴퓨터에 가상의 이더리움 네트워크가 생성됩니다.

 

https://www.trufflesuite.com/ganache

 

Ganache | Truffle Suite

Deploy contracts, develop your decentralized applications (dapps), and run tests on smart contracts. Available as a desktop application & command-line tool.

www.trufflesuite.com

 

  기본 설정 그대로 설치하시면 됩니다.

 

 

  Ganache는 Microsoft 응용 프로그램 형태로 설치가 가능하군요.

 

 

  다만 앱 설치 과정에서 개발자 모드가 체크되어 있지 않다면 설치가 안 될 수 있습니다. 그럴 때는 개발자 모드 설정을 위하여 [설정]으로 이동할 수 있도록 합니다.

 

 

  [개발자 모드]에 체크한 뒤에 다시 설치를 진행하면 됩니다.

 

 

  Ganache가 설치 완료되면, 곧 바로 [QUICKSTART] 모드로 로컬 이더리움 네트워크 서버를 구동시킬 수 있습니다.

 

 

 

  다음과 같이 10개의 기본적인 이더리움 지갑이 주어지고, 개발 테스트에 충분한 만큼의 이더리움이 미리 들어가 있는 것을 알 수 있습니다. 이제 이를 이용해 테스트 할 수 있습니다.

 

 

※ Truffle 개발환경 구축 ※

 

  이제 본격적으로 Truffle을 이용해 개발환경을 구축합니다. 따라서 가장 먼저 Truffle을 설치합니다.

 

  npm install -g truffle@5.0.2

 

  이 때 python과 npm 모두 기본적으로 설치 되어 있어야 합니다.

 

 

  저는 다음과 같이 truffle이 설치되었습니다.

 

 

  이제 하나의 폴더를 만든 뒤에, 명령 프롬프트에서 해당 폴더로 이동하여 truffle 프로젝트를 초기화합니다.

 

  truffle init

 

 

  이후에 실제로 개발 환경은 JS를 함께 사용하여 진행하게 됩니다. npm init으로 종속성 설정을 하시면 됩니다.

 

 

  이제 package.json 파일을 작성합니다. 일반적으로 DApp을 개발할 때 자주 사용되는 라이브러리가 종속성으로 작성되어 있습니다.

 

{
  "name": "hello-world",
  "version": "1.0.0",
  "description": "",
  "main": "truffle-config.js",
  "directories": {
    "test": "test"
  },
  "scripts": {
    "dev": "lite-server",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "truffle": "5.0.2",
    "truffle-contract": "3.0.6",
    "nodemon": "^1.17.3",
    "bootstrap": "4.1.3",
    "chai": "^4.1.2",
    "chai-bignumber": "^2.0.2",
    "chai-as-promised": "^7.1.1",
    "lite-server": "^2.3.0"
  }
}

 

  Visual Studio Code와 같은 에디터(Editor) 프로그램을 실행하여, 우리의 프로젝트 폴더에 접속합니다. 그리고 npm install을 입력해 필요한 라이브러리를 설치합니다. 

 

 

  이제 contracts 폴더에 HelloWorld.sol 파일을 생성합니다. 다음과 같이 작성합니다.

 

pragma solidity ^0.5.0;

contract HelloWorld {
    uint public hello = 0;
}

 

  hello라는 public 변수에 0이라는 값을 넣어 주었으므로, 누구든지 이 앱에 접근하여 hello라는 변수의 값을 확인할 수 있을 것입니다. 이제 Solidity 소스코드를 컴파일하여 Byte Code 형태로 변환합니다.

 

  truffle compile

 

 

  컴파일 결과 다음과 같이 build/contracts 폴더에 HelloWorld.json 파일이 생성됩니다.

 

 

  truffle-config.js 소스코드를 수정하여 개발 전용 서버를 입력하여 연동합니다. 아까 설치한 Ganache 서버를 입력하면 됩니다. IP로는 로컬 호스트(Local Host)를 의미하는 127.0.0.1과 포트 번호로는 7545를 입력하면 됩니다.

 

module.exports = {
  networks: {
    development: {
      host: "127.0.0.1",
      port: 7545,
      network_id: "*"
    }
  },
  compilers: {
    solc: {
      optimizer: {
        enabled: true,
        runs: 200
      }
    }
  }
}

 

  Ganache 프로그램에서도 기본적인 포트는 7545 포트로 설정된 것을 확인할 수 있으므로, 이를 그대로 넣습니다.

 

 

  이후에 /migrations 폴더에 2_deploy_contracts.js 파일을 생성합니다.

 

const HelloWorld = artifacts.require("HelloWorld");

module.exports = function(deployer) {
  deployer.deploy(HelloWorld);
};

 

  이후에 truffle migrate를 입력하여 Deploy를 진행해보세요.

 

 

  스마트 컨트랙트 배포 결과 그 비용으로 약간의 이더리움이 차감된 것을 확인할 수 있습니다.

 

 

  이제 truffle console 명령을 입력하여 콘솔 환경에서 스마트 컨트랙트 정보를 확인합니다.

 

 

728x90
반응형