
이번 시간에는 첫번째 프로젝트를 들어가기에 앞서 IPFS를 사용하는 법을 알아보고자 합니다.
IPFS 정의
먼저, IPFS란 Inter Planetary File System의 약자로 모든 컴퓨터를 연결하고자 하는 분산된 P2P 파일 시스템입니다. 대형 서버의 연결이 차단되면 치명적인 결과를 낳는 과거 HTTP Web 과는 달리, IPFS 에서는 몇몇 노드들이 연결이 끊어지더라도 생태계가 안정적으로 유지되는 특징을 가지고 있습니다.
Opense에서의 IPFS 필요성
최근 NFT 거래가 활발해지면서 OpenSea는 NFT storage에 문제가 생기게 돼 새로운 분산 저장 솔루션인 IPFS가 필요졌습니다.
예를들어, NFT 개발자가 정보를 중앙 서버를 이용하여 저장한다고 했을때, 일반적인 URL은 링크 끊김, 404 오류와 같은 문제에 취약할 수 있습니다. 반면, IPFS는 분산된 P2P 파일 시스템에 안전히 NFT를 저장할 수 있기 때문에 opensea에서의 필요성은 대두되고 있습니다.
IPFS 설치하기
저는 리눅스를 사용하고 있어서 CLI 리눅스로 설치 진행을 해보겠습니다.
Linux Commoand-line 설치가이드
터미널창에 아래와 같은 명령어를 입력해주면 됩니다.
Download the Linux binary from dist.ipfs.io
(명령어): wget https://dist.ipfs.io/go-ipfs/v0.10.0/go-ipfs_v0.10.0_linux-amd64.tar.gz
Unzip the file
(명령어): tar -xvzf go-ipfs_v0.10.0_linux-amd64.tar.gz
Move into the go-ipfs folder and run the install script
(명령어): cd go-ipfs
sudo bash install.sh
Test that IPFS has installed correctly
(명령어): ipfs --version
사용법 (이미지 파일을 IPFS에 저장하기)
1. 저장소 초기화
ipfs init
(그러면, ipfs init 의 출력에서 명령어를 제안합니다.)
ipfs cat /ipfs/12D3KooWK4j5jDd6K495yyvtpG1m8H9uB7qCU4ExLYstfN4kkRM9/readme
(여기까지 완료하면 그러면 다음과 같은 Hello 메세지가 나옵니다.)

2. 이미지 올리기
먼저, IPFS에 올릴 이미지가 있는 디렉토리로 옮깁니다. 그러면, CID가 생성되면서 업로드가 시작됩니다.
-> ipfs add logo.png
added QmVsj4JR5fWZ7QAdntY3rEJP7apeVBHdNuzMzn7gn5LSLQ logo.png
13.61 KiB / 13.61 KiB [====================] 100.00%
3. 데몬실행해서 확인
보통 node.js 로 서버실행을 하는 것처럼, IPFS에서는 데몬을 실행하여 노드를 공용 네트워크에 연결해야 합니다.
-Initializing daemon...
-API server listening on /ip4/127.0.0.1/tcp/5001
-Gateway server listening on /ip4/127.0.0.1/tcp/8080
-Daemon is ready
그다음 웹 콘솔 아래주소로 브라우저에서 콘솔을 켜야합니다.

콘솔에 접속하면 위와같은 화면이 나오는데, 이젠 다른 터미널을 열어서 다음의 명령어를 실행 후 웹 콘솔에 나오는 Peer ID 와 같은지 확인해보면 됩니다.
4. 퍼블릭 URL 가져오기

위에서 정리한 2.에서 생성한 CID를 웹 콘솔 상단에 복사붙여넣기 하겠습니다. CID는 다음과 같습니다.
QmVsj4JR5fWZ7QAdntY3rEJP7apeVBHdNuzMzn7gn5LSLQ
그러면 CID에 해당하는 데이터의 URL을 받아올 수 있고, 여기서 public gateway를 눌러야 퍼블릭한 URL이 완성됩니다.
5. Pinning
만약, 우리가 데몬을 Stop 하게 되면 IPFS에 올린 데이터가 공유되지 않게 됩니다. 그럼 어떻게 해야할까요?
IPFS에서는 Pinning(고정)을 통해 해결할 수 있습니다.
4.에서 해당 데이터의 CID를 통해 접근한 웹 콘솔에서 ...More을 눌러야 합니다. 그다음 Set pinning 을 클릭하여 고정하면 끝입니다.
IPFS 실습 회고
기본 실습부분은 따라하기만 하면 되서 회고에 대한 내용은 패쓰하겠습니다. 다만, IPFS가 Opensea에서 왜 필요하게 됐는지 그리고 정의와 특징에 대한 개념적인 부분을 학습하는데 중점을 둔 시간이었습니다. Opensea 클론코딩을 하는데 있어 이부분을 스스로 적용하는게 가능하도록 한번 더 복습하도록 해보고, IPFS 실습은 여기서 마치겠습니다.