본문 바로가기
Block Chain/Web3 Library

IPFS Node.js 이미지 올리기 || IPFS | ipfs-api | Node.js || back-end .ver

by 개발이 체질인 나그네 2022. 10. 25.
반응형

 

IPFS 란?

IPFS는 연결된 모든 컴퓨터에 데이터를 분산시키는 데이터 분산 시스템입니다.

 

기존의 중앙화된 서버와 달리,  연결이 차단되거나 서버가 회손되어도, P2P 통신으로 다른 컴퓨터에 있는 데이터를 받아 갱신을 수 있기에, 훨신 빠르고 안전한 네트워크입니다.

 

 

 

※ 본 게시글은 서버(NodeJS)에서 IPFS P2P에 사진 및 데이터를 베포하여 ipfs URL을 얻는 방법에 대해 다룹니다.

프론트(React)에서 IPFS를 다루는 게시글은 아래 링크를 참조해 주세요.

 

// todo : React + IPFS

 

1. IPFS 설치

IPFS는 위 설명처럼 모든 컴퓨터들을 연결하는 프로세스입니다. IPFS가 지정하는 데이터 저장소를 각 PC에 받아 사진, 파일 등의 데이터를 저장소에 올리면 P2P 시스템에 따라 분산처리가 됩니다.

이때 필요한 저장소를 설치해기 위해 IPFS 관련된 모듈과 인터페이스를 설치해야 합니다.

 

 

📑 Window 설치 방법

https://docs.ipfs.tech/install/command-line/#official-distributions

 

Command-line | IPFS Docs

Command-line Installing IPFS through the command-line is handy if you plan on building applications and services on top of an IPFS node. This method is also useful if you're setting up a node without a user interface, usually the case with remote servers o

docs.ipfs.tech

 

📑 MaxOs 설치 방법

https://docs.ipfs.tech/install/command-line/#macos

 

Command-line | IPFS Docs

Command-line Installing IPFS through the command-line is handy if you plan on building applications and services on top of an IPFS node. This method is also useful if you're setting up a node without a user interface, usually the case with remote servers o

docs.ipfs.tech

 

 

2. 저장소 초기화

IPFS 저장소를 설치하기 위한 준비를 다 했으면, 현재 PC에 저장소를 설치하고 설정합니다.

 

> ipfs init

 

터미널을 열고 위 명령어를 실행합니다.

 


generating ED25519 keypair...done
peer identity: 12D3KooWK4j5jDd6K495yyvtpG1m8H9uB7qCU4ExLYstfN4kkRM9
to get started, enter:

ipfs cat /ipfs/12D3KooWK4j5jDd6K495yyvtpG1m8H9uB7qCU4ExLYstfN4kkRM9/readme

 

명령어 실행 후, 정상적으로 실행이 됐으면 위와 같은 메시지가 나옵니다.

* peer identity는 랜덤으로 생성됩니다.

 

> ipfs cat /ipfs/12D3KooWK4j5jDd6K495yyvtpG1m8H9uB7qCU4ExLYstfN4kkRM9/readme

 

위에서 생성된 생성된 peer identity를 cat /ipfs/ 뒤에 입력하여 명령어를 실행합니다.

 

 

실행이 완료되면 위 사진 같은 결과가 나타나고, IPFS를 이용할 저장소를 컴퓨터에 설치가 성공되었습니다.

 

3. IPFS daemon 실행

IPFS를 통해 P2P로 데이터를 전달하는 기능은 api로 호출할 수 있습니다.

그리고 API 요청을 받는 서버는 각 PC의 5001번 포트에 deamon을 실행시켜놔야 합니다.

 

> ipfs daemon

 

daemon 서버 open message

 

위 명령어를 실행시키면 사진과 같은 메시지가 나옵니다.

API Server가 127.0.0.1(Localhost)의 5001 포트에 열였다는 메시지를 알려주고 있습니다.

 

4. ipfs-api 설치

 

> npm init

 

NodeJS로 백엔드 서버를 먼저 구축합니다.

 

> npm i ipfs-api

 

ipfs-api 모듈을 npm으로 설치해줍니다.

 

5. app.js node 파일 생성

- app.js

const ipfsAPI = require('ipfs-api'); 
const fs = require('fs');

// IPFS API 호출
const IPFS = ipfsAPI({host:'127.0.0.1',port:5001,protocol:'http'})

// IPFS에 올라갈 사진을 Buffer 형태로 변환
const readFile = fs.readFileSync('./img/test2.png'); // ipfs에 올릴 사진
const testBuffer = Buffer.from(readFile)

IPFS.files.add(testBuffer,(err,file) => {
	// 애러 발생 시
    if(err) {
        console.log(err);
    }
    // P2P에 베포된 파일은 CID 값
    console.log(file[0].hash);
    // ipfs URL
    console.log(`https://dweb.link/ipfs/${file[0].hash}`);
})

 

npm init 명령어를 실행시킨 위치에 app.js 파일을 만들어서 위 코드를 넣어줍니다.

 

> node app.js

// console.log(file); ipfs api 보낸 값
> [
    {
      path: 'QmTKKrsjdnAm1gt45HdTAetEsonMPtmkeMMsn7YeG5TX83',
      hash: 'QmTKKrsjdnAm1gt45HdTAetEsonMPtmkeMMsn7YeG5TX83',
      size: 10098
    }
]

// P2P에 베포된 파일은 CID 값
console.log(file[0].hash);
>'QmTKKrsjdnAm1gt45HdTAetEsonMPtmkeMMsn7YeG5TX83'


// ipfs URL
console.log(`https://dweb.link/ipfs/${file[0].hash}`);
> 'https://dweb.link/ipfs/QmTKKrsjdnAm1gt45HdTAetEsonMPtmkeMMsn7YeG5TX83'

 

node를 통해 app.js를 실행시켜주면 ipfs의 CID hash값을 얻을 수 있습니다.

CID hash 값을  'https://dweb.link/ipfs/' + CID처럼 붙여서 실행을 해주면 이미지가 나타나게 됩니다.

 

> CID 란?

https://borntodevelop.tistory.com/entry/IT%EC%A7%80%EC%8B%9D-%EC%BB%A8%ED%85%90%EC%B8%A0-%EC%A3%BC%EC%86%8C-%EC%A7%80%EC%A0%95-%EC%A0%80%EC%9E%A5%EC%86%8CCAS?category=1056908 

 

IT지식 ) 컨텐츠 주소 지정 저장소(CAS)

📙 컨텐츠 주소 지정 저장소(CAS) : 위치(URL)가 아닌 콘텐츠를 기반으로 검색할 수 있도록 정보를 저장하는 방법입니다. 기존의 데이터는 중앙화된 서버에 보관되어, 주소(URL)을 통해 접근하여 데

borntodevelop.tistory.com

 

 

- 테스트 코드에서 베포 된 사진 ipfs URL

> https://dweb.link/ipfs/QmTKKrsjdnAm1gt45HdTAetEsonMPtmkeMMsn7YeG5TX83

 

 

지금까지 IPFS와 NodeJS, ipfs-api모듈을 이용해 서버(백엔드)에서 사진을 IPFS P2P에 올리는 방법에 대해 다뤄봤습니다.

 

감사합니다.

 


 

 

 

반응형

댓글