聯合宇宙(연합우주)와 함께 한 一年(일년)

2024()은 정말로 聯合宇宙(연합우주)에 푹 빠져서 지낸 한 해였다。聯合宇宙(연합우주)와 ActivityPub과 關聯(관련)된 크고 작은 여러 프로젝트를 進行(진행)했으며、그 중 몇은 꽤 많은 사람들에게 좋은 反應(반응)도 받았다。좋은 記憶(기억)을 남겨두자는 意味(의미)에서 글로 써 본다。

聯合宇宙(연합우주)란?

먼저 聯合宇宙(연합우주)(fediverse)가 무엇인지 짧게 說明(설명)하자면、서로 다른 種類(종류)의 소셜 미디어들이 疏通(소통)할 수 있는 네트워크를 뜻한다。()、서로 아예 다른 소셜 미디어 ()의 두 計定(계정)이 서로 팔로도 하고 댓글도 달고 좋아요도 찍을 수 있다는 뜻이다。技術的(기술적)으로는、서로 다른 소셜 미디어 사이의 相互運用性(상호운용성)(interoparability)을 具顯(구현)하기 ()해 W3C의 技術(기술) 標準(표준)ActivityPub 프로토콜이 使用(사용)된다。

現在(현재) 聯合宇宙(연합우주)同參(동참)하고 있는 代表的(대표적)인 소셜 미디어들로는 MastodonPixelfedAkkomaMisskeyWordPress ()이 있으며、그 밖에도 一一(일일)列擧(열거)하기 힘들 만큼 많은 프로젝트가 있다。그들 大部分(대부분)은 오픈 소스 프로젝트이기도 하다。또한 오픈 소스는 아니지만 Meta의 Threads가 올 여름부터 조금씩 ActivityPub을 具顯(구현)하여 이미 어느 程度(정도) 聯合宇宙(연합우주)에 들어와 있다고 볼 수 있다。

서로 다른 소셜 미디어들이 疏通(소통)하는 方式(방식)이니 만큼、聯合宇宙(연합우주) ()計定(계정) 住所(주소)使用者名(사용자명) 뿐만 아니라 서버 이름도 包含(포함)하게 된다。흔히 聯合宇宙(연합우주) 핸들이라 부르는 이 住所(주소) 形式(형식)은 @username@host와 같이 마치 이메일 住所(주소)와 닮아 있다。이를 ()해 서로 다른 서버 및 플랫폼에 ()計定(계정)이 서로 팔로하고 疏通(소통)할 수 있다。勿論(물론)自身(자신)聯合宇宙(연합우주) 計定(계정)이 있으며、@hongminhee@hollo.social을 팔로하면 된다。

Fedify

Fedify는 올 해 나의 가장 큰 成就(성취)라고 할 수 있을 것이다。Fedify는 TypeScript로 作成(작성)된 ActivityPub 서버 프레임워크인데、ActivityPub 서버를 具顯(구현)할 때 쓸만한 適切(적절)抽象化(추상화) 水準(수준)을 찾을 수 없어서 만들게 되었다。맨 처음에는 바닥부터 ActivityPub 서버 앱을 만들어 보려고 몇 ()인가 試圖(시도)하고、또 어느 程度(정도) 動作(동작)하는 것도 만들어 보았지만、그 結果(결과) 코드는 마음에 썩 차지 않았다。그래서 제대로 抽象化(추상화)를 하며 作成(작성)을 해 보니 結局(결국) 프레임워크 비슷한 걸 만들고 있다는 것을 깨닫고、Fedify 같은 ActivityPub 서버 프레임워크의 必要性(필요성)切感(절감)하게 되었다。

Fedify는 () 4()再作成(재작성)이 있었는데、맨 처음에는 TypeScript로 作成(작성)했다가、그 뒤에는 Python、그리고 C#、그리고 다시 TypeScript로 돌아오게 되었다。言語(언어) 選擇(선택)에는 여러 考慮事項(고려사항)이 있었다。첫째로는 ActivityPub의 데이터 交換(교환) 形式(형식)JSON-LD 具顯(구현)이 있는 言語(언어)여야 했고、또 JSON-LD를 쉽고 便()하게 다루기 ()해 어느 程度(정도)動的(동적)이어야 했다。둘째로는 動的(동적) 言語(언어)라도 靜的(정적) 타입을、그러니까 所謂(소위) gradual typing을 잘 支援(지원)해야 했다。마지막으로는 利用者(이용자)가 많고 生態系(생태계)豊富(풍부)해야 했다。왜냐하면 Fedify가 널리 쓰이길 바랐기 때문이다。모든 것을 考慮(고려)한 끝에 TypeScript를 쓰게 되었다。

모든 再作成(재작성) 過程(과정)까지 包含(포함)한다면 昨年(작년) 12() ()부터 着手(착수)했고、마지막 再作成(재작성)부터 따진다면 2() ()부터 만들기 始作(시작)하여 3월 ()에 첫 0.1.0 버전을 릴리스했다。릴리스하기 ()에 생각했던 코드네임은 Fedikit이었지만、릴리스하기에 앞서 檢索(검색)을 해 보니 이미 같은 이름의 프로젝트가 있다는 事實(사실)을 알게 되어 ()하게 Fedify로 이름을 바꾸게 되었다。 Fedikit이라는 코드네임으로 作業(작업)했던 Python 버전은 GitHub에 올려두기도 했다。

Fedify는 現在(현재) ActivityPub 서버를 만들 때 必要(필요)機能(기능)을 가장 ()넓게 提供(제공)하는 프레임워크라고 自負(자부)하고 있다。聯合宇宙(연합우주)는 ActivityPub만 具顯(구현)하면 끝나는 게 아니라 JSON-LD、Activity Vocabulary、WebFinger、NodeInfoHTTP SignaturesLinked Data SignaturesObject Integrity Proofs 等等(등등) 많은 仕樣(사양)을 다뤄야 한다。Fedify는 그 모든 것들을 網羅(망라)한다。甚至於(심지어) ActivityPub의 主要(주요) 具顯體(구현체)라 할 수 있는 Mastodon이나 Misskey에서는 未具顯(미구현)된 것들도 Fedify에서는 具顯(구현)된 게 많다。ActivityPub 스펙만 훑고서 ActivityPub 서버 具顯(구현)簡單(간단)하다고 錯覺(착각)하고 아무런 ActivityPub 프레임워크 없이 着手(착수)했다가 結局(결국)複雜性(복잡성)唐慌(당황)하는 境遇(경우)種種(종종) 본다。앞으로 ActivityPub 서버를 하나쯤 만들어 볼 생각이 있는 분들께는 꼭 Fedify를 쓰길 ()한다。

그리고、Fedify를 만들면서 힘쓴 다른 하나는 바로 文書化(문서화)이다。參照(참조) 文書(문서)勿論(물론)이고、Fedify의 모든 機能(기능)網羅(망라)하는 豊富(풍부)한 매뉴얼이 存在(존재)해야 한다고 생각했다。새 機能(기능)追加(추가)할 때도 매뉴얼 文書(문서)부터 作成(작성)하고 具顯(구현)을 나중에 할 程度(정도)였다。德分(덕분)文書(문서)()이 꽤나 많아져서、이제는 英語(영어) 以外(이외)言語(언어)로 어떻게 飜譯(번역)해야 할 지가 苦悶(고민)이다。

끝으로、내가 Fedify를 ()해 스스로 滿足(만족)할 만한 成就(성취)를 냈다고 느끼게 된 가장 큰 事件(사건)Ghost의 Fedify 資金(자금) 支援(지원)이다。이를 ()人生(인생) 처음으로 專業(전업) 오픈 소스를 할 수 있게 되었기 때문이다。1 무엇보다 Ghost는 Fedify의 가장 큰 使用者(사용자)이기도 하다。Ghost의 ActivityPub 具顯(구현)은 한창이며、프라이빗 베타 段階(단계)에 있다。아마도 來年(내년)에는 公開(공개)가 될 것으로 보인다。

Hollo

Hollo一人用(일인용) ActivityPub 서버이다。普通(보통)은 Mastodon이나 Misskey 서버 ()에 마음에 드는 곳에 加入(가입)하는 ()으로 聯合宇宙(연합우주) 計定(계정)을 만들게 되지만、가끔 소프트웨어 엔지니어들 ()에서는 直接(직접) 自身(자신)만의 도메인()直接(직접) 運營(운영)하는 서버를 連結(연결)하여 聯合宇宙(연합우주) 計定(계정)을 마련하기도 하는데、Mastodon이나 Misskey 같은 소프트웨어는 基本的(기본적)으로 많은 사람들이 計定(계정)을 만들어서 함께 使用(사용)하는 것을 前提(전제)設計(설계)되어 있어 혼자서 쓰기에는 必要(필요) 없는 機能(기능)도 많고 무거운데다 設置(설치)도 번거롭다。그런 사람들을 ()해 만든 게 바로 Hollo이다。Hollo는 PostgreSQL만 있으면 動作(동작)하기 때문에 設置(설치)比較的(비교적) 簡便(간편)便()이고、機能(기능)도 혼자 쓸 때 必要(필요)한 것들로만 갖추고 있어서 簡單(간단)한 것이 長點(장점)이다。

Hollo를 만들 게 된 經緯(경위)는 조금 複雜(복잡)하다。()은 Fedify를 만들게 된 契機(계기)가 바로 Hollo라고 할 수 있는데、Hollo 같은 나만의 ActivityPub 서버를 만들기 始作(시작)했다가 ActivityPub 서버 프레임워크의 必要性(필요성)實感(실감)하게 되었기 때문이다。다만、그 때 처음으로 만드려고 했던 프로젝트의 코드는 Hollo에 再使用(재사용)되지도 않았고 그 때의 프로젝트 이름도 Hollo가 아니었으므로、嚴密(엄밀)히 말하면 Hollo가 Fedify를 만들 게 된 契機(계기)라고는 할 수 없다。그러나 Fedify를 만들고 나면 이를 利用(이용)窮極的(궁극적)으로 만들고 싶었던 게 Hollo와 같은 것이었다는 것은 事實(사실)이다。

하지만 막상 Fedify를 만들고 나니 내가 만들고 싶은 것은 Fedify 自體(자체)가 되어버렸고、원래의 動機(동기)多少(다소) 褪色(퇴색)한 뒤였다。그래서 Hollo를 정말로 만들기 始作(시작)할 때 즈음에는 Fedify의 데모를 만드는 게 Hollo의 가장 큰 目的(목적)이 되어 있었다。實際(실제)로 Hollo를 만들면서 Fedify에 必要(필요)機能(기능)을 더 追加(추가)하거나 버그를 찾아서 고치기도 했다。다만、어디까지나 Fedify 프로젝트의 一環(일환)이었기 때문에 Hollo 自體(자체)의 코드 品質(품질)은 Fedify에 ()하면 많이 떨어진다。이 問題(문제)는 Hollo를 Fedify 프로젝트의 一環(일환)으로 보지 않게 된 時點(시점)부터 고쳐 나가기 始作(시작)했지만、如前(여전)히 코드 品質(품질)에 있어선 改善(개선)部分(부분)이 아직 많다。

Hollo는 豫想外(예상외)日本(일본)에서 使用者層(사용자층)이 생겨서、公式(공식) 文書(문서)日本語(일본어)飜譯(번역)하거나、日本(일본)에서 開催(개최)오픈 소스 컨퍼런스 2024 Tokyo/Fall이라는 行事(행사)에 나가 부스를 차리기도 했다。이 때、現地(현지)의 Hollo 使用者(사용자)이신 Esurio 님께서 부스를 함께 지켜주셔서 무척 큰 도움을 받았다。

最近(최근)에는 개밥 먹기()해 내가 가지고 있던 Mastodon 計定(계정)을 버리고 Hollo로 移住(이주)했다。

韓國(한국) 聯合宇宙(연합우주) 開發者(개발자) 모임

어느날 문득 韓國(한국)에는 聯合宇宙(연합우주) 소프트웨어를 만드는 開發者(개발자)들의 交流(교류)가 없다는 생각이 들었다。그래서 Neovim() Mastodon 클라이언트를 만들기도 하셨던 李在烈(이재열) 님을 꼬셔서 함께 韓國(한국) 聯合宇宙(연합우주) 開發者(개발자) 모임(FediDev KR)을 發足(발족)하였다。먼저 Discord 서버를 마련하여 꽤 많은 開發者(개발자)분들이 모였다。

그리고 定期的(정기적)인 스프린트 모임을 企劃(기획)하여、그 첫 모임을 8() 31()returnzero 事務室(사무실)에서 開催(개최)하였는데、意外(의외)로 많은 사람들이 參加(참가)해 주셨다。이 때 만난 분들과는 如前(여전)聯合宇宙(연합우주)에서 交流(교류)하며 지내고 있다。

最近(최근)에는 年末(연말)이라 그런지 오프라인 交流(교류)가 뜸했는데、來年(내년)이 되면 또 다시 活潑(활발)活動(활동)再開(재개)豫定(예정)이다。

同人誌(동인지) 販賣(판매)

올 가을부터 日本語圈(일본어권) 聯合宇宙(연합우주)에서 活動(활동)本格的(본격적)으로 하기 始作(시작)했는데、그러면서 日本(일본)의 Hollo 使用者(사용자)들과 交流(교류)하게 되었다。그 ()에서 Esurio 님이 日本(일본)에서 開催(개최)하는 오픈 소스 컨퍼런스에 부스를 내 보는 게 어떻냐는 提議(제의)를 주셔서、苦悶(고민) 끝에 出展(출전(出展))하게 되었다。日本(일본) 行事(행사)出展(출전(出展))하는 것은 勿論(물론)이고 부스를 차리는 것 自體(자체)가 처음이어서 Esurio 님께 여러모로 도움을 받아야 했다。이 자리를 빌려 感謝(감사)하다는 말을 꼭 드리고 싶다。

아무튼、부스를 내기로 했으니 뭐라도 展示品(전시품)必要(필요)했는데、그 一環(일환)으로 Fedify의 튜토리얼인 「나만의 聯合宇宙(연합우주) 마이크로블로그 만들기」(Creating your own federated microblog)의 日本語板(일본어판)自分だけのフェディバースのマイクロブログを作ろう!을 종이 ()으로 印刷(인쇄)하여 팔기로 했다。多幸(다행)스럽게도 만들어 가져 간 ()大部分(대부분) 팔려서 돌아올 때는 꽤 가볍게 올 수 있었다。이 때 ()을 사 가신 분들 () 한 분인 모나코 廣告(광고)(モナコ広告) 님께서 튜토리얼을 따라해 본 過程(과정)FediLUG 勉強会라는 모임에서 「Fedify로 ActivityPub 서버를 만들어 봤다」(FedifyでActivityPubサーバを作ってみた)라는 題目(제목)으로 發表(발표)하시기도 했다。

()을 사 가지 않으신 분들과도、不足(부족)日本語(일본어)로나마 더듬더듬 交流(교류)할 수 있어서 좋았다。

專業(전업) 聯合宇宙(연합우주) 開發(개발)

어쩌다 보니 年初(연초)에는 ()豫想(예상)하지 못했던 方向(방향)으로 흘러、一種(일종)專業(전업) 聯合宇宙(연합우주) 開發者(개발자)가 된 狀況(상황)인데、來年(내년)에는 聯合宇宙(연합우주) 自體(자체)底邊(저변)을 넓히는 데에 애를 써 볼 豫定(예정)이다。그 一環(일환)으로、소프트웨어 엔지니어들을 ()한 ActivityPub 基盤(기반) 소셜 플랫폼을 만들어 보고 있는데、早晩間(조만간) 公開(공개)할 수 있도록 하겠다。


  1. 嚴密(엄밀)하게는 ()에 다녔던 職場(직장)에서도 오픈 소스 製品(제품)專業(전업)으로 만들긴 했지만、내가 始作(시작)한 프로젝트가 아니었다。↩︎