본문으로 건너뛰기

분산 스토리지 솔루션

이 글에서는 분산 애플리케이션(dApp)에 통합할 수 있는 다양한 분산 스토리지 솔루션에 대한 간략한 개요를 볼 수 있습니다. 이를 통해 기본 NEAR 스토리지에 대한 보다 경제적인 대안을 사용하여 많은 양의 데이터를 저장할 수 있습니다.


온체인 스토리지 제약 조건

데이터를 온체인에 저장하려면 다음 사항을 염두에 두어야 합니다:

  • 파일을 무제한으로 저장할 수 있지만, 100KB당 1N의 비용이 듭니다.
  • 한 번에 업로드할 수 있는 용량에는 4MB의 제한이 있습니다.

예를 들어, NFT를 순수하게 체인에 저장하려는 경우(아래 언급된 것처럼 IPFS 또는 일부 분산형 스토리지 솔루션을 사용하는 대신), 스토리지 용량은 거의 무제한이지만 사용된 스토리지의 100KB당 1 $NEAR를 지불해야 합니다(스토리지 스테이킹 참고).

MAX_GAS의 제약으로 인해 사용자는 컨트랙트 호출 업로드당 4MB로 제한됩니다. 주어진 functionCall에 첨부할 수 있는 최대 가스량은 300TG입니다.

Arweave

Arweave는 지속 가능하고 영구적인 자산(인플레이션 및 장기간에 걸친 스토리지 비용 감소의 혜택을 받는 프로토콜 내 보유 토큰)으로 데이터를 뒷받침하는 새로운 유형의 스토리지입니다. 이를 통해 사용자와 개발자는 데이터를 영원히 저장할 수 있습니다. Arweave는 공동 소유의 하드 드라이브 역할을 하며, 사용자가 귀중한 정보, 앱 및 기록을 무기한 보존할 수 있도록 합니다.

Arweave 프로토콜은 데이터를 저장하거나 콘텐츠를 영구적으로 호스팅해야 하는 개인 및 조직과 대규모 집단 하드 드라이브 공간을 가진 인센티브화된 채굴자 무리를 매칭시켜줍니다. 이는 탈중앙화 네트워크를 통해 달성되며, 저장된 모든 데이터는 블록 채굴 보상과 영구적으로 사용할 수 있도록 하는 지속 가능한 기부금으로 지원됩니다.

Arweave에 대해 자세히 알아보려면 채굴 메커니즘대역폭 공유 시스템을 확인하세요. :::

구현 예시

로컬 Arweave 게이트웨이와 같은 서버를 실행하여 Arweave에 일부 파일을 저장하는 방법을 살펴보겠습니다.

Arlocal 설정

Arlocal은 본질적으로 Arweave의 시뮬레이션 버전을 생성합니다. 정보를 저장하기 위해 컴퓨터에서 실행되는 로컬 노드라고 생각하면 됩니다.

이 예에서는 두 개의 터미널을 실행해야 합니다.

  • 첫 번째 터미널을 열고 다음을 실행합니다.
npx arlocal

다음과 같은 응답이 표시되어야 합니다: arlocal started on port 1984.

npx arlocal <desired port number>를 사용하여 포트를 지정할 수 있습니다. :::

NEAR-Arweave 프론트엔드

NEAR-Arweave 레퍼지토리에는 arlocal을 사용하여 .png 파일 을 저장할 수 있는 간단한 프론트엔드가 있습니다 .

  • 이제 두 번째 터미널을 열고 다음 명령을 실행하여 프론트엔드를 복사합니다.
git clone https://github.com/near-examples/NEAR-Arweave-Tutorial.git
  • 프로젝트 폴더에서 다음을 실행하여 의존성을 설치합니다.
cd NEAR-Arweave-Tutorial
yarn
  • 다음을 실행하여 애플리케이션을 시작합니다.
yarn start 
  • 이제 Choose File 버튼을 선택하여 이미지를 업로드할 수 있습니다.

Arweave step 1

  • Submit 버튼을 누르면 트랜잭션 ID 창이 채워지는 것을 볼 수 있습니다.

Arweave step 2

오류가 발생하면 arlocal 노드가 별도의 터미널에서 실행 중인지 확인하세요. :::

트랜잭션 마이닝

Arweave에서 트랜잭션은 보류와 확정의 두 단계를 거칩니다. 트랜잭션이 완료되고 데이터를 검색할 수 있으려면, 트랜잭션이 확정되어야 합니다.

  • 브라우저에서 http://localhost:1984/mine을 방문하여 로컬 노드에 채굴 요청을 보내십시오.

이 단계 없이 여전히 데이터를 검색할 수 있지만, 이는 로컬 노드를 실행하고 있기 때문입니다. 실제 Arweave 노드를 다룰 때는 트랜잭션이 채굴되고 확인될 때까지 기다려야 합니다.

이미지 검색

  • 이제 프론트엔드의 5단계에 나열된 arweave 트랜잭션 ID를 복사 후 붙여넣어 로컬 노드에서 파일을 검색할 수 있습니다.

Arweave step 3

Arweave의 라이브 네트워크를 사용하려면 스토리지 비용을 지불하기 위해 artoken을 구매해야 합니다. 자세한 내용은 arweave.org에서 확인할 수 있습니다 . :::
near-api-jsarweave -js JavaScript 라이브러리를 사용하면 이러한 단계 대부분을 자동화할 수 있습니다. :::

Crust

Crust는 Metaverse를 위한 Web3.0 분산 스토리지 네트워크를 제공합니다. 이는 탈중앙화, 개인 정보 보호 및 보증의 핵심 가치를 실현하도록 설계되었습니다. Crust는 IPFS와 같은 여러 스토리지 계층 프로토콜을 지원하고 즉시 액세스할 수 있는 온체인 스토리지 기능을 사용자에게 제공합니다. 또한 Crust의 기술 스택은 데이터 조작 및 컴퓨팅을 지원합니다.

Crust 프로토콜은 IPFS 프로토콜과 100% 호환되며, 하드 드라이브 공간이 여유 있는 사람과 데이터를 저장하거나 콘텐츠를 호스팅해야 하는 사람을 매칭시킵니다. Crust는 Polkadot 생태계를 기반으로 하며 NEAR/Solana/Ethereum/Elrond 등을 포함한 대부분의 컨트랙트 플랫폼을 지원합니다.

Crust에 대해 자세히 알아보려면 탈중앙화 스토리지 시장보장된 지분 증명을 확인하세요. 또한 Build-101을 통해 시작할 수 있습니다 . :::

통합 예제

다음은 Crust 및 NEAR로 파일을 저장하는 간단한 통합 예제입니다.

1. IPFS에 파일 업로드하기

먼저 파일을 IPFS에 넣어야 합니다.

파일 및 폴더를 IPFS 에 업로드하는 방법을 알아보려면 이 섹션을 참고하세요. :::

IPFS에 파일을 업로드하는 방법에는 두 가지가 있습니다.

정보
  • 링크에서 ipfsW3GW 엔드포인트에 대한 자세한 내용을 확인할 수 있습니다 .
  • 또한 이 링크에서 IPFS에 파일을 업로드하는 방법에 대한 코드 예제를 찾을 수 있습니다. :::

2. 스토리지 주문 위치시키기

다음으로 Crust 체인에 Place Storage Order라는 이름의 트랜잭션을 보내야 합니다. 이 트랜잭션은 블록체인을 통해 스토리지 요구 사항을 각 Crust IPFS 노드로 발송합니다. 그러면 IPFS 노드가 IPFS 프로토콜을 사용하여 파일을 가져오기 시작합니다.

정보
  • 이 링크에서 crustChainEndpoint에 대한 자세한 정보를 찾을 수 있습니다 .
  • 다음 지침에 따라 계정(seeds)을 만들 수 있습니다 .
  • Crust에서 스토리지 주문을 하는 방법에 대한 코드 예제는 이 링크를 확인하세요. :::

3. 쿼리 주문 상태

그런 다음 온체인 상태(status{replica_count, storage_duration, ...})를 호출하여 스토리지 주문을 쿼리할 수 있습니다. 이 호출은 다음을 반환합니다.

{
"file_size": 23710,
"spower": 24895,
"expired_at": 2594488, // Storage duration
"calculated_at": 2488,
"amount": "545.3730 nCRU",
"prepaid": 0,
"reported_replica_count": 1, // Replica count
"replicas": [{
"who": "cTHATJrSgZM2haKfn5e47NSP5Y5sqSCCToxrShtVifD2Nfxv5",
"valid_at": 2140,
"anchor": "0xd9aa29dda8ade9718b38681adaf6f84126531246b40a56c02eff8950bb9a78b7c459721ce976c5c0c9cd4c743cae107e25adc3a85ed7f401c8dde509d96dcba0",
"is_reported": true,
"created_at": 2140
}] // Who stores the file
}
이 링크에서 스토리지 상태 쿼리에 대한 코드 예제를 찾으십시오 . :::

4. 선불 파일 추가

단일 트랜잭션(주문)의 기본 보관 기간은 6개월입니다. 보관 기간을 연장하려면 Crust가 선불 풀을 제공하므로 파일의 보관 시간을 설정할 수 있습니다. 이 풀을 사용하면 일부 토큰을 넣을 수 있으며 파일의 저장 시간이 자동으로 연장됩니다.

파일에 선불 토큰을 추가하는 방법에 대한 코드 스니펫을 보려면 이 링크를 확인하세요. :::

IPFS

IPFS(InterPlanetary File System )는 분산 파일 시스템에서 데이터를 저장하고 공유하기 위한 프로토콜 및 피어 투 피어 네트워크입니다. IPFS는 컨텐츠 주소를 지정하여 모든 컴퓨팅 장치를 연결하는 글로벌 네임스페이스에서 각 파일을 고유하게 식별합니다.

컨텐츠 식별자

파일을 IPFS에 추가하면 파일이 암호화 해시된 더 작은 청크로 분할된 다음, 콘텐츠 식별자(CID)라는 고유한 지문이 부여됩니다.

CID는 해당 시점에 존재하는 파일의 영구 레코드 역할을 합니다.

조회

파일을 찾을 때, 노드는 파일의 CID가 참조하는 컨텐츠에 대해 피어 노드에 요청합니다. 파일을 보거나 다운로드할 때, 노드는 복사본을 캐시하고 캐시가 지워질 때까지 다른 공급자가 됩니다.

고정된 컨텐츠

IPFS 네트워크에서 각 노드는 관심 있는 컨텐츠만 저장합니다. 노드는 컨텐츠를 영원히 보관하기 위해, 컨텐츠를 고정하거나 공간을 절약하기 위해 사용하지 않은 컨텐츠를 버릴 수 있습니다.

파일 버전

파일의 새 버전을 IPFS에 추가하면, 암호화 해시가 다르기 때문에 새 CID를 얻게 됩니다. 즉, 파일에 대한 변경 사항은 원래 파일을 덮어쓰지 않고, 저장 비용을 최소화하기 위해 파일 전체의 공통 청크를 재사용할 수 있습니다.

네이밍 시스템

IPFS는 탈중앙화 이름 지정 시스템을 제공하므로, 긴 CID 문자열을 기억할 필요가 없습니다. IPFS에서는 IPNS 분산 이름 지정 시스템을 사용하여 파일의 최신 버전을 찾을 수 있으며, DNSLink를 사용하여 CID를 사람이 읽을 수 있는 DNS 이름에 매핑할 수 있습니다.

IPFS 공급자

  • Web3.Storage: IPFS 및 Filecoin 위에 구축을 단순화하는 무료 서비스입니다. Web3.Storage는 Filecoin의 지원을 받으며 각 네트워크의 고유한 속성을 활용하여 IPFS를 통해 컨텐츠를 사용할 수 있도록 합니다.
  • NFT.Storage: 이 무료 서비스는 오프체인 NFT 데이터 저장을 위해 특별히 제작되었습니다. 데이터는 IPFS 및 Filecoin에 분산되어 저장됩니다. 데이터는 스마트 컨트랙트에서 사용할 수 있는 컨텐츠 주소 지정 IPFS URI를 사용하여 참조됩니다.
  • Filebase: 다양한 지리적 위치에 걸쳐 모든 IPFS 파일을 자동으로 3배의 중복성(redundancy)으로 고정하여 성능, 중복성 및 안정성을 추가할 수 있는 지리적 중복 IPFS 핀 공급자입니다.

예제

NFT.Storage API를 사용하여 간단한 IPFS 통합을 시도해 보겠습니다 .

  1. API 액세스 키를 생성할 수 있도록 nft.storage에 계정을 등록합니다.

  2. API 액세스 키를 생성하고 기록해 둡니다.

  3. api.nft.storage/uploadHTTP POST 요청을 제출하고, 요청 본문에 API 키와 파일 데이터를 전달합니다.

curl -X POST --data-binary @/path/to/file/art.png -H 'Authorization: Bearer YOUR_API_KEY' https://api.nft.storage/upload
다른 HTTP 클라이언트를 사용하려면 Authorization 헤더를 구성하고 설정하는 것을 잊지 마십시오. "Authorization": "Bearer YOUR_API_KEY" :::

성공적인 요청은 다음과 같은 HTTP 200 상태 및 application/json 응답을 받습니다.

{
"ok": true,
"value": { "cid": "bafy..." }
}
  1. cid를 사용하여 이미지의 URL을 기록합니다: https://<cid>.ipfs.dweb.link/
https://bafyreiabag3ztnhe5pg7js4bj6sxuvkz3sdf76cjvcuqjoidvnfjz7vwrq.ipfs.dweb.link/

이제 파일이 IPFS에 업로드되었으므로 cid 링크를 사용하여 검색할 수 있습니다.

여러 파일 및 기타 사용 가능한 엔드포인트 업로드에 대한 정보는 NFT.Storage 문서를 확인하세요 . :::