ActivityPub 복잡성 해소, Fedify가 답이다!

by DD
6시간 전
조회수 0

ActivityPub 구현의 복잡성, 특히 HTTP 서명(HTTP Signatures)JSON-LD 처리의 어려움이 지적됨

분산 시스템 엔지니어링(Distributed Systems Engineering) 수준의 문제들이 프로토콜 구현을 어렵게 만듦

Fedify 라이브러리는 이러한 복잡성을 추상화하여 개발 편의성을 높이는 것을 목표로 함

커뮤니티에서는 JSON-LD의 비효율성상호운용성(Interoperability) 확보의 어려움에 대한 공감대가 형성됨

다중 HTTP 서명 표준 충돌 문제

ActivityPub 서버 간 인증에 사용되는 HTTP 서명(HTTP Signatures)은 단일 표준이 아닌 여러 사양(draft-cavage-http-signatures-12, RFC 9421)이 혼재되어 있습니다. 수신 서버가 어떤 사양을 수용하는지 알 수 없어, 송신 서버는 두 번의 요청(Double Knocking)을 통해 호환되는 사양을 찾아내고 이를 캐싱해야 하는 번거로움이 있습니다. Fedify는 이러한 서명 사양 탐색 및 캐싱 로직을 프레임워크 레벨에서 처리하여 개발자의 부담을 줄여줍니다.

JSON-LD의 유연성과 상호운용성 딜레마

JSON-LD 형식의 동일한 ActivityPub 문서를 여러 다른 형태로 표현할 수 있어, 파서는 모든 조합을 수용해야 합니다. 예를 들어, 'actor' 필드가 URI 문자열, 객체, 또는 언어 태그가 포함된 객체로 올 수 있습니다. 이는 데이터 파싱(Data Parsing) 시 복잡성을 야기하며, 많은 구현체에서 '단순 JSON'으로 취급하다가 호환성 문제를 겪습니다. Fedify는 타입화된(Typed) 불변(Immutable) 클래스를 제공하여 이러한 JSON-LD의 형태 변화를 흡수하고 안전한 데이터 접근을 지원합니다.

좀비 포스트와 분산 시스템의 과제

네트워크 지연으로 인해 삭제(Delete) 활동이 생성(Create) 활동보다 먼저 수신될 경우, 존재하지 않는 게시물이 삭제되거나 이미 삭제된 게시물이 생성되는 '좀비 포스트' 문제가 발생합니다. 또한 수천 명의 팔로워에게 활동을 전달하는 과정에서 대규모 HTTP 요청 처리는 서버 성능 저하를 유발합니다. Fedify는 메시지 큐(Message Queue)자동 재시도(Automatic Retries), 24시간 중복 제거 캐시(Idempotence Cache), 회로 차단기(Circuit Breaker) 패턴을 통해 이러한 분산 시스템 문제를 해결합니다.

생태계의 비표준 관행과 Fedify의 역할

Mastodon의 'Authorized Fetch'와 같이 표준 사양에 명시되지 않은 실제 생태계의 관행(Ecosystem Quirks)은 상호운용성을 더욱 복잡하게 만듭니다. 예를 들어, Mastodon은 GET 요청에도 서명을 요구하며, 이는 키 교환 시 데드락을 유발할 수 있습니다. Fedify는 이러한 구현상의 특이점(Implementation Quirks)을 프레임워크 레벨에서 관리하여, 개발자가 표준 준수 이상의 복잡성에 신경 쓰지 않도록 합니다. 이는 지속적인 유지보수 부담을 줄여줍니다.

보안 기본값과 개발자의 책임

ActivityPub 구현 시, 서명 검증(Signature Verification)이나 문서 로더(Document Loader)의 보안 설정을 기본적으로 강화하지 않으면 SSRF와 같은 공격에 취약해질 수 있습니다. Fedify는 기본적으로 안전한 설정(Secure Defaults)을 제공하여, 개발자가 의도적으로 보안을 약화시키지 않는 한 안전한 상태를 유지하도록 합니다. 예를 들어, 내부 네트워크 접근은 기본적으로 차단되며, SSRF 공격을 유발하는 옵션은 명시적인 테스트 용도로만 사용 가능합니다.

JSON-LD 처리의 어려움에 대한 커뮤니티 의견

댓글에서는 ActivityPub 구현의 가장 큰 난관으로 JSON-LD 처리의 비효율성을 지적합니다. 이상적으로는 객체의 정규 표현(Canonical Representation)으로 쉽게 변환되어야 하지만, 실제로는 수많은 코너 케이스로 인해 어려움을 겪는다는 의견이 많습니다. XML의 XML Canonicalization과 유사한 메커니즘이 JSON-LD 세계에서도 필요하다는 논의가 있으며, 이는 JSON 스키마(JSON Schema)OpenAPI와 같은 관련 기술에서도 유사한 문제를 겪고 있음을 시사합니다.

Why implementing ActivityPub is hard, and why it doesn't have to be