DApp의 종류에 관하여

nanaones
B!ock.Chain
Published in
17 min readApr 21, 2019

“야, 나라야 근데, DApp이 뭐야? ”

아직 함부로 대답하진 못했습니다.

나는 DApp에 대해서 사실 잘 알지 못했구나…

DApp 에 대해서 알아보면서

유형에 대한 분류를 해 보았습니다.

목차

1. 우선, 사전적 의미부터

2. 사전적인 의미는 너무 넓습니다.

3. David Johnston의 DApp

오픈소스인가?

토큰이 한 독립체에게 집중되어있나?

사용자의 합의에 의해 변경사항이 적용되는가?

퍼블릭 블록체인에 데이터가 기록되는가?

토큰을 사용하는가?

표준 암호화 알고리즘에 의해서 토큰이 생성되는가?

사용자에게 가치 기여가 토큰으로 보상되는가?

4. DApp의 종류는 구체적으로 뭐가있는거야?

1. Contract Only
스마트컨트렉트만으로 구성된 DApp

2. Hybrid
OffChain Service 와 OnChain Service가 하나의 서비스를 이루는 DApp

3. Save Data Only
OffChain Service 와 함께 블록체인을 사용하지만, 블록체인을 데이터 저장용도만으로 사용하는 DApp

우선, 사전적 의미부터

DApp 이라는 단어는

Decentralized Application

에서 앞글자를 따와 DApp입니다.

디앱(DApp) 또는 이란 Decentralized Application의 약자로서, 이더리움, 큐텀, 이오스 같은 플랫폼 코인 위에서 작동하는 탈중앙화 분산 애플리케이션을 말한다. 간략히 분산앱이라고도 한다. 플랫폼 위에서 작동하는 디앱의 암호화폐코인(coin)이라고 하지 않고 토큰(token)이라고 구별하여 부르기도 한다. ‘Daap’가 아니라 ‘DApp’가 올바른 표기법이다. ‘Dapp’ 또는 ‘dApp’이라고도 쓴다. 단수형이 아니라 복수형으로 표현하여, 디앱스(DApps) 또는 댑스(dApps)라고도 한다.

DApp의 사전적 의미 [출처 : 해시넷 ]

보통 ‘응용 프로그램’이라고 부르는 App에 ‘탈중앙화’를 의미하는 Decentralized 를 더하여, 문자 그대로 이해하게 된다면 ‘탈중앙화된 응용프로그램’ 이라고 받아들일 수 있습니다.

아니.. 이거말고 ..

그거말고, 다른걸 달라.

사전적인 의미는 너무 넓습니다.

사실, 그냥 위키에 검색만 해도 나오는 내용이고,
요즘세상에 ‘응용프로그램’의 범위는 아주 넓습니다.

그래서 알아보았더니,

알게모르게 이미 DApp이란 무엇인가? 에 대한 논의는 많이 이루어졌습니다.

David Johnston은 이미 이에 대한내용을 정리하여서 공유하고 있었습니다.
요약하자면, DApp 으로서, 반드시 충족하여야 하는 요소들은

어플리케이션은 완전히 오픈 소스여야 하고, 자율적으로 작동해야 하며, 토큰의 대부분을 제어하는 엔터티(독립체)가 없어야 한다. 어플리케이션은 제안된 개선점 및 시장 피드백에 대한 응답으로 그것의 프로토콜을 적용할 수 있지만 모든 변경 사항은 사용자들의 합의에 의해 결정되어야 한다.

애플리케이션 데이터와 작동 기록들은 어떠한 핵심적인 장애 발생을 피하기 위해 공개적이고 분산된 블록체인에 암호화하여 저장되어야 한다

어플리케이션은 반드시 해당 어플리케이션에 접근하는 데 필요한 암호 토큰 (비트코인 또는 해당 시스템의 기본 토큰 ) 을 사용해야 하며, 채굴자 /이용자로부터의 가치 기여는 해당 어플리케이션의 토큰으로 보상되어야 한다 .

애플리케이션은 노드들이 애플리케이션에 기여하는 가치를 증명하기 위한 행위로써 표준 암호화 알고리즘에 따라 토큰을 생성해야 한다. (비트코인은 작업증명(Proof of Work, PoW) 알고리즘을 사용한다.)

많습니다.…
스타워즈인줄….

근 ㅡ 엄

야, 근데

크립토 키티가 제일 유명한 DApp 이잖아…?

근데 얘들은 저 조건만 충족해서 어떻게 웹 사이트를 만들었지…?

그러게요 …

그럼 제일 유명한 DApp인 크립토키티 사이트에 들어가봅시다.

크롬 브라우저에서, 개발자 도구를 열어 어떻게 사이트를 만들었는지 한 번 알아봅니다.

도구… 개발자 도구를 보자!!!
raven…?
형이 거기서 왜…

raven은 자바스크립트의 라이브러리중 하나인걸 확인 할 수 있습니다.

이는 곧, Web Server가 따로 있다는 의미인것 으로 알 수 있는데,

아니, 블록체인에 있는 DApp이라면,
모든게 체인에 올라가 있어야 하는거 아니야…?

사실, 앞에서 알려드린 DApp 충족 요소가 강제력을 지니는건 아닙니다.

사실, 이에대해서는 아예 모르는 사람도 많고 반드시 이를 준수하여 DApp을 만들지는 않습니다.

일종의,

‘ 가이드라인’ 역할을 수행한다고 생각해 보면 될 것 같습니다.

위 가이드라인을 조금 간략하게 만들어보면, 아래와 같은 7가지 내용으로 간추려집니다.

  1. 오픈소스인가?
  2. 토큰이 한 독립체에게 집중되어있나?
  3. 사용자의 합의에 의해 변경사항이 적용되는가?
  4. 퍼블릭 블록체인에 데이터가 기록되는가?
  5. 토큰을 사용하는가?
  6. 표준 암호화 알고리즘에 의해서 토큰이 생성되는가?
  7. 사용자에게 가치기여가 토큰으로 보상되는가?

오픈소스인가?

블록체인 플랫폼에서 Smart Contract를 배포하게 된다면, 트랜잭션으로 배포되기 때문에 오픈하기 싫어도 다른사람이 확인할 수 있습니다.

보통의 Tracker 들은 아예 Smart Contract 를 배포하게 되면 Source Code를 다운로드 받을 수 있게 만들어놓았습니다.

ICON 의 Tracker 에서는 아예 Download 버튼이 있다.

토큰이 한 독립체에게 집중되어있나?

정책에 따라 다르겠지만, 보통의 DApp들은 백서를 공개할때, 아래와 같이 Token이 어떻게 분배될지 알려줍니다.

개발팀의 한 인원이 개발팀에게 할당된 모든 토큰을 가지고 있다고 하더라도 15%입니다.

출처 : SOMESING 백서

사용자의 합의에 의해 변경사항이 적용되는가?

이부분은 약간 타협이 필요한 부분인 것 같습니다. 이더리움의 경우에는 한 번 Smart Contract가 배포되면 수정이 아예 불가능합니다.

하지만 ICON의 경우에는 Smart Contract 의 업데이트 기능이 존재하여서 업데이트가 가능하며, 이에따라 최초에 DApp을 개발한 개발사가 이를 반영하여 수정할 수 있습니다.

ICON에서 SCORE(Smart Contract) 업데이트의 결과

퍼블릭 블록체인에 데이터가 기록되는가?

이는 DApp이라면 당연히 해당되는 사항입니다.

토큰을 사용하는가?

거의 모든 DApp들이 이에 해당됩니다.

크립토키티는 ERC 721 토큰을 사용하는데, 이는

대체 불가능한 (non fungible) 토큰

입니다.

그게 뭐냐면…… 으로 파기 시작하면 글을 하나 더 쓸 것 같…아서

다음에 소개해 드리겠습니다.

토큰에도 규약이 있어…?

네, 이더리움의 경우에는 Ethereum Improvement Proposals(줄여서 EIPs) ICON의 경우에는 ICON Improvement Proposals(줄여서 IIPs)가 있습니다.

이러한 제언을 위한 창구에는 다른 참여자들의 제언들이 쌓이게 됩니다.
이중, 가장 유명한것이 ERC -20, IRC-2, ERC -721, IRC-3 입니다.

ERC-721, IRC-3에 해당되는 토큰이 앞에서 말씀드린 서로 대체할 수 없는 토큰입니다.

이 규약에 의하면, 각각의 토큰은 각각의 Token ID를 지니고 있어서, 서로가 모두 다릅니다. (크립토키티의 고양이가 이러한 원리로 만들어집니다. )

표준 암호화 알고리즘에 의해서 토큰이 생성되는가?

모든 플랫폼들은 서로 각자만의 암호화 알고리즘이 있습니다.
대다수의 DApp 에서는 기본적으로 sha3 256 Hash 함수를 사용하기도 합니다.

사용자에게 가치 기여가 토큰으로 보상되는가?

SOMESING의 경우에는,
노래를 부르고 평가를 받음에 따라서 토큰으로 보상을 받습니다.

기존의 노래방 앱들은 사용자가 ‘사용료’ 의 개념으로 플랫폼에 일정의 금액을 지불하였고, 플랫폼은 이러한 수익을 저작권자와 나눠갖는 형태였습니다.

하지만 SOMESING은 ‘노래를 부르는것’은 무료입니다.

수익은 나눠갖는다.

거기에, 부가적인 서비스로 내 노래를 일정량의 SSX 토큰을 보증금으로 내고 Posting 할 수 있는데, 이렇게 Posting된 노래는 지정된 기간만큼 다른 사람들에게 노출되어 기부를 받을 수 있습니다.

이렇게 생긴 기부 수익의 30%는 S/S, MR 비용으로 지출되며

나머지 70% 에 해당되는 금액은 다시 노래를 부른사람에게 부여됩니다.

돈벌러 갑니다.

DApp 을 만들때

어떻게 만들어야 할 지 알것같아.

그럼,

DApp의 종류는 구체적으로 뭐가있는거야?

이에대해서

DApp을 구분하는 요소들을 살펴 보았을때, 블록체인을 어떻게 사용하느냐에 따라서 총 세 가지로 저 나름대로 구분해 볼 수 있었습니다.

1. Contract Only
스마트컨트렉트만으로 구성된 DApp

2. Hybrid
OffChain Service 와 OnChain Service가 하나의 서비스를 이루는 DApp

3. Save Data Only
OffChain Service 와 함께 블록체인을 사용하지만, 블록체인을 데이터 저장용도만으로 사용하는 DApp

1번 부터 아래에서 차근차근 풀어보겠습니다.

1. [Contract Only]스마트컨트렉트만으로 구성된 DApp

블록체인에 있는 스마트 컨트렉트 자체로도 비즈니스 로직을 구현하여 충분히 Service를 만들어 낼 수 있습니다.

이경우에는, 사용자가 알아서 DApp과 소통해야합니다.

이렇게, 모든 서비스가 Chain 에서 구현된 경우를 우리는 CrowdSale 에서 볼 수 있습니다.

ICON 은 CrowdSale Smart Contract를 아예 Sample 으로 제공할 만큼 많이 쓰였고, 검증되어있습니다. [링크]

2. [Hybrid]OffChain Service 와 OnChain Service가

하나의 서비스를 이루는 DApp

OnChain & OffChain

블록체인은 보통 세대를 나눕니다.

이중, 1세대와 2세대를 나누는 기준으로 가장 쉬이 알려진 내용이 Smart Contract의 존재 유무입니다.

바로, 이

Smart Contract에 의해서 많은 변화가 일어납니다.

Smart Contract 는 자체적으로 로직을 구현 할 수 있는 튜링 완전성을 지닌 프로그램 언어입니다. 이는 달리 말하면, 이를 활용하여 하나의 응용프로그램을 만들 수 있고, 이를 활용한 서비스를 만들 수 있다는 것을 의미합니다.

Smart Contract는 하나의 OnChain Service 로서 훌륭하지만, 일반적으로 Smart Contract 하나만으로는 일반 유저들이 쉬이 접근할 수 없는 큰 벽이 존재합니다. 이 벽이 생긴 이유는 바로,

UI가 없기때문입니다.

그럼 어떡하라고

사실, 개발자들은 자기가 원하는언어의 SDK를 사용한다던지, 아니면 제공되는 다른 개발툴을 사용한다든지 등의 방법을 통하여 충분히 활용 할 수 있습니다.

보통의 Web App 들은 GUI를 통하여 일반 유저들이 쉽게 접근할 수 있도록 합니다.

아 — 까 부터 말하는 SOMESING, 사용자들이 접하기 쉽도록 안드로이드 App을 통해 서비스가 제공됩니다.

그 일례로, SOMESING을 들어볼 수 있습니다.
SOMESING은 사용자들이 접하기 쉬운 모바일 환경을 통하여 서비스를 제공합니다. [2019/04/21일 기준, 안드로이드 앱스토어에 앱이 올라가있고, 애플의 앱스토어에는 아직 올라와있지않습니다.]

SOMESING이 어떻게 서비스를 설계했는지 알아보기 위해서 앱을 다운로드 받아서 사용해보기로 했습니다.

안궁금하신분들은 안보셔도 하등 문제 없습니다…

안드로이드 앱스토어에 이미 어플리케이션을 배포하였기 때문에 안드로이드 앱스토어에서 다운로드 받아 보았습니다.

이 App을 본 저는 이 App이 어떻게 구동되는지, 블록체인과 어떻게 연결되어있는지 궁금하여서 SOMESING에 문의했습니다.

친-절
SOMESING의 서비스 구조

위 그림을 통해, SOMESING 이라는 DApp은 외부 서버와 App이라는 OffChain Service 가 Smart Contract와 연동되어 하나의 서비스가 된 것을 확인할 수 있습니다.

그럼 SOMESING의 서버는 도대체 어떤 역할을 할까?

보통 Web DApp의 경우에는 SDK를 활용하여 블록체인플랫폼과 트랜잭션을 주고 받으며, 주고 받은 결과를 GUI를 통해서 사용자에게 보여주기 위해서 Web Server를 사용하는데,

SOMESING과 같은 비교적 큰 데이터 (4분 가량의 음성녹음데이터) 를 다루는 App은 어떻게 서비스되고 있는지 궁금해져서

SOMESING을 깔고, 노래를 불러봤습니다.

내 꿈이 가수가 아니라서 정말 다행이다.
박스 안에 있는 내 주소를 확인해 볼 수 있습니다.

hx로 시작하는 주소… 저건 ICON의 주소입니다.

그렇다면

SOMESING은 현재 공식 런칭 이전이므로,
ICON Testnet의 Tracker를 켜봅니다.[클릭하시면 트래커로 갑니다.]

저의 주소를 통해서 조회 해 본 결과입니다.

트래커에서 저의 주소로 검색해, 가장 최근의 트랜잭션을 살펴봅니다.

생각했던 것 처럼 모든 데이터를 블록체인에 올리진 않는 것 같습니다.
트랜잭션 파라미터를 보시면,

“_data” : “해시값”

“_value” : “해시값”

으로 ICON의 Smart Contract인 SCORE에 전달하는걸 확인할 수 있습니다.

비교적 큰 데이터인 사용자의 녹음 데이터는 별도의 서버에 저장하고, 이를 식별 가능하도록 인덱스값을 블록체인에 파라미터로 기록하는 구조이지 않을까 하고 유추 해 볼 수 있습니다.

사용자가 Publish 했을 때 Flow 유추

사실 여기까지 오면, 트래커에서 Smart Contract 주소까지 올라가서, SCORE 소스까지 한 번 봐야하지만…..

이러실거같아서 자세한 설명은 생략하겠습니다.

New DApp = OnChain Service + OffChain Service

위 공식을 잘 보여준 SOMESING 이었습니다.

3. [Save Data Only]OffChain Service 와 함께 블록체인을 사용하지만, 블록체인을 데이터 저장용도만으로 사용하는 DApp

이러한 경우는, 사실

블록체인은 현 시점 이후에 다른사람이 블록체인 안에 기록된 데이터를 수정할 수 없다.

라는 블록체인의 속성만 사용하는 경우가 많습니다.

이러한 경우는, 프라이빗 블록체인을 원하는 경우도 많습니다. 기입될 데이터가 중요하기 때문입니다.

예를 들면

데이터를 저장하기만 하는 경우

위와 같은 구조를 갖게 됩니다.

예시로 든 그림의 경우에는

OffChain Service 에서 필요한 데이터만을 블록체인에 저장하기 때문에
OffChain Service의 비중이 큽니다.

지난번 글들 …

윈도우에서 ICON 개발환경구축하기[링크]

ICON에서 DApp을 만들어야 하는 이유[링크]

들을 보고 반성 하면서 짧게 쓰려고 노력한 글 입니다.

뭔가 길고 길게 알아본 것 같지만….

이번에도 분량조절 실패

이걸 친구들한테 보여줄 수는 없을 것 같습니다…..

제발 그만해 ...

--

--