목차
- libp2p 소개: 현실 적용 문제 해결에 도움
- 한 달간의 프로토콜 랩스의 엔지니어링&리서치에서 libp2p 개발 및 참여 방법
- 조합 및 데모의 브라우저 연결 상태
- 웹 트랜스포트(WebTransport) 운송
- 웹RTC가 필요한 이유
- 분산형 NAT 홀 펀칭(Hole Punching)
- 님(Nim)에서의 libp2p
- 테스트그라운드(Testground)와 libp2p 상호 운용성 테스트
- QR 코드를 통한 웹RTC 신호 데이터
- 가십섭(GossipSub)의 공식 분석
- 콰이엇(Quiet) 소개 - 서버 없이 암호화된 P2P 팀 채팅, 톨(Tor)만 있으면 된다.
- 퍼시아(Pyrsia)가 libp2p를 사용하여 세계를 장악하는 방법
- IPFS 및 libp2p를 사용한 분산형 채팅
- DOS 방어 - 해야 할 일과 하지 말아야 할 일
- 로드스타(Lodestar) 소개
- 두 가지 선택의 힘: 카데믈리아(Kademlia) 이진법 나무가 균형을 이루지 못하는 이유와 이에 대해 할 수 있는 일
지난 달, 2022년 10월 30일, libp2p 사용자와 기여자들이 최초의 libp2p Day를 위해 모였다.
이 날에는 유지보수자, 기여자, 커뮤니티 구성원과 사용자의 대화가 포함되었다. 최신 libp2p 업데이트, 미래 로드맵, 새로운 전송 프로토콜을 사용한 브라우저 연결에 대한 최첨단 데모 등이 주제에 포함되었다.
연사들은 libp2p에 구축된 새롭고 흥미로운 개발을 공유하고 리틀 베어 랩스(Little Bear Labs), 체인세이프 시스템(ChainSafe Systems), 스테이터스.im(Status.im), 게더(Gather), 콰이엇(Quiet), 퍼시아(Pyrsia), 새틀라이트.im(Satellite.im) 및 프로토콜 랩스(Protocol Labs)와 같은 기업들을 대표했다.
더 큰 맥락에서 연사가 libp2p, IPFS, 콘텐츠 라우팅, 분산형 계산 등의 주제를 다루는 다양한 라인업의 부분으로, libp2p Day는 IPFS 캠프 2022에서 개최되었다.
libp2p Day의 목표는 다음과 같다.
- libp2p의 업데이트 공유 및 데모를 통한 새로운 개발 강조
- libp2p 에코시스템을 모으고 libp2p 기반으로 구축된 프로젝트에 이목을 집중시키며 커뮤니티에 활력 제공
- 신규 사용자와 기존 사용자가 기여자 및 사양 작성자가 되도록 권한을 부여
libp2p Day와 IPFS 캠프에서 얻은 몇 가지 하이라이트와 학습 내용은 다음과 같다.
브라우저 연결 잠금 해제
웹트랜스포트(WebTransport)에 대한 최고 수준의 지원으로 브라우저에서 실행되는 libp2p 노드가 호스트 시스템의 타 사용자와 집적 연결하기 위해 활성화된다(현재 크로미움으로 제한). 웹트랜스포트 지원은 실험적 기능으로서 고(Go)-libp2p 버전0.23.0 및 쿠보(Kubo) 버전0.16.0에 처음 추가되었다. 나머지 웹트랜스포트 작업은 여기서 확인할 수 있다.
웹RTC 브라우저 대 서버 또한 상당한 발전을 이루었다. libp2p Day 이후 사양 병합 및 러스트(rust)-libp2p 구현이 시행됐다. 고와 JS(자바스크립트) 구현도 가까이 다가오고 있다.
아래의 웹트랜스포트와 웹RTC 데모 및 새로운 libp2p 연결 사이트를 확인하십시오.
libp2p 상호 운용성
libp2p 에코시스템은 각각 고유한 지원 기능이 있는 여러 가지 구현으로 계속 성장하고 있다. 무엇보다도 해당 기능과 구현이 호환할 수 있고 새로 출시된 제품이 퇴보하지 않는다는 것을 확실히 해야 한다. libp2p 팀은 2022년 말과 2023년의 대부분을 상호 운용성 테스트에 집중하고 있다.
자세한 내용은 테스트그라운드(Testground)와 libp2p 상호 운용성 테스트를 확인하십시오.
libp2p + HTTP에 대한 수요
libp2p + HTTP에 대한 수요가 특히 프로토콜 랩스의 제품개발(ProductDev)에서 증가함에 따라(Bedrock 및 dag.house와 같은 팀), 2023년에 해당 분야를 최우선 순위로 만들려는 계획과 함께 HTTP 사양의 초안을 작성하기 시작했다. libp2p + HTTP는 CDN(콘텐츠 전송 네트워크) 인프라를 사용하여 집적 통합 혹은 libp2p 노드의 요청에 응답하기 위해 정적 HTTP 캐시를 사용하는 등의 사례를 가능하게 한다.
다음은 간략한 개요와 함께 모든 대화 목록이다.
맥스 인덴(Max Inden)(rust-libp2p 관리자, 프로토콜 랩스에서 소프트웨어 엔지니어)
맥스는 지원되는 전송 프로토콜, 보안 채널, 다중화 메커니즘, NAT가 libp2p를 통과하는 방법, libp2p가 사용자를 발견하는 방법, libp2p가 사용자 간의 라우팅을 위해 카데믈리아를 사용하는 방법 및 메시지 게재와 구독을 위해 가십섭(GossipSub)을 사용하는 방법 그리고 libp2p가 빗스왑(BitSwap)을 사용하여 데이터를 교환하는 방법에 대한 개요를 제공하여 libp2p를 소개했다. 맥스는 libp2p를 사용하여 다양한 구현과 프로젝트를 간략하게 검토하고 libp2p의 미래 초점을 미리 보았다.
한 달간의 프로토콜 랩스의 엔지니어링&리서치에서 libp2p 개발 및 참여 방법
스티브 롭키(Steve Loeppky)(프로토콜 랩스에서 libp2p 팀 엔지니어링 매니저)
스티브는 고(Go), 자바스크립트(JS) 그리고 러스트(Rust)와 같은 구현 개발과 더 넓은 커뮤니티를 지원하기 위한 노력을 선보였다. 또한, libp2p 문서를 개선하기 위한 최근 작업 그리고 구현 로드맵 및 계획한 기능을 선보이며 팀 구조, 프로젝트 가치와 핵심 신조를 강조했다.
마튼 시맨(Marten Seemann)(고-libp2p 관리자, 프로토콜 랩스의 소프트웨어 엔지니어)
마튼은 다른 노드와의 브라우저 소통 복잡성을 다루는 P2P 파리 회담의 업데이트된 버전을 제공하고 최근 돌파구에 대해서 논의했다. 그는 브라우저에서 libp2p의 현재 기능을 설명하고 웹소켓(WebSockets), 웹트랜스포트 그리고 웹RTC 및 미래 단계에 대한 개요를 제공했다.
마무리로 마튼은 이 이야기를 이해하기 쉽게 하려고 모은 사이트인 새로운 libp2p 연결 웹사이트에 연결했다.
알렉스 팟사이드(Alex Potsides)(js-libp2p 관리자, 프로토콜 랩스의 소프트웨어 엔지니어)
알렉스는 브라우저를 사용하여 쿠보에서 직접 파일을 가져오는 웹트랜스포트를 시연했다.
알렋흐는 자신의 연설에서 놀라운 성과를 강조했다. 브라우저는 웹트랜스포트를 활용하여 분산 네트워크와 직접 통신할 수 있다. 오늘날 브라우저의 웹트랜스포트 가용성과 응용 프로그램 성능과 관련하여 웹RTC와 비교하는 방법을 설명했다.
라이언 플러시(Ryan Plauche)(리틀 베어 랩스의 소프트웨어 엔지니어)
맥스 인덴
후에 맥스는 웹RTC의 역사에 대한 개요를 제공하고 장점, 즉 웹RTC가 자체 서명된 인증서를 사용하여 사용자 간의 연결 및 홀 펀칭을 가능하게 하는 방법을 설명함으로써 웹RTC에 대해 더 깊이 파고들었다. 그다음 브라우저에서 서버로의 사양에 대해 더 자세히 설명하고 브라우저 간의 연결을 미리 확인했다.
리틀 베어 랩스에서 라이언은 그의 동료 존과 친메이(John & Chinmay)와 libp2p에서 WebRTC 지원을 달성했다는 것을 보여줬다. 한 개의 브라우저 클라이언트(js-libp2p 자동 다이얼 장치를 사용한 리액트 앱)와 두 개의 서버(고-libp2p 청취자)를 사용하여 브라우저에서 서버로의 WebRTC에 대해 데모를 보여줬다. 또한, 그는 크롬의 chrome://webrtc-internals 페이지를 사용하여 실시간으로 데모를 확인하여 데이터 채널을 관찰하고 의도한 메시지가 WebRTC를 사용하여 전달되었음을 증명했다.
데니스 트라웃와인(프로브랩의 연구원)
데니스는 새로운 분산형 홀 펀칭 메커니즘의 성공률을 측정하는 프로젝트를 발표했다. 홀 펀칭 메커니즘에 대해 설명하고 릴레이를 통한 집적 연결 업그레이드(DCUtR) 프로토콜에 대해 개요를 제공했다. 그다음에 측정 방법과 성공률의 결과에 대해 논의했다. 데니스는 다음과 같이 발표를 마무리했다. "NAT 홀 펀칭 측정 캠페인에 참여하십시오"!
탕기(Tanguy)(님-libp2p 관리자, 스테이터스.im의 소프트웨어 엔지니어)
탕기는 프로그래밍 언어인 님에 대해 연설하고 님, 고, 러스트의 기능과 목표를 대조했다. 그는 코덱스(Codex), 와쿠(Waku) 및 님버스(Nimbus)와 같은 어플리케이션을 뒷받침하는 님-libp2p에 집중했다. 탕기는 님-libp2p에서 현재 지원하는 기능과 놓치고 있는 부분 그리고 곧 개발될 기능에 대한 계획(가십섭 개선, 톨 전송, C 바인딩, 브라우저에서 실행 및 블루투스 전송)을 자세히 설명했다.
재미있는 점은 최근에 님-libp2p가 1.0 출시를 중단한 첫 번째 libp2p 구현이다. 🥳
로렌트 센타(Laurent Senta)(프로토콜 랩스의 제품생산 엔지니어)
로렌트는 테스트그라운드에 대해 소개하고 libp2p의 상호 운용성 목표를 달성하는 데에 어떤 도움을 주는지에 대해 강연을 진행했다(스티브의 발표에 언급되어 있듯이). 그는 libp2p 구현 간의 상호 운용성 테스트의 중요성과 해당 사용 사례에 테스트그라운드의 언어 및 런타임 애그노스틱(별도의 지식 없이 가동 및 사용 가능한) 프레임워크가 얼마나 적합한지 설명했다. 개요 부분에서 로렌트는 핑 테스트를 설명하고 테스트그라운드에서 실험을 실행할 수 있게 만드는 방법 및 구축, 런타임 매개변수가 테스트 구성에서 어떻게 명시되어 있는지 또한 설명했다. 특히 그는 테스트그라운드와 상호 운용성 테스트에서 이미 버그를 발견한 방법을 공유했다(테스트가 활성화된 후 한 달 이내에)!
로렌트는 또한 앞으로의 기능(복잡한 테스트 지원, 노드js 및 브라우저 JS 테스트 등)과 삶의 질 개선 계획(디버깅 단순화, 문서화 및 안정성 개선)에 대해 나눴다.
골카(Gorka)(게더의 기술 책임자)
골카는 새로운 실험인 QR 코드를 통한 WebRTC 데이터 교환을 시연했다. 연설 간 QR 코드를 사용하여 공유하는 것이 가능한지 설명하고 이 방법을 사용하여 신호 데이터를 교환하여 같은 네트워크에 있는 두 장치 간에 WebRTC 연결을 설정하는 방법을 설명했다.
안킷 쿠마르(Ankit Kumar)(노스이스턴대학교의 박사 과정 학생)
안킷은 노스이스턴대학교의 동료와 함께 가십섭 프로토콜을 공식적으로 명시하기 위해 수행한 작업에 대해 발표했다. 이 중요한 업무는 파일코인과 이더리움 네트워크의 가십섭 구현에 맞서는 프로스 사양(prose specification)을 교차 검증했다. 안킷은 노스이스턴 팀이 공식화를 위한 노력의 일환으로 ACL2S(프로그래밍 언어로 이루어진 소프트웨어 시스템) 정리 증명기(theorem prover)를 어떻게 사용했는지 그리고 Sybil 공격(컴퓨터 네트워크를 통해 복제계정 생성)을 방지하는 데 필요한 네 가지 필수 속성이 있는 점수 함수(선한 사용자 vs. 나쁜 사용자)에 도달했다. 그는 결과를 공유하고 파일코인과 이더리움에 적합한 속성에 관해 이야기 했으며 검증된 네트워크 스택을 개발하기 위한 미래 방향을 설명했다.
콰이엇 소개 - 서버 없이 암호화된 P2P 팀 채팅, 톨만 있으면 된다.
홈즈 윌슨(Holmes Wilson)(Fight for the Future의 창시자)
홈즈는 IPFS, 오르빗DB 및 톨 .onion 서비스를 기반으로 구축된 프라이버시에 초점을 맞춘 슬랙 대안인 콰이엇을 발표했다. 콰이엇 팀은 톨과 결합한 수정된 libp2p 웹소켓 전송과 메시징을 위한 빗스왑과 펍섭(PubSub)을 사용하는 사설 libp2p 및 IPFS 네트워크(톨을 통해)에서 작동한다. 홈즈는 또한 콰이엇과 다른 프라이버시 보호에 중점을 둔(시그널) 앱과 그렇지 않은 팀 메시징 앱(예: 매트릭스 및 매터모스트)(Matrix and Mattermost) 간의 대조를 제공했다.
앨리엇 프리슈(JFrog의 블록체인 개발자)
엘리엇은 퍼시아(러스트로 작성되고 HTTP 혹은 SSH 대신 메시징을 위해 libp2p 위에 구축된 바이너리 빌드 및 배포 시스템)를 소개하고 시연을 진행했다. 그는 솔라윈즈 핵(SolarWinds hack), 로그4쉘 사용(Log4Shell exploit), 러스트의 악성 상자 및 도메인 탈취와 같은 부정 사용을 방지하기 위해 바이너리를 배포할 때 퍼시아가 출처를 제공하는 방법에 대해 자세히 설명했다.
드류 유윙(Drew Ewing)(새틀라이트.im의 CTO)
드류는 libp2p 및 IPFS를 사용하는 분산형 비디오, 음성 그리고 대화 어플리케이션인 새틀라이트를 소개했다. 그는 IPFS 및 libp2p 둘 다 부트스트랩하고 사용자 ID를 위해 DID(분산형 식별자)를 사용하는 추상 계층인 이리듐(Iridium)에 대해 설명했다. 그는 DID를 만들고 사용자 계정을 생성하여 메시지 전송까지의 시연으로 발표를 마무리했다.
데모는 여기서 확인 할 수 있다: https://core.satellite.im/
맥스 인덴
맥스의 세 번째 이야기는 어플리케이션이 수행해야 하는 작업(바운드 리소스, 배압 적용 등)과 앱이 피해야 하는 작업을 설명하여 DoS 공격을 방지하는 방법을 설명했다. 이것은 맥스가 코드 정보를 제시하고 공격자가 코드의 결함을 이용할 방법을 지적하도록 하는 재미있는 대화형 세션이었다.
케이맨 나바(Cayman Nava)(js-libp2p 및 로드스타 관리자, 체인세이프 시스템의 블록체인 엔지니어)
케이맨은 타입스크립트로 구현된 이더리움 컨센서스 클라이언트이며 js-libp2p를 사용하는 로드스타에 대한 개요를 제공했다. 그는 고성능 타입스크립트 및 자바스크립트를 작성할 때 마주하는 고유한 문제들과 체인세이프 팀이 생산에 있어서 js-libp2p와 로드스타를 테스트하기 위해 지수와 CPU 프로파일링을 사용하는 방법에 대해서 설명했다.
두 가지 선택의 힘: 카데믈리아 이진법 트리가 균형을 이루지 못하는 이유와 이에 대해 할 수 있는 일
피터 메이몬코브(Petar Maymounkov)(카데믈리아의 공동 저자, 프로토콜 랩스 수석 연구 엔지니어)
피터는 좋은 마지막 연설로 libp2p Day를 마무리했다. 피터는 카데믈리아 DHT(분산 해시 테이블)에서 사용자 ID 배포에 대해 논의했다. 기존 문제와 해당 문제에 대한 솔루션이다. 강연의 전반부에서 천 개의 난수를 선택하여 이진 트리에 삽입하는 실험(여러 번 실행)에서 트리는 실험마다 다름에도 나뭇잎 깊이의 분포가 항상 같은 것을 보여줬다. 더욱이 피터는 트리의 깊이 분포를 살펴보는 정리를 사용하여 카데믈리아 이진 트리의 불균형/비균일성을 설명하는 방법에 대해 나눴다.
후반부에서는 솔루션을 제공하고 두 가지 선택의 힘을 설명했다. 사용자 ID를 선택하는 알고리즘은 전반적으로 깊이 분포가 더 얕고 균형 잡힌 이진 트리를 생성한다. 피터는 균형 잡힌 트리가 네트워크 규모를 더 잘 파악하게 한다고 설명한다.
libp2p Day의 참석자, 연사와 주최자에게 큰 고마움을 표한다. 🤩 첫 번째 libp2p Day에 모두 함께 할 수 있어서 기뻤고 다음번에 보기를 바란다. 이번에 참석 못 한 사람들은 다음에 꼭 하길 바란다. 그때까지 이러한 기록들은 속도를 높이는 데에 도움을 준다.
- libp2p에 참여하고 이바지하고 싶다면 https://libp2p.io/#community를 사용하여 연락할 수 있다.
- 셀프 스타터이고 즉시 코드를 시작하려면 도움이 필요한 다음 부분을 관리자에게 보내십시오. 고-libp2p, js-libp2p 및 러스트-libp2p
- libp2p에서 정규직으로 일하고 싶다면 구현 팀을 포함하여 다양한 팀이 고용하고 있다. 프로토콜 랩스 네트워크를 통한 기회를 위해 https://jobs.protocol.ai/jobs?q=libp2p를 확인하십시오.
- NAT 홀 펀칭 측정 캠페인 참가자를 모집한다. 확인 후에 어떤 도움이던 감사를 표한다.
libp2p에 더 알아보려면 다음을 확인하십시오.
다양한 커뮤니케이션 채널 및 토론 포럼에 참가하거나 트위터 팔로우 또는 파일코인 공용 슬랙의 #libp2p-implementers 채널에서 우리에게 연락하고 다음 이벤트 발표를 계속 지켜봐 주길 바란다.
건배!
보다 다양한 정보 및 방송 관련 소식은
공식 SNS 채널을 통해 확인할 수 있습니다.