IPLD는 무엇인가?
많은 사람은 이미 IPFS가 무엇인지, 분배 데이터의 측면에서 IPFS가 일반 개발자에게 무엇을 제공하는지 알고 있다. 그러나 이 혁신적인 시스템에 관하여 사람들이 이해해야 하는 것은 IPFS만이 아니다. IPFS 밑바탕에는 모든 무거운 작업을 처리하는 IPLD라는 시스템이 있다. 예를 들어, IPLD는 IPFS가 온체인으로 데이터를 저장하며 콘텐츠 ID라고 하는 해시 링크를 구축하는 일 등을 담당한다. 그러나 IPLD는 무엇이며, 왜 이것이 중요할까? IPLD에 대해 배우면 IPFS가 작동하는 방법 및 IPFS를 통해서 현재 사용자가 이용할 수 있는 데이터 구조를 확장하는데 필요한 방법에 대한 고유한 통찰력을 얻을 수 있다.
IPLD(Interplanetary Linked Data) 및 IPFS
가장 기본적인 형태인 IPLD는 IPFS가 그 위에 구축된 데이터 계층이다. IPLD는 데이터에 일련의 링크를 구축할 뿐만 아니라 IPFS에 저장 가능한 단순한 데이터 구조를 통해 사용자가 링크를 스스로 구축하기도 한다. IPFS는 IPLD의 블록 스토어처럼 생각할 수 있다. IPLD를 통해서 IPFS에 전송된 데이터는 온체인으로 보관되며, 사용자는 CID를 부여받아 해당 데이터에 액세스 할 수 있다.
IPFS에 파일을 저장하면 해당 파일은 여러 개의 청크로 분리되고 각각 다른 블록에 저장된다. 전체의 파일을 재구성하기 위해서 그래프는 C++과 같은 오랜 코딩 언어를 사용한 포인터들과 마찬가지로 개별 데이터 조각을 포인팅하는 디렉터리와 함께 각 비트의 콘텐츠를 연결한다. 콘텐츠 ID는 사용자가 IPFS와 상호작용하고 데이터를 복구할 수 있도록 만들어진 해시이다. IPLD는 해당 해시를 디코딩하여 사용자들이 데이터에 액세스할 수 있도록 한다. 많은 방법에서 IPLD는 개발자의 오래된 친구인 Git과 기능이 비슷하다고 평가받는데, Merkle DAG로 알려진 연결된 해시를 구축하기 위해 비슷한 방법을 사용하기 때문이다.
깃(Git)과 머클(Merkle) DAG
전형적으로 해시를 만들 때 데이터 이동의 한 방향만을 나타낸다. 예를 들어 한 해시는 빠른 시간 내에 해시가 존재하지 않는 곳으로 이동하지 못한다. 깃은 머클 DAG를 사용하여 빠른 시일 내에 특정한 포인트의 ‘스냅샷’을 구축함으로써 사용자들이 필요시에 데이터를 롤백할 수 있다. 머클 DAG는 깃의 필수 구성요소이지만, IPLD와 같은 연동 시스템에서 중요한 도구이기도 하다. Git은 전체적으로 독립된 시스템이어서, 해당 시스템에서 발생한 해시는 깃 안에서만 해독될 수 있다. IPLD는 어떤 해시든 디코드하려고 목표한다는 점에서 더욱 야망 있다. 그러나, 해당 목표가 실현할 수 있기 위해서는 IPLD가 해당 해시를 해석하는 방법을 알려줘야 한다. 멀티해시와 멀티코덱이 필요한 분야이다. 각 해시가 의미하는 바를 알 수 있는 가장 최선의 방법은 무엇인가? 물론 해시가 그것을 디코딩하는 데 필요한 정보를 시스템에 알리도록 해야 할 것이다.
복잡한 데이터 표현 시스템
대부분의 개발자는 JSON이나 CBOR와 같은 단순한 데이터 표현 시스템은 잘 알고 있을 것이다. 두 경우 모두 여러 개의 데이터 스트럭쳐는 단순 데이터 표현 시스템을 사용하여 나타낼 수 있고 검색할 수 있다. 그러나 단순한 데이터 표현 시스템은 링크를 서포트할 수 없다. 링크들이 IPLD 시스템의 핵심이기 때문에 IPLD는 이러한 간단한 시스템을 사용할 수 없다는 것은 명백하다.
그래서, IPLD는 복잡함 부족의 문제를 어떻게 다루는가? 사용자는 사실 단순한 시스템의 확장 버전을 사용하여 데이터를 저장한다. JSON-DAG는 전형적 JSON 직렬화된 데이터를 저장할 뿐만 아니라, IPLD와 함께 사용할 수 있는 링크도 지원한다. JSON-CBOR은 더욱 유연하다. CBOR은 이진법적인 스토리지 시스템으로 구성되어 속도도 빠르고 효율적이다. 파일코인은 CBOR-DAG의 효율성을 지니고 JSON보다 데이터 타입을 더 다룰 수 있어서 CBOR-DAG을 사용한다.
IPLD를 사용한 코딩과 디코딩
체인에 있는 데이터를 저장하는 것은 식은 죽 먹기 같이 보인다. 그러나 어떻게 시스템이 데이터 스트럭처에 들어가는 구성요소인, 해시를 바로 디코딩할 수 있을까? IPLD는 스트링(string), 불리안(Booleans), 인트(ints), 플로트(floats)와 같이 개발자들이 바로 인식하기 쉬운 형태를 구성한 기본 데이터 모델을 사용한다.
IPLD의 시스템은 이러한 데이터 스트럭쳐를 인코딩할 때 2단계로 이루어진 방법론을 사용한다. 주요 Protobuf 포맷(DAG-PB)은 명명된 링크와 이진법적 블랍(blob)을 나타내는 전용 포맷이다. 보조 Protobuf 포맷(UnixFS라고 알려졌다)은 파일에 대한 메타데이터를 가져온다. CID는 다른 시스템에 연결된 다수의 해시 및 코덱스를 사용한다. 이러한 멀티태스킹, 멀티코덱 빌드는 IPLD가 자체적으로 멀티포맷 시스템을 고려하는 데 필요하다.
새로운 영역에 기술을 확장
IPLD는 단순히 데이터 스트럭쳐의 최신 반복이다. 데이터 스트럭쳐는 꽤 오래전부터 존재해왔고 사용되어 왔다. Haskell이나 Scala와 같은 시스템을 봄으로써 시스템이 데이터 스트럭쳐를 다루고 IPLD가 어떻게 그러는지에 대한 유사성은 명백하다. IPLD는 이러한 시스템이 개척한 것을 취하여 분산 형식으로 사용하기 위해 번역한다.
이러한 고립된 시스템과 IPLD의 차이점은 IPLD가 IPFS에 기본 링크를 통해 분산 스토리지를 허용한다는 것이다. 이러한 데이터 스트럭처 관리 패러다임은 IPLD의 가치 제안의 핵심인 특성인 확산성이 높아지도록 지속하고 진화해 왔다. IPFS를 백업하는 IPLD를 통해 개발자는 다수의 자체 설명 형식을 처리할 수 있는 강력한 분산 데이터 스토리지 시스템에 액세스할 수 있다. 유연성과 확장성은 강력한 잠재적 조합을 만들어 개발자들이 최첨단의 Web 3.0 시스템의 개발에 박차를 가할 수 있도록 한다.
더욱 다양한 정보 및 방송 관련 소식은
공식 SNS 채널을 통해 확인 가능합니다.