IPFS (InterPlanetary File System)은 피어 투 피어 분산 시스템으로 콘텐츠 저장 및 접근을 위한 시스템입니다. 전통적인 인터넷 서비스 제공자와 달리, 이 시스템은 어떤 중앙 기관에 의해 조직되지 않습니다(분산화). 대신 모든 사람들이 노드로서 시스템에 참여할 수 있으며, 자신의 컴퓨터 장치의 빈 공간을 활용하여 파일을 저장하고 공유할 수 있습니다.
예를 들어, 위키피디아에서 용어를 검색할 때 컴퓨터는 특정 웹 사이트 페이지를 공유하기 위해 위키피디아 서버에 요청합니다. 그러나 IPFS에서는 컴퓨터가 세계 각지의 다른 컴퓨터들에게 데이터를 공유할 것을 요청합니다.
IPFS는 2015년 Protocol Labs에 의해 설립되었습니다. 팀은 행성 간이나 멀리 떨어진 곳에서도 작동하는 시스템을 구축하고자 노력하고 있습니다. 이것이 바로 InterPlanetary File System이라는 이름이 유래한 곳입니다.
IPFS와 전통적인 검색 엔진의 주요 차이점은 IPFS가 위치 주소 지정 대신 콘텐츠 주소 지정 방식을 활용한다는 점입니다. 이는 사용자가 내용이 무엇인지를 식별할 수 있음을 의미합니다. 어디에 위치하는지가 아닙니다.
예를 들어 '비트코인'을 TokenInsight에서 검색할 때, 특정 웹 페이지로 연결됩니다(URL: https://tokeninsight.com/kr/coins/bitcoin/overview) 이것은 TokenInsight 도메인의 특정 페이지로의 경로를 제공해줍니다(위치 주소 지정). 그러나 IPFS에서는 페이지를 가지고 있는 다른 참여자에게 공유해달라고 요청할 것입니다. IPFS에서 콘텐츠는 파일, 웹사이트, 응용 프로그램 또는 메타데이터가 될 수 있습니다.
여기 IPFS 문서에서의 예시가 있습니다. 도서관에서 책을 찾을 때 종종 제목으로 요청합니다; 이것은 콘텐츠 주소 지정입니다. 책을 찾기 위해 위치 주소 지정을 사용한다면, "제목은 두 번째 층의 첫 번째 책장에서 아래쪽으로 세 번째 서랍, 왼쪽부터 네 번째 책"이 될 것입니다. 누군가 그 책을 옮기면 헤맬 것입니다!
사용자가 IPFS에 콘텐츠를 업로드하면, 콘텐츠는 CID라는 고유 식별자와 함께 저장되고 네트워크 전체에 분산됩니다. 네트워크의 속도를 보장하기 위해 IPFS는 콘텐츠를 조각내고 각각의 조각을 CID와 함께 별도로 저장할 수 있습니다. 이러한 콘텐츠들은 Merkle DAG라는 데이터 구조를 통해 분류되고 구성됩니다.
특정 콘텐츠를 찾는 사용자는 CID(콘텐츠 주소 지정)를 통해 콘텐츠를 검색할 수 있습니다.
. 그러면 시스템은 대상을 소유한 참가자를 찾아서 해당 내용을 요청자에게 전달하도록 요청할 것입니다.콘텐츠 식별자(CID)는 IPFS 네트워크의 각 콘텐츠 조각에 대한 고유한 식별자로, 콘텐츠 자체에서 나온 암호화 해시입니다. 따라서 IPFS에 여러 참가자로부터 가져온 동일한 콘텐츠는 동일한 CID를 생성하며, 콘텐츠의 차이/변경사항 또한 다른 CID를 통해 반영됩니다.
CID를 네트워크에서 체계화하기 위해 IPFS는 Merkle DAG(Merkle Directed Acyclic Graph)라는 데이터 구조를 활용하며, 이는 DAG에서 파생된 것입니다.
Merkle DAG란 무엇인가요?
그래프란 서로 다른 객체 간의 관계를 보여 주는 다이어그램을 의미합니다. 객체(노드로도 알려짐)와 엣지로 이루어져 있으며(아래 그래프 참조), 각 엣지가 방향을 가집니다. 비순환은 그래프 내에 반복 또는 순환이 없음을 의미합니다. Merkle DAG는 각 객체가 식별자를 가지며, 이는 해당 객체의 콘텐츠를 해싱한 결과입니다.


네트워크 속도를 보장하기 위해 IPFS는 일반적으로 콘텐츠를 작은 조각(예: 256KB)로 분할하고, 각각을 CID와 함께 하나의 블록에 저장합니다 ('분산 원장'의 '블록'과는 다릅니다). 사용자가 콘텐츠 조각을 요청하면 컴퓨터가 이러한 조각들을 블록에서 함께 가져와 하나의 조각으로 통합합니다.
IPFS는 Merkle DAG를 활용하여 콘텐츠와 해당 분할 사이의 관계를 나타내고, 콘텐츠를 문서 및 폴더와 같은 카테고리로 분류합니다.

Merkle DAG의 특징:
저장 후, IPFS는 사용자가 원하는 콘텐츠를 소유하고 있는 피어와 피어의 위치가 어디인지 찾기 위해 DHT(Distributed Hash Table)를 채택합니다. 해시 테이블은 키(CID)와 값(콘텐츠)의 데이터베이스이며, 각 값은 고유한 키와 일치되어 사용자가 키로부터 값을 식별할 수 있습니다. 분산 해시 테이블은다수의 피어를 포함하고 각각이 해시 테이블을 갖춘 시스템입니다. 키를 사용하여 이러한 피어들에게 콘텐츠를 공유할 것을 요청해야 합니다.

DHT는 키가 일관된 형식으로 되어 있어 대량의 데이터베이스에서 정보를 찾기에 적합합니다. 더 나아가, 각 피어는 데이터를 분할하여 데이터 검색 속도를 향상시킵니다.
사용자들이 원하는 콘텐츠의 위치를 찾으면 피어에 연결하여 요청을 보내고 콘텐츠를 가져올 수 있습니다 (이는 CID를 비교하여 콘텐츠를 확인하는 IPFS 모듈인 Bitswap에 의해 이루어집니다).
Filecoin (저장 공급자), Audius (분산 음악 서비스 공급자), Pinata (NFT 호스팅 공급자), OpenBazaar (P2P 전자 상거래 플랫폼), Morpheus.Network (공급망 서비스 공급자) 등과 같이 다양한 분야에서 IPFS를 저장 인프라로 활용하는 Web3 프로젝트들이 있습니다.
다음 콘텐츠도 관심이 있을 수 있습니다: