dev.to

Dev log #22 Tearing out the old: Deleting 3,800 lines of legacy p2p code

낡은 코드를 걷어내다: 레거시 P2P 코드 3,800줄 삭제

Rust 기반 P2P 스택에서 오래된 Floodsub 프로토콜을 제거하고 Gossipsub만 남겨 공개 API와 문서를 단순화했습니다. Python 프로젝트에서는 테스트 프로세스 정리와 영속적인 파일 업로드 세션 저장 기능을 다뤘으며, 한 주 동안 약 4,000줄을 삭제하고 160줄가량을 추가했습니다.

AI 요약

Yash는 오픈소스 P2P 네트워킹과 AI 도구 개발에 참여하면서 매주 작업 결과와 장애, 수정 과정에서 얻은 교훈을 기록합니다. 이번 주에는 Rust 기반 P2P 스택의 오래된 프로토콜을 걷어내고 Python 프로젝트의 저장소와 테스트 안정성을 보강했습니다. 5개 커밋과 3개 Pull Request(PR)를 진행하면서 약 4,000줄을 삭제하고 약 160줄을 추가했습니다. 새 기능을 많이 쌓기보다 코드베이스의 복잡도를 줄이는 작업에 무게를 둔 한 주였습니다.

■ minip2p에서 Floodsub 제거

가장 큰 작업은 Rust로 작성한 P2P 네트워킹 스택 minip2p에서 Floodsub를 완전히 삭제한 일입니다. libp2p 생태계에서 Floodsub는 오래된 pub/sub 방식입니다. 메시지를 모든 피어에게 브로드캐스트하기 때문에 구조는 단순하지만 네트워크에 불필요한 트래픽을 많이 발생시킵니다. 작성자는 현재 표준처럼 사용되는 Gossipsub와 함께 두 프로토콜을 계속 유지하는 일이 mini 구현에 불필요한 부담이 됐다고 판단했습니다.

Floodsub 제거는 파일 하나를 지우는 수준에 머물지 않았습니다. 공개 API와 문서에 영향을 주는 호환성 변경이었고, 전체 과정에서 53개 파일을 수정했습니다. 먼저 README와 문서 사이트에서 Floodsub를 제거했습니다. 이후 핵심 pub/sub 로직에서 Gossipsub만 라우터로 남겼습니다. 마지막으로 바인딩 코드를 정리해 사용자가 라우터를 직접 선택하지 않도록 바꿨습니다. 커밋 메시지에는 호환성을 깨는 변경임을 나타내는 느낌표를 붙였습니다.

minip2p에 들어간 세 커밋은 141줄을 추가하고 3,876줄을 삭제했습니다. 공개 계층 전체에서 Floodsub를 제거한 PR Remove Floodsub from every public layer (#199)는 생성 코드와 문서를 포함해 4,258줄을 삭제했습니다. 이제 새 사용자가 어떤 pub/sub 구현을 선택해야 하는지 따로 판단할 필요가 없습니다. 프로젝트에는 Gossipsub만 남았습니다. 작성자는 Gossipsub가 규모가 커진 환경에서도 사용할 수 있는 구현이라고 설명합니다.

■ py-libp2p의 프로세스 정리와 테스트 안정화

Python 프로젝트인 py-libp2p에서는 test_echo_thin_waist 테스트가 생성한 하위 프로세스를 제대로 회수하도록 수정했습니다. 테스트가 자식 프로세스를 수거하지 않으면 좀비 프로세스가 남고, 실제 코드와 무관한 CI 실패가 발생할 수 있습니다. 작성자는 echo 관련 하위 프로세스를 정상적으로 회수하도록 두 개의 커밋을 만들었고, 18줄을 추가했습니다.

변경 규모는 작지만 로컬 개발 환경과 CI 파이프라인의 불안정성을 낮추는 작업입니다. 작성자는 이 테스트가 프로토콜 스택의 thin waist를 실제로 얇고 관리 가능한 상태로 유지하는 데 필요한 수정이라고 설명합니다.

■ PostgreSQL과 SQLite를 지원하는 파일 업로드 세션

새 기능으로는 sixb 저장소에 durable, swept file upload sessions를 추가하는 PR을 진행 중입니다. 파일 업로드 세션을 프로세스 재시작 뒤에도 유지하고, 세션이 만료되면 정리하는 기능입니다. 여기서 swept는 오래된 세션을 찾아 삭제하는 정리 작업을 뜻합니다.

이 PR에는 1,493줄이 추가됐습니다. PostgreSQL과 SQLite를 함께 지원하면서도 저장소 추상화를 깔끔하게 유지해야 하므로 구현 범위가 커졌습니다. 아직 리뷰 중이며, 작성자는 운영 환경에 반영하기 전에 만료 세션을 정리하는 로직을 충분히 검증하려고 합니다.

■ 리뷰와 패키징 작업

이번 주에는 다른 프로젝트의 PR도 두 차례 검토했습니다. agent-orchestrator에서는 Arch Linux 지원과 시스템 패키지 설치 시 자동 업데이트 중단 기능을 다룬 PR을 검토하고 승인했습니다. pacman으로 설치한 바이너리가 스스로 업데이트를 시도하면 안 되므로, 설치 방식에 맞춰 자동 업데이트 동작을 제한하는 변경입니다.

py-libp2p에서는 Gossipsub 비교 자료와 독립 실행 예제를 추가하는 PR을 살폈습니다. minip2p에서 Floodsub를 제거한 작업과 맞물려, 사용자가 오래된 프로토콜을 선택하지 않도록 비교 문서와 예제를 보강하는 작업입니다. 작성자는 올바른 도구를 선택하게 만드는 가장 직접적인 방법으로 문서와 예제를 꼽습니다.

■ Rust와 Python을 나눠 진행한 한 주

Rust 작업은 공개 API와 pub/sub 구조를 정리하는 깊은 변경이었습니다. 작성자는 프로토콜 계층 전체를 제거할 때 Rust의 타입 시스템이 처리되지 않은 예외 상황을 찾는 데 도움이 됐다고 설명합니다. 반면 Python 작업은 저장소 세션과 테스트 하네스처럼 빠르게 수정하고 검증해야 하는 영역에 집중했습니다. 새 코드를 추가한 sixb PR이 있었지만, 전체 작업량은 minip2p에서 삭제한 코드가 압도적으로 많았습니다.

다음 주에는 sixb의 저장소 PR을 병합하는 일이 우선입니다. 오래된 업로드 세션을 정리하는 sweeping 로직이 운영 환경에 들어가기 전에 안정적으로 동작하는지 확인할 계획입니다. Floodsub 제거 뒤 하위 사용자가 겪는 문제가 없는지도 살필 예정입니다. py-libp2p에서는 이미 안정화한 echo 테스트에 이어 CI에서 간헐적으로 시간 초과가 발생하는 장시간 실행 예제를 추가로 점검하려고 합니다.

원문: dev.to / 번역·요약: Trawling