[BlockChain]이더리움 DAPP 개발

윤민재·2021년 2월 7일
2

이더리움 블록체인

이더리움은 블록체인 2.0이라 불리는 암호화폐로 스마트컨트랙트를 이용하여 다양한 산업에서 블록체인을 사용할 수 있게 하는 플랫폼입니다.

  • 블록체인 1.0 
    비트코인(사토시 나카모토) — P2P 개인간 금융 거래에 있어 분산원장에 거래내용을 저장하여 공유하는 블록체인,

  • 블록체인 2.0
    이더리움(비탈릭부테린) — 스마트컨트랙트를 이용하여 다양한 산업에 이더리움 플랫폼 위에서 적용되는 블록체인

  • 블록체인 3.0 
    현재 3.0에 대한 정확한 정의와 암호화폐가 나오지 않은 상태. (현재 이오스, 에이다, 네오 등등이 나오고있음.)

- ICO

아직 이더리움은 개발진행 중에 있으며 2014년 8월 6일 처음 ICO를 진행하였고, 총 4단계의 로드맵을 가지고 있습니다.

  • 프론티어 
    암호화폐인 이더리움을 개발 채굴하면서 네트워크 형성 (2015–07–30)

  • 홈스테드 
    이더리움의 노드들이 생기면서 생태계 구축 이 때 당시 DAO공격이 발생(2016–03–14)

  • 메트로폴리스 
    이더리움의 대중화를 위한 인프라 형성. 17년 10월 16일 437만번째 블록 기준 1차 비잔티움 업그레이드가 이루어졌고 2차로 2018년에 콘스탄티노플이 이루어질 예정

  • 세레니티 
    POW(작업증명) POS(지분증명)으로 전환되고 안정화 되는 시기

제네시스 블록

가장 기본적으로 블록체인이 구동되기 위해서는 제네시스 블록이 필요합니다.

프라이빗 블록체인으로 구성되어있다면 제네시스블록을 반드시 설정하고 블록체인을 구성하여야 합니다. 초기에 블록체인 개발을 시작하셨다면 설정블록을 처음에 해야되죠.(기본적으로 제공하면 좋겠는데, 일일이 JSON 파일로 만들어야 된다는게 꽤 까다롭습니다.)

제네시스 블록 => 블록체인의 첫번째에 위치한 최초 블록.
제네시스 블록을 갖고 있을때만 서로를 연결하고 블록들을 싱크하게 됩니다.

가스

이더리움에는 가스라는 이더리움의 운영 토큰이 존재합니다. 이 가스라는 토큰을 이용해 이더리움 블록체인 트랜잭션을 처리할 수 있죠.

마치 자동차가 움직일때 연료가 필요한 것처럼 이더리움의 모든 트랜잭션에는 가스가 필요한 것이죠.

일반적으로 가스는 거래소에서 구입할 수 없고 실제 이더를 가스로 사용할 수 있습니다. 즉 가스의 가격은 이더의 가격에 따라 측정되고 이는 트랜잭션 처리 양이 비슷하게 책정이 됩니다.

=> 여기서 왜? 가스가 필요한지 궁금해 할것인데, 이는 이더리움 블록체인을 악의적으로 무한 트랜잭션을 일으키는것을 방지하기 위함입니다. => 가스에 대한 내용

가스는 스마트컨트랙트를 처리하는 비용을 말하기 때문에, 스마트컨트래트를 어떻게 작성하냐에 따라서 가스량이 달라지기도합니다. (스마트컨트랙트를 최대한 간결하고 유용하게 작성)

** 가스량 = 가스총량 X 가스 가격

작업증명방식(Pow)

현재 이더리움 블록체인은 비트코인과 마찬가지로 작업증명 방식(Pow) 방식을 사용합니다. 현재 블록체인에는 두가지의 증명방식이 있죠.

  • 작업증명방식(POW)

단순하게 해당 Nonce 값을 통해서 블록의 해쉬 알고리즘을 통해 계산을 하고 이를 증명하는 방식입니다. 마이너가 필요하며 블록이 생성될때마다 난이도는 점점 올라가므로 실제 컴퓨팅 파워가 블록을 생성하는 중요한 요소가 되었습니다.(비트코인)

장점   
안정적이다. 현재 블록체인을 탄생하게 만든 증명방식이다.

단점 
점점 난이도에 따라 많은 컴퓨팅 파워가 필요하다. 트랜잭션 처리가 느리다.

  • 지분증명방식(POS)

암호화폐를 얼마만큼의 지분을 가지고 있느냐에 따라 증명방식이 결정됩니다. 이는 과도하게 지분을 많이 가진 사람들에게 증명방식이 위임되므로 현재 EOS의 DPOS(분산된 위임방식)을 통해서 다양한 방식으로 전환중에 있습니다.

장점 
트랜잭션 처리가 빠르다. 컴퓨팅파워와는 상관이 없다.

단점 
일부 중앙집중적으로 증명이 될 수도있다. 악의적으로 사용이 될 수 도 있다.

스마트컨트랙트

스마트컨트랙트는 작성자의 코드의 성격에 따라 블록체인에 올라가고 이에 이 코드대로 컨트래트가 이루어지는 방식입니다.

Solidity라는 언어를 사용하고 있고 (객체지향언어) Solc으로 컴파일 한 후 ABI로 변환해 JSON형태로 블록체인 스마트컨트랙에 올라가는 구조입니다.

  • 전자서명
    모든 트랜잭션 처리에는 사용자의 Sign이 들어가야 하는데, 이는 공개키와 개인키로 Sign을 하게 됩니다. 때문에 개인키보관이 매우 중요해 지게 되죠. 잊어버리거나 해킹당하면 이더리움을 평생 못찾을 수도 있기 때문에 각 개인 PC에 대한 보안이 더 중요해지는 시대가 올 것 같습니다. 기본적으로 개인키를 가지고 스마트컨트랙트 트랜잭션 처리에 꼭 필요한 키로 개인키를 적용하게 됩니다.

이더리움 인터페이스

이더리움 인터페이스 => Mist, MetaMask, Infura, MyetherWallet

보통의 인터페이스는 아직까진 사용자 친화적이라고 말하기에는 많은 어려움이 있습니다. 일반 사용자가 월렛을 사용하기에는 많은 어려움과 불편함이 따르죠.

현재 이더리움 네트워크는 크게 3가지로 나누어져 있습니다.

메인네트웍, 테스트네트웍(Rinkby, Roptsen), 프라이빗 네트웍

API(Web3)

이더리움 DAPP 개발을 위해 Web3 API를 현재 제공중에 있습니다. 이는 개발자를 위한 API로 쉽게 알면 사용하기 편하지만 처음 사용하게 되면 여러 삽질?을 하게 됩니다.

현재 Web3 1.0버전이 있습니다. (Web3 API는 이더리움 DAPP개발에 가장 중요한 API이다) Javascript버전이고 그 외 다른 언어로 사용하기에는 약간의 무리가 있습니다. 개발의 고수가 아니라면 자바스크립트를 추천해요..

DAPP 개발시 Web3 API 를 통해서 언제든지 Callback으로 DAPP을 만들수 있습니다.

Web3 1.0은 Document자체가 영어로 되어있기 때문에 이를 실제 개발할때에는 많은 어려움이 따랐습니다. 특히 영어가 안되는 저로써는 한국어 버전이 매우매우 필요하다 느꼈죠. 국내 블록체인에 대한 개발이 아직 미흡하다는걸 여기서 다시한번 느낍니다.

때문에 Web3 1.0에 대한 중요 API에 대한 함수를 한글로 정리해서 보여줄 예정입니다.

=> Web3 1.0은 더 자세한 내용으로 포스팅.

이더리움에 대한 여러 블록체인 이슈들

현재 이더리움은 많은 문제에 대한 이슈를 남겨놓고 있죠. 이 중 문제는 확장성 문제입니다. 사실 현 블록체인이 가지고 있는 문제이기도 합니다.

이더리움은 작업증명방식(POW)이기 때문에 블록의 수가 늘어나면 날수록 채굴 난이도는 올라가고 TPS가 정해져 있어 아무리 많은 자원이 들어가도 TPS속도가 늘어나지 않는 문제를 야기시키고있습니다. 이를 확장성 문제라고합니다.

이더리움의 현재 TPS 속도 — 초당 20TPS (비트코인 7TPS)

때문에 현재 이더리움 개발진들은 확장성 문제를 해결하고자 다양한 방법을 통해 개선시키려고 노력하고 있습니다.

최근 2020년까지 이를 완수하여 이더리움의 TPS을 늘리고 있습니다.

라이덴네트워크 -> 라이트닝네트워크와 유사한 구조. 결제 채널을 열고 닫는 과정 사이의 중간거래를 블록체인에 기록하지 않는 방법을 통해 기록을 최소화 하고 수수료를 절약하는 방법.(off-chain)

플라즈마 -> 이더리움 체인 (root chian) 하부체인(child chain)을 이용하여 블록체인의 I/O발생을 줄여 수수료를 줄이는 방법

샤딩 -> 데이터베이스의 테이블 스페이스 과정과 매우 비슷. 블록체인을 여러 구역으로 나누어서 각각지역에 블록체인 트랜잭션 발생을 보다 더 빠르게 하는 방법

참고

코어이더리움프로그래밍 — 박재현, 오재훈,박혜영 지음

profile
DBA / Engineer

0개의 댓글