IPFS(InterPlanetary File System)

chickenfondue·2021년 5월 12일
2
post-thumbnail
post-custom-banner

InterPlanetary File System

IPFS는 마치 토렌트처럼 파일을 분산된 여러 노드에 저장하고 불러올 수 있는 peer-to-peer 블록체인 파일 시스템이다.

기존의 웹 프로토콜은 서버-클라이언트 관계로 어떤 컨텐츠에 접근하려면 서버의 위치(URL) 을 통해 클라이언트와 해당 서버와 직접 통신을 하는 방식이다. 반면 IPFS 프로토콜은 content addressing 이라는 방식을 통해 컨텐츠 자체의 고유한 hash 값(CID)을 통해 컨텐츠를 보유하고 있는 노드를 찾아 컨텐츠를 받아간다.

즉, 컨텐츠에 접근하기 위해 고정된 위치에 있는 서버에 접근하는 것이 아니라 해당 파일을 가지고 있는 가장 가까운 노드에 접근하므로 (노드의 현황에 따라 다르겠지만)보다 효율적으로 자원에 접근할 수 있다. 또한 중앙화된 서버의 관리가 필요 없기 때문에 검증된 컨텐츠 접근을 위해 특정 authority에 의존할 필요 없이 컨텐츠 접근할 수 있는 주소 자체로 컨텐츠에 대한 무결성을 보장한다.

IPFS의 주소(CID) 예시

/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Aardvark.html

위 CID를 직접 접근하려면 IPFS의 API,CLI나 설치형 프로그램을 통해 접근해야 하지만 일반적인 http 웹에서 접근할 수 있도록 공식 게이트웨이를 제공하고 있다. ipfs.io 뒤에 원하는 CID를 붙이면 된다.

https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Aardvark.html

사용 예시

  • html 파일을 IPFS 체인에 올려 웹사이트 호스팅
  • CDN (인근 peer를 통해 컨텐츠를 전달)
  • p2p 파일 전송

장점

높은 접근성

  • peer-to-peer 통신이기 때문에 중앙화된 망에 연결되지 않아도 정보를 가진 peer를 통해 데이터에 접근할 수 있음
  • 망이 완벽하게 깔리지 않은 개도국 등의 네트워크 구성에 용이

효율적 자원 접근

  • 고정된 특정 서버에 접근하는 것이 아니기 때문에 경로 탐색이 불필요하여 효율적인 자원 접근 가능

검열 내성

  • Blockchain 기반으로 탈중앙화 되어있기 때문에 검열이 불가능

데이터 integrity 보장

  • content addressing을 통해 데이터의 무결성 확보

IPNS(InterPlanetary Name System)

IPFS에서는 CID를 통해 원하는 컨텐츠에 접근할 수 있다. 그러나 CID는 컨텐츠 자체의 내용을 포함한 해쉬 이기 때문에 컨텐츠가 수정될 때 마다 변경된다는 단점이 있다. 업데이트된 컨텐츠를 공유하려면 새로운 주소(CID)를 제공해주어야 한다.

이 문제를 해결하기 위해 IPFS에서는 IPNS라는 name 체계를 사용한다. IPNS의 name을 사용하는 방법은 다음과 같다.

  • 개인 key를 생성하여(RSA/EdDSA) 개인 주소(IPNS name) 생성
  • 해당 name에 IPFS에 등록되있는 특정 CID를 publish
  • 컨텐츠 업데이트 시 CID를 갱신하여 제공할 필요가 없고 IPNS name만 제공해주면 됨

Mutable File System (MFS)

  • IPFS 상에서 폴더 구조를 사용할 수 있게 해주는 파일 시스템
  • 'directory' type을 갖는 CID생성
  • 폴더의 파일이나 하위 구조가 변경되면 CID 값이 변경된다
// {
//   hash: CID('QmXmJBmnYqXVuicUfn9uDCC8kxCEEzQpsAbeq1iJvLAmVs'),
//   size: 60,
//   cumulativeSize: 118,
//   blocks: 1,
//   type: 'directory'
// }
post-custom-banner

0개의 댓글