분산형 소셜 네트워크인 페디버스(Fediverse)의 한 서버인 'sukhi-fedi'가 기존에 사용하던 Fedify 라이브러리를 걷어내고, 핵심 기능을 Elixir 언어로 직접 재구현했습니다. Fedify는 페디버스 서버 간 메시지 교환에 필수적인 JSON-LD 조립과 HTTP 서명 처리를 담당하는 라이브러리였으나, sukhi-fedi는 더 나은 성능과 유연성을 위해 자체 구현을 선택했습니다.
이번 전환의 주된 이유는 세 가지였습니다. 첫째, sukhi-fedi는 Fedify의 상위 프레임워크 기능 대신 하위 부품만 사용하고 있었기 때문에, 팔로우 승인, 멱등성 처리, 인스턴스 액터 등 많은 연합(federation) 기능을 이미 직접 구현해야 했습니다. 둘째, 목표로 하는 512~768MB 메모리 환경에서 Elixir는 130MB로 안정적인 반면, Bun 워커로 동작하던 Fedify는 120MB에서 메모리 부족(OOM)으로 종료되는 문제가 발생했습니다. 시스템 내 유일한 이종 언어 부분이 가장 무겁고 취약했던 것입니다. 셋째, TypeScript/JavaScript 기반의 Fedify와 Elixir 기반의 메인 시스템 간 언어 및 프로세스 경계가 서명 검증을 위한 원본 데이터 보존, 주소 복원, 키 포장 등 지속적인 '배관 작업'을 유발하여 복잡성을 가중시켰습니다.
Fedify를 제거하고 Elixir로 직접 구현하는 작업은 12개 파일, 약 2,100줄의 코드로 완료되었습니다. 흥미로운 점은 Fedify가 자체적인 안전망 역할을 했다는 것입니다. Fedify가 제공하는 Ed25519 서명과 URDNA2015 정규화는 동일한 입력에 대해 항상 동일한 결과를 도출하므로, Fedify 코드로 '정답 데이터'를 미리 생성하여 Elixir로 구현한 결과와 한 글자도 틀리지 않게 검증할 수 있었습니다. 현재 Fedify의 Bun 워커는 은퇴했지만, 개발 환경에서 정답 데이터를 생성하는 역할로 남아 있습니다.
이번 사례는 Fedify가 TypeScript/JavaScript 기반의 페디버스 프레임워크를 통째로 활용하려는 개발자들에게 여전히 최적의 선택임을 시사합니다. 실제로 Ghost의 ActivityPub 기능, hackers.pub, Hollo 등 다수의 프로젝트가 Fedify 위에서 구동되고 있습니다. 또한 Fedify 팀은 현재 ActivityPub 디버깅 도구인 DrFed를 개발 중이며, 이는 연합 과정의 문제점을 진단하고 서명 방식을 단계별로 추적할 수 있는 강력한 도구가 될 것으로 기대됩니다.