DApp

김주언·2022년 7월 6일
0

Web 3.0

목록 보기
2/4
post-thumbnail

1. DApp이란?

DApp은 Decentralized Application의 약자로 블록체인 기술을 활용한 탈중앙화된 어플리케이션. 코드가 탈중앙화된 peer-to-peer network 위에서 작동하고, 데이터 호출 및 등록을 블록체인 데이터베이스로 사용하는 애플리케이션.

분산 애플리케이션은 분산 컴퓨팅, 블록체인 또는 기타 분산 원장 시스템에서 실행되는 스마트 계약을 사용하여 일반적으로 자율적으로 작동할 수 있다.




2. ICP?

Internet ComPuter

ICP의 목표는 전 세계 여러 컴퓨터를 블록체인 기반의 네트워크로 연결하여 분산형 클라우드 시스템을 형성하는 것이다. 이는 웹의 가장 베이스 레이어에서 강력하고 안전한 블록체인을 구성할 수 있도록 하는 것이다.

따라서 호스팅, 저장, 서비스와 같은 모든 것을 하나의 시큐어 프로토콜 내에서 수행할 수 있도록 하는 것이다.

현재까지의 웹 애플리케이션들은 클라우딩 서비스가 잘 되어있다고는 하지만 완전히 탈중앙화가 된 것은 아니다. 그래서 AWS같은 서비스를 사용하는데에 불편함이 따르게 되는 것.

2.1 동작원리

기본적으로 인터넷 컴퓨터는 많은 수의 독립적인 컴퓨팅 용량을 집계한다.
데이터 센터, 그리고 전 세계의 이러한 모든 데이터 센터를 인터넷을 사용하여 결합한다. 원한다면 컴퓨터 프로토콜을 대규모 단일 분산 세계 컴퓨터로 변환할 수도 있다. 그리고 이 분산형 컴퓨터는 캐니스터 또는 캐니스터 스마트라고 부르는 것으로 구성된다. 그리고 이러한 캐니스터는 기본적으로 프로세스를 실행하고, 코드를 실행하고, 프로그램에 대한 데이터를 저장할 수 있다. 이러한 기능들을 제공하는 캐니스터를 직접 활용하기 위해 사용자는 HTTPS 요청을 통해 접근한다.

인터넷 컴퓨터는 기본적으로 캐니스터 묶음이다. 그리고 각 캐니스터는 웹 어셈블리 모듈과 메모리 페이지라고 불리는 플래시 메모리를 통해 프로그램 상태를 보유할 수 있다. 따라서 개발자는 웹 응용 프로그램을 실행하는 성능이 뛰어난 방식으로 컴파일되는 코드를 작성할 수 있다. Rust 또는 Dfinity의 motoko와 같은 언어를 사용하여 이를 수행할 수 있다.

캐니스터는 프로그램의 상태에 따른 변수, 컬렉션, 배열의 내용이 실제로 내부에 저장할 수 있다. 그리고 이러한 각 캐니스터는 프로세스나 코드 샌드박스와 같은 역할을 한다. Docker로 따지자면 컨테이너와 비슷하다. 그러나 프로그램 상태는 유지되므로 캐니스터는 마치 영원히 실행되는 것처럼 작동한다.

즉, 프로그램이 종료되지 않는 것처럼 동작하기 때문에 데이터베이스에서 데이터를 가져오는 것, 데이터 지속성, 데이터베이스에 저장하는 것에 대해 생각할 필요조차 없게 되는 것이다.




3. 설치

DApp 개발을 위한 개발환경을 설정하도록 한다. node.js 16버전 이상이 설치되어 있어야한다. Mac입니다잉

3.1 DFX 설치

터미널에 아래 명령어를 입력한다

DFX_VERSION=0.9.3 sh -ci "$(curl -fsSL https://sdk.dfinity.org/install.sh)"

설치 확인

3.2 VSCode

VSCode 마켓플레이스에서 Motoko를 설치한다.




4. dfx 예제

디폴트 Hello 앱을 실행하면서 동작을 확인한ㄷㅏ.

4.1 프로젝트 생성

dfx new hello

프로젝트를 생성하면 두개의 캐니스터가 생성된다

├── hello
│   └── main.mo
└── hello_assets
    ├── assets
    └── src

자산과 백엔드 로직이 하나의 캐니스터에 있을 수 있지만 백엔드용과 프론트엔드용 캐니스터가 하나씩 독립적으로 있는 것이 유용하다.

일단 캐니스터가 배치되면 최종 사용자는 브라우저와 같은 프론트엔드 클라이언트를 통해 해당 캐니스터에 대해 정의한 진입점 기능에 액세스하여 캐니스터와 상호 작용할 수 있다.

4.2 로컬에서 dapp 실행

로컬로 배포하려면 dfx실행 환경의 로컬 인스턴스를 시작할 수 있다. 이 환경은 dapp 배포 전용으로 설계된 경량 환경이다

터미널을 두 개 사용하는 것이 편하다.

  • 터미널 A 는 실행 환경의 출력을 보여주기 위해 사용한다.node.js의 Express, python의 Django 또는 Ruby의 Rails와 같은 프로젝트에서 로컬 서버를 시작하는 것과 유사하다

  • 터미널 B 는 실행 환경에서 실행 중인 캐니스터와 상호 작용하는 데 사용한다. 이것은 Postman 또는 Panic과 같이 로컬에서 실행되는 서버에 HTTP API 메시지를 보내는 것과 비슷하다.

hello 디렉터리로 이동한 다음 서버를 시작하고 프로젝트를 배포한다.

dfx start
npm install
dfx deploy
npm start

순서대로 입력하고 나서 제공된 url에 접속해본다.

🥺 🥹 크흡

profile
학생 점심을 좀 차리시길 바랍니다

0개의 댓글