@hongminhee洪 民憙 (Hong Minhee) this would be a lovely thing to see a blog post about, as I don't think many projects in the fediverse have implemented such a thing.

洪 民憙 (Hong Minhee)
@hongminhee@hackers.pub · 626 following · 411 followers
Hi, I'm who's behind Fedify, Hollo, BotKit, and this website, Hackers' Pub!
Fedify, Hollo, BotKit, 그리고 보고 계신 이 사이트 Hackers' Pub을 만들고 있습니다.
Website
- hongminhee.org
GitHub
- @dahlia
Hollo
- @hongminhee@hollo.social
DEV
- @hongminhee
velog
- @hongminhee
Qiita
- @hongminhee
Zenn
- @hongminhee
Matrix
- @hongminhee:matrix.org
X
- @hongminhee
@liaizonwakest ⁂ Okay, I compose a blog post about this: Hackers' Pub Introduces Flexible Username Changes: Breaking the Fediverse Norm!
Hackers' Pub Introduces Flexible Username Changes: Breaking the Fediverse Norm

洪 民憙 (Hong Minhee) @hongminhee@hackers.pub
Hackers' Pub, an ActivityPub-enabled social network, introduces a unique feature allowing users a one-time username change, a departure from the typical fediverse practice of permanent usernames. This policy acknowledges the evolving nature of personal identity, offering flexibility while maintaining network stability. When a username is changed, it becomes available for others, creating opportunities for new users to acquire desirable names. To prevent broken links, permalinks containing the original username will function until the username is claimed by someone else. This is made possible by using UUID-based actor URIs that don't include the username, unlike platforms like Mastodon where the username is embedded in the URI. Inspired by GitHub's username policy, Hackers' Pub aims to balance identity evolution with the benefits of federation. This approach allows users to correct initial username choices, evolve their online identity, and maintain their content history and social connections. This policy represents an experiment in fediverse identity management, testing whether flexibility can coexist with the stability required for federation, potentially influencing other platforms to adopt similar approaches.
Read more →눈에 띄는 업데이트는 아니지만, 아이디를 바꿨을 때 예전 아이디로 된 링크들이 유지되게 했다. (GitHub과 비슷한 동작.)
@hongminhee洪 民憙 (Hong Minhee) wait can you explain this?! Can you now change your username and it doesn't kill all the old links to your posts?
@hongminhee洪 民憙 (Hong Minhee) wait can you explain this?! Can you now change your username and it doesn't kill all the old links to your posts?
@liaizonwakest ⁂ Yes, exactly!
- You have a only chance to change your username.
- If you change your username, your old username becomes available for others.
- If you change your username, every old permalink with your old username will remain until someone takes your old username.
Hello, hackers pub!
【輪読会やってみます!】
#FediLUG 輪読会📖第零弾として #fedify の開発者である
Hong Minhee (洪 民憙) @hongminhee洪 民憙 (Hong Minhee) さんの著書『自分だけのフェディバースのマイクロブログを作ろう!』の輪読会を行います!
この機会に #Fedify を使用して皆さんで #ActivityPub や #TypeScript などの知識を強化しませんか?
本はGitHubから無料で読むことができます:
https://github.com/dahlia/fedify-microblog-tutorial-ja
参加:
https://fedilug.connpass.com/event/348240/
Fedify는 새로운 후원 파트너를 찾고 있습니다!
Fedify란?
Fedify는 #ActivityPub 기반 연합형 서버 프레임워크로, 개발자들이 분산형 소셜 네트워크인 #연합우주(#fediverse)에 애플리케이션을 쉽게 통합할 수 있도록 돕습니다. 복잡한 ActivityPub 프로토콜 구현을 단순화하여 개발 시간을 크게 단축시킵니다. MIT 라이선스 하에 제공되는 오픈 소스 프로젝트입니다.
💼 Fedify를 활용하는 프로젝트들
다양한 프로젝트들이 이미 Fedify를 활용하고 있습니다:
- Ghost: 수백만 사용자를 보유한 전문적인 오픈 소스(MIT 라이선스) 퍼블리싱 플랫폼으로, Fedify의 주요 후원사이자 파트너입니다.
- Hollo: 개인 사용자를 위한 경량 마이크로블로그 (오픈 소스, AGPL-3.0)
- Hackers' Pub: 소프트웨어 엔지니어를 위한 연합우주 블로그 플랫폼 (오픈 소스, AGPL-3.0)
- Encyclia: ORCID 학술 기록을 ActivityPub을 통해 제공하는 브리지 서비스
🚀 Fedify가 제공하는 가치
- 개발 시간 80% 단축: ActivityPub의 복잡한 구현 대신 검증된 프레임워크 활용
- 즉각적인 연합우주 호환성: Mastodon, Misskey, Pleroma, Pixelfed, PeerTube 등 다양한 연합우주 서비스와 즉시 호환
- 전문 기술 지원: ActivityPub 및 연합 프로토콜 전문가의 직접 지원
- 맞춤형 개발: 귀사의 특정 요구사항에 맞는 맞춤형 기능 개발
🤝 가능한 협력 모델
- 맞춤형 컨설팅 및 통합 지원: 귀사 플랫폼에 #Fedify 통합을 위한 전문적 지원
- 맞춤형 기능 개발 의뢰: 귀사에 필요한 특정 기능의 개발 및 구현
- 장기적인 기술 파트너십: 지속적인 개발 및 유지보수를 위한 장기 협력 관계
🌟 Fedify와 협력했을 때의 이점
- 기술적 이점: 자체 구현 대비 시간과 리소스 절약
- 브랜드 이미지: 오픈 소스 생태계 지원을 통한 기업 이미지 강화
- 분산형 소셜 네트워크 진입: 연합우주 생태계에 쉽게 참여
- 경쟁 우위: 소셜 기능을 통한 제품 경쟁력 강화
📩 관심이 있으신가요?
ActivityPub 구현을 고려 중이시거나, Fedify 프로젝트와 협력하고 싶으시다면 연락 주세요:
- 이메일: sponsor@fedify.dev
- 연합우주:
@fedifyFedify: an ActivityPub server framework
- GitHub: https://github.com/fedify-dev/fedify
귀사의 요구사항과 목표에 맞는 맞춤형 협력 방안을 함께 모색하겠습니다.
Fedifyは新しいパートナーシップの機会を探しています!
Fedifyとは?
Fedifyは、ActivityPubベースのフェデレーションサーバーフレームワークで、開発者が分散型ソーシャルネットワークである#フェディバース(#fediverse)にアプリケーションを簡単に統合できるよう支援します。複雑なActivityPubプロトコルの実装を簡素化し、開発時間を大幅に短縮します。MITライセンスの下で提供されるオープンソースプロジェクトです。
💼 Fedifyを活用しているプロジェクト
すでに様々なプロジェクトがFedifyを活用しています:
- Ghost:数百万人のユーザーを持つプロフェッショナルな出版プラットフォーム(MITライセンスのオープンソース)で、Fedifyの主要スポンサー兼パートナーです。
- Hollo:個人ユーザー向けの軽量マイクロブログ(オープンソース、AGPL-3.0)
- Hackers' Pub:ソフトウェアエンジニア向けのフェディバースブログプラットフォーム(オープンソース、AGPL-3.0)
- Encyclia:ORCID学術記録をActivityPubを通じて提供するブリッジサービス
🚀 Fedifyが提供する価値
- 開発時間80%削減:複雑なActivityPub実装の代わりに実証済みフレームワークを活用
- 即時Fediverse互換性:Mastodon、Misskey、Pleroma、Pixelfed、PeerTubeなど様々なFediverseサービスとすぐに互換
- 専門技術サポート:ActivityPubおよびフェデレーションプロトコルの専門家による直接サポート
- カスタム開発:お客様の特定要件に合わせた機能開発
🤝 可能な協力モデル
- カスタムコンサルティングと統合サポート:お客様のプラットフォームへのFedify統合のための専門的支援
- カスタム機能開発:お客様のプラットフォームに必要な特定機能の開発と実装
- 長期的な技術パートナーシップ:継続的な開発とメンテナンスのための長期協力関係
🌟 Fedifyとの協力によるメリット
- 技術的優位性:自社開発と比較して時間とリソースの節約
- ブランドイメージ:オープンソースエコシステムへの支援を通じた企業イメージの向上
- 分散型ソーシャルネットワークへの参入:フェディバースエコシステムへの容易な参加
- 競争優位性:ソーシャル機能による製品競争力の強化
📩 興味をお持ちですか?
ActivityPubの実装をご検討中の方や、Fedifyプロジェクトとの協力にご興味のある方は、ぜひご連絡ください:
- メール:sponsor@fedify.dev
- フェディバース:
@fedifyFedify: an ActivityPub server framework
- GitHub:https://github.com/fedify-dev/fedify
お客様の要件と目標に合わせたカスタマイズされた協力の可能性を一緒に探りましょう。
Fedify is looking for new partnership opportunities!
What is Fedify?
#Fedify is an #ActivityPub-based federated server framework that helps developers easily integrate their applications with the #fediverse, a decentralized social network. It simplifies the complex implementation of the ActivityPub protocol, significantly reducing development time. Fedify is an open-source project available under the MIT license.
💼 Projects using Fedify
Various projects are already leveraging Fedify:
- Ghost: A professional publishing platform with millions of users, open source under MIT license, and a major sponsor and partner of Fedify.
- Hollo: A lightweight microblogging platform for individual users (open source, AGPL-3.0)
- Hackers' Pub: A fediverse blogging platform for software engineers (open source, AGPL-3.0)
- Encyclia: A bridge service that makes ORCID academic records available via ActivityPub
🚀 Value provided by Fedify
- 80% development time reduction: Utilize a proven framework instead of complex ActivityPub implementation
- Immediate fediverse compatibility: Instant compatibility with various fediverse services including Mastodon, Misskey, Pleroma, Pixelfed, PeerTube, etc.
- Expert technical support: Direct support from ActivityPub and Federation protocol experts
- Custom development: Tailored feature development to meet your specific requirements
🤝 Potential collaboration models
- Custom consulting and integration support: Professional assistance for integrating Fedify into your platform
- Custom feature development: Development and implementation of specific features needed for your platform
- Long-term technical partnership: Long-term collaboration for continuous development and maintenance
🌟 Benefits of collaborating with Fedify
- Technical advantage: Save time and resources compared to in-house implementation
- Brand image: Enhance corporate image through support of the open-source ecosystem
- Entry to decentralized social networks: Easily participate in the fediverse ecosystem
- Competitive edge: Strengthen product competitiveness through social features
📩 Interested?
If you're considering implementing ActivityPub or wish to collaborate with the Fedify project, please get in touch:
- Email: sponsor@fedify.dev
- Fediverse:
@fedifyFedify: an ActivityPub server framework
- GitHub: https://github.com/fedify-dev/fedify
We're excited to explore customized collaboration opportunities that align with your requirements and goals.
Fedify는 새로운 후원 파트너를 찾고 있습니다!
Fedify란?
Fedify는 #ActivityPub 기반 연합형 서버 프레임워크로, 개발자들이 분산형 소셜 네트워크인 #연합우주(#fediverse)에 애플리케이션을 쉽게 통합할 수 있도록 돕습니다. 복잡한 ActivityPub 프로토콜 구현을 단순화하여 개발 시간을 크게 단축시킵니다. MIT 라이선스 하에 제공되는 오픈 소스 프로젝트입니다.
💼 Fedify를 활용하는 프로젝트들
다양한 프로젝트들이 이미 Fedify를 활용하고 있습니다:
- Ghost: 수백만 사용자를 보유한 전문적인 오픈 소스(MIT 라이선스) 퍼블리싱 플랫폼으로, Fedify의 주요 후원사이자 파트너입니다.
- Hollo: 개인 사용자를 위한 경량 마이크로블로그 (오픈 소스, AGPL-3.0)
- Hackers' Pub: 소프트웨어 엔지니어를 위한 연합우주 블로그 플랫폼 (오픈 소스, AGPL-3.0)
- Encyclia: ORCID 학술 기록을 ActivityPub을 통해 제공하는 브리지 서비스
🚀 Fedify가 제공하는 가치
- 개발 시간 80% 단축: ActivityPub의 복잡한 구현 대신 검증된 프레임워크 활용
- 즉각적인 연합우주 호환성: Mastodon, Misskey, Pleroma, Pixelfed, PeerTube 등 다양한 연합우주 서비스와 즉시 호환
- 전문 기술 지원: ActivityPub 및 연합 프로토콜 전문가의 직접 지원
- 맞춤형 개발: 귀사의 특정 요구사항에 맞는 맞춤형 기능 개발
🤝 가능한 협력 모델
- 맞춤형 컨설팅 및 통합 지원: 귀사 플랫폼에 #Fedify 통합을 위한 전문적 지원
- 맞춤형 기능 개발 의뢰: 귀사에 필요한 특정 기능의 개발 및 구현
- 장기적인 기술 파트너십: 지속적인 개발 및 유지보수를 위한 장기 협력 관계
🌟 Fedify와 협력했을 때의 이점
- 기술적 이점: 자체 구현 대비 시간과 리소스 절약
- 브랜드 이미지: 오픈 소스 생태계 지원을 통한 기업 이미지 강화
- 분산형 소셜 네트워크 진입: 연합우주 생태계에 쉽게 참여
- 경쟁 우위: 소셜 기능을 통한 제품 경쟁력 강화
📩 관심이 있으신가요?
ActivityPub 구현을 고려 중이시거나, Fedify 프로젝트와 협력하고 싶으시다면 연락 주세요:
- 이메일: sponsor@fedify.dev
- 연합우주:
@fedifyFedify: an ActivityPub server framework
- GitHub: https://github.com/fedify-dev/fedify
귀사의 요구사항과 목표에 맞는 맞춤형 협력 방안을 함께 모색하겠습니다.
Fedify is looking for new partnership opportunities!
What is Fedify?
#Fedify is an #ActivityPub-based federated server framework that helps developers easily integrate their applications with the #fediverse, a decentralized social network. It simplifies the complex implementation of the ActivityPub protocol, significantly reducing development time. Fedify is an open-source project available under the MIT license.
💼 Projects using Fedify
Various projects are already leveraging Fedify:
- Ghost: A professional publishing platform with millions of users, open source under MIT license, and a major sponsor and partner of Fedify.
- Hollo: A lightweight microblogging platform for individual users (open source, AGPL-3.0)
- Hackers' Pub: A fediverse blogging platform for software engineers (open source, AGPL-3.0)
- Encyclia: A bridge service that makes ORCID academic records available via ActivityPub
🚀 Value provided by Fedify
- 80% development time reduction: Utilize a proven framework instead of complex ActivityPub implementation
- Immediate fediverse compatibility: Instant compatibility with various fediverse services including Mastodon, Misskey, Pleroma, Pixelfed, PeerTube, etc.
- Expert technical support: Direct support from ActivityPub and Federation protocol experts
- Custom development: Tailored feature development to meet your specific requirements
🤝 Potential collaboration models
- Custom consulting and integration support: Professional assistance for integrating Fedify into your platform
- Custom feature development: Development and implementation of specific features needed for your platform
- Long-term technical partnership: Long-term collaboration for continuous development and maintenance
🌟 Benefits of collaborating with Fedify
- Technical advantage: Save time and resources compared to in-house implementation
- Brand image: Enhance corporate image through support of the open-source ecosystem
- Entry to decentralized social networks: Easily participate in the fediverse ecosystem
- Competitive edge: Strengthen product competitiveness through social features
📩 Interested?
If you're considering implementing ActivityPub or wish to collaborate with the Fedify project, please get in touch:
- Email: sponsor@fedify.dev
- Fediverse:
@fedifyFedify: an ActivityPub server framework
- GitHub: https://github.com/fedify-dev/fedify
We're excited to explore customized collaboration opportunities that align with your requirements and goals.
반갑습니다!!
LogTape 0.9.0 Released: Synchronous Configuration and Better Runtime Compatibility

洪 民憙 (Hong Minhee) @hongminhee@hackers.pub
LogTape 0.9.0 introduces enhancements focused on flexibility and ease of configuration across diverse JavaScript environments. A key addition is the synchronous configuration API, providing `configureSync()`, `disposeSync()`, and `resetSync()` functions for simpler setup in scenarios where async operations are unnecessary. This version also improves runtime compatibility by moving file-system dependent components to a separate `@logtape/file` package, ensuring the core `@logtape/logtape` package works seamlessly across various JavaScript runtimes, including browsers and edge functions. Console sink enhancements include the `ConsoleSinkOptions.levelMap` option for customizing log levels. If you're using file sinks, you'll need to update your imports and install the new `@logtape/file` package. These updates reflect the project's commitment to providing a flexible and developer-friendly logging solution for JavaScript and TypeScript applications, with ongoing improvements to performance and compatibility.
Read more →I talked about #ActivityPub and #Fedify on @guuJeremy's wonderful podcast, Software Sessions. I'm embarrassed by my poor English, but if you're interested, please listen!
그리고 어제 이미지 첨부 구현하면서 만든 리그레션 버그 하나도 고쳤다. (아무 이미지도 첨부 안하고 게시하면 오류가 나고 있었음.)
별 거 아니지만, 로그인 안 한 상태에서 댓글 다는 방법을 안내하도록 해봤다.
눈에 띄는 업데이트는 아니지만, 아이디를 바꿨을 때 예전 아이디로 된 링크들이 유지되게 했다. (GitHub과 비슷한 동작.)
그리고 어제 이미지 첨부 구현하면서 만든 리그레션 버그 하나도 고쳤다. (아무 이미지도 첨부 안하고 게시하면 오류가 나고 있었음.)
이미지 첨부 만들었다!
눈에 띄는 업데이트는 아니지만, 아이디를 바꿨을 때 예전 아이디로 된 링크들이 유지되게 했다. (GitHub과 비슷한 동작.)
揭示物에 이미지 添附하는 機能 만들고 있는데, 亦是 웹 프런트엔드 너무 어렵다…
이미지 첨부 만들었다!
이미지 업로드 테스트…
이미지 업로드 만들기에 앞서, 오브젝트 스토리지 聯動이 잘 되는가 確認하기 爲해 먼저 프로필 寫眞 업로드 機能부터 만들었다.
揭示物에 이미지 添附하는 機能 만들고 있는데, 亦是 웹 프런트엔드 너무 어렵다…
Hollo 만들 때 썼던 FlyDrive를 Hackers' Pub에서도 써야겠다.
이미지 업로드 만들기에 앞서, 오브젝트 스토리지 聯動이 잘 되는가 確認하기 爲해 먼저 프로필 寫眞 업로드 機能부터 만들었다.
이제 정말로 이미지 업로드를 만들어야 하는데, 오브젝트 스토리지 세팅하기가 귀찮다…
Hollo 만들 때 썼던 FlyDrive를 Hackers' Pub에서도 써야겠다.
하는 김에 相對 時間으로 보이게 하고 實時間으로 更新되게 만들었다. Fresh의 아일랜드 아키텍처, 나 같은 프런트엔드 初心者가 쓰기에 좋은 듯?
이제 정말로 이미지 업로드를 만들어야 하는데, 오브젝트 스토리지 세팅하기가 귀찮다…
음, 이제 이미지 업로드를 만들어야 한다…
아, 그런데 서버 타임존이 UTC라 올린 시각도 UTC로 보이네… 이것부터 고쳐야겠다.
오, 잘 보인다!
음, 이제 이미지 업로드를 만들어야 한다…
연합우주(fediverse)와 ActivityPub 프로토콜 이해하기: 개발자를 위한 가이드

洪 民憙 (Hong Minhee) @hongminhee@hackers.pub
연합우주란 무엇일까?
X(구 Twitter)나 Instagram 같은 중앙화된 소셜 미디어에 지치셨나요? 데이터 프라이버시, 알고리즘 추천, 그리고 끊임없는 광고가 걱정되시나요? 여기 대안이 있습니다. 바로 연합우주(fediverse)입니다.
페디버스(fediverse)는 “federated”(연합된)와 “universe”(우주)를 합친 말로, 한국어권에서는 주로 “연합우주”라고 불립니다. 연합우주는 하나의 거대한 플랫폼이 아닌, 서로 대화할 수 있는 독립적인 서버(인스턴스)들의 네트워크입니다.
이게 어떻게 가능할까요? 바로 ActivityPub이라는 프로토콜 덕분입니다. 이 프로토콜은 서로 다른 소셜 미디어 플랫폼이 정보를 교환할 수 있게 해주는 공통 언어 같은 것입니다.
연합우주는 어떻게 작동하나요?
연합우주를 이해하는 가장 쉬운 방법은 이메일 시스템과 비교하는 것입니다.
Gmail 사용자가 네이버 메일 사용자에게 이메일을 보낼 수 있는 것처럼, Mastodon 사용자는 Misskey나 PeerTube 사용자와 소통할 수 있습니다. (Mastodon, Misskey, PeerTube가 무엇인지는 아래에서 설명하겠습니다. Gmail과 네이버처럼 서로 다른 서비스라고 보시면 됩니다.) 이것이 가능한 이유는 이 서비스들이 모두 같은 언어인 ActivityPub 프로토콜로 대화하기 때문입니다.
연합우주에서 사용자 ID는 @사용자명@인스턴스.도메인
형식으로 되어 있습니다. 이메일 주소와 매우 비슷하죠? 예를 들면:
@honggildong@mastodon.social
: mastodon.social 인스턴스 사용자@kimcheolsu@pixelfed.social
: pixelfed.social 인스턴스 사용자@leeyeonghui@misskey.io
: misskey.io 인스턴스 사용자
연합우주의 다양한 플랫폼 둘러보기
연합우주는 마치 여러 행성으로 이루어진 태양계 같습니다. 각 행성(플랫폼)은 고유한 특성을 가지고 있지만, 모두 같은 우주(연합우주)에 속해 있죠. 아래 표에서 주요 플랫폼들을 살펴봅시다:
플랫폼 | 설명 | 주요 인스턴스 | 특징 |
---|---|---|---|
Mastodon | X(구 Twitter)와 유사한 마이크로블로깅 플랫폼 | • mastodon.social (공식 인스턴스) • 우리.인생 (한국 중심) |
500자 제한의 짧은 게시물, 해시태그, 컨텐츠 경고 기능 |
Misskey | 일본에서 개발된 고도로 커스터마이징 가능한 마이크로블로깅 플랫폼 | • misskey.io (가장 인기 있는 일본 인스턴스) • 스텔라 (한국 중심) |
리액션, 게임, 채팅 등 다양한 기능, 높은 커스터마이징 가능성 |
Pixelfed | Instagram과 유사한 이미지 공유 플랫폼 | • pixelfed.social (공식 인스턴스) • 추억:사진 (한국 중심) |
스토리, 필터, 발견 기능 |
PeerTube | YouTube와 유사한 비디오 호스팅 플랫폼 | • PeerTube.TV | P2P 기술로 비디오 스트리밍, 채널, 재생목록 |
WriteFreely | 미니멀한 블로그 플랫폼 | • write.as | Markdown 지원, 심플한 디자인 |
Lemmy | Reddit과 유사한 링크 애그리게이터 및 토론 플랫폼 | • lemmy.ml • YuruLemmy (한국 중심) |
커뮤니티(서브레딧과 유사), 투표, 토론 |
플랫폼 vs 인스턴스: 무슨 차이가 있을까?
연합우주를 이해할 때 흔히 혼동되는 개념이 있습니다. 바로 플랫폼(소프트웨어)과 인스턴스(서버)의 차이인데요.
플랫폼은 Mastodon, Misskey, Pixelfed와 같은 소프트웨어 자체를 의미합니다. 이들은 오픈 소스 소프트웨어로, 누구나 다운로드받아 설치할 수 있습니다.
인스턴스는 그 소프트웨어를 실행하는 개별 서버를 말합니다. mastodon.social과 우리.인생은 모두 Mastodon 플랫폼을 실행하는 별도의 인스턴스입니다.
Meta의 Threads 같은 일부 서비스는 플랫폼과 인스턴스가 동일합니다. 하지만 대부분의 연합우주 서비스는 여러 인스턴스로 구성되어 있습니다.
연합우주의 매력 포인트
연합우주가 갖는 몇 가지 매력적인 특징이 있습니다:
- 탈중앙화: 특정 기업이 모든 데이터와 규칙을 통제하지 않습니다. 각 인스턴스는 자체 규칙을 가질 수 있습니다.
- 데이터 주권: 자신의 데이터에 대한 더 많은 통제권을 가질 수 있습니다.
- 검열 저항성: 한 인스턴스가 차단되더라도 다른 인스턴스로 쉽게 이동할 수 있습니다.
- 커뮤니티 중심: 각 인스턴스는 특정 관심사나 지역 커뮤니티를 중심으로 형성됩니다.
- 다양성: 다양한 플랫폼과 인스턴스가 존재하여 선택의 폭이 넓습니다.
연합우주 시작하기
연합우주에 참여하는 것은 생각보다 쉽습니다:
- 자신의 관심사나 지역과 관련된 인스턴스를 선택합니다.
- 해당 인스턴스에 계정을 만듭니다.
- 다른 인스턴스의 사용자들을 팔로우하고 소통을 시작합니다!
한국 사용자라면 Mastodon 인스턴스인 우리.인생, Misskey 인스턴스인 스텔라 같은 한국어 중심 인스턴스를 추천합니다. 한국어 환경을 지원하고 한국 사용자들이 활발하게 활동하고 있어 시작하기 좋습니다.
아니면 이 글이 올라온 Hackers' Pub도 괜찮습니다. 소프트웨어 엔지니어들을 위한 소셜 미디어랍니다. 아직 개발중이라 공개적으로 가입을 받고 있지는 않습니다만, 홍민희에게 연락 주시면 계정을 생성해 드릴 수 있습니다.
ActivityPub: 연합우주의 심장
이제 개발자 관점에서 ActivityPub이 어떻게 작동하는지 자세히 살펴보겠습니다.
ActivityPub은 W3C에서 권장하는 표준 프로토콜로, 분산 소셜 네트워킹의 기반이 됩니다. ActivityStreams 2.0 데이터 형식을 기반으로 하며, 서로 다른 서버 간에 정보를 교환하는 방법을 정의합니다.
ActivityPub의 핵심 개념
ActivityPub은 몇 가지 핵심 개념으로 구성됩니다:
- 액터(actor): 사용자, 그룹 등 행동을 수행할 수 있는 주체입니다. 각 액터는 고유한 URL을 가지며, 수신함(inbox)과 발신함(outbox)을 가집니다.
- 액티비티(activity): 액터가 수행하는 행동으로, 게시물 작성, 댓글 좋아요, 다른 사용자 팔로우 등이 있습니다.
- 객체(object): 텍스트 게시물, 이미지, 비디오와 같이 생성되고 공유되는 콘텐츠입니다.
실제 작동 방식
홍길동(@honggildong@mastodon.social
)이 게시물을 작성하고, 이영희(@leeyeonghui@misskey.io
)가 이에 반응하는 과정을 살펴봅시다:
-
게시물 작성: 홍길동이 Mastodon에서 게시물을 작성합니다. Mastodon 서버는 이 게시물을 ActivityStreams 2.0 형식의
Create(Note)
액티비티로 변환합니다. 이 액티비티는 홍길동의 팔로워(이영희 포함)에게 전달됩니다. -
게시물 수신: 이영희의 Misskey 서버는 이 액티비티를 받고 처리하여 이영희의 타임라인에 홍길동의 게시물을 표시합니다.
-
상호작용: 이영희가 게시물에 좋아요를 누르면, Misskey 서버는
Like(Note)
액티비티를 생성하여 홍길동의 Mastodon 서버로 보냅니다. 홍길동은 이영희가 자신의 게시물을 좋아했다는 알림을 받게 됩니다.
마치 다른 언어를 사용하는 사람들이 통역사를 통해 대화하는 것과 비슷하죠? ActivityPub이 바로 그 통역사 역할을 합니다.
ActivityPub의 실제 메시지 들여다보기
개발자로서 실제 ActivityPub 메시지가 어떻게 생겼는지 궁금하실 텐데요. 몇 가지 예시를 살펴봅시다:
1. 사용자 프로필(액터) 정보
{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/security/v1"
],
"id": "https://mastodon.social/users/honggildong",
"type": "Person",
"preferredUsername": "honggildong",
"name": "홍길동",
"summary": "연합우주의 개척자",
"inbox": "https://mastodon.social/users/honggildong/inbox",
"outbox": "https://mastodon.social/users/honggildong/outbox",
"followers": "https://mastodon.social/users/honggildong/followers",
"following": "https://mastodon.social/users/honggildong/following",
"publicKey": {
"id": "https://mastodon.social/users/honggildong#main-key",
"owner": "https://mastodon.social/users/honggildong",
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----"
},
"icon": {
"type": "Image",
"mediaType": "image/jpeg",
"url": "https://mastodon.social/system/accounts/avatars/000/000/001/original/avatar.jpg"
}
}
이 JSON 데이터는 홍길동의 프로필 정보를 담고 있습니다. 사용자 이름, 소개, 프로필 사진 URL, 그리고 중요한 inbox
와 outbox
URL이 포함되어 있죠.
2. 게시물 작성 액티비티
{
"@context": "https://www.w3.org/ns/activitystreams",
"id": "https://mastodon.social/users/honggildong/statuses/123456/activity",
"type": "Create",
"actor": "https://mastodon.social/users/honggildong",
"published": "2025-02-21T14:30:00Z",
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"cc": [
"https://mastodon.social/users/honggildong/followers"
],
"object": {
"id": "https://mastodon.social/users/honggildong/statuses/123456",
"type": "Note",
"content": "<p>연합우주에 오신 것을 환영합니다! #fediverse #연합우주</p>",
"published": "2025-02-21T14:30:00Z",
"attributedTo": "https://mastodon.social/users/honggildong",
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"cc": [
"https://mastodon.social/users/honggildong/followers"
],
"tag": [
{
"type": "Hashtag",
"href": "https://mastodon.social/tags/fediverse",
"name": "#fediverse"
},
{
"type": "Hashtag",
"href": "https://mastodon.social/tags/연합우주",
"name": "#연합우주"
}
]
}
}
이것은 홍길동이 게시물을 작성했을 때 생성되는 Create(Note)
액티비티입니다. 게시물 내용, 해시태그, 공개 범위 등이 포함되어 있습니다.
3. 팔로우 액티비티
{
"@context": "https://www.w3.org/ns/activitystreams",
"id": "https://misskey.io/users/leeyeonghui/follow/1234",
"type": "Follow",
"actor": "https://misskey.io/users/leeyeonghui",
"object": "https://mastodon.social/users/honggildong"
}
이영희가 홍길동을 팔로우할 때 생성되는 Follow
액티비티입니다. 단순하죠?
ActivityPub 서버 구현하기: 개발자를 위한 팁
직접 ActivityPub 서버를 구현하고 싶다면 다음 단계를 따라야 합니다:
- 액터 구현: 사용자 프로필 정보를 ActivityStreams 형식으로 제공합니다.
- 수신함과 발신함 설정: HTTP 엔드포인트를 만들어 액티비티를 받고 전송합니다.
- 서명 및 인증: HTTP Signatures를 사용하여 요청을 서명하고 검증합니다.
- 액티비티 처리: 다양한 액티비티 유형(
Create
,Follow
,Like
등)을 처리하는 로직을 구현합니다. - 데이터 저장: 사용자, 게시물, 액티비티 등의 정보를 데이터베이스에 저장합니다.
- 연합 정책 구현: 어떤 인스턴스와 연합할지, 어떤 컨텐츠를 허용할지 등을 설정합니다.
개발을 시작하기 전에 Mastodon, Misskey 같은 기존 구현체의 코드를 살펴보는 것이 도움이 됩니다. 처음부터 모든 것을 구현하는 것보다 Fedify 같은 프레임워크를 활용하는 것도 좋은 방법입니다.
WebFinger: 사용자를 찾는 방법
연합우주에서 @leeyeonghui@misskey.io
같은 사용자 ID를 어떻게 실제 ActivityPub 액터 URL로 변환할까요? 그 비밀은 WebFinger 프로토콜에 있습니다:
GET https://misskey.io/.well-known/webfinger?resource=acct:leeyeonghui@misskey.io
이 요청을 보내면 서버는 다음과 같은 응답을 반환합니다:
{
"subject": "acct:leeyeonghui@misskey.io",
"links": [
{
"rel": "self",
"type": "application/activity+json",
"href": "https://misskey.io/users/leeyeonghui"
}
]
}
이제 https://misskey.io/users/leeyeonghui
URL을 통해 사용자의 전체 프로필 정보를 얻을 수 있습니다. 마치 전화번호부에서 이름으로 전화번호를 찾는 것과 비슷하죠!
연합우주의 도전 과제와 미래
연합우주는 계속 성장하고 있지만, 몇 가지 도전 과제도 있습니다:
- 확장성: 수많은 서버 간의 통신을 효율적으로 처리하는 것은 쉽지 않습니다.
- 모더레이션: 각 인스턴스가 자체 규칙을 가지므로 콘텐츠 조정에 일관성이 부족할 수 있습니다.
- 발견성: 중앙화된 플랫폼에 비해 새로운 사용자나 콘텐츠를 찾기 어려울 수 있습니다.
- 사용자 경험: 일부 플랫폼은 아직 UI/UX 측면에서 개선이 필요합니다.
그러나 Threads와 같은 주요 서비스들이 ActivityPub을 채택하기 시작하면서, 연합우주의 미래는 밝아 보입니다. 개발자로서, 이런 성장하는 생태계에 참여할 수 있는 기회가 많이 있습니다.
마무리
연합우주와 ActivityPub은 중앙화된 소셜 미디어의 대안으로서 점점 더 주목받고 있습니다. 사용자에게 더 많은 통제권을 부여하고, 다양하고 풍부한 온라인 경험을 제공하는 연합우주의 세계는 계속해서 확장되고 있습니다.
개발자로서, 여러분은 이 새로운 탈중앙화된 웹의 생태계에 기여할 수 있습니다. 기존 애플리케이션에 ActivityPub 지원을 추가하거나, 완전히 새로운 서비스를 만들거나, 현재의 도전 과제를 해결하는 솔루션을 개발할 수 있습니다.
한국 개발자들의 참여가 늘어나면 한국 사용자들을 위한 더 다양하고 풍부한 서비스가 생길 것이고, 이는 더 건강하고 다양한 인터넷 문화를 만드는 데 기여할 것입니다.
그럼, 연합우주로의 여행을 시작해 보시는 건 어떨까요?
Hackers' Pub에 쓸 첫 글로 소프트웨어 엔지니어를 위한 연합우주(fediverse)와 ActivityPub 소개를 써보는 중.
Hackers' Pub currently supports three languages: English, Japanese, and Korean. Do you speak any other language? Please contribute!
Random fact: hollo.social (this instance; where @fedifyFedify: an ActivityPub server framework,
@holloHollo
,
@botkitBotKit by Fedify
, and this account belong to) and Hackers' Pub are served on a Mac mini (M4) in my home.
Features implemented in Hackers' Pub so far: following, unfollowing, posting short-form updates, publishing long-form articles, article drafts, article editing, replies, and sharing (i.e., boosts). While there's still much more to implement, I've managed to put together the essential core functionality!
Curious about what Hackers' Pub is? Visit https://hackers.pub/ to check it out.
Note that for now, sign-ups are only possible with allowlisted email addresses. (Following a Hackers' Pub account from other fediverse accounts works just fine.) If you'd like to try it out, please send me your email address via DM.
Features implemented in Hackers' Pub so far: following, unfollowing, posting short-form updates, publishing long-form articles, article drafts, article editing, replies, and sharing (i.e., boosts). While there's still much more to implement, I've managed to put together the essential core functionality!
Haven't talked about LogTape in a while—it's a #logging library I made for #JavaScript and #TypeScript. You know how logging can be a pain point in JavaScript/TypeScript development? Well, I tried to address some common frustrations.
What makes it special
Zero dependencies
We've all been there with dependency hell, right? #LogTape has absolutely no external dependencies. Install it without worrying about bloating your node_modules.
Hierarchical categories
You can organize your logs in a tree structure. Want to save only database-related logs to a file? Easy to do. Child categories can inherit settings from their parents too, which keeps things clean and manageable.
Library-friendly
Writing a library and want to include logs without stepping on your users' toes? LogTape lets you add logging to your library while giving end users complete control over how those logs are handled.
Structured logging
Plain text logs not cutting it? LogTape supports structured logging. Makes log analysis way easier down the road.
Runs anywhere
Works smoothly in Node.js, Deno, Bun, browsers, and even edge functions. No special configuration needed.
Check out https://logtape.org/ if you're interested in learning more.
@hongminhee洪 民憙 (Hong Minhee) メンション機能テスト!
Hackers' Pubに公開範囲を実装しました。Mastodonと同様に、公開・ひかえめな公開・フォロワーのみ・言及されたユーザーのみ、この4段階の公開範囲が可能です。
今日は投稿の公開範囲から早く実装しなきゃ。
어떻게든 배포하고 hackers.pub 도메인도 연결! ActivityPub 연동도 일단은 잘 되는 듯?
hackers.pubのドメインを付けて、最初のアカウントを作った。ActivityPubの連携も出来る!