5주차 공부 - 3

박세연·2021년 1월 27일
0

Mastering Ethereum

목록 보기
8/10
post-thumbnail

Chapter 12. 탈중앙화 애플리케이션(댑)

댑이란 무엇인가?

✔ 댑(DApp)은 탈중앙화 애플리케이션(decentralized application)이다. 대부분의 요소, 혹은 완전히 탈중앙화된 애플리케이션이라고 볼 수 있는데, 이렇게 애플리케이션에서 탈중앙화 가능한 측면들이 있다.
▶ 백엔드(backend) 소프트웨어
▶ 프론트엔드(frontend) 소프트웨어
▶ 데이터 스토리지(data storage)
▶ 메시지 통신(message communication)
▶ 네임 레졸루션(name resolution)

탈중앙화 애플리케이션이 가지는 장점이 몇가지 있다.

  • 지속성(resiliency)
    보통의 애플리케이션은 서버가 죽으면 사용할 수 없다. 하지만 댑은 가동 중지 시간이 없으며 플랫폼이 작동하는 한 계속 사용할 수 있다.
  • 투명성(transparency)
    댑의 온체인 특성으로 누구나 코드를 검사하고 그 기능을 확신할 수 있다. 그리고 댑과 상호작용한 모든 내용은 블록체인에 영원히 기록된다.
  • 검열 저항(censorship resistance)
    사용자는 중앙화된 컨트롤의 간섭 없이 댑과 항상 상호작용할 수 있다. 그리고 네트워크에 배포된 코드는 변경할 수 없다.

백엔드(스마트 컨트랙트)

▶ 일반적인 애플리케이션의 서버(백엔드) 구성요소는 댑의 스마트 컨트랙트와 비슷하다고 볼 수 있다.
▶ 댑의 스마트 컨트랙트는 비즈니스 로직(코드)과 애플리케이션의 관련 상태를 저장하는데 사용된다.
▶ 스마트 컨트랙트와 기존 서버 측 백엔드의 가장 큰 차이점은, 스마트 컨트랙트 실행 시, 코드 계산 비용이 비싸기 때문에 최적의 코드를 사용해야 한다는 점이다.
▶ 스마트 컨트랙트 설계시 주요한 고려사항 중 하나는 스마트 컨트랙트가 배포되고 나면 스마트 컨트랙트의 코드를 변경할 수 없다는 점이다.
▶ 두번째 고려사항은 댑의 크기이다. 스마트 컨트랙트는 배포되고 사용될 때, 즉 컨트랙트를 통해 데이터가 생성되고 그 데이터를 저장하고 이렇게 발생하는 데이터들이 블록체인에 기로고디므로 가스를 소비한다. 그러므로 댑의 크기를 고려해야한다.

프론트엔드(웹 유저 인터페이스)

▶ 댑의 클라이언트 쪽 인터페이스는 표준 웹 기술(HTML, CSS, 자바스크립트 등)을 사용할 수 있다.
▶ 메시지 서명, 트랜잭션 전송, 키 관리 같은 이더리움과의 상호작용은 메타마스크같은 확장 프로그램을 이용해서 웹 브라우저에서 수행될 수 있다.

데이터 스토리지

▶ 높은 가스 비용과 현재의 낮은 블록 가스 한도로 인해 스마트 컨트랙트는 많은 양의 데이터를 저장하거나 처리하는 데 적합하지 않다.
▶ 따라서 대부분의 댑은 사이즈가 큰 데이터를 이더리움 체인으로부터 데이터 스토리지 플랫폼으로 옮겨 저장한다.
▶ IPFS나 이더리움의 스웜(Swarm) 같은 탈중앙화된 플랫폼이 있다.

  • IPFS : 저장된 객체를 P2P네트워크의 피어들에게 배포하는 탈중앙화된 콘텐츠 주소 부여 가능 스토리지 시스템
    (콘텐츠 주소 부여 가능: 각 내용(파일)이 해싱되고 해시가 해당 파일을 식별하는데 사용되는 것을 의미한다.)
  • 스웜 : IPFS와 유사한 콘텐츠 주소 부여 가능한 P2P스토리지 시스템. 스웜을 사용하면 중앙 웹 서버가 아닌 탈중앙화 P2P시스템을 통해 웹사이트에 접근할 수 있다.

탈중앙화 메시지 통신 프로토콜

▶ 모든 애플리케이션은 애플리케이션의 다른 인스턴스 간에 또는 애플리케이션 사용자 간에 메시지를 교환할 수 있다.
▶ 댑의 가장 주목할 만한 P2P 메시징 프로토콜은 위스퍼가 있다.

기본 댑 사례: 경매 댑


▶ 탈중앙화된 경매를 구현하는 예제
▶ 경매 댑은 사용자가 주택, 자동차, 상표 같은 고유한 자산을 나타내는 증서(deed)토큰을 등록할 수 있게 한다.
▶ 토큰이 등록되면 토큰 소유권이 경매 댑으로 이전되고, 판매를 위해 리스팅 된다.
▶ 경매 댑에 등록된 토큰은 다른 사용자가 입찰할 수 있고, 경매 중 사용자는 해당 경매를 위해 만들어진 대화방에 참여할 수 있다.
▶ 경매가 낙찰되면 증서 토큰의 소유권이 경매 낙찰자에게 이전된다.

경매 댑의 구성요소

  • ERC721 대체 불가능한 '증서'토큰을 구현하는 스마트 컨트랙트(DeedRepository)
  • 증서를 팔기 위해 경매를 구현하는 스마트 컨트랙트(AuctionRepository)
  • Vue/Vuetify 자바스크립트 프레임워크를 사용하는 웹 프론트엔드
  • 이더리움 체인에 연결하는 web3.js 라이브러리(메타마스크)
  • 채팅에서 발생하는 이미지 같은 자원을 저장하는 스웜 클라이언트
  • 모든 참여자들을 위해 경매별 대화방을 개설하기 위한 위스퍼 클라이언트

경매 댑: 백엔드 스마트 컨트랙트

댑 구현을 위해 앞서 얘기한 두 개의 스마트 컨트랙트(AuctionRepository, DeedRepository)를 사용한다. 이 컨트랙트는 애플리케이션을 지원하기 위해 이더리움 블록체인에 배포된다.
DeedRepository 컨트랙트는 각 경매에 대한 토큰을 발행하고 추적한다.
AuctionRepository 컨트랙트는 경매를 조율, 관리한다.

▶ 두 컨트랙트를 살펴보면, 댑에 대한 특별한 권한을 가진 계정이나 역할이 없다.
▶ 댑에 특권을 가진 계정이 있는 경우, 버그와 같은 문제를 피하고 복구할 수 있지만 해당 계정이 탈취되면 댑의 보안이 파괴될 수 있는 위험이 있다.
▶ 컨트랙트에 특별한 권한을 가진 계정이 없는 경우 한번 배포되면 컨트랙트에 대한 모든 통제권이 사라져 보안에 이점이 있을 수 있지만 버그가 발견되면 복구할 방법이 없다.
▶ 진정한 댑은 특수한 접근 권한을 가진 계정을 허용하지 않는 방향으로 나아가야한다. 그런 계정이 있다는 것은 진정한 탈중앙화가 아니기 때문이다.

경매 댑: 프론트엔드 사용자 인터페이스

경매 댑의 컨트랙트를 배포하고 사용자는 선호하는 자바 스크립트 콘솔과 web3.js 또는 다른 web3라이브러리르 사용하여 댑의 컨트랙트와 상호작용할 수 있다.
배포된 컨트랙트의 주소와 JSON파일 등을 이용해서 사용자 인터페이스를 만들 수 있다.

경매 댑을 더 탈중앙화 하기

✔ 댑을 탈중앙화하고 복원력을 좋게 만들 수 있는 두가지 방법이 있다.

  • 모든 애플리케이션 코드를 스웜 또는 IPFS에 저장한다. (앞서 얘기한 탈중앙화된 플랫폼)
    이미지같은 데이터를 스웜을 사용해 저장하는 방식을 사용했는데, 여기서 더 나아가서 댑 자체의 프론트엔드 전체를 패키징해서 스웜에 저장하고 웹 서버를 실행하는 대신 스웜 노드에서 실행하는 방식을 사용할 수 있다.
    이렇게 하면 전체 경매 댑은 스웜에서 호스팅되고, 아래와 같은 스웜 URL을 통해 접근할 수 있다.
    bzz://ab164cf37dc10647e43a233486cdeffa8334b026e32a480dd9cbd020c12d4581
    하지만 이름 자체가 사용자 친화적이지 않아 사용하기에 더 어렵다고 볼 수 있다.

  • 이더리움 네임 서비스를 사용하여 네임을 참조하여 댑에 접근한다.

이더리움 네임 서비스(ENS)

▶ 전통적인 인터넷의 DNS(Domain Name System)과 같은 역할을 이더리움 블록체인에서는 ENS가 탈중앙화 방식으로 수행한다.
ex. 0xfB6916095caldf60bB79Ce92cE3Ea74c37c5d359와 같은 주소 ➡ ethereum.eth
▶ ENS는 기본적으로 댑이며, 탈중앙화 네임 서비스스 제공할 뿐 아니라 등록, 관리, 그리고 등록된 이름의 경매를 위한 여러 댑이 ENS 기능을 지워한다.
▶ ENS는 댑이 다른 댑을 지원하기 위해 만들어지며 댑들이 협력할 수 있다는 것을 보여준다.

profile
안녕하세요

0개의 댓글