Fedify 1.0.0 릴리스

홍민희·2024년 9월 25일
6
post-custom-banner

ActivityPub 프레임워크인 Fedify가 드디어 첫 정식 버전인 1.0.0을 출시했습니다!

Fedify란?

Fedify는 ActivityPub 프로토콜을 기반으로 한 연합형(federated) 서버 애플리케이션을 쉽게 만들 수 있게 해주는 TypeScript 라이브러리입니다. ActivityPub은 소셜 네트워킹 서비스들이 서로 통신할 수 있게 해주는 개방형 표준 프로토콜로, 이를 통해 다양한 서비스 간에 사용자들이 서로 소통할 수 있는 분산형 소셜 네트워크인 연합우주를 구성합니다.

Fedify를 사용하면 개발자들이 ActivityPub 프로토콜의 복잡한 세부 사항을 직접 구현할 필요 없이, 고수준의 API를 통해 연합형 서버 앱을 쉽게 만들 수 있습니다. Fedify는 ActivityPub 객체들에 대한 타입 안전한 인터페이스, WebFinger, HTTP Signatures, Linked Data Signatures, Object Integrity Proofs 등 ActivityPub 구현에 필요한 여러 기능들을 기본적으로 제공합니다.

또한 Fedify는 Mastodon이나 Meta의 Threads 같은 인기 있는 연합우주 소프트웨어 및 서비스들과의 상호 운용성을 위한 특별한 처리도 포함하고 있어, 개발자들이 기존 페디버스 생태계와 쉽게 통합될 수 있는 애플리케이션을 만들 수 있게 해줍니다. 게다가 다양한 웹 프레임워크와의 통합을 지원하고 CLI 도구도 제공하여, 개발과 디버깅 과정을 더욱 편리하게 만들어줍니다.

주요 변경 사항

「핸들」 용어 사용 중단

이번 버전부터 Fedify 전체에 걸쳐 「핸들」(handle)이라는 용어는 연합우주 핸들(fediverse handle, 예: @hongminhee@fosstodon.org)을 지칭할 때만 쓰이게 됩니다. 액터의 내부 고유 아이디(예: b379dbdc-3b4f-4ef4-88c2-fc25632d1c22)는 「식별자」(identifier)로, WebFinger 이름(예: hongminhee)는 「유저명」(username)으로 지칭됩니다.

API의 핸들이라는 용어는 이전 버전과의 호환성을 위해 당분간 유지되긴 하지만, 사용 중단(deprecation) 경고가 로깅되며 향후 폐지될 예정입니다.

자세한 것은 관련 문서를 참고하세요.

Linked Data Signatures

Linked Data Signatures는 비록 outdated된 표준이긴 하지만, 여전히 Mastodon 등 연합우주의 주요 구현체들이 의존하고 있는 서명 방식입니다.

Fedify는 HTTP SignaturesObject Integrity Proofs에 더해, 이번 버전부터 Linked Data Signatures를 지원하게 되어, 연합우주에서 쓰이는 모든 종류의 서명 방식을 지원하게 되었습니다. 이로써 Fedify는 최선의 상호운용성을 갖춘 ActivityPub 구현체가 되었습니다.

다만, Linked Data Signatures를 사용하기 위해 Fedify 사용자가 특별히 해야 할 것은 없습니다. 들어오는 액티비티가 Linked Data Signatures를 갖고 있다면 자동으로 서명을 검증하며, 모든 보내는 액티비티는 HTTP Signatures, Linked Data Signatures, 그리고 Object Integrity Proofs, 세 형식의 서명을 갖추게 됩니다.

자세한 것은 관련 문서를 참고하세요.

액티비티 포워딩

이번 버전부터, 수신함(inbox) 안에서 수신한 액티비티를 InboxContext.forwardActivity() 메서드를 이용해 그대로 다른 액터로 포워딩할 수 있게 되었습니다.

얼핏 생각하면 수신함 안에서 수신한 액티비티를 Context.sendActivity() 메서드를 이용해 다시 송신하면 된다고 여기실 수도 있습니다. 하지만, 이렇게 할 경우 수신함으로 액티비티가 전달되기 전에 원래의 서명이 제거되는 데다, 이를 송신할 때 이를 포워딩하는 액터의 서명이 대신 붙기 때문에, 포워딩한 액티비티를 수신하는 쪽에서 이를 신뢰하지 않게 됩니다.

반면, InboxContext.forwardActivity() 메서드를 이용할 경우 원래의 서명이 보존된 채 그대로 포워딩되기 때문에 이런 문제가 없습니다. (물론, 원본 액티비티 자체가 Linked Data Signatures나 Object Integrity Proofs로 서명이 되어 있어야 합니다.)

자세한 것은 관련 문서를 참고하세요.

fedify inbox 종료시 Delete(Application) 송신

fedify inbox는 일회용 임시 액터 및 수신함(inbox)을 만들어 액티비티가 잘 전달되는지 확인할 수 있는 디버깅 명령어입니다.

이번 버전부터 fedify inbox는 종료될 때 조우했던 모든 피어(peer) 서버들에게 Delete(Application) 액티비티를 송신하게 됩니다. 이는 일반적으로 계정을 삭제할 때 송신하는 액티비티로서, 임시 액터와 관련된 찌꺼기 데이터가 다른 서버에 남지 않도록 도와줄 것입니다.

PostgreSQL 드라이버

KvStoreMessageQueue 인터페이스의 PostgreSQL 드라이버를 구현하는 @fedify/postgres 패키지가 함께 릴리스되었습니다.

PostgreSQL 드라이버는 프로덕션에서 충분히 쓰일 수 있는 백엔드로, 특히 이미 PostgreSQL을 사용하고 있는 프로젝트에 추천합니다.

또한, fedify init 명령어에서도 PostgreSQL 드라이버를 선택할 수 있는 옵션이 추가되었습니다.

Fedify 1.0.0을 자축하며

버전 1.0.0이 릴리스됨에 따라, Fedify는 이제 API 하위호환성을 최대한 유지할 것입니다. (물론, 장기적으로는 하위호환성을 깨뜨리는 2.0.0이 나올 수 있습니다.) 여태까지 정식 버전이 나오지 않아서 Fedify를 쓰기 망설였던 분들에겐 좋은 소식이 될 것으로 기대합니다!

Fedify 1.0.0은 JSRnpm에서 지금 바로 받을 수 있습니다:

deno add jsr:@fedify/fedify
npm  add     @fedify/fedify

그럼, 앞으로 더 많은 서비스들이 ActivityPub을 지원하길 바라며, 글을 마무리합니다!

profile
서울에서 소프트웨어 프로그래머로 일하고 있습니다. 자유·오픈 소스 소프트웨어를 만들며, 주로 Haskell, Python, TypeScript 같은 언어로 코딩합니다.
post-custom-banner

0개의 댓글