IPFS는 Git, BitTorrent, Bitcoin 등의 서비스에서 영감을 받아 시작된 무료 오픈 소스 프로젝트 입니다. 분산형 파일 시스템에 데이터를 저장하고 인터넷으로 공유하는 프로토콜이자 P2P 네트워크입니다. 기존 HTTPS 방식의 인터넷에서는 데이터가 위치한 곳의 주소를 찾아 콘텐츠를 한번에 가져오지만 IPFS는 전 세계 컴퓨터에 잘게 나뉘어져 분산 저장된 데이터를 가져온 후 하나로 합쳐 보여주는 식으로 데이터를 관리합니다.
IPFS 특징
IPFS는 분산화, 콘텐츠 어드레싱, 참여로 구성되어 있습니다.
분산화(Decentralized)
IPFS에서는 중앙 서버에서 데이터를 받아오는 것이 아니라 여러 피어들로 부터 데이터를 받아옵니다. 따라서 안정적인 인터넷을 지원할 수 있습니다. 만약 중앙서버에 오류가 생겨 데이터를 받아오지 못하는 기존 환경에서 벗어나 다른 곳에서 동일한 데이터를 얻을 수 있습니다.
IPFS 에서는 데이터 검열이 불가능합니다. 분산된 환경에서 데이터에 접근할 수 있기 때문에 중앙화된 주체가 존재하지 않습니다. 따라서 특정 데이터에 대한 접근 권한을 설정할 수 없습니다.
IPFS는 웹 속도를 올릴 수 있습니다. 받아오고자 하는 데이터가 물리적으로 거리가 먼 곳에 위치하더라도 주변 피어로 부터 데이터를 받아올 수 있기 때문에 빠르게 데이터에 접근이 가능합니다.
콘텐츠 어드레싱(Content-Addressing)
IPFS는 주소 기반으로 콘텐츠를 표현합니다. IPFS의 URI는 다음과 같은 형태입니다. /ipfs/ 다음 문자열은 콘텐츠 식별자(Content Identifier, CID)로 여러 피어들로부터 데이터를 가져올 수 있게 됩니다.
/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Codestates.html
기존 웹 상에서 데이터에 접근하기 위해서는 URL에 정확한 파일 위치를 기재해야 합니다. 즉, 컨텐츠의 위치를 기반으로 파일을 식별하고 데이터에 접근합니다. 하지만 IPFS에서는 파일에 포함된 내용을 기준으로 하여 파일의 위치를 식별합니다.
위의 IPFS URL은 컨텐츠 내용을 해시한 결과물입니다. 따라서 컨텐츠 내용이 1bit라도 변경된다면 IPFS 상의 URL도 변경되어 버립니다. 따라서 콘텐츠의 텍스트가 변경되면 새로운 파일은 완전히 다른 주소를 가지게 되고, 콘텐츠를 다른 주소로 옮길 수도 없게 됩니다. 콘텐츠의 내용이 변경될 때 마다 새로운 주소를 사용하는게 번거롭기 때문에 IPNS, MFS(Mutable File System), DNSLink 기술이 사용됩니다.
참여
IPFS의 핵심 아이디어는 사람간 통신하는 방식을 바꾸는 것입니다. 현재 우리가 사용하고 있는 월드 와이 웹(WWW)에서는 소유권과 액세스 권한을 기반으로 통신이 이뤄집니다. 즉, 파일을 소유하고 있는 사라만이 액세스 권한을 부여할 수 있고, 권한이 있는 사람만 데이터에 접근이 가능합니다.
하지만 IPFS에서는 참여를 통해 통신이 이뤄지므로 많은 사람들이 동시에 파일을 소유하면서 통신을 가능하게 만듭니다. 많은 사람들이 참여할 수록 네트워크에서 파일에 접근이 쉬워집니다. 단 한사람이라도 파일을 소유하고 있다면 해당 컨텐츠는 지울 수 없고, 누구나 접근이 가능해집니다.
IPFS 작동방식
IPFS는 인터넷과 웹의 인프라를 발전시킨다는 비전을 가지고 수천명의 contributer와 함께 운영되고 있습니다. 분산형 파일 시스템에 데이터를 저장하고 공유를 가능하게 합니다. P2P 네트워크로 단 한 사람이라도 데이터를 가지고 있는 경우 파일 삭제가 불가능해집니다.
IPFS가 작동하는 방식에는 콘텐츠 어드레싱, DAG(Directed Acyclic Graph), DHT(Distributed Hash Table) 기술이 적용됩니다.
콘텐츠 어드레싱(Content Addressing)
IPFS에서는 컨텐츠 내용을 해싱해 콘텐츠 식별자(CID)를 생성해 URL로 사용합니다. 다양한 길이의 컨텐츠를 고정된 길이의 문자열로 변경해 고유한 값을 가질 수 있게 됩니다. 콘텐츠 어드레싱을 사용할 경우 기본 데이터 구조가 상호 운영되지 않고 연동이 안되는 문제가 있습니다.
이 문제를 해결하기 위해 IPFS에서는 IPLD 프로젝트가 시작됩니다. 해시 연결 데이터 구조 사이를 변환하고 분산 시스템 전반에 걸쳐 데이터를 통합하는 기술입니다.
DAG, 방향성 비순환 그래프
IPFS를 포함해 분산 시스템들은 DAG(방향성 비순환 그래프) 자료구조를 사용하고 있습니다. 구체적으로 각 노드 콘텐츠의 해시가 존재하는 Merkle DAG를 사용합니다. IPFS에서도 파일과 디렉토리를 표현하는데 최적화된 Merkle DAG를 사용하고 있습니다. IPFS에서는 우선 콘텐츠에 CID를 부여한 후 Merkle DAG를 통해 해당 콘텐츠를 연결할 수 있게 됩니다. 폴더, 파일들은 모두 CID를 가지고 있게 됩니다.
콘텐츠를 단일 Merkle DAG로 만들기 위해서는 우선 콘텐츠들을 블록 단위로 분할하게 됩니다. 블록으로 구성된 콘텐츠들 중 유사한 파일이 있는 경우 Mercle DAG 일부를 공유할 수 있게 됩니다. 즉, 다른 Merkle DAG의 일부는 동일한 데이터 하위 집합을 참조할 수 있게 됩니다. 이 방식으로 변경된 부분만 전송받을 수 있게 됩니다. 매번 완전히 새로운 파일을 생성할 필요가 없게 됩니다.
DHT, 분산 해시 테이블
어떤 호스트가 콘텐츠를 호스팅하고 있는지 탐색하기 위해 사용되는 기술이 바로 분산 해시 테이블입니다. 기본적으로 해시 테이블은 키~값 쌍으로 구성되어 있습니다. 분산 네트워크에 참여하는 피어들에게 해시 테이블이 나눠지면서 하나의 테이블로 존재합니다.
콘텐츠를 탐색하기 위해서는 피어들간 쿼리가 작동합니다. IPFS는 피어들간 소통하고 데이터를 관리하기 위해 libp2p 프로젝트를 제공하고 있습니다. libp2p 프로젝트는 IPLD와 같이 다른 분산 시스템에서도 사용될 수 있습니다.
콘텐츠를 탐색하기 위해서는 어떤 피어가 콘텐츠를 구성하고 있는 블록을 저장하는지만 알면 됩니다. DHT로 구성된 테이블 내에서 콘텐츠를 피어들간 소통을 통해 알아낼 수 있습니다. 콘텐츠를 찾은 후에는 콘텐츠 내용을 가져오기 위해서는 쿼리를 던져야 합니다. 따라서 IPFS에서 콘텐츠를 보기 위해서는 피어의 위치를 찾고, 콘텐츠 내용을 찾는 2번의 쿼리가 진행되어야 합니다.
피어간 블록을 요청하고 보내기 위해서는 Bitswap 모듈 혹은 Graphsync 모듈을 사용하게 됩니다. 이를 통해 찾고자 하는 콘텐츠를 가진 피어에게 연결하고 원하는 블록 목록을 요청해 받아올 수 있게 됩니다. 요청한 블록을 받은 후 콘텐츠를 해싱해 CID를 얻고 이를 요청한 CID와 비교해 검증할 수 있습니다.
IPFS 기반 파일코인(FIL)
파일 코인은 블록체인 기술을 사용해 구축된 탈중앙화 P2P 디지털 스토리지입니다. 파일코인은 IPFS 위에 구축되었고, 사용자는 사용하지 않는 하드 디스크를 임대하고 이에 대한 보상으로 FIL 토큰을 얻게 됩니다. 누구나 저장공간을 임대할 수 있고, 구매할 수 있습니다.
파일코인은 2014년 후안 베넷(Juan Benet)이 고안하였으며 <파일코인: 암호화폐 기반 파일 스토리지 네트워크> 백서를 출시했습니다. 이 후 2017년 ICO를 진행하면서 $250,000,000을 모금하였고 2020년 파일코인 메인넷이 출시됩니다.
파일코인이 이렇게 환영받는 이유는 파일을 저장하는 시스템이 점차 변화하고 있기 때문입니다. 거대한 로컬 스토리지를 구성하는 대신 클라우드 스토리지를 사용하는 방향으로 기업들 중심으로 변화했고, AWS, HPE, Dell 등의 거대한 클라우드 스토리지 서비스가 커지게 되었습니다. 이제 기업들 뿐만 아니라 개인들도 End-to-End로 암호화된 파일 시스템을 임대하고 구매할 수 있게 되면서 파일 저장 시스템의 또 한번 큰 변화를 가져오고 있습니다.
Reference
'Blockchain' 카테고리의 다른 글
[Blockchain] 채굴(Mining)이란? (0) | 2022.07.04 |
---|---|
[Blockchain] 프루닝(Pruning)이란? (0) | 2022.06.29 |
[Blockchain] DHT(분산 해시 테이블)이란? (0) | 2022.06.29 |
[Blockchain] 해시 테이블(Hash Table)이란? (0) | 2022.06.29 |
[Blockchain] DAG(Directed Acyclic Grpah) 란? (0) | 2022.06.28 |
댓글