Decentralized Storage (상)

Jade
Decipher Media |디사이퍼 미디어
17 min readJul 8, 2024

Disclaimer: 서울대학교 블록체인 학회 디사이퍼(Decipher)에서 Blockchain Decentralized Storage를 주제로 Weekly Session에서 발표한 내용을 바탕으로 합니다. 해당 글은 Decentralized Storage에 대한 전반적인 내용을 바탕으로 작성자의 주관적인 의견을 포함하여 작성하였으며, 이 보고서에 포함된 어떠한 내용도 투자 조언이 아니며, 투자 조언으로 해석되어서도 안 됩니다.

Series

  1. Decentralized Storage(상)
  2. Decentralized Storage(하)

Author

최재우(@jad3choi) of Decipher

Seoul Nat’l Univ. Blockchain Academy Decipher(@decipher-media)

Reviewed By 이현우, 신성헌

목차

  1. 서론
  2. 스토리지의 종류
  3. P2P 네트워크
  4. 토렌트
    4–1. 토렌트의 동작원리
    4–2. 토렌트의 의의와 한계
  5. IPFS
    5–1. IPFS에 파일을 배포할 경우
    5–2. IPFS에 파일을 요청할 경우
    5–3. IPFS의 의의와 한계
  6. 결론

서론

https://en.wikipedia.org/wiki/Everydays:_the_First_5000_Days

2021년 “Everydays: The First 5000 Days”라는 NFT가 6930만 달러에 낙찰되었습니다. 이 작품은 beeple이라는 예명을 사용하는 미국의 디지털 아티스트 마이크 윈켈만이 2007년 5월 1일부터 하루에 하나의 작품을 완성하는 “Everydays” 프로젝트를 하며 제작한 5000개의 작업물들을 하나로 합쳐 탄생했습니다. 당시 생존작가들의 예술품 가격으로 역대 3위에 해당하는 어마어마한 가격으로 큰 이슈가 되었고 때문에 많은 대중들이 NFT를 접하는 계기가 되었습니다.

이렇게 어마어마한 가격에 거래되는 NFT의 이미지 정보와 같은 메타데이터를 안전하게 보관하는 것은 중요합니다. 온체인에 NFT의 메타데이터를 저장하는 것은 비용이 매우 비싸기 때문에 일반적으로 블록체인 외부에 데이터를 저장하고 해당 URL만 블록체인에 저장하는 방식을 사용합니다. 이 메타데이터를 중앙화된 주체가 마음대로 수정이나 삭제할 수 있다면 NFT로써의 가치가 없을 것입니다.

https://magiceden.io/item-details/2TajC6kMXx2125dG57EQrvfDxbMibYymgihV3iwP6y5w

일례로 FTX NFT 거래소에서 발행한 NFT의 메타데이터가 중앙화된 FTX 서버에 저장해서, FTX가 파산하며 이미지가 통채로 사라진 사건들이 있었습니다. IPFS와 같은 탈중앙 스토리지는 파일을 임의로 수정하거나 삭제할 수 없기 때문에 NFT의 메타데이터를 저장하기 적합했습니다. 이러한 탈중앙 스토리지는 데이터를 안전하게 보호하고, 중앙화된 주체로부터 자유롭게 함으로써 정보의 무결성을 보장합니다.

글은 총 2편으로 (상)편과 (하)편으로 나뉘며, (상)편에서는 탈중앙 스토리지의 등장 배경과 스토리지의 기반이 되는 탈중앙 네트워크, 토렌트와 IPFS에 대해서 살펴보려고 합니다. 이후 (하)편에서는 본격적으로 블록체인 탈중앙 스토리지의 개념과 관련 프로젝트를 상세하게 분석할 예정입니다.

스토리지의 종류

탈중앙 스토리지를 중앙 스토리지, 분산 스토리지와 비교하며 어떤 특징이 있는지 알아보겠습니다. 가장 먼저 알아볼 것은 중앙 스토리지입니다. 중앙 스토리지는 모든 데이터가 하나의 중앙 지점에 저장되는 방식입니다. 데이터 관리와 유지보수가 용이하다는 장점이 있지만 중앙화된 지점에 문제가 발생하면 스토리지에 접근할 수 없는 단일 장애점이 존재합니다. 그 예시로 판교 데이터센터에 화재가 발생해서 한 채팅 서비스가 일시적으로 다운된 사건이 있었습니다. 이는 한 지점에 문제가 생기면 데이터에 접근할 수 없다는 중앙 스토리지에 대한 문제점을 보여준 대표적인 사례입니다.

분산 스토리지는 이 중앙 스토리지의 단일 장애점을 극복하고자 고안되었습니다. 데이터를 여러 지점에 분산시켜 한 서버에 문제가 생겨도 다른 서버를 통해 스토리지에 접근할 수 있습니다. 또한, 사용자와 가장 가까운 서버에서 데이터를 제공하여 지연 시간이 짧다는 장점도 있습니다. 대표적으로 AWS, Google Cloud Platform, Azure, IBM Cloud와 같은 클라우드 서비스가 분산 스토리지를 제공하고 있습니다.

하지만 분산 스토리지 역시 기업과 같은 특정 기관이나 정부가 데이터를 쉽게 통제하고 접근을 제한할 수 있는 권한을 가지고 있다는 문제점이 있습니다. 탈중앙화된 시스템에서는 데이터가 여러 곳에 분산되어 저장되기 때문에 특정 기관이 데이터를 통제하기 어렵습니다. 이러한 특징은 개인 또는 단체가 자유롭게 자신의 견해와 사상을 표출할 수 없는 국가들에서 표현의 자유를 보호하는 데 기여할 수 있습니다.

탈중앙 스토리지는 중앙 스토리지, 분산 스토리지의 중앙화된 권한 문제를 해결하기 위해 고안되었습니다.

분산 스토리지와 마찬가지로 데이터를 여러 지점에 분산시켜 단일 장애점 문제를 해결했으며, P2P 네트워크를 통해 데이터가 노드 사이에서 직접 공유되는 방식으로, 모든 권한이 네트워크 사용자에게 분산되어 있습니다. 이 P2P 네트워크를 통해 어떻게 탈중앙화된 방식으로 데이터를 저장할 수 있는지 알아보겠습니다.

P2P 네트워크

https://en.wikipedia.org/wiki/Peer-to-peer

P2P(peer-to-peer)는 소수의 서버가 아니라 네트워크에 참여하는 사용자의 대역폭에 의존하여 구성되는 통신망입니다. 여기서 사용자를 Peer라고 하는데 모든 Peer는 동등한 권한을 가지고 있습니다. 공급자와 소비자가 분리되어 있는 기존의 클라이언트 서버 모델과 다르게 Peer는 리소스의 공급자임과 동시에 소비자이기도 합니다. 클라이언트 서버 모델은 서버(공급자)가 여러 클라이언트(소비자)에게 데이터를 제공하는 방식입니다.

위에서 언급했듯이, P2P 네트워크의 권한은 모든 Peer들에게 분산되어 있습니다. 특정 사용자가 파일을 임의로 수정하거나 삭제하는 것이 불가능 합니다. 이러한 특징 때문에 특정 국가에서는 접근이 어려운 콘텐츠를 P2P 네트워크를 통해 배포하기도 합니다.

이러한 P2P 네트워크로 파일을 공유하는 토렌트, 파일을 저장하는 IPFS를 순서대로 다뤄보며 어떻게 탈중앙화된 방식으로 데이터를 저장할 수 있는지 알아보겠습니다.

토렌트

토렌트는 탈중앙 스토리지보다 파일을 효율적으로 공유하기 위한 프로토콜에 가깝습니다. IPFS는 토렌트의 개념을 더욱 발전시킨 프로토콜입니다. 토렌트의 구조를 먼저 이해하고 나면 이후에 탈중앙 스토리지인 IPFS를 이해하는데 도움이 될 것입니다.

https://computer.howstuffworks.com/bittorrent2.htm

1) .torrent 파일 실행

토렌트 파일은 공유하고자 하는 파일의 고유한 해시값, Tracker URL, 메타데이터 등을 포함하고 있습니다. 토렌트 파일을 통해 공유하고자 하는 파일을 클라이언트에 등록하여 네트워크에 참여할 수 있습니다.

해시는 파일을 구별하는데 사용되며, Tracker는 해당 파일을 공유중인 Peer들의 정보를 가지고 있는 서버를 의미합니다. 토렌트는 오픈소스이기 때문에 누구나 트래커 서버를 개설하고 운영할 수 있으며, 유명한 트래커일수록 많은 피어 목록을 가지고 있어 다운로드 속도가 더 빠릅니다.

토렌트 파일을 실행할 경우 비트토렌트와 같은 토렌트 클라이언트에 등록되며, 해당 토렌트 파일에 포함된 Tracker URL목록에 접속을 시도합니다. 이 Tracker URL을 통해 파일을 가지고 있는 Peer 목록을 Tracker들로부터 받아올 수 있습니다.

2) Tracker Request

클라이언트가 Tracker에게 토렌트 파일의 고유한 해시값과 본인의 Peer 정보를 전송하여 해당 파일을 공유하고 있는 Peer들의 목록을 요청합니다.

3) Tracker Response

요청을 받은 Tracker는 해당 토렌트의 Hash값을 참고하여 Swarm이 존재하는지 검색합니다.

Swarm은 실행한 토렌트 파일의 피어의 리스트 정보를 의미하며, Peer들의 Tracker Request에 의해 생성됩니다. Swarm에 피어가 존재할 경우에는 Swarm에 포함된 피어의 리스트를 클라이언트에게 전송합니다. 존재하지 않을 경우에는 Swarm을 새로 생성하고 다른 피어들의 Tracker Request를 기다립니다.

4) Peer간 통신

Tracker의 응답을 받은 클라이언트는 Swarm의 Peer들에게 파일의 해시, 본인의 Peer id를 전송하여 연결 가능 여부를 파악합니다. 파일의 해시를 받은 다른 Peer는 연결 가능할 경우에 다시 파일의 해시, 본인의 Peer id를 전송하여 응답합니다. 서로가 해시를 주고받으면 세션이 연결되고, 파일을 전송합니다. Peer수에 따라 한번에 여러 세션이 연결될 수 있습니다.

5) Piece 전송

토렌트는 파일을 Piece라는 조각으로 나누어 공유합니다.

클라이언트는 Peer들에게 받은 조각 정보를 토대로 자신이 필요한 조각을 다른 피어에게 요청합니다. 클라이언트가 하나의 조각을 다운로드 완료했을 경우 다른 피어들에게 자신이 해당 조각을 가지고 있다는 정보를 전송하여 해당 조각이 필요한 피어들이 자신에게 다운로드 받도록 유도합니다. 이 과정에서 토렌트는 희귀한 조각을 먼저 선택하여 “희귀하지 않은 상태”로 만들려고 합니다. 만약 하나의 Peer만 특정 조각을 가지고 있을 경우에 해당 피어가 오프라인 상태가 되면 아무도 파일 전체를 다운로드 받을 수 없기 때문입니다. 그 반대로 흔한 조각은 가장 나중에 다운받습니다.

클라이언트가 모든 조각을 다운로드 받으면 해당 사용자를 Leecher에서 Seeder로 변경합니다. 여기서 Leecher는 토렌트의 일부 조각만을 가지고 있는 사용자를 의미하고, Seeder는 토렌트의 조각을 모두 보유한 사용자를 의미합니다.

토렌트의 의의와 한계

이렇게 토렌트는 파일을 여러 조각으로 나누어 여러 사용자로부터 동시에 다운로드하기 때문에 각 사용자의 대역폭을 고르게 활용할 수 있으며, 특히 대용량 파일을 공유할 때 매우 효율적인 프로토콜입니다. 또한, P2P 네트워크를 기반으로 하기 때문에 중앙화된 주체가 데이터를 검열할 수 없습니다. 하지만 이런 토렌트에도 문제점이 존재합니다.

각 사용자의 피어가 전체 파일을 다운받았을 경우에 다른 피어들이 파일을 계속 사용할 수 있도록 Seeder로써 자신의 네트워크 대역폭을 사용하며 파일을 제공할 경제적 인센티브가 없습니다. 때문에 많은 사용자들이 다운로드가 끝나면 Swarm을 떠났습니다.

https://www.bittorrent.com/token/btt

트론의 창립자인 저스틴 썬이 이러한 문제점을 해결하고자 2018년에 비트토렌트를 인수하여 토큰을 발행했습니다. 기존 토렌트 네트워크 위에 인센티브 시스템을 추가하여 시더들에게 토큰 보상을 지급하는 방식으로 Swarm을 유지할 수 있도록 만들어 주었습니다.

이렇게 토렌트가 파일을 공유하는 방식에 대해서 살펴보았습니다. 파일 공유 프로토콜인 토렌트의 동작 원리를 알고나면 다음 설명드릴 IPFS를 이해하시는데 도움이 될 것입니다. 이 둘의 구조는 상당히 닮아있으며, 문제점 또한 비슷합니다.

IPFS

https://ipfs.tech/

IPFS는 InterPlanetary File System의 약자로서, 행성간 파일 시스템을 의미합니다.

행성간 파일 시스템이라는 이름은 IPFS의 기술의 핵심을 담고 있습니다. IPFS는 물리적으로 먼 거리에서 오는 요청도 효과적으로 처리할 수 있기 때문입니다. 예를 들어 화성에서 지구에 있는 데이터를 요청할 경우에는, 요청할 때마다 지구로부터 오랜 시간을 기다려야 합니다. IPFS는 동일한 파일을 자신과 가까운 노드에 복사해 놓기 때문에 다음에는 훨씬 빠른 속도로 데이터를 받아볼 수 있습니다.

IPFS의 동작원리를 파일을 배포와 요청으로 나누어 설명드리겠습니다.

IPFS에 파일을 배포할 경우

https://www.simpleaswater.com/ipfs-guide/

IPFS에 파일을 배포할 경우에는 IPLD(Interplanetary Linked Data)를 통해 관리됩니다. 이 IPLD가 어떤 방식으로 IPFS에 데이터을 추가하고 관리하는지 그 과정을 알아보겠습니다.

1) 블록 생성

https://velog.io/@jieun9851/IPFS-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

IPFS에 파일을 추가할 경우 해당 파일은 블록으로 분할됩니다. 한개의 IPFS 블록에는 256kb의 데이터가 담길 수 있으며 256kb를 초과할 경우 해당 데이터를 블록으로 나눕니다. 예를 들어, 1MB 파일은 256KB 크기의 4개의 블록으로 나뉩니다. 이 과정에서 각 블록들은 해시 함수에 의해 CID가 생성됩니다.

https://velog.io/@jieun9851/IPFS-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

데이터를 블록으로 나누는 Chunk과정에서 기존에 생성된 블록과 같은 해시값을 가지는 블록은 기존의 노드에 연결하고 새로운 블록만을 저장합니다. 여기서 노드는 트리 구조의 데이터 계층을 의미합니다.

2) Merkle-DAG와 블록 연결

https://discuss.ipfs.tech/t/amount-of-children/15022

생성된 해시들을 노드로 하여 Merkle-DAG를 구성합니다. 각 노드는 블록을 나타내며, 상위 노드는 하위 노드의 해시 링크를 포함합니다. 부모가 없는 노드는 루트 노드, 자식이 없는 노드는 리프 노드, 부모와 자식이 모두 있는 노드는 중간 노드라고 합니다.

3) 루트 노드의 CID

https://www.researchgate.net/figure/Generation-principle-of-CID-in-IPFS_fig1_361258659

최상위 노드인 루트 노드의 CID는 모든 하위 노드의 데이터를 포함한 해시 값으로 계산됩니다. Merkle-DAG를 통해 하위 노드들을 참조하여 원본 데이터를 복구할 수 있습니다.

IPFS에 파일을 요청할 경우

https://en.wikipedia.org/wiki/Distributed_hash_table

IPFS에 데이터를 요청할 때는 Distributed Hash Table를 사용합니다. 해시 테이블에서 파일을 검색하고 해당 파일을 보유하고 있는 노드들에게 파일을 요청할 수 있습니다. 분산 해시 테이블은 네트워크에 참여한 노드들이 해시 테이블을 각자 관리함으로써 중앙화된 서버 없이 고도의 P2P 네트워크를 실현할 수 있습니다.

IPFS는 컨텐츠 자체를 찾는 방식으로, 해시테이블 상에서 CID를 찾으면 해당 컨텐츠를 보유하고 있는 노드를 알 수 있습니다. 여기서 저장되는 값은 파일이며, IPLD 루트 노드의 해시가 키값입니다.

https://www.pinata.cloud/

파일을 보유하고 있는 노드를 찾았을 경우, 요청자에게 가까운 노드에 해당 파일이 캐시됩니다.

파일을 가까운 노드에 캐시해놓는 이유는 파일을 요청하는 빈도에 따라 자율적으로 데이터를 복제할 수 있기 때문입니다. 파일이 여러 곳에 캐시되어 있으면 특정 노드가 오프라인이 되더라도 다른 노드에서 파일을 제공할 수 있으며, 다음 사용자가 파일을 요청할 때 더 빠르게 접근할 수 있습니다.

IPFS 노드에 캐시가 많이 쌓일 경우, 캐시에 고정되어 있지 않은 콘텐츠를 모두 지워버리는 가비지 컬렉션 프로세스를 작동시킵니다. 하나 이상의 IPFS 노드에서 Pinning된 콘텐츠가 있는 경우 해당 콘텐츠는 그대로 유지됩니다. Pinning은 콘텐츠를 IPFS에 유지하는 기능으로, 하나의 노드에서 콘텐츠를 고정하는 한 네트워크에서 계속 사용할 수 있습니다.

IPFS의 의의와 한계

IPFS는 파일을 가까운 노드에 캐시하여 여러 곳에 복제하여 보관되기 때문에 특정 노드가 다운되더라도 다른 노드가 파일을 제공할 수 있습니다. 또한 다음 요청은 가까운 노드에서 빠르게 데이터를 받을 수 있습니다.

IPFS는 토렌트와 상당히 비슷한 구조이며, 비슷한 문제점을 공유합니다. IPFS의 Pinning 시스템은 토렌트의 Seeder와 많이 닮아있습니다. 누군가 Pinning하지 않은 컨텐츠는 결국 사라지는 구조이지만, 사용자가 본인의 스토리지를 사용하며 Pinning을 할 경제적 인센티브 시스템이 없습니다.

결론

중앙 스토리지는 데이터를 한 곳에 저장하여 관리가 편리하다는 장점이 있지만 해당 지점에 문제가 발생하면 데이터에 접근할 수 없다는 한계가 있으며 분산 스토리지는 데이터를 여러 지점에 분산시켜 저장하지만 중앙화된 주체가 데이터를 마음대로 수정하거나 삭제할 수 있다는 문제점이 있었습니다.

이러한 탈중앙 시스템의 한계로는 토렌트의 경우 누군가 시더가 되어서 파일을 공유해주지 않으면 지속 가능하지 않으며, IPFS 경우 누군가 파일을 고정시켜주지 않으면 지속 가능하지 않습니다. 이러한 탈중앙 스토리지의 한계를 블록체인과 토큰 시스템으로 해결하려는 시도들이 있습니다.

두번째 글인 “Decentralized Storage (하)”에서는 IPFS의 한계를 블록체인과 토큰을 통해 해결하고자 하는 프로젝트인 Filecoin과 블록체인 탈중앙 스토리지인 Arweave를 다뤄보겠습니다.

Reference

--

--