IPFS 는 어떻게 데이터를 업로드하고 다운로드 할까?

IPFS 에서 데이터를 업로드하는 과정을 알아봅시다. 먼저 단일 데이터 업로드를 예로 들어 보겠습니다. (전제: 모든 사람이 IPFS 실행 파일을 설치했다고 가정)

1. 데이터 업로드 IPFS 프로세스

[1] 현재 디렉토리에서 foo.txt 파일 작성

$ ipfs add foo.txt
added QmTzeEKzcweAsSw2mQbcKLgm6TWqbuVCqZAHk5J9543CVZ foo.txt
 10 B / 10 B [=====================================] 100.00%

위 과정을 통하여 hash 를 받을 수 있습니다.

ipfs add 명령은 foo.txt 파일을 로컬에 저장하고 해시값을 지정합니다. 이 해시값은 이 파일의 ID 입니다.

[2] 노드를 시작하고 IPFS 네트워크에 연결

IPFS 노드 시작 명령은 다음과 같습니다.

$ ipfs daemon

IPFS 데몬 명령을 시작한 후 내 노드가 IPFS 네트워크에 연결되면 내 로컬 데이터를 전체 네트워크에 공유 할 수 있습니다. 하지만 내 파일 해시값은 나만 알고 있으며 다른 사람들은 액세스 할 수 없으므로 foo.txt 데이터는 내 노드에만 로컬로 저장되며 다른 네트워크 노드는 데이터를 저장하지 않습니다. 노드를 끄면 IPFS 네트워크의 foo.txt 데이터가 존재하지 않게 됩니다.

IPFS 데몬이 시작되면 (쉽게 말하자면) 전체 네트워크에 foo.txt 데이터가 있음을 알리게 됩니다.

[3] 웹 페이지 또는 CLI 을 통해 foo.txt 데이터에 액세스하고 로컬로 저장하는 대신 IPFS 네트워크에 저장할 수 있습니다. (ipfs daemon 은 멈출 수 없음)

예) 웹 페이지 입력: https://ipfs.io/ipfs/QmTzeEKzcweAsSw2mQbcKLgm6TWqbuVCqZAHk5J9543CVZ

완료되면 데이터가 IPFS 네트워크에 저장됩니다. 이렇게 되면 로컬 노드를 중지하더라도 (ipfs daemon 종료) 웹 페이지 또는 CLI 을 통해서 데이터에 계속 액세스 할 수 있습니다.

요약하면 위의 세 단계를 거치면 내 데이터가 IPFS 네트워크에 저장됩니다.

2. IPFS 업로드 속도

위의 저장 프로시저에서 첫 번째 단계와 두 번째 단계는 데이터를 저장하기 위한 준비 작업이며 세 번째 단계는 실제 저장 프로시저 입니다. 저장 속도는 큰 파일에 대응한 것으로 작은 파일은 전통적인 HTTP 와 차이가 없고 큰 파일은 IPFS 가 업로드하는 속도가 확실히 빠르다.

IPFS 의 대용량 파일 (예: 1G 파일) 은 저장 될 때 대용량 파일을 나누어 여러 파일 조각을 형성합니다. 각 조각은 256kb 이며 이 조각도 해시 값으로 생성됩니다. 업로드 프로세스는 동시에 진행되며 모든 조각이 동시에 네트워크에 제공됩니다. 스토리지 노드는 wantlist 테이블에 따라 해당 조각을 저장합니다. 일반적인 HTTP 저장소의 경우 저장소 노드는 중앙 서버이며 저장소는 모든 파일을 스트림 형식으로 저장합니다.

이렇게 비교하며 IPFS 는 많은 스토리지 볼륨이 대용량 데이터 파일의 조각에 대해 동기화되고 저장되기 시작하며 모든 조각 파일이 로드되면 저장 작업이 완료됩니다. 이 속도는 http 스토리지보다 훨씬 빠릅니다. 마치 여러 사람이 함께 분담해서 일을 하면 한 명보다 더 빠르고 효율적으로 처리할 수 있다.

3. IPFS 다운로드 속도

IPFS 는 대용량 파일을 몇 개로 나눠서 하나의 서버에서 파일을 다운로드 할 수 있을뿐만 아니라 수백 대의 서버에서 동시에 다운로드 할 수 있습니다. 이렇게 하면 액세스가 크게 빨라집니다.