SW/블록체인

블록체인 : 전통적인 App과 DApp 어떤 차이점, 아키텍쳐 : DApp 개발을 위해 고려해야 할 사항

얇은생각 2022. 2. 6. 07:30
반응형

분산화 시스템과 중앙화 시스템

Dapp은 decentralized application의 약어입니다. 그럼 decentralized는 무엇을 의미하는 것일까요?

 

블록체인 : 전통적인 App과 DApp 어떤 차이점, 아키텍쳐 : DApp 개발을 위해 고려해야 할 사항 1

 

Centralized, Decentralized, Distributed의 비교를 통해 decentralized가 무엇을 의미하는지 알아보겠습니다. Centralized system은 필수적으로 노드 유저 등의 모든 것을 제어하는 하나의 authority를 갖습니다. 이것은 개인이 될 수도 있고 정부가 될 수도 있고 회사가 될 수도 있습니다.

또한, centralized system은 개별 장치의 작동과 단일 센터로부터의 정보 흐름을 직접 제어 받습니다. 모든 개인은 정보를 송수신하고 명령하는 중앙의 힘에 직접적으로 의존합니다. 때문에, 중앙 서버가 중지되거나 중앙서버로부터 차단당하면 서비스를 이용할 수 없습니다.

Distributed는 처리가 여러 노드에서 공유되지만 의사 결정은 여전히 중앙집중화되고 완전한 시스템 지식을 사용할 수 있음을 의미합니다. decentralized system은 distributed system 의 하위 집합이라 생각할 수 있으며 decentralized란 결정이 내려지는 단일 지점이 없음을 의미합니다. 모든 노드는 자신의 행동에 대한 결정을 내리고 결과로 나타나는 시스템 동작은 총 응답입니다.

google amazon facebook 등 이런 회사들은 내부적으로 컴퓨팅 속도를 높이 고 latency를 줄이기 위해서 내부적으로는 distributed architecture를 채택 하고 운영을 합니다. 이는 시스템이 중앙 집중식(central) 및 분산형(distributed)일 수 있음을 의미합니다.

bitcoin이나 ethereum은 public ledger인 blockchain이 여러 대의 컴퓨터에 상주하기 때문에 distributed system이라 할 수 있으며 만약 하나의 노드 가 다운되어도 네트워크가 여전히 작동할 수 있기 때문에 decentralized system이기도 합니다. 아래 그래프를 보면 여러 개의 특징을 이용해서 분류해보았습니다.

 

블록체인 : 전통적인 App과 DApp 어떤 차이점, 아키텍쳐 : DApp 개발을 위해 고려해야 할 사항 2

 

Dapp은 암호화폐와 블록체인 기술을 사용하여 다양한 문제를 해결하는 서비스들이며 스마트 컨트랙트에 기반한 서비스를 제공하는 탈중앙 애플리케이션을 이 과목에서는 얘기하고 있습니다. Dapp은 코드가 탈중앙화된 p2p 네트워크 위에서 작동하고 데이터 쓰기/읽기 를 위해서 블록체인을 데이터베이스로 사용합니다.

대표적으로 이더리움이 Dapp을 구 동시킬 수 있는 블록체인 플랫폼입니다. 현재 천여 개 이상의 dapp 프로젝트 가 진행 중이며 주식, 보험, 복권 과 같은 금융 분야뿐만 아니라 쿠폰 투표 등 다양한 분야에서 개발 중에 있습니다. 특히, 급여, 회계, 지분 등 조직 운영에 필요한 데이터를 블록체인에 올려 서 운영하는 탈중앙화 자율조직 dao decentralize autonomous organization은 많은 관심을 받고 있습니다.

이러한 dapp의 특징으로 어떠한 특정 주체를 신뢰할 필요가 없다는 것 투명한 운영 원칙 향상된 보안 개인정보보호 글로벌 서비스에 용이함 등이 있습니다. 뿐만 아니라 누구나 실행이 가능 하고 서버의 다운이 없고 접속 제한도 없습니다.

 

 

 

Dapp

개발과 서비스 운영의 시점에서 바라본다면 dapp을 다음과 같이 front -end + back-end + database로 표현할 수 있습니다. 여기서 front-end는 사용자들이 애플리케이션에 접근할 수 있는 매개체인 web page 등이 될 수 있습니다. back-end는 사용자의 요청에 따라서 처리하는 일종의 서비스 기능이라고 생각하실 수 있는데 dapp에서는 smart contract가 이것을 담당합니다. 또한 실제 서비스에 필요한 데이터를 읽거나 저장할 수 있는 데이터베이스 가 필요한데 dapp에서는 분산원장인 블록체인이 이를 담당합니다.

 

블록체인 : 전통적인 App과 DApp 어떤 차이점, 아키텍쳐 : DApp 개발을 위해 고려해야 할 사항 3

 

그림을 보시면 사용자가 front-end를 통해서 dapp이 제공하는 서비스에 접근을 할 수가 있고 여기서의 Dapp의 front-end는 back-end와 통신 하면서 blockchain을 데이터베이스 로 사용하고 있다는 것을 확인할 수 있습니다.

 

블록체인 : 전통적인 App과 DApp 어떤 차이점, 아키텍쳐 : DApp 개발을 위해 고려해야 할 사항 4

 

Dapp을 개발하게 되면 application은 어딘가 중앙 서버에 저장되어 있어야 하는 등의 문제가 있습니다. fully decentralized app은 다음과 같이 decentralized logic으로 블록체인의 smart contract를 사용하고 decentralized storage로 이더리움의 swarm이라던가 ipfs bittorrent 등을 사용하는 것을 의미합니다.

또한 decentralized messaging을 위해 이 더리움의 whisper를 사용할 수 있습니다. 이렇게 되면 logic storage messaging 등이 모두 탈중앙화가 되어서 완전한 블록체인 기반의 dapp을 개발할 수 있습니다.

 

 

 

dapp과 기존의 전통적인 웹 애플리케이션 은 어떠한 차이

우선 기존의 전통적인 웹 기반 앱은 그림에서 보이는 것처럼 관련 서비스와 이에 필요한 데이터와 콘텐츠를 모두 중앙 서버 안에 있는 데이터베이스에 저장합니다. 그래서 사용자는 각각의 앱 서비스를 이용하기 위해서 웹 브라우저를 통해서 해당 중앙 웹 서버에 접속을 해서 서비스를 이용해야 합니다.

 

블록체인 : 전통적인 App과 DApp 어떤 차이점, 아키텍쳐 : DApp 개발을 위해 고려해야 할 사항 5

 

프로세스를 살펴보자면 웹브라우저 를 통해서 앱의 front-end의 코드를 실행시키고 서비스를 제공하기 위해서 서버에 저장되어 있는 back -end 서버 코드를 실행합니다. 이때 서버에 저장되어 있는 database 에 접근을 해서 필요한 데이터를 읽거나 쓰는 행위를 합니다. 앱이 제공하는 서비스가 활성화 가 되고 규모가 커질수록 중앙에 모인 데이터와 이를 처리하기 위한 컴퓨팅 파워 또한 중앙에 집중됩니다.

이렇게 중앙 서버에 의존하여 서비스를 제공하는 것을 중앙집중형 서비스 플랫폼이라고 하며 구글, 아마존, 페이스북, 네이버 등이 여기에 해당 됩니다. 이러한 중앙집중형 서비스 플랫폼 은 사용자의 데이터를 플랫폼이 소유하고 이를 이용하여 더 나은 서비스를 제공함으로써 막대한 수익을 창출합니다. 결국 이는 중앙집중화된 데이터와 서비스를 구축하고 이에 대한 수익을 독점하는 구조입니다.

이것은 실제 콘텐츠를 제공하는 사람과 서비스 발전에 기여한 사용자 등에게 적절한 보상이 분배되지 못하는 문제를 가지고 있습니다. 또한, 데이터와 서비스가 결국 각각 서비스 제공자들에게 너무 의존적 입니다. 이러한 문제를 Decentralized app 블록 체인 기반의 Dapp에서 해결을 하고자 합니다.

 

블록체인 : 전통적인 App과 DApp 어떤 차이점, 아키텍쳐 : DApp 개발을 위해 고려해야 할 사항 6

 

기존의 전통적인 웹 애플리케이션 과 블록체인 기반의 Dapp을 비교 하기 위해서 블록체인 플랫폼 중에 Dapp 개발에 가장 많이 사용되고 있는 이더리움 기반의 Dapp에 대해서 소개하겠습니다. 우선, Dapp을 사용하기 위해서는 사용자가 Mist, Metamask, Cipher, Trust browser와 같은 Dapp 구동 가능한 브라우저를 이용 해야 합니다.

Dapp 가능한 브라우저를 통해서 front -end에 접근을 해서 Dapp이 제공하는 서비스를 이용할 수 있습니다. 기존의 전통적인 웹 앱의 경우 각 웹 서버마다 서버의 로직을 담당하는 서버 코드가 각자의 서버에 저장되어 있었고 각 서비스마다 개별 로 데이터베이스를 유지하고 있었습니다.

하지만 Dapp의 그림을 보면 back-end 와 database가 블록체인에 포함되어 공유하고 있는 것을 보실 수 있습니다. 여기 그림에서는 각 이더리움 Dapp 인스턴스마다 EVM(ethereum virtual machine) 노드를 구동시키고 있고 그 안에 각자 블록체인을 유지하는 것처럼 구성되어 있습니다.

하지만 사실 두 개의 블록체인은 동일한 데이터가 저장되어 있어서 하나를 공유해도 무관합니다. Dapp의 핵심적인 특징은 back-end인 smart contract와 database인 블록체인 에 포함된 어카운트 상태 정보 등의 데이터들이 모두 블록체인에 포함되어 있고 이 블록체인의 데이터들은 모두 공유할 수 있다는 것입니다.

그래서 이더리움 기반의 Dapp 서비스는 중앙에 웹 서비스와 데이터를 집중 하지 않고 탈중앙화된 블록체인 을 이용하여 서비스를 제공합니다. 분산된 로직을 수행하는 스마트 컨트랙트를 이용하여 탈중앙화 된 서비스를 구축하고 모든 사람이 데이터를 함께 공유하며 서비스를 운영할 수 있습니다.

Dapp을 통하면 사용자와 개발자 등 모든 참여자가 해당 dapp 서비스의 발전에 따른 수익을 공평하게 분배할 수 있습니다. 이 과정에서 중개를 위해서 중간에 개입된 제3의 신뢰받는 기관이 필요 하지 않습니다.

 

 

 

기존의 웹 과 블록체인이 protocol layer에서 다른 가치

기존 인터넷에서 대표적인 프로토콜 로 TCP/IP, HTTP, FTP, SMTP등이 있습니다. 그리고 이러한 프로토콜 위에 google, naver, facebook, amazon 등과 같은 애플리케이션 들이 만들어졌습니다. 이들의 비즈니스 모델은 중앙화 된 서비스를 구축하고 이를 바탕으로 사용자들에게 서비스 사용료를 요구하던지 광고 수익을 얻는 것입니다.

 

블록체인 : 전통적인 App과 DApp 어떤 차이점, 아키텍쳐 : DApp 개발을 위해 고려해야 할 사항 7

 

그래서 기존 web에서는 프로토콜 계층이 아닌 프로토콜을 기반으로 한 애플리케이션 서비스에서 대부분의 가치가 창출된 것입니다. 시장이 발전하면서 사람들은 프로토콜 기술에 직접 투자하는 것은 낮은 수익이 발생하고 애플리케이션에 투자하면 높은 수익률이 발생 한다는 것을 알게 됩니다.

이렇게 기존의 웹은 가치의 분배가 구성이 됩니다. 하지만 블록체인에서는 프로토콜 과 애플리케이션의 관계가 반대로 됩니다. 가치는 공용 프로토콜 층에 집중되어 fat protocol이 되고 그 가치의 일부가 애플리케이션 층에 분배되어 thin application이 됩니다.

블록체인에서 protocol은 bitcoin, ethereum, eos, icon 등과 같은 블록체인 플랫폼 이 됩니다. 그리고 application은 해당 플랫폼 위에서 동작하는 dapp이 되며 대표 적으로 ethereum의 dapp인 cryptokitties 등이 있습니다. 그럼 왜 블록체인에서는 가치에 대해서 fat protocol이 될 수 있는 것 일까요?

첫째, 데이터가 애플리케이션 계층에 갇히지 않고 데이터 정보가 프로토콜 계층을 통해서 공유된다는 점입니다. 둘째, 네트워크에 의해서 제공되는 서비스의 접근에 사용되는 프로토콜 토큰의 존재입니다. 이러한 특징으로 인해서 애플리케이션 계층의 성공이 프로토콜 층의 투자 를 더 가중화시키기 때문에 프로토콜의 가치 창출은 그 위에 만들어진 애플리케이션의 가치를 합한 것보다 항상 더 빨리 커지게 됩니다.

결국 기존의 웹은 프로토콜 개발과 수익화 프로세스가 분리되어 있었지만 블록체인으로 프로토콜 개발과 수익화를 동시에 가능하게 한 것입니다.

 

블록체인 : 전통적인 App과 DApp 어떤 차이점, 아키텍쳐 : DApp 개발을 위해 고려해야 할 사항 8

 

모두 블록체인이 Dapp이 구동 하기 위한 프로토콜 계층을 구성하기 위해서 사용된다는 것을 이해하셨을 거라 생각합니다. 그래서 각각의 예시들을 살펴보겠습니다. 먼저 이더리움 플랫폼에서는 ETH 라는 화폐토큰가 사용되며 대표 적으로 cryptokitties라는 dapp을 이용할 수 있습니다.

다음 EOS 플랫폼에서 eos라는 토큰 을 사용하며 everipedia 같은 dapp이 구동됩니다. Qtum 플랫폼에서는 QTM이라는 토큰 을 사용하고 이 플랫폼 위에서는 Medibloc이라는 Dapp이 사용될 수 있습니다. Loopchain 플랫폼에서는 icon이라는 icx 토큰이 사용되고 bluewhale이라는 Dapp이 동작할 수 있습니다. 이 모든 플랫폼들은 블록체인 기술을 이용하여 구현되었습니다.

 

 

 

Dapp의 아키텍처

블록체인 : 전통적인 App과 DApp 어떤 차이점, 아키텍쳐 : DApp 개발을 위해 고려해야 할 사항 9

 

다음은 이더리움에서 Dapp이 구동 되는 아키텍처에 대해서 설명하겠습니다. 우선 Dapp 개발자는 개발할 dapp의 back-end인 smart contract를 작성해야 합니다. 이때 smart contract 설계 -> smart contract 구현 -> smart contract compile 과정을 거치면 contract address와 abi가 생성됩니다.

이 정보들은 front-end에서 back-end 인 smart contract와 소통하기 위한 interface라고 생각하시면 됩니다. Dapp 개발자는 HTML / CSS / Javascript 를 이용해서 dapp의 front-end도 구현 해야 합니다. 이때 web3.js라는 javascript library가 사용될 수 있으며 이것은 ethereum client에서 제공하는 json-rpc를 wrapping 한 것입니다.

사용자가 crowd funding에 관련된 d app에 이더를 펀딩하려는 상황을 가정해 보겠습니다. 웹 브라우저를 통해서 Dapp의 front -end에 접근하여 fund라는 버튼을 클릭하면 이더리움의 노드와 통신 을 하여 블록체인 안에 있는 smart contract에 접근을 합니다. Smart contract는 블록체인의 데이터 에 접근할 수 있기 때문에 버튼을 클릭할 때 입력했던 funding 금액 (ether)이 클릭한 사용자의 주소에서 컨트랙트 사용자 주소로 자동으로 전달되도록 실행시킬 수 있습니다.

 

 

 

Dapp 개발 시 고려사항

블록체인 기술의 특징을 생각해 보면, 개발할 것이 Dapp으로 구현하기 에 적합한지 고려할 수 있습니다. 제안하는 아이디어가 중간에 개입 된 제3자가 필요한지 생각해볼 필요가 있습니다. 블록체인은 데이터를 공유함으로써 p2p 네트워크에서 신뢰를 만들어 낼 수 있기 때문에 제3의 신뢰받는 중개 기관을 배제할 수 있습니다.

보통 다양한 회사들이 개입되어 있는 비즈니스에서 서로 간의 신뢰 가 필요한 경우에 신뢰받는 제3의 중개 기관을 도입해서 정보의 신뢰 문제를 해결하고 있습니다. 예를 들어서 제3의 기관이 중개 기관이 되어서 송금 해외 로밍 공인 인증서 발급 등을 할 때 신뢰를 제공해주는 것인데 이것이 비효율적 이라면 블록체인을 적용할 수 있습니다.

뿐만 아니라 Airbnb, Uber 등의 다양한 중개 서비스들에도 블록체인 기술을 적용하여 훨씬 더 효율적이고 비용을 낮출 수 있습니다. 블록체인은 시간 순으로 블록이 연결될 때 이전 블록의 데이터를 해시한 값을 다음 블록에 포함시킴으로써 과거의 기록을 위변조 할 수 없도록 만듭니다.

또한, 이 블록의 내용을 블록체인 에 참가한 모든 노드들이 동일한 블록체인을 바라볼 수 있도록 공개합니다. 이와 같이 블록체인은 데이터의 투명성이라는 특징을 갖는데, 혹시 데이터의 투명성을 입증해야 하는 서비스인 경우에 블록체인 기술을 적용해 볼 수 있습니다.

예를 들어 크라우드 펀딩은 추후 정확한 분배를 위해서 누가 얼마 를 펀딩 했는지 알 수 있어야 합니다. 그리고 투표 같은 경우도 자신의 표를 번복하면 안 되며 투표를 한다면 딱 한 번만 해야 하는 결과의 공정 함을 위해서 블록체인 기술이 적용 될 수 있습니다. 뿐만 아니라 도박과 관련된 서비스 처럼 누가 얼마를 배팅했는지 총 배당률이 얼마인지와 같은 데이터의 투명성을 제공해야 한다면 고려 해볼 수 있습니다.

추가로, 그럼 데이터를 도대체 어디까지 공개해야 하는지도 중요한 고려 사항입니다. 다음 두 가지 고려해야 되는 것들 은 블록체인의 저장 방식과 현재의 한계점에 관련된 내용입니다. 첫 번째, 기존의 시스템은 하나의 중앙 서버에 있는 데이터베이스에 모든 데이터를 다 저장합니다. 하지만, 블록체인의 경우 블록체인 네트워크에 참여하는 모든 노드 들이 동일한 데이터를 유지해야합니다.

그래서 대량의 정보가 저장될 필요가 있는 경우에는, 블록체인 안에 저장되는 on-chain data와 블록체인 밖에 저장되는 off-chain data를 잘 구별해야 합니다. 또한, 블록체인 기술이 아직 초창기 이기 때문에 낮은 성능과 확장성 을 고려해야 합니다. TPS(transactions per second)는 초당 거래 수를 나타낼 때 사용됩니다.

단적으로 이더리움는 20tps의 거래 처리 속도를 갖고, 기존 시스템 중 하나인 visa 신용카드는 25000tps의 거래 처리 속도를 갖고 있다고 합니다. 그러니 visa와 같이 빠른 거래 처리 속도를 요구하는 실시간 서비스를 Dapp으로 구현하는 것은 적합하지 않을 수 있습니다. 그리고 블록체인에 저장되는 데이터의 양이 점점 많아지고 있기 때문에 이를 모든 노드에 저장하는 것은 비효율적일 수 있습니다.

그래서 최대한 블록체인에는 적은 데이터를 저장하고 컨트랙트에는 꼭 필요한 요소만 포함시키도록 하는 것이 좋습니다. 여기에서는 추가적으로 고려해야 될 것들을 나열해보았습니다. 이더리움의 경우에는 사용자가 트랜잭션 수수료 비용을 지불하기 때문에 많은 사용자가 자신의 서비스를 사용하기를 원한다면 스마트 컨트 랙트를 최적화해서 실행하는데 그리고 사용하는데 발생하는 수수료 를 줄여야 합니다.

그리고 전체 시스템을 디자인할 때 온체인과 오프체인 개발 요소 들을 분리해서 생각해야 합니다. 서비스를 운용하는데 모든 데이터를 블록체인에 다 포함시키는 것은 어렵습니다. 그래서 자신의 Dapp 서비스에서 필요한 데이터 중에서 어떤 것을 on-chain 에 포함하고 어떤 것을 off-chain에 포함해야 하는지 잘 구별해야 합니다.

예를 들어, 크고 복잡한 데이터 개인정보 기밀 데이터가 포함되는 비즈니스 로직smart contract 등이 on-chain에 저장되는 것은 적절하지 않습니다. 컨트랙트에는 꼭 필요한 요소만 포함시키도록 해야 합니다. 그 다음, 일단 스마트 컨트랙트 코드가 한번 블록에 포함된다면 다시 바꿀 수 없기 때문에 smart contract를 설계 및 개발할 때는 매우 신중해야 합니다.

또한, 현재까지 smart contract의 다양한 취약점들이 발견되고 있는데 이러한 취약점들을 피하여 smart contract를 작성해야 합니다. 마지막으로, smart contract에서 블록 체인 밖으로부터 정보를 얻는 것은 불가능합니다. 만약 이더리움 Dapp을 개발한다면 oraclize contract를 통해 외부 데이터를 얻어올 수는 있습니다.

 

 

 

참조

http://www.kmooc.kr/courses/course-v1:POSTECHk+CSED490U1+2021_T1/about

 

블록체인 입문

블록체인과 암호화폐 기술을 깊이 배우기에 앞서, 비 전공자들도 이해를 할 수 있는 수준으로 블록체인과 암화화폐에 대한 high-level 설명 및 응용 예시를 제공하고 실제 상황에 적용할 수 있다.

www.kmooc.kr

 

반응형