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
📑 MaxOs 설치 방법
https://docs.ipfs.tech/install/command-line/#macos
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
위 명령어를 실행시키면 사진과 같은 메시지가 나옵니다.
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 란?
- 테스트 코드에서 베포 된 사진 ipfs URL
> https://dweb.link/ipfs/QmTKKrsjdnAm1gt45HdTAetEsonMPtmkeMMsn7YeG5TX83
지금까지 IPFS와 NodeJS, ipfs-api모듈을 이용해 서버(백엔드)에서 사진을 IPFS P2P에 올리는 방법에 대해 다뤄봤습니다.
감사합니다.
'Block Chain > Web3 Library' 카테고리의 다른 글
Ganache 가나슈 설치 및 연동 방법 || Canache-Cli | Metamask | Remix || (1) | 2022.10.29 |
---|---|
메타마스크 리액트 토큰(ERC20) 추가 구현 || React | Metamask | ehters.js | EIP-747 || (0) | 2022.10.07 |
메타마스크 리액트 네트워크 추가 & 전환 구현 || React | Metamask | ehters.js || (0) | 2022.10.02 |
메타마스크 리액트 지갑 연동 || React | Metamask | ethers.js || KR (4) | 2022.09.30 |
블록체인 네트워크 ID별 데이터 리스트(List) || JavaScript || KR (0) | 2022.09.29 |
댓글