블록체인 이론 및 응용 - (4) DApp

BLANC·2022년 1월 13일
1

블록체인

목록 보기
8/11
post-thumbnail

• 본 게시글은 K-MOOC 묶음강좌 '블록체인 암호화폐:입문부터 심화까지' 강의를 수강하고 공부하며 정리한 내용입니다.

DApp : Decentralized Application

DApp (Decentralized Application)

DApp은 암호화폐와 블록체인, 스마트 컨트랙트를 통해 다양한 문제들을 해결하는 서비스를 제공하는 탈중앙화 어플리케이션을 말합니다. 이러한 DApp은 탈중앙화 p2p 네트워크 위에서 작동하고 블록체인을 DB로 사용합니다. DApp을 구동시킬 수 있는 대표적인 블록체인 플랫폼으로는 이더리움이 있습니다.

다양한 분야에서 개발중에 있으며, 특히 급여•회계•지분 등 조직 운영에 필요한 데이터를 블록체인에 올려 운영하는 탈중앙화 자율조직(DAO: Decentralized Autonomous Organization)이 많은 관심을 받고 있습니다. DApp은 특정 주체를 신뢰할 필요가 없고, 투명한 운영 원칙과 향상된 보안, 글로벌 서비스에 용이함 등의 장점을 갖습니다.

개발과 서비스 운영의 시점에서 바라본 DApp

  • Frontend
    사용자들이 어플리케이션에 접근할 수 잇는 매개체로, 주로 Web Page를 이용합니다.
  • Backend
    사용자의 요청에 따라서 처리하는 일종의 서비스 기능으로 Smart Contract가 담당합니다.
  • Database
    블록체인으로 데이터베이스를 구축합니다.

DApp을 개발하게 될 경우, 어플리케이션은 중앙 서버에 저장되어 있어야 하는 문제가 생깁니다. 완전히 탈중앙화된 어플리케이션은 decentralized logic으로 블록체인의 스마트컨트랙트를 하며, decenctalized storage로 이더리움의 Swarm이나, ipfs bittorrent 등을 사용하는 것을 의미하며, 메시징을 위해서 이더리움의 Whisper 등을 사용할 수 있습니다. 이렇게 되면 완전한 블록체인 기반의 DApp이라 할 수 있습니다.

DApp과 기존 어플리케이션의 차이점

서비스 운영의 측면

기존의 웹 기반 앱은 서비스와 관련된 데이터와 콘텐츠를 중앙 서버의 데이터베이스에 저장했습니다. 사용자는 서비스 이용을 위해 웹 서버에 접속을 하여 서비스를 이용해야 하기 때문에 서비스의 규모가 커질수록 중앙에 모이는 데이터와 처리하기 위한 컴퓨팅 파워가 집중됩니다. 이러한 중앙집중형 서비스 플랫폼은 중앙집중화된 데이터와 서비스를 구축하고 이에 대한 수익을 독점하는 구조입니다. 이는 실제 콘텐츠를 제공하는 사람과 서비스 발전에 기여한 사용자 등에게 보상이 분배되지 못하는 문제를 가집니다.

디앱은 사용자가 디앱을 구동할 수 있는 브라우저를 통해 프론트엔드에 접근하여 서비스를 이용할 수 있습니다. 디앱은 기존의 앱과 다르게 백엔드와 데이터베이스가 블록체인에 포함되어 공유합니다. 디앱의 핵심적인 특징은 백엔드의 스마트 컨트랙트와 데이터베이스인 블록체인에 포함된 어카운트 상태 정보 등의 데이터가 모두 블록체인에 포함되어 있고 이 데이터들은 모두 공유할 수 있다는 것 입니다.

이더리움 기반의 Dapp 서비스는 중앙에 웹 서비스와 데이터를 집중하지 않고 탈중앙화된 블록체인을 이용하여 서비스를 제공합니다. 모든 사람이 함께 데이터를 공유하며 서비스를 운영할 수 있으며 사용자와 개발자 등 모든 참여자가 서비스의 발전에 따라 수익을 공평하게 분배받으며 신뢰가능한 제 3자가 필요하지 않습니다.

Protocol Layer 측면

기존 인터넷에서는 TCP/IP, HTTP, FTP, SMTP 등의 프로토콜을 사용하여 Google, Naver, Facebook, Amazon 등의 어플리케이션이 만들어졌습니다. 이들은 중앙화된 서비스를 구축하여 서비스 사용료 및 광고 수익을 얻는 비즈니스 모델을 만들었기 때문에 프로토콜 계층이 아닌 이를 기반으로한 어플리케이션 서비스에서 대부분의 가치가 창출되었습니다.

하지만 블록체인에서는 가치는 공용 프로토콜에 집중되고, 그 가치의 일부가 어플리케이션 층에 분배됩니다. 그 이유는 다음과 같습니다.

  1. 데이터가 어플리케이션 계층에 갇히지 않고 프로토콜 계층을 통해 공유되기 때문입니다.
  2. 네트워크에 의해 제공되는 서비스의 접근에 사용되는 프로토콜 토큰이 존재하기 때문입니다.

이러한 특징으로 어플리케이션 계층의 성공은 프로토콜 계층으로의 투자를 가중화 시켜 프로토콜에 가치가 집중되고, 프로토콜 개발과 수익화 과정이 분리되었던 기존 웹과 다르게 프로토콜 개발과 수익화를 동시에 가능하게 하였습니다.

예시 : 이더리움 프로토콜 → 화폐 토큰 ETH 사용 → 이더리움 프로토콜 위에 dapp(크립토 키티 등)이 구동

이더리움에서 DApp이 구동되는 아키텍처

먼저 개발자는 개발할 dapp의 Back-end인 스마트 컨트랙트를 작성해야합니다. 스마트 컨트랙트 설계 → 스마트 컨트랙트 구현 → 스마트 컨트랙트 컴파일의 과정을 거치면 Contract Address와 abi가 생성되고, 이 정보들은 Front-end에서 스마트 컨트랙트와 소통하기 위한 인터페이스와 같은 것 입니다.

또한 HTML / CSS / JavaScript를 이용하여 Front-end를 구현하여야 하고, Javascript 라이브러리인 web3.js를 사용하고 이를 사용하여 이더리움 클라이언트에서 제공하는 json-rpc를 wrapping합니다.

사용자가 크라우드 펀딩과 관련된 디앱에서 이더를 펀딩하려는 상황에서 웹 브라우저를 통해 프론트엔드에 접근하여 펀딩 버튼을 누르면 이더리움 노드와 통신하여 블록체인 내부의 스마트 컨트랙트에 접근합니다. 스마트 컨트랙트는 블록체인의 데이터에 접근하여 입력한 금액이 클릭한 사용자의 주소에서 컨트랙트 사용자 주소로 자동으로 전달되도록 실행시킬 수 있습니다.

DApp을 개발할 때의 고려사항

블록체인 기술의 특징을 생각해보면 개발할 서비스가 DApp으로 구현하기 적합한지 고려할 수 있습니다.

  • 중간에 제 3자가 필요한가?
    블록체인을 통해 신뢰할 수 있는 제3의 중개기관을 없앨 수 있고, 다양한 중개 서비스들 또한 블록체인을 적용하여 비용을 낮출 수 있습니다.
  • 데이터의 투명성을 입증해야하는가?
    블록체인은 시간 순으로 블록이 연결될 때, 이전 블록의 데이터를 해시한 값을 다음 블록에 포함시켜 과거의 기록을 위변조 할 수 없도록 만들고, 이 블록의 내용을 블록체인에 참가한 모든 노드들이 동일한 블록체인을 가질 수 있도록 공개하므로 데이터의 투명성을 가집니다.
    따라서 데이터의 투명성을 입증해야하는 서비스의 경우에 블록체인 기술을 적용하면 좋습니다.
    예시 : 크라우드 펀딩에서 정확한 분배, 투표, 도박 등
    이러한 상황에서는 ‘데이터를 어디까지 공개해야하는가?’의 문제도 고려해야한다.
  • 블록체인과 기존 시스템에서 데이터를 저장하는 방법의 차이
    기존 시스템은 하나의 중앙서버에 있는 데이터 베이스에 모든 데이터를 다 저장하지만 블록체인은 네트워크에 참여하는 모든 노드들이 동일한 데이터를 유지해야 합니다. 그래서 대량의 정보가 저장될 필요가 있을 때, 블록체인 내부에 저장되는 on-chian 데이터와 off-chain 데이터를 잘 구별해야 합니다.
  • 낮은 성능과 확장성
    이더리움은 20TPS(Transaction Per Second)의 거래 처리 속도를 가지는데, 기존 Visa 신용카드는 25000tps의 거래 처리 속도를 가지고 있습니다. 블록체인에 저장되는 데이터의 양이 점점 많아지고 있어 모든 노드에 데이터를 모두 저장하는 것이 비효율적일 수 있으므로 최대한 적은 데이터로 컨트랙트에 꼭 필요한 요소만 포함시키는 것이 좋습니다.
  • 추가 고려사항
    사용자가 트랜잭션 수수료 비용을 지불하므로 많은 사용자가 서비스를 이용하게 하기 위해서 스마트 컨트랙트를 최적화시켜 발생하는 수수료를 줄여야 함
    시스템 디자인시 온체인과 오프체인 개발요소들을 분리해서 생각해야 함
    스마트 컨트랙트 코드가 블록에 포함될 경우, 바꿀 수 없으므로 스마트 컨트랙트 개발, 설계 시 매우 신중해야함
    스마트 컨트랙트에서 블록체인 밖으로부터 정보를 얻을 수 없음

DApp Categories

디앱은 현재 거래소, 도박, 지갑, 게임, 금융, 미디어, 소셜, 스토리지, 자산, 정부, 개발, 보안, 인증, 에너지, 건강, 보험 등의 많은 영역에서 활발히 개발되고 있습니다. 디앱 개발이 가장 활발한 플랫폼은 이더리움으로 https://www.stateofthedapps.com 에서 이더리움 기반의 dapp들에 대한 정보를 확인할 수 있습니다.

Example

  • Stox (예측 시장 플랫폼)
  • Forkdelta (탈중앙화 가상화폐 거래소)
  • Sonm (탈중앙화 Fog Computing Platform)
  • ENS (탈중앙화 도메인 시스템)
  • MakerDAO (Stable Coin 제공 회사, 암호화폐 담보 스테이블 코인)
  • Blockchain Cuties (크립토 게임)
  • Auctionity (NFT 경매장)

DApp 개발 튜토리얼

CyptoZombies

Loom Network에서 제공하는 무료 대화형 코딩학교로, 이더리움 위에서 자신의 크립토 소유물 게임을 만드는 것을 Solidity로 스마트 컨트랙트를 작성하는 방법을 가르쳐줍니다. Solidity 초보자를 위해 만들어져 Solidity를 사용해 본 적이 없어도 할 수 있고, 영어와 한국어를 포함한 여러 언어를 지원합니다.

https://cyrptozombies.io/

  • Lesson1 좀비를 생성하기 위한 컨트랙트(좀비팩토리)를 만들기 위해 필요한 기본 Solidity 구조와 개념을 학습
  • Lesson2 단순히 좀비를 랜덤으로 생성하는 것이 아닌 다른 컨트랙트와의 상호작용을 통해 좀비가 생성될 수 있는 컨트랙트를 만들면서 추가적으로 필요한 Solidity 문법 학습
  • Lesson3 컨트랙트 소유권이나 가스 비용, 코드 최적화, 보안과 같은 실제 Dapp을 만들 때 중요한 개념을 이해하기 위해서 Solidity 고급 개념들을 학습합니다. 이 때, openzepplin의 ownable 컨트랙트가 사용됩니다.
  • Lesson4 좀비 전투 기능을 만들기 위해 이전 챕터에서 배워온 것들을 종합하고, 함수 호출시 이더가 전송될 수 잇도록 하는 payable에 대해서 배우고 플레이어들로부터 이더를 받을 수 있게 하는 방법에 대해 학습하게 됩니다.
  • Lesson5 이더리움의 ERC721 표준에 대해 배웁니다.
  • Lesson6 스마트 컨트랙트와 상호작용하는 방법을 살펴보고, web3.js 라이브러리를 사용하여 Dapp을 위한 기본적인 프론트엔드에 대해서 학습할 것입니다. 이 때, html, Js, jquery에 익숙하다는 것을 가정하여 진행됩니다.
profile
Frontend Engineer

0개의 댓글