TIL) IPFS(InterPlanetary FileSystem) 이해 (1)
본 컨텐츠는 Kblock 공식 리서치팀, 케블리님이 Steemit에 작성한 자료를 참고하였습니다.
https://steemit.com/kr/@kblock/8-ipfs-interplanetary-file-system-1-http-web-ipfs-we
#IPFS란?
- 분산형 파일 시스템에 데이터를 저장하고 인터넷으로 공유하기 위한 프로토콜
- P2P 네트워크
#기존 Web File system과의 차이
- 기존 web file system은 중앙회되어 있기 때문에 다음과 같은 단점을 갖고 있음
- 기존 web에서 file을 실행할 때는 하나의 서버로부터 데이터를 불러와서 실행
- 하나의 서버가 데이터를 처리하기 위해 막대한 에너지 소모
- 서버가 클라이언트와 물리적으로 거리가 멀 경우, 전송속도에 따른 응답지연 발생
- 서버가 끊어질 경우 응답처리 못하게 됨
- IPFS는 분산화된 네트워크에 파일을 저장하고 호출하여 기존 중앙화된 파일 시스템이 갖던 단점 해결함
#토렌트(Bittorrent)와 IPFS 차이
- IPFS 지지자들이 주장하는 차이점이자 장점은 중복 파일을 처리할 수 있는 방법입니다.
- IPFS는 하나의 시스템("swarm")이고 각 파일이 해시되어 이것이 "filename"이 되는 하나의 파일 시스템입니다. 따라서 두 명의 다른 사람이 추가하는 파일 모음에 있을 수 있는 동일한 파일을 추가하면 해시가 동일한 파일이 충돌합니다.
- 이것은 사람들이 일치하지 않는 다른 다른 파일을 업로드하는 경우에도 발생하며 특정 파일과 정확히 일치하는 경우에만 적용됩니다.
- 대조적으로 BitTorrent는 개별 파일이 아닌 torrent(토렌트 안에 여러 개의 파일이 담겨있음)와 일치합니다. 그러나 이것은 사람들이 우연히 동일한 대용량 파일을 업로드할 때만 유용합니다.
- BitTorrent 네트워크는 종종 매우 유사하지만 압축 수준이 다르기 때문에 바이트 수준에서 상당히 다른 큰 파일(예: 영화)을 다룹니다. 따라서 파일 갯수는 더 작고 파일 크기는 더 커집니다.
- IPFS는 이러한 파일을 유사한 것으로 포착하지 않습니다. 파일이 1비트만 변경되면 해시가 완전히 달라집니다.
- BitTorrent 노드 또는 피어는 공통 토렌트가 있을 때만 서로를 찾아야 하는 반면 IPFS에서는 모든 것이 동일한 전역 네임스페이스에 있습니다.
- 따라서 BitTorrent는 더 넓은 네트워크에 보이지 않는 특정 개인 torrent를 알고 있는 비밀 노드 집단을 갖는 데 더 적합하지만 IPFS에서는 모든 것이 평등하고 공개적입니다.
(참고: https://uncentered.saigonist.com/bittorrent-btfs-vs-ipfs.html)
#WEB3.0과 IPFS
- 탈중앙화와 데이터 소유자에 대한 보상이 강조된 WEB3.0 시대
- IPFS를 사용하면 파일의 저장 및 보관의 측면에서도 탈중앙화를 실현할 수 있게 됨.
- IPFS가 구현된 WEB3.0에서는 중앙화된 플랫폼이 데이터를 소유 및 관리하지 않으며, 데이터의 소유권이 개인에게 전달
#IPFS 동작 방식
- IPFS에서 각각의 파일은 여러 개의 블록으로 이루어져 있으며, 각각의 블록은 해시로 표현된 고유의 이름을 갖고 있음.
- IPFS는 모든 파일의 이름을 데이터베이스 속에 저장하며 동일 파일의 중복을 배제하여 각 파일의 버전 정보를 트래킹 함.
- 각 노드는 본인이 관심있는 파일만 저장소에 보관하며, 인덱싱 정보를 통해 누가 어떤 파일을 저장하고 있는지 알 수 있음.
- 네트워크에서 파일을 찾기 위해서는 파일명을 조회하고 해당 파일을 갖고 있는 노드를 물어보면 됨.
- IPNS를 통해 모든 파일명은 인간이 읽기 쉬운 형태로 변환할 수 있음.
#IPFS 기술 기반
- routing: DHT
DHT(Distributed Hash Table)는 Distributed Lookup Services의 일종이다. Hash 함수로 변환된 key 값과 연관된 value를 모두 연결된 포맷으로 분산화하여 저장하여 대용량 파일의 빠른 검색을 가능하게 한다.
키는 결정적 알고리즘을 사용하여 노드 간에 배포된다. 각 노드는 해시 테이블의 일부를 담당하고, 라우팅 알고리즘을 사용하면 네트워크의 모든 노드를 알지 않고도 해시 테이블에서 요청을 수행할 수 있다.
IPFS에서는 기존 HTTP에서 컨텐츠의 위치(IP)를 바탕으로 컨텐츠를 찾는 방식이 아닌, 컨텐츠 자체를 해시 테이블과 매칭하여 ‘content-addressed’된 상태로 각 노드에 분산시켜 저장하고 찾는 방식을 사용.
- exchange: BitTorrent
하나의 파일을 여러 조각으로 나누어 각 노드끼리 자신이 갖고있는 조각 정보를 알려주고 다른 노드들에 자신이 필요한 조각을 요청함. 하나의 노드는 다른 노드들과 여러 세션을 생성하면서 속도가 올라감.
*BitSwap
BitSwap은 파일코인의 동작방식.
BitSwap은 기본적으로 물물교환 시스템(barter system)을 표방합니다. BitSwap Credit 시스템을 통하여, 노드들이 peer에게 파일블록을 보내주면, 보낸 노드는 자산이 증가하며, 받은 노드는 부채가 증가하게 됩니다. 결국 평판이 쌓이는 구조이므로 받기만 하려는 어뷰징을 막을 수 있고, 파일블록을 보유하고 보내주는 것에 인센티브가 생기게 됩니다.
- merkle DAG: Git
Merkle DAG는 Merkle 방향 비순환 그래프입니다. 이는 Merkle 트리와 유사하지만 그렇게 엄격하지 않은 데이터 구조입니다. 이러한 DAG는 균형을 맞출 필요가 없으며 잎이 아닌 노드에 데이터를 포함할 수 있습니다.
Git은 여러 가지 버전을 가진 merkle DAG를 사용합니다.
- naming(컨텐츠 어드레싱): SFS
SFS는 IPFS의 name system인 IPNS를 시행하기 위한 기반 기술입니다.
주소는 /sfs/(Location):(HostID)의 형식으로 표현되며, 여기서 Location은 서버의 주소입니다. HostID는 hash(서버가 제공한 공개키 + Location)입니다.
따라서 이용자는 서버가 제공한 공개키를 통해, 그 서버가 ‘주소와 일치하는 서버’임을 확인할 수 있는 것입니다.
파일이름(엄밀히 말하서 파일들의 해시값입니다)을 기준으로 Merkle DAG을 형성하였습니다. 모든 파일은 각각 영구적인, 변경할 수 없는 이름이 생긴 것입니다. 하지만 때로는 변경 가능한 이름이 필요하기도 합니다. 이를 위해 DNS(Domain Name System)처럼, IPFS 상에서는 IPNS를 통해 변경가능한 이름을 만들 수 있습니다. IPNS 주소 또한 self-certification이 가능하도록 설계되었습니다.
다음에는 터미널 환경에서 IPFS를 직접 사용해보겠습니다.