[NEAR 시리즈] NEAR의 BOS, Open Web을 위한 Operating System

user-image
이재훈(resister-boy)
부학회장/
CURG
2023.06.28

[Xangle Digest]

※해당 컨텐츠는 6월 16일 외부에서 기발간 된 컨텐츠입니다. 컨텐츠에 대한 추가적인 주의사항은 본문 하단에서 확인해주세요.

니어 BOS, 블록체인 운영 체제, BOS 배포 방법, 니어 오픈 웹, 니어프로토콜 생태계

 

목차

BOS란 무엇인가? 
BOS가 해결하고자 하는 문제 
BOS가 제공하는 기능
BOS Entity와 Role
BOS Components 배포하기 
BOS를 통해 가능해지는 것들
Open Web과 BOS
마치며 

 

 

지난 2023 5 NEAR BOS가 공개되었습니다.
본 아티클에서는 NEAR BOS에 대해 자세히 살펴보도록 하겠습니다.

 

BOS란 무엇인가?

 
니어 BOS, 블록체인 운영 체제, BOS 배포 방법, 니어 오픈 웹, 니어프로토콜 생태계

출처: NEAR Protocol 

올해 초 ETH Denver에서 NEAR의 Blockchain Operating System(이하 BOS)이 공개되었습니다. BOS는 직역하면 블록체인 운영체제로, 그 이름처럼 블록체인이라는 시스템 위에서 여러 응용 프로그램을 서비스할 수 있도록 지원하는 역할을 합니다.

운영체제라고 하면 대표적으로 Linux, MaxOS, Windows가 있습니다. 운영체제는 하드웨어를 추상화하여 사용자와 응용 프로그램이 하드웨어를 편리하고 효율적으로 활용할 수 있도록 시스템 자원을 관리하고 사용자, 응용 프로그램이 공통으로 사용하는 기능을 제공합니다.

BOS도 비슷한 관점으로 이해할 수 있습니다. Linux, MaxOS, Windows가 하드웨어를 추상화했다면, BOS는 블록체인을 추상화합니다. BOS의 실체는 NEAR 그 자체입니다. 사용자는 BOS를 통해 NEAR를 포함한 다른 블록체인과 상호작용할 수 있게 되는 것입니다. 현재까지는 Ethereum만을 지원하고 있지만, 이후 Solana와 Cosmos 등 지원하는 체인을 확대할 예정이라고 합니다.

 

BOS가 해결하고자 하는 문제 

이제 BOS가 해결하는 문제가 무엇이고, 구체적으로 어떤 기능을 제공하는지 알아보도록 합시다.

BOS가 해결하려는 문제, 니어 BOS, 블록체인 운영 체제, 니어 오픈 웹, 니어프로토콜 생태계

Censorship of Frontends

먼저 Censorship of Frontends입니다. 이는 Web2와 Web3가 모두 가지고 있는 문제입니다. 일반적으로 프론트엔드의 경우 AWS와 같은 클라우드에 배포됩니다. 그런데 이때, 애플리케이션을 사용하는 사용자 입장에서는 악의적인 로직이 포함되어 있을 수도 있음에도, 내부적으로 어떤 로직이 동작하는지 알 수 없습니다. 개발자를 신뢰해야 하는 문제가 있는 것이죠.

Discoverability

Discoverability Web3 고질적인 문제 하나입니다. 대표적으로 Etherscan 같은 Blockchain Explorer들이 존재하지만, Transaction Hash Account Address만으로 사용자들이 원하는 정보를 찾는 것은 매우 어려운 일입니다. 특히, 찾고자 하는 정보가 단순한 송금 기록이 아니라면, Etherscan 같은 인터페이스에서는 원하는 정보를 찾는 것은 구조적으로 불가능해집니다.

 

BOS가 제공하는 기능

BOS는 Operating System이라는 이름에 맞게 다양한 기능을 제공하지만, 크게 두 가지 묶어 설명할 수 있습니다.

Development

개발자는 Components라고 불리는 프론트엔드 코드(JSX 문법에 따라 작성된)를 개발하고 NEAR 온체인에 배포할 수 있습니다. Components는 하나의 애플리케이션이 될 수도 있고, 작은 버튼 버튼이 될 수도 있습니다.  또한, Components를 조합하는 것도 가능합니다.

이렇게 프론트엔드 코드를 NEAR 온체인에 배포하게 되면 다른 개발자들의 오딧을 받을 수 있어 더 안전한(탈중앙화된) 애플리케이션을 개발할 수 있고, 애플리케이션의 사용자는 피싱(개인 키 탈취)에 대한 걱정 없이 애플리케이션을 사용할 수 있습니다.

코드를 온체인에 배포하는 것의 또 다른 장점은 다른 개발자들의 코드를 위젯(Widget)으로 만들어 재사용할 수 있다는 것입니다. 물론 자기 자신이 코드를 작성한 후 위젯으로 만들어 오픈소스로 기여할 수도 있습니다.

아래 링크에서 직접 Components를 개발하고 배포할 수 있습니다.

Discovery

블록체인에서 무언가 원하는 정보를 찾기는 여전히 쉽지 않은 일입니다. 사용자는 Gateway를 통해 블록체인에서도 마치 Web2 서비스와 비슷한 플로우로 찾고자 하는 정보를 검색할 수 있습니다.

앞서 BOS를 통해 프론트엔드 코드를 개발하고 NEAR 온체인에 배포할 수 있다고 했습니다. 이때, 온체인에는 코드뿐만 아니라 임의의 텍스트나 이미지를 저장할 수 있습니다.

사용자들은 Gateway 중 하나인 near.social에서 마치 소셜 미디어처럼 자신의 프로필을 관리하고 텍스트나 이미지를 포스팅할 수 있습니다. 또한, 다른 사용자의 포스트에 좋아요를 누르거나, 다른 사용자를 팔로우할 수도 있습니다. 그리고 이 모든 것들이 NEAR 온체인에 저장됩니다.

참고로 이 모든 것이 가스비 없이 가능한 것은 NEAR의 FastAuth 덕분입니다. 만일 FastAuth가 아닌, 기존의 NEAR 계정으로 near.org(Gateway)에 로그인하거나, Components를 생성할 때 계속해서 Gas Fee를 지불해야 합니다.

아래 링크에서 Components Applications 그리고 Gateways 검색할 있습니다.

 

BOS Entity와 Role

지금까지 BOS가 해결하고자 하는 문제와 BOS가 제공하는 기능을 살펴봤습니다. 이제 BOS라는 생태계에 어떤 플레이어들이 존재하고, 각 플레이어의 역할은 무엇인지 알아보도록 하겠습니다. BOS 5개의 계층으로 나눌 수 있습니다.

BOS의 계층 구조, 니어 BOS, 블록체인 운영 체제, BOS 배포 방법, 니어 오픈 웹, 니어프로토콜 생태계

출처: NEAR 

Blockchain

Blockchain은 Near, Ethereum 또는 Solana나 Cosmos와 같은 블록체인 네트워크를 의미하며, 실제로 데이터가 저장되고 데이터를 조회하는 데이터베이스의 역할을 합니다.

Data Platform

Data Platform은 Gateway가 온체인 데이터에 접근할 수 있도록 하는 도구를 의미합니다. 여기에는 Near와 통신하기 위한 RPC API와 온체인 데이터에 빠르게 접근할 수 있도록 해주는 Indexer, FastAuth에서 대납을 지원하기 위한 Meta Transaction Relayer 등이 포함됩니다.

Gateway(Discovery)

Gateway는 일종의 가상 머신으로 NEAR, Ethereum 기반으로 개발된 Dapp의 프론트엔드 즉, 아래 설명하게 될 Components를 렌더링하는 역할을 합니다.

현재 BOS의 Gateway로 near.orgbos.ggnear.socialwelldone gateway 등이 있습니다. Gateway의 형태는 웹 사이트로 한정되지 않고, 브라우저 그 자체가 될 수도, 데스크톱 애플리케이션이 될 수도, 모바일 애플리케이션이 될 수도 있습니다. 또한, 개발자라면 자신만의 Gateway를 직접 배포하는 것도 가능합니다.

Application

Application은 BOS를 기반으로 만들어진 애플리케이션을 의미합니다. 개발자는 BOS를 통해 온체인에 배포한 Components로 Application을 개발할 수 있고, 심지어 또한 near.org/applications 해당 링크에서는 Application의 소스 코드와 커밋 히스토리 등을 확인할 수 있습니다.

현재 near.org/application에는 Customize Indexer를 만들 수 있는 NEAR Query API나 NEAR 생태계에 기여하고 있는 개발자들과 소통할 수 있는 Developer Hub, 그리고 1inch BOS Components 등 다양한 Application이 만들어져있습니다.

Components

Components는 JSX 문법으로 작성된 프론트엔드 소스 코드이자 Contract와 상호작용하는 역할을 합니다. Components에는 아래서 직접 배포하게 될 사용자 정의 Components와 BOS에서 제공하는 Built-In Components가 있습니다. Components 역시 모든 소스 코드와 커밋 히스토리가 공개되어 있습니다. BOS에서 제공하는 Built-In Components는 아래 링크에서 자세하게 확인할 수 있습니다.

BOS-API

추가로 Components에서 사용할 수 있는 BOS-API가 있습니다. BOS-API는 BOS에서 Components의 블록체인 및 Gateway 간 이식성과 탈중앙성을 위해 제공하는 API라고 이해할 수 있습니다. BOS-API는 크게 네 가지로 구분될 수 있습니다.

첫 번째로 브라우저 수준에서 제공하는 Cache나 Clipboard, Fetch 그리고 Storage 관련 API 등이 있습니다. 이미 브라우저에서 제공하는 API가 있는데 왜 이런 API가 있는데, 왜 동일한 API 필요한가에 대한 의문이 있을 수 있습니다. Components가 브라우저 이외의 Gateway에서 렌더링 될 수 있다는 것을 잊지 마세요.

두 번째로 NEAR와 상호작용하기 위한 API입니다. 여기에는 블록이나 스마트 컨트랙트를 조회하거나 호출할 수 있는 메소드가 포함되어 있습니다.

세 번째로, 애플리케이션의 상태를 관리할 수 있는 State가 있습니다.

이외에도 NEAR Social에서 데이터를 가져올 있는 Social API NEAR Social에서 제공하는 Primitives API 있습니다. 구체적인 API 명세는 아래 링크에서 확인할 있습니다.
BOS-API | NEAR Documentation

 

BOS Components 배포하기

이제 BOS를 통해 직접 Components를 만들어보고 NEAR 온체인에 배포해 보도록 하겠습니다. Components를 배포하는 방법은 near.org/sandbox에서 배포하는 방법과 로컬 환경에서 배포하는 방법 두 가지가 있습니다. 이 글에서는 near.org/sandbox에서 Components를 배포하고 배포한 Components를 로컬에 다운로드하는 과정을 알아보도록 하겠습니다.

near.org/sendbox에서 Components 배포하기

먼저 near.org/sendbox에 들어가서 회원가입, 또는 로그인합니다. 이때, FastAuth를 통해 생성된 계정이 아니면 Components를 배포할 때 Gas Fee를 지불해야 하니 주의해야 합니다.

왼쪽 코드 스페이스에 JSX 문법에 따라 코드를 작성합니다. 이때 다른 개발자가 작성한 Compnents를 삽입할 수도 있습니다. 다만, 지원하지 않는 HTML 태그가 있을 수 있으니 주의해주세요.

BOS Components 배포 방법, 니어 BOS, 블록체인 운영 체제, BOS 배포 방법, 니어 오픈 웹

 

필요에 따라서 Props Metadata 정의할 있습니다.

BOS Components 배포 방법: 메타데이터 설정 , 니어 BOS, 블록체인 운영 체제, BOS 배포 방법

BOS Components 배포 방법, 니어 BOS, 블록체인 운영 체제, BOS 배포 방법, 니어 오픈 웹

Metadata 정의하기

코드를 모두 작성한 후 오른쪽의 Publish 버튼을 클릭한 후 등장하는 모델에서 Save Data 버튼을 클릭하면 최종적으로 Components가 배포(Tx 생성)됩니다.

BOS Components 배포 방법, 니어 BOS, 블록체인 운영 체제, BOS 배포 방법, 니어 오픈 웹

배포한 Components https://near.org/components 또는 자신의 프로필 링크에서 확인할 있습니다.

 

BOS Components 배포 방법, 니어 BOS, 블록체인 운영 체제, BOS 배포 방법, 니어 오픈 웹

배포한 Components를 로컬에 가져오기

다음으로 배포한 Components를 로컬에 가져와 보도록 하겠습니다.

배포된 Components를 로컬에 가져오기 위해서는 BOS-CLI가 설치되어 있어야 합니다. BOS-CLI는 Rust로 작성되어 있으므로 이를 사용하기 위해서는 개발 환경에 Rust가 설치되어 있어야 합니다. 먼저 BOS에 대해 알아봅시다.

BOS-CLI
BOS-CLI는 다양한 기능을 제공하지만, 대표적으로 로컬에 있는 Components를 배포하고, 기존에 온체인에 배포된 Components를 로컬에서 사용할 수 있도록 해줍니다. 아래 명령어를 입력하여 로컬에 BOS-CLI를 설치합니다.

먼저 BOS-CLI를 설치해 보도록 하겠습니다. BOS-CLI는 터미널에 아래 명령어를 입력하거나, 아래 링크에서 설치할 수 있습니다.

  • cargo install --git <https://github.com/FroVolod/bos-cli-rs>
  • BOS-CLI

만일 현재 개발 환경이 Window일 경우 open-ssl과 perl이 설치되어 있지 않을 것입니다. 그 때문에 이전에 별도로 설치하지 않았을 경우 BOS-CLI를 설치하지 못할 수 있습니다. 따라서 먼저 open-ssl과 perl을 설치해 주어야 합니다.

또한 BOS-CLI가 의존하는 near-crypto v0.17.0를 위해서는 1.69.0 이상의 Rustc가 설치되어 있어야 합니다. 따라서 1.69.0 미만의 Rustc를 사용하고 있는 경우 버전을 업그레이드해 주세요.

정상적으로 설치가 완료되면 터미널에서 bos라는 명령어를 사용할 수 있게 됩니다. 터미널에 bos를 입력하면 아래와 같은 화면을 확인할 수 있습니다.

BOS Components 배포 방법, 니어 BOS, 블록체인 운영 체제, BOS 배포 방법, 니어 오픈 웹

Componrnts SocialDB Components 선택하면 아래와 같은 화면을 확인할 있습니다.

BOS Components 배포 방법, 니어 BOS, 블록체인 운영 체제, BOS 배포 방법, 니어 오픈 웹

배포한 Components 다운로드하기 위해서는 download 선택하고, 다운로드하고자 하는 Components 배포한 사용자(.near 또는 .testnet으로 끝나는) 계정을 입력합니다.

BOS Components 배포 방법, 니어 BOS, 블록체인 운영 체제, BOS 배포 방법, 니어 오픈 웹

마지막으로 네트워크를 선택합니다.

BOS Components 배포 방법, 니어 BOS, 블록체인 운영 체제, BOS 배포 방법, 니어 오픈 웹

이렇게 resister-boy.near(현재 계정)으로 배포한 모든 Components 로컬에 다운로드되었습니다. 이제 로컬에서도 BOS Components 개발할 있게 되었습니다.

BOS Components 배포 방법, 니어 BOS, 블록체인 운영 체제, BOS 배포 방법, 니어 오픈 웹

로컬에서 Components 배포하는 것도 가능합니다. 하지만 near.org에서는 FastAuth 세팅되어있었던 것과는 달리 로컬에서는 FastAuth 직접 세팅해야 합니다. 글에서는 FastAuth 세팅하는 방법에 대해 다루지 않겠지만, 아래 링크에서 FastAuth 세팅하는 예제를 확인할 있습니다.

 

BOS-Loader

추가로 로컬에서 Components를 개발할 때, 유용하게 사용할 수 있는 유틸리티, BOS-Loader가 있습니다. BOS-Loader를 통해 로컬에서 Components를 Components가 어떻게 렌더링 되는지, 로직은 정상적으로 동작하는지 확인할 수 있습니다.

BOS-Loader(실행 파일)는 아래 링크에서 운영체제에 맞게 설치할 수 있습니다.

BOS-Loader 실행하고 CLI 아래와 같은 형식으로 배포할 계정과 배포하고자 하는 Components 입력하면 BOS-Loader 통해 로컬 환경에 위치한 Components 렌더링 됩니다.

BOS Components 배포 방법, 니어 BOS, 블록체인 운영 체제, BOS 배포 방법, 니어 오픈 웹

이제 near.org/flags 에서 오른쪽 폼에 http://127.0.0.1:3030 입력합니다.