4년 전, 클라우드플레어(Cloudflare)는 IPFS 네트워크에 대한 게이트웨이를 제공하여 행성 간에 진출했다. 즉, IPFS에서 콘텐츠를 호스팅하는 경우, HTTPS 및 클라우드플레어 보호를 통해 인터넷의 모든 사용자가 콘텐츠를 사용할 수 있도록 제공했다. IPFS를 사용하면 클라우드플레어가 이 데이터를 처리할 수 있는 표준 인터페이스를 제공하는 동시에 사용자가 편한 스토리지 공급자를 선택할 수 있다.
그 이후로 기업들은 웹 개발을 간소화하기 위한 새로운 도구를 갖게 되었다. 클라우드플레어 워커스(Cloudflare Workers), 페이지 및 R2는 개발자가 내장된 확장, 보안 및 분석을 통해 몇 분 만에 서비스를 온라인으로 전환할 수 있도록 지원한다.
클라우드플레어는 그 둘을 연결할 것이라고 발표했다. 클라우드페어는 고객들이 IPFS 네트워크에서 그들의 사이트를 제공할 수 있도록 할 것이다.
이 게시물에서는 클라우드플레어 페이지로 웹 사이트를 구축하고 IPFS 통합을 활용하여 여러 공급업체에서 컨텐츠에 액세스하고 사용할 수 있도록 하는 방법에 대해 알아볼 수 있다.
IPFS에 관한 기초 자료
IPFS은 분산 파일 시스템에 콘텐츠를 저장하기 위한 피어 투 피어 네트워크이다. 이것은 공통 주소 지정 시스템을 사용하여 콘텐츠를 저장하고 중계하는 노드라고 불리는 컴퓨터 세트로 구성되어 있다. 간단히 말해서, 일련의 참가자는 네트워크가 제공할 수 있는 콘텐츠의 공유 인덱스와 찾을 수 있는 위치를 유지하는 데 동의한다.
네트워크에 무작위로 두 명의 참가자가 있다고 가정해보자. 이들은 애묘인 앨리스와 애견인 밥이다.
네트워크의 참가자로서 앨리스는 동료라고 하는 일부 참가자의 하위 집합과 연결을 유지한다. 앨리스가 IPFS에서 자신의 컨텐츠 🐱를 IPFS에서 사용할 수 있게 하는 경우, 이는 동료에게 컨텐츠 🐱가 있음을 알리고 라우팅 테이블 🐱에 저장된 이러한 피어는 앨리스의 노드에 의해 제공된다.
각 노드에는 라우팅 테이블과 데이터 저장소가 있다. 라우팅 테이블은 피어에 대한 콘텐츠 매핑을 유지하고 데이터 저장소는 지정된 노드가 저장하는 콘텐츠를 유지한다. 위의 경우 앨리스만이 콘텐츠 🐱를 가지고 있다.
밥은 🐱를 되찾고 싶을 때 동료들에게 🐱를 원한다고 말해야 한다. 이 동료들은 그를 앨리스에게로 안내한다. 이후 앨리스는 밥에게 🐱를 제공한다. 밥은 자신이 요청한 콘텐츠 식별자가 보안 암호화 해시 기능을 사용하여 🐱 콘텐츠 자체에서 파생되었기 때문에 🐱가 그들이 찾던 콘텐츠인지 확인할 수 있다.
더 좋은 점은 밥이 애묘인이 된다면 동료들에게 고양이도 제공한다고 알릴 수 있다는 것이다. 고양이에 대한 밥의 사랑은 진실일 수도 있으며 앨리스와의 계약과 같은 콘텐츠 제공하는 데 관심이 있기 때문일 수도 있다. IPFS는 콘텐츠를 저장하는 방법과 보장에 대해 의견을 달리하지 않고 콘텐츠를 공유할 수 있는 공통 기반을 제공한다.
IPFS에서 페이지 웹 사이트를 사용할 수 있는 방법
콘텐츠는 다음과 같이 제공된다.
- 페이지 저장소: 클라우드플레어 페이지용 스토리지 솔루션
- IPFS 인덱스 프록시: IPFS CID와 데이터 위치 간의 맵을 유지하는 서비스. 이것은 클라우드플레어 워커스에서 작동하며 Workers KV를 사용하여 매핑을 저장.
- IPFS 노드: 페이지 콘텐츠를 제공하는 Clouflare-hosted IPFS 노드. IPFS 인덱스 프록시와 통신할 수 있는 내부 데이터스토어 모듈이 있다.
- IPFS 네트워크: 나머지 IPFS 네트워크.
IPFS에서 클라우드플레어 페이지 서비스를 선택하면 IPFS 인덱스 프록시로 호출된다. 이 호출은 먼저 페이지 내용을 가져와서 CID로 변환한 다음 모두 IndexDB를 채워서 CID를 콘텐츠와 연결하고 클라우드플레어 IPFS 노드에 연결하여 CID를 제공할 수 있음을 알려준다.
예를 들어 웹 사이트 구조가 다음과 같다:
- /
- index.html
- 정적/
- cats.txt
- beautiful_cats.txt
IPFS에서 이 웹사이트를 제공하기 위해 클라우드플레어는 /에 대한 CID를 계산해야 한다. 주어진 폴더의 CID를 계산하려면 index.html과 static/의 CID가 있어야 한다. index.html CID는 바이너리 표현에서, 정적/은 cats.txt 와 beautiful.cats.txt에서 파생되었다.
이것은 노드가 방향성 비순환 그래프(DAG: Directed Acyclic Graph)를 형성하는 한 노드가 서로를 참조할 수 있다는 점을 제외하면 머클 트리(Merkle tree)와 유사하게 작동한다. 따라서 이러한 구조를 MerkleDAG라고 한다.
위에 제시된 예에서, cats.txt는 데이터를 공유할 가능성이 거의 없다. 하지만 beautiful_cats.txt의 경우 클라우드플레어는 MerkleDAG를 더욱 현명한 방식을 구축할 수 있다.
따라서 IPFS에서 웹 사이트에 액세스할 때 스토리지 및 대역폭 요구 사항이 줄어든다.
IPFS에서 파일 시스템을 모델링하는 방법에 대해 자세히 알아보려면 UnixFS 사양을 확인하면 된다.
클라우드플레어는 모든 CID와 참조하는 콘텐츠를 IndexDB에 저장한다. 이를 통해 클라우드플레어 IPFS 노드는 요청 시 클라우드플레어 페이지 자산을 제공할 수 있다.
요약
IPFS에서 pages-on-ipfs.com를 호스팅한다고 가정하자. 정적 사이트 생성기인 휴고(Hugo)와 공용문서 템플릿이 있는 클라우드플레어 페이지를 사용하여 구축되었으며 소스는 깃허브에서 이용할 수 있다. IPFS 호환 클라이언트가 있는 경우 ipns://pages-on-ipfs.com에서도 액세스할 수 있다.
1. 클라우드플레어 페이지 배포 문서 읽기
이 블로그의 목적을 위해 간단한 클라우드플레어 페이지 웹사이트를 만들고 싶다. 휴고에 대한 경험이 있으므로 프로젝트의 틀로 선택했다.
웹 브라우저의 검색 창에 "cloudflare pages"를 입력한 다음 문서 읽기> 프레임워크 가이드> Hugo 배포 사이트로 이동한다.
2. 사이트 만들기
여기서 Hugo를 사용하므로 구성이 다를 수 있습니다. 간단히 말해, 새로운 사이트 페이지에 IPFS를 사용하고 인덱스와 두 개의 정적 리소스를 만든다. 결과는 이 프로젝트의 소스 깃허브에서 확인할 수 있다.
3. 클라우드플레어 페이지를 사용하여 배포
클라우드플레어 대시보드에서 계정 홈 > 페이지 > 프로젝트 생성으로 이동한다. 만든 깃허브 저장소를 선택하고 휴고 웹사이트를 구축하기 위해 빌드 도구를 구성한다. 정리하자면, 이 프로세스는 클라우드플레어 페이지 문서에 작성된 내용을 따른 것이다.
저장 및 배포를 클릭하면 웹 사이트가 pages-on-ipfs.pages.dev에 배포된다. 또한 pages-on-ipfs.com에서 사용할 수 있도록 구성한다.
4. IPFS에서 컨텐츠 제공
먼저 IPFS와의 클라우드플레어 페이지 통합에 대한 영역을 선택한다. 이 기능은 아직 모두에게 열린 기능은 아니다.
이를 통해 클라우드플레어는 웹 사이트의 콘텐츠를 색인화할 수 있다. 인덱싱되면 배포 baf...1에 대한 CID를 얻는다. IPFS 게이트웨이 https://baf...1.ipfs.cf-ipfs.com/를 사용하여 IPFS의 이 해시에서 컨텐츠를 사용할 수 있는지 확인할 수 있다.
5. IPFS 웹 사이트를 pages-on-ipfs.com에서 사용할 수 있도록 설정
클라이언트가 IPFS를 지원하는지 여부에 따라 클라우드플레어 페이지와 IPFS 버전을 모두 액세스할 수 있는 하나의 도메인 이름을 갖는 것이 이상적이다. 다행히 IPFS 생태계는 DNSLink를 통해 이러한 기능을 지원한다. DNSLink는 도메인이 연결된 IPFS 콘텐츠를 지정하는 방법이다.
pages-on-ipfs.com의 경우 _dnslink.pages-on-ipfs.com에 dnslink=/ipfs/baf...1. 값을 갖는 TXT 레코드를 생성합니다. 이제 IPFS 클라이언트를 통해 ipns://pages-on-ipfs.com에 액세스할 수 있다.
6. (선택사항) 웹 사이트 복제
이제 다른 IPFS 노드에서 개인 웹 사이트의 콘텐츠를 쉽게 복제하고 고정할 수 있다. 이 작업은 IPFS 클라이언트를 통해 집 또는 피냐타(Pinata)와 같은 핀 연결 서비스를 사용하여 수행할 수 있다.
향후 계획
해당 서비스는 개선 중이므로 올해 말에 제공할 예정이다. 이들은 정보를 자유롭게 이동하도록 하고 더 나은 인터넷을 구축하도록 돕는 데 전념하고 있다. 더 많은 사용자가 개인의 사이트에 접근할 수 있도록 만들 수 있기 때문에, 클라우드플레어 페이지들은 개발자 문제를 해결하는 작업을 계속하고 있다.
수년간에 걸쳐 IPFS는 점점 더 많은 사람이 사용하게 되었다. 클라우드플레어는 HTTP 인터페이스를 통해 웹 사용자가 IPFS 콘텐츠를 사용할 수 있도록 하는 것으로 시작했지만, 이제는 보답해야 할 때가 되었다고 생각했다. 이에 클라우드플레어 자산을 공용 분산 네트워크를 통해 제공할 수 있도록 허용하여 개발자와 개방형 웹 사용자 기능을 확장했다.
자주 하는 질문
- 이미 IPFS에 웹사이트를 호스팅하고 있다. 클라우드플레어를 사용하여 고정할 수 있습니까?
- 아니요. 이 프로젝트는 IPFS를 통해 클라우드플레어 호스팅된 콘텐츠를 제공하는 것을 목표로 합니다. 우리는 클라우드플레어 인프라를 통해 이미 존재하는 IPFS 콘텐츠를 가장 잘 복제하고 다시 제공하는 방법을 계속 연구하고 있습니다.
- 이에 따라 IPFS가 더 중앙 집중화됩니까?
- 아니요. 클라우드플레어는 노드 운영자가 될 수 있는 사람이나 노드 운영자가 제공하는 콘텐츠를 결정할 권한이 없습니다.
- 컨텐츠가 이용할 수 있으리라는 보장이 있습니까?
- 예. IPFS에서 웹 사이트를 호스팅하기 위해 클라우드플레어를 선택하면 IPFS에서 사용할 수 있습니다. 다른 공급자로 이동하는 경우 콘텐츠를 계속 사용할 수 있도록 하는 것은 사용자의 책임입니다. IPFS는 핀 연결 서비스를 사용하여 이러한 전환이 원활하게 이루어질 수 있도록 합니다.
- IPFS는 비공개입니까?
- 사정에 따라 다르겠지만 일반적으로, 아닙니다. IPFS는 p2p 프로토콜이기에 사용자가 찾고 있는 콘텐츠를 피어링하고 요청하는 노드는 해당 콘텐츠를 알 수 있습니다. 개인 정보 보호는 요청한 데이터를 스누핑하지 않기 위해 피어에 대한 신뢰에 따라 달라집니다.
- 사용자가 내 웹 사이트의 무결성을 확인할 수 있습니까?
- 예. IPFS 호환 클라이언트를 통해 웹 사이트에 액세스해야 합니다. IPFS 콘텐츠 무결성은 하위 리소스 무결성과 유사한 웹 표준으로 변환되는 것이 이상적입니다.
더욱 다양한 정보 및 방송 관련 소식은
공식 SNS 채널을 통해 확인 가능합니다.