이 글은 브라우저-to-브라우저 연결을 위해 libp2p peer(즉, IPFS 노드)를 relay 역할로 설정하고 운영하는 방법을 설명한다
작년, IPFS의 GossipSub 프로토콜을 이용해서 브라우저 p2p 연결에 기반한 IPFS 서비스 개념 검증을 한 적이 있습니다. 본문의 마지막 꼭지 "WebRTC with js-libp2p" 문서가 이 기술에 대한 튜토리얼입니다. 이 기술을 이용하면 Center 없는 서비스, 즉 서버 없는 서비스를 실현할 수 있습니다. 주목할만한 웹3 기술이라고 생각합니다.
웹3에서 말하는 백엔드는 AWS 같은 클라우드 서버가 아니라 IPFS 같은 프로토콜입니다. 프로토콜 완성도가 익어가는 지금, 개인 개인이 부하(load)로 참여하는 게 아니라 리소스(컴퓨팅 자원 + 스토리지 자원 + 네트워크 자원)로 참여하는 웹3 서비스를 실험할 때입니다.
IPFS 데이터에 대한 검증(Verification: IPFS Gateway가 전송한 데이터가 내가 요구한 그 데이터가 맞는가에 대한 검증)을 브라우저가 수행한다면, 브라우저는 IPFS Gateway를 신뢰하지 않더라도 문제 없이 이용할 수 있다 (Trustless Gateway 사용이 가능하다)
이를 위해 Interplanetary Shipyard팀(프로토콜랩으로부터 분사한 개발조직)이 @helia/verified-fetch 라이브러리를 개발/배포한다
Shipyard팀의 다음 목표는 WebRTC와 WebTransport 프로토콜을 이용해서 브라우저에서 직접 Kubo IPFS 노드와 통신하는 것이다
IPFS on the Web in 2024: Update From Interplanetary Shipyard
TURN: 공개 IP가 부여된 서버가 브라우저-to-브라우저 통신을 중계한다 (서버 비용이 든다. 이 글에서는 TURN 서버 대신 GossipSub 프로토콜 이용을 추천한다)
Signaling: libp2p의 WebRTC 통신 초기 연결을 위해서 필요하다
Libp2p relay: 브라우저 노드도 PubSub 프로토콜(GossipSub)을 이용하면 서로 연결될 수 있다 (데모 용도로는 좋으나 배틀 테스트를 거치지 않아서 제품 용도로는 신뢰할 수 없다)
GossipSub 프로토콜을 이용한 브라우저 간 libp2p 통신 수립 가이드 (실제 동작하는 데모, 강추!)
스텝1: 소스레포 복사 및 라이브러리 설치
스텝2: js-libp2p node.js relay 실행
스텝3: 브라우저에서 js-libp2p 실행
스텝4: 브라우저에서 relay로 연결
스텝5: Circuit Relay를 이용, 브라우저를 dialable하게 만들기
스텝6: relay를 브라우저 앱의 부트스트랩 피어로 설정
스텝7: WebRTC를 listen하여 direct connection 만들기
스텝8: PubSub 피어 찾기
결론 1)인푸라 등에서 제공하는 무료 IPFS 노드와 2)Helia 라이브러리와 3)PubSub(GossipSub) 프로토콜을 이용하면 비용 없이 브라우저-to-브라우저 IPFS 네트워크를 구축하는 것이 가능합니다. 다시 말해, 비용 없이 웹3 서비스를 실현할 수 있습니다. 이제 필요한 건 당신의 상상력입니다.