• 본 게시글은 K-MOOC 묶음강좌 '블록체인 암호화폐:입문부터 심화까지' 강의를 수강하고 공부하며 정리한 내용입니다.
DApp은 암호화폐와 블록체인, 스마트 컨트랙트를 통해 다양한 문제들을 해결하는 서비스를 제공하는 탈중앙화 어플리케이션을 말합니다. 이러한 DApp은 탈중앙화 p2p 네트워크 위에서 작동하고 블록체인을 DB로 사용합니다. DApp을 구동시킬 수 있는 대표적인 블록체인 플랫폼으로는 이더리움이 있습니다.
다양한 분야에서 개발중에 있으며, 특히 급여•회계•지분 등 조직 운영에 필요한 데이터를 블록체인에 올려 운영하는 탈중앙화 자율조직(DAO: Decentralized Autonomous Organization)이 많은 관심을 받고 있습니다. DApp은 특정 주체를 신뢰할 필요가 없고, 투명한 운영 원칙과 향상된 보안, 글로벌 서비스에 용이함 등의 장점을 갖습니다.
DApp을 개발하게 될 경우, 어플리케이션은 중앙 서버에 저장되어 있어야 하는 문제가 생깁니다. 완전히 탈중앙화된 어플리케이션은 decentralized logic으로 블록체인의 스마트컨트랙트를 하며, decenctalized storage로 이더리움의 Swarm이나, ipfs bittorrent 등을 사용하는 것을 의미하며, 메시징을 위해서 이더리움의 Whisper 등을 사용할 수 있습니다. 이렇게 되면 완전한 블록체인 기반의 DApp이라 할 수 있습니다.
서비스 운영의 측면
기존의 웹 기반 앱은 서비스와 관련된 데이터와 콘텐츠를 중앙 서버의 데이터베이스에 저장했습니다. 사용자는 서비스 이용을 위해 웹 서버에 접속을 하여 서비스를 이용해야 하기 때문에 서비스의 규모가 커질수록 중앙에 모이는 데이터와 처리하기 위한 컴퓨팅 파워가 집중됩니다. 이러한 중앙집중형 서비스 플랫폼은 중앙집중화된 데이터와 서비스를 구축하고 이에 대한 수익을 독점하는 구조입니다. 이는 실제 콘텐츠를 제공하는 사람과 서비스 발전에 기여한 사용자 등에게 보상이 분배되지 못하는 문제를 가집니다.
디앱은 사용자가 디앱을 구동할 수 있는 브라우저를 통해 프론트엔드에 접근하여 서비스를 이용할 수 있습니다. 디앱은 기존의 앱과 다르게 백엔드와 데이터베이스가 블록체인에 포함되어 공유합니다. 디앱의 핵심적인 특징은 백엔드의 스마트 컨트랙트와 데이터베이스인 블록체인에 포함된 어카운트 상태 정보 등의 데이터가 모두 블록체인에 포함되어 있고 이 데이터들은 모두 공유할 수 있다는 것 입니다.
이더리움 기반의 Dapp 서비스는 중앙에 웹 서비스와 데이터를 집중하지 않고 탈중앙화된 블록체인을 이용하여 서비스를 제공합니다. 모든 사람이 함께 데이터를 공유하며 서비스를 운영할 수 있으며 사용자와 개발자 등 모든 참여자가 서비스의 발전에 따라 수익을 공평하게 분배받으며 신뢰가능한 제 3자가 필요하지 않습니다.
Protocol Layer 측면
기존 인터넷에서는 TCP/IP, HTTP, FTP, SMTP 등의 프로토콜을 사용하여 Google, Naver, Facebook, Amazon 등의 어플리케이션이 만들어졌습니다. 이들은 중앙화된 서비스를 구축하여 서비스 사용료 및 광고 수익을 얻는 비즈니스 모델을 만들었기 때문에 프로토콜 계층이 아닌 이를 기반으로한 어플리케이션 서비스에서 대부분의 가치가 창출되었습니다.
하지만 블록체인에서는 가치는 공용 프로토콜에 집중되고, 그 가치의 일부가 어플리케이션 층에 분배됩니다. 그 이유는 다음과 같습니다.
이러한 특징으로 어플리케이션 계층의 성공은 프로토콜 계층으로의 투자를 가중화 시켜 프로토콜에 가치가 집중되고, 프로토콜 개발과 수익화 과정이 분리되었던 기존 웹과 다르게 프로토콜 개발과 수익화를 동시에 가능하게 하였습니다.
예시 : 이더리움 프로토콜 → 화폐 토큰 ETH 사용 → 이더리움 프로토콜 위에 dapp(크립토 키티 등)이 구동
먼저 개발자는 개발할 dapp의 Back-end인 스마트 컨트랙트를 작성해야합니다. 스마트 컨트랙트 설계 → 스마트 컨트랙트 구현 → 스마트 컨트랙트 컴파일의 과정을 거치면 Contract Address와 abi가 생성되고, 이 정보들은 Front-end에서 스마트 컨트랙트와 소통하기 위한 인터페이스와 같은 것 입니다.
또한 HTML / CSS / JavaScript를 이용하여 Front-end를 구현하여야 하고, Javascript 라이브러리인 web3.js를 사용하고 이를 사용하여 이더리움 클라이언트에서 제공하는 json-rpc를 wrapping합니다.
사용자가 크라우드 펀딩과 관련된 디앱에서 이더를 펀딩하려는 상황에서 웹 브라우저를 통해 프론트엔드에 접근하여 펀딩 버튼을 누르면 이더리움 노드와 통신하여 블록체인 내부의 스마트 컨트랙트에 접근합니다. 스마트 컨트랙트는 블록체인의 데이터에 접근하여 입력한 금액이 클릭한 사용자의 주소에서 컨트랙트 사용자 주소로 자동으로 전달되도록 실행시킬 수 있습니다.
블록체인 기술의 특징을 생각해보면 개발할 서비스가 DApp으로 구현하기 적합한지 고려할 수 있습니다.
디앱은 현재 거래소, 도박, 지갑, 게임, 금융, 미디어, 소셜, 스토리지, 자산, 정부, 개발, 보안, 인증, 에너지, 건강, 보험 등의 많은 영역에서 활발히 개발되고 있습니다. 디앱 개발이 가장 활발한 플랫폼은 이더리움으로 https://www.stateofthedapps.com 에서 이더리움 기반의 dapp들에 대한 정보를 확인할 수 있습니다.
Loom Network에서 제공하는 무료 대화형 코딩학교로, 이더리움 위에서 자신의 크립토 소유물 게임을 만드는 것을 Solidity로 스마트 컨트랙트를 작성하는 방법을 가르쳐줍니다. Solidity 초보자를 위해 만들어져 Solidity를 사용해 본 적이 없어도 할 수 있고, 영어와 한국어를 포함한 여러 언어를 지원합니다.