Blockchain Application (BApp)
•
블록체인 어플리케이션(BApp)은 블록체인을 사용하는 어플리케이션
◦
기존의 기술로 풀기 어려운 문제들을 블록체인의 특성을 활용하여 풀어내는 것이 목적
•
불변성과 투명성이 대표적인 블록체인 특성
◦
한번 기록된 정보는 변경할 수 없다.
◦
정해진 규칙(e.g., 블록생성 등 프로토콜이 가진 규칙, 컨트랙트로 구현된 규칙)에 따라 상태를 변경
◦
기록의 내역이 블록에 공개되어 있으므로 누구든지 정보의 진실여부를 확인 가능
BApp들이 블록체인을 사용하는 유형
•
As a Payment Channel
◦
토큰 사용 결제
•
As a Storage
◦
블록체인을 안전한 저장소로 인식
•
As a World Computer
◦
모든 노드가 동일한 연상 수행
◦
어느 한 노드에 의전하지 않는 탈중앙화 실행 환경
BApp의 유형
•
Fully decentralized
◦
사용자(클라이언트)가 직접 블록체인과 통신
•
Semi-decentralizeed with centralized proxy
◦
클라이언트가 블록체인과 통신하기 위해 중개 서버와 통신
◦
블록체인 기반으로 만들어진 서비스가 있고 그 서비스를 사용자들이 사용하는 형태
◦
클라이언트 중개서버 블록체인
Fully Decentralized | Semi-decentralizeed with centralized proxy | |
장점 | - 높은 투명성
- 신뢰형성에 필요한 비용 없음
- (설치형 BApp의 경우) 관리 비용 낮음 | - (기존의 서비스들과 동일한) 높은 수준의 UX
- 사용자가 블록체인과 직접 통신할 필요 없음
- 로직 변경 비교적 쉬움
- 제약사항 어느정도 완화 |
단점 | - 사용자 책임 증가, 어려운 UX
- 로직 변경 어려움
- 경우에 따라 사용자가 블록체인에 상시 접속할 필요 및 블록 복제 할 필요가 있음 | - 신뢰 비용 발생
- 서비스가 Single Point of Failure (SPoF)가 됨 : 언제든지 다운 될 수 있다 : 서버가 여러 대
- 관리 비용 높음 |
다른 서버나 서비스에 의존하지 않고 블록체인과 직접 통신 한다면 탈중앙화되었다고 본다.
BApp 개발
•
프론트엔드 (Frontend)
◦
사용자가 직접 사용하는 프로그램 (e.g., mobile app, web page/app)
◦
User Interface (UI), 통신, 이벤트 처리 등을 사용자 환경 고려 개발
◦
TX 생성, 서명, 전송 등을 프론트엔드에서 처리
•
백엔드 (Backend)
◦
블록체인 동기화 등 컴퓨팅 리소스가 많이 필요한 일을 처리하는데 적합
◦
블록체인 동기화, 블록 파싱(parsing), TX 전달, 가스비 대납 등을 백엔드에서 처리
•
컨트랙트 (Contract)
•
Fully decentralized = Frontend + Blockchain
◦
Web + Klaytn
◦
Android + Klaytn
◦
Windows + Klaytn
•
Semi-decentralized = Frontend + Server + Blockchain
◦
Web + Java Server on AWS + Klaytn
◦
Android + Node.js Server on Azure + Klaytn
프론트 엔드 개발
•
BApp이 실행되는 환경에 따라 개발 방법이 달라짐
•
프론트엔드 개발에 영향을 끼치는 실행환경 중 하나가 지갑
◦
지갑의 존재유무에 따라 개발방법이 변경
◦
특정 지갑을 사용할 경우 해당 지갑이 제공하는 라이브러리를 사용
백 엔드 개발
•
블록체인 프로토콜 이외의 정보 관리할 때 필요
◦
UX 향상 및 서비스 구현을 위해 TX 외 다른 정보 필요한 경우 백엔드 운영
◦
e.g., 문서 공증 BApp
▪
사용자가 문서 공증을 위해 BApp 사용
▪
문서의 해시를 포함한 공증기록은 블록체인에 기록
▪
정보의 누설을 원치 않을 경우 문서 원본은 블록체인에 기록하기 어려움
▪
문서를 클라이언트에 보관할 수 있으나 분실의 위험, 여러 장치에 접근할 수 없는 점 등이 문제
▪
백엔드에서 안전하게 원본 문서를 관리하여 편리한 서비스 구현이 가능
•
서비스 제공자가 실행환경을 결정
◦
개발방법 선택이 비교적 자유로운 편이나 대부분의 경우 플랫폼 SDK 존재 유무에 따라 방향 결정