분산형 소셜 네트워크인 페디버스(Fediverse)는 마스토돈(Mastodon), 스레드(Threads) 등 다양한 서비스들이 상호 연결되어 작동하는 생태계입니다. 이 연결의 핵심은 ActivityPub 프로토콜인데, 이를 직접 구현하는 것은 매우 복잡하고 어렵습니다. 첫 팔로우(Follow) 요청부터 설명 없는 '401 Unauthorized' 오류에 직면하기 쉽고, 서명(signature), JSON-LD 문서 처리, 분산 전달, 그리고 다양한 구현체 간의 상호운용성 문제 등 개발자를 괴롭히는 요소가 많습니다.
페디버스 앱 개발의 어려움은 크게 네 가지로 요약됩니다. 첫째, HTTP 서명(HTTP Signatures)과 링크드 데이터 서명(Linked Data Signatures) 등 여러 서명 표준과 키(RSA, Ed25519)를 동시에 다뤄야 합니다. 특히 서버마다 지원하는 서명 방식이 달라 'double-knocking'이라는 복잡한 재시도 과정을 거쳐야 합니다. 둘째, ActivityPub의 전송 형식인 JSON-LD는 같은 의미의 활동도 문자열, 배열, 인라인 객체 등 다양한 형태로 표현될 수 있어 방어 코드가 코드베이스 전체에 퍼지기 쉽습니다. 셋째, 분산 전달 과정에서 '좀비 포스트(Zombie Post)'와 같은 문제가 발생할 수 있습니다. 예를 들어, 게시물 생성(Create)보다 삭제(Delete) 요청이 먼저 도착하면 삭제된 게시물이 남아있는 상황이 발생하며, 이를 해결하기 위해 큐, 재시도, 멱등성(idempotency), 순서 보장 등 분산 시스템 엔지니어링 지식이 필요합니다. 마지막으로, 명세를 완벽히 지켜도 마스토돈, 스레드, 렘미(Lemmy) 등 각 구현체(implementation)의 미묘한 차이와 관행 때문에 상호운용성 문제가 끊임없이 발생합니다.
이러한 난관을 해결하기 위해 등장한 것이 바로 Fedify입니다. Fedify는 ActivityPub 및 관련 표준으로 연합 서버 앱을 만들기 위한 TypeScript 라이브러리로, 서명 처리, JSON-LD 문서 형태 추상화, 분산 전달 인프라, 구현체별 차이점 및 보안 세부 사항을 애플리케이션 코드 밖으로 옮겨 개발 부담을 크게 줄여줍니다. 예를 들어, Fedify는 다양한 서명 메커니즘을 자동으로 처리하고, 'double-knocking'을 내부적으로 해결합니다. 또한, Activity Vocabulary 클래스를 제공하여 JSON-LD의 복잡한 형태를 타입 안전하게 다룰 수 있게 하며, 메시지 큐를 통한 백그라운드 전달과 멱등성 캐시로 '좀비 포스트' 문제를 방지합니다. 스레드의 인라인 액터(actor) 문제나 렘미의 컬렉션 요구사항 등 구현체별 관행도 Fedify가 제공하는 액티비티 트랜스포머(activity transformer)나 커스텀 컬렉션 API를 통해 쉽게 해결할 수 있습니다. Fedify는 기존 웹 프레임워크와 통합되며, 안전한 기본 보안 설정을 제공하여 개발자가 핵심 기능 구현에만 집중할 수 있도록 돕습니다. 이는 페디버스 생태계의 확장을 가속화하고, 더 다양한 분산형 애플리케이션의 등장을 촉진할 것으로 기대됩니다.