✔ 댑(DApp)은 탈중앙화 애플리케이션(decentralized application)이다. 대부분의 요소, 혹은 완전히 탈중앙화된 애플리케이션이라고 볼 수 있는데, 이렇게 애플리케이션에서 탈중앙화 가능한 측면들이 있다.
▶ 백엔드(backend) 소프트웨어
▶ 프론트엔드(frontend) 소프트웨어
▶ 데이터 스토리지(data storage)
▶ 메시지 통신(message communication)
▶ 네임 레졸루션(name resolution)
탈중앙화 애플리케이션이 가지는 장점이 몇가지 있다.
▶ 일반적인 애플리케이션의 서버(백엔드) 구성요소는 댑의 스마트 컨트랙트와 비슷하다고 볼 수 있다.
▶ 댑의 스마트 컨트랙트는 비즈니스 로직(코드)과 애플리케이션의 관련 상태를 저장하는데 사용된다.
▶ 스마트 컨트랙트와 기존 서버 측 백엔드의 가장 큰 차이점은, 스마트 컨트랙트 실행 시, 코드 계산 비용이 비싸기 때문에 최적의 코드를 사용해야 한다는 점이다.
▶ 스마트 컨트랙트 설계시 주요한 고려사항 중 하나는 스마트 컨트랙트가 배포되고 나면 스마트 컨트랙트의 코드를 변경할 수 없다는 점이다.
▶ 두번째 고려사항은 댑의 크기이다. 스마트 컨트랙트는 배포되고 사용될 때, 즉 컨트랙트를 통해 데이터가 생성되고 그 데이터를 저장하고 이렇게 발생하는 데이터들이 블록체인에 기로고디므로 가스를 소비한다. 그러므로 댑의 크기를 고려해야한다.
▶ 댑의 클라이언트 쪽 인터페이스는 표준 웹 기술(HTML, CSS, 자바스크립트 등)을 사용할 수 있다.
▶ 메시지 서명, 트랜잭션 전송, 키 관리 같은 이더리움과의 상호작용은 메타마스크같은 확장 프로그램을 이용해서 웹 브라우저에서 수행될 수 있다.
▶ 높은 가스 비용과 현재의 낮은 블록 가스 한도로 인해 스마트 컨트랙트는 많은 양의 데이터를 저장하거나 처리하는 데 적합하지 않다.
▶ 따라서 대부분의 댑은 사이즈가 큰 데이터를 이더리움 체인으로부터 데이터 스토리지 플랫폼으로 옮겨 저장한다.
▶ IPFS나 이더리움의 스웜(Swarm) 같은 탈중앙화된 플랫폼이 있다.
- IPFS : 저장된 객체를 P2P네트워크의 피어들에게 배포하는 탈중앙화된 콘텐츠 주소 부여 가능 스토리지 시스템
(콘텐츠 주소 부여 가능: 각 내용(파일)이 해싱되고 해시가 해당 파일을 식별하는데 사용되는 것을 의미한다.)- 스웜 : IPFS와 유사한 콘텐츠 주소 부여 가능한 P2P스토리지 시스템. 스웜을 사용하면 중앙 웹 서버가 아닌 탈중앙화 P2P시스템을 통해 웹사이트에 접근할 수 있다.
▶ 모든 애플리케이션은 애플리케이션의 다른 인스턴스 간에 또는 애플리케이션 사용자 간에 메시지를 교환할 수 있다.
▶ 댑의 가장 주목할 만한 P2P 메시징 프로토콜은 위스퍼가 있다.
▶ 탈중앙화된 경매를 구현하는 예제
▶ 경매 댑은 사용자가 주택, 자동차, 상표 같은 고유한 자산을 나타내는 증서(deed)토큰을 등록할 수 있게 한다.
▶ 토큰이 등록되면 토큰 소유권이 경매 댑으로 이전되고, 판매를 위해 리스팅 된다.
▶ 경매 댑에 등록된 토큰은 다른 사용자가 입찰할 수 있고, 경매 중 사용자는 해당 경매를 위해 만들어진 대화방에 참여할 수 있다.
▶ 경매가 낙찰되면 증서 토큰의 소유권이 경매 낙찰자에게 이전된다.
댑 구현을 위해 앞서 얘기한 두 개의 스마트 컨트랙트(AuctionRepository, DeedRepository)를 사용한다. 이 컨트랙트는 애플리케이션을 지원하기 위해 이더리움 블록체인에 배포된다.
▶ DeedRepository 컨트랙트는 각 경매에 대한 토큰을 발행하고 추적한다.
▶ AuctionRepository 컨트랙트는 경매를 조율, 관리한다.
▶ 두 컨트랙트를 살펴보면, 댑에 대한 특별한 권한을 가진 계정이나 역할이 없다.
▶ 댑에 특권을 가진 계정이 있는 경우, 버그와 같은 문제를 피하고 복구할 수 있지만 해당 계정이 탈취되면 댑의 보안이 파괴될 수 있는 위험이 있다.
▶ 컨트랙트에 특별한 권한을 가진 계정이 없는 경우 한번 배포되면 컨트랙트에 대한 모든 통제권이 사라져 보안에 이점이 있을 수 있지만 버그가 발견되면 복구할 방법이 없다.
▶ 진정한 댑은 특수한 접근 권한을 가진 계정을 허용하지 않는 방향으로 나아가야한다. 그런 계정이 있다는 것은 진정한 탈중앙화가 아니기 때문이다.
경매 댑의 컨트랙트를 배포하고 사용자는 선호하는 자바 스크립트 콘솔과 web3.js 또는 다른 web3라이브러리르 사용하여 댑의 컨트랙트와 상호작용할 수 있다.
배포된 컨트랙트의 주소와 JSON파일 등을 이용해서 사용자 인터페이스를 만들 수 있다.
✔ 댑을 탈중앙화하고 복원력을 좋게 만들 수 있는 두가지 방법이 있다.
모든 애플리케이션 코드를 스웜 또는 IPFS에 저장한다. (앞서 얘기한 탈중앙화된 플랫폼)
이미지같은 데이터를 스웜을 사용해 저장하는 방식을 사용했는데, 여기서 더 나아가서 댑 자체의 프론트엔드 전체를 패키징해서 스웜에 저장하고 웹 서버를 실행하는 대신 스웜 노드에서 실행하는 방식을 사용할 수 있다.
이렇게 하면 전체 경매 댑은 스웜에서 호스팅되고, 아래와 같은 스웜 URL을 통해 접근할 수 있다.
bzz://ab164cf37dc10647e43a233486cdeffa8334b026e32a480dd9cbd020c12d4581
하지만 이름 자체가 사용자 친화적이지 않아 사용하기에 더 어렵다고 볼 수 있다.
이더리움 네임 서비스를 사용하여 네임을 참조하여 댑에 접근한다.
▶ 전통적인 인터넷의 DNS(Domain Name System)과 같은 역할을 이더리움 블록체인에서는 ENS가 탈중앙화 방식으로 수행한다.
▶ ex. 0xfB6916095caldf60bB79Ce92cE3Ea74c37c5d359
와 같은 주소 ➡ ethereum.eth
▶ ENS는 기본적으로 댑이며, 탈중앙화 네임 서비스스 제공할 뿐 아니라 등록, 관리, 그리고 등록된 이름의 경매를 위한 여러 댑이 ENS 기능을 지워한다.
▶ ENS는 댑이 다른 댑을 지원하기 위해 만들어지며 댑들이 협력할 수 있다는 것을 보여준다.