염산하
@[email protected] · Reply to Woojin Kim's post
@me 마음의 소리... ^^;
@[email protected] · 20 following · 15 followers
A software engineer in Seoul, and a father of a kid.
@[email protected] · Reply to Woojin Kim's post
@me 마음의 소리... ^^;
@[email protected] · Reply to 염산하's post
첫 장 제목이랑 이사간 동네 이름부터 뒤집어 진다 ㅋ 이거 진짜 있는 동네인지 매우 궁금
@[email protected] · Reply to Woojin Kim's post
@me ㅠ.ㅠ
🌺🎗️나만의 GPTs 앱으로 생산성 10배 늘리기. https://www.aladin.co.kr/m/mproduct.aspx?ItemId=340835183
GPTs 만드는 예를 보려고 빠르게 훑어 봤다.
유비의 위선을 지적하면서 동탁을 옹호할 수 있나
@[email protected] · Reply to Woojin Kim's post
@me 어? 그러고보니 이런 https://news.hada.io/topic?id=18817 것이 있었어요. Gemini AI로 업데이트하는 위키? 아 근데 이건 완전히 새로운 글을 창작하는 것은 아니군요.
@[email protected] · Reply to Fedify: ActivityPub server framework's post
#Fedify 자매 프로젝트들을 소개해 드리고자 합니다. #ActivityPub 애플리케이션 개발을 더 쉽게 만들어주는 관련 도구들입니다:

Fedify(@fedify)는 ActivityPub와 다른 #연합우주(#fediverse) 표준을 기반으로 연합 서버 애플리케이션을 구축하기 위한 #TypeScript 라이브러리입니다. Activity Vocabulary를 위한 타입 안전한 객체, WebFinger 클라이언트·서버, HTTP Signatures 등를 제공하여 반복적인 코드를 줄이고 애플리케이션 로직에 집중할 수 있게 해줍니다.

Hollo(@hollo)는 Fedify로 구동되는 1인 사용자용 마이크로블로깅 서버입니다. 1인 사용자를 위해 설계되었지만, ActivityPub를 통해 완전히 연합되어 연합우주 전체의 사용자들과 상호작용할 수 있습니다. Hollo는 Mastodon 호환 API를 구현하여 자체 웹 인터페이스 없이도 대부분의 Mastodon 클라이언트와 호환됩니다.
Hollo는 또한 정식 출시 전에 최신 Fedify 기능을 테스트하는 실험장으로도 활용되고 있습니다.

BotKit(@botkit)은 저희의 가장 새로운 구성원으로, ActivityPub 봇을 만들기 위해 특별히 설계된 프레임워크입니다. 전통적인 Mastodon 봇과 달리, BotKit은 플랫폼별 제한(글자 수 제한 등)에 구애받지 않는 독립적인 ActivityPub 서버를 만듭니다.
BotKit의 API는 의도적으로 단순하게 설계되어 단일 TypeScript 파일로 완전한 봇을 만들 수 있습니다!
세 프로젝트 모두 @fedify-dev GitHub 조직에서 오픈 소스로 공개되어 있습니다. 각기 다른 목적을 가지고 있지만, ActivityPub 개발을 더 접근하기 쉽게 만들고 연합우주 생태계를 확장한다는 공통된 목표를 공유합니다.
이러한 프로젝트를 사용해보거나 개발에 기여하는 데 관심이 있으시다면, 다음을 확인해보세요:
이번 주 xsfm 그것은 알기 싫다 이상평론 이상부동산평론을 들으니... 처벌받지 않는 부동산 사기꾼들이 사회지도층입네 하고, 시민들의 부동산 소유욕, 피해의식을 자극하며 나라를 좀 먹는 악순환의 고리를 유지하고 있다는 사실이 다시한번 되새겨진다. 자기들은 뒤에 숨고. 기소를 결정하는 권력과 프레임 씌우기를 이용하며. 합법도 아닌데 처벌 받지 않으며 몇 대가 부유하게 살고 자기들만의 사회를 꾸린다.
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
@hongminhee @rangho_220 오... 마스토톤 계정에선 mastodon-archive 사용해서 백업 목적으로 하루에 한 번씩 포스트, 북마크, 부스트를 JSON과 HTML 로 저장하고 있는데요, 이런 걸 대체하는 것도 가능할까요?
@[email protected] · Reply to Woojin Kim's post
@me 업무에선 거의 자빅스+그라파나쓰고, 프로메테우스는 설치가 간편해서 몇년전에 잠깐 망분리 환경에 설치해본 적 있는 수준이긴 한데... 단순하게만 볼거면 그라파나까진 필요 없다고 저도 느끼긴 했습니다. 프로메테우스도 간단한 자체 시각화는 가지고 있긴 하니까요. 자빅스는 말할 것도 없고요. 근데 그라파나 시각화 기능이 좋긴 좋더라고요. ㅎㅎ 왠지 프로메테우스 없이 그라파나로 바로 땡겨서 저장하고 보여주기까지 하는 설정도 가능하지 않을까 싶긴 해요.
모델명이나 일련번호도 Model Number나 Serial Number라고 쓰니까 영어의 Number도 꼭 숫자가 아닐 수 있을지도 모른다는 생각이 들긴 하지만 (미국은 자동차 번호 중간에 알파벳이 들어가기도 하고)
@[email protected] · Reply to Woojin Kim's post
@me 헛... 어떻게 잘 조치되었는지...

X(구 Twitter)나 Instagram 같은 중앙화된 소셜 미디어에 지치셨나요? 데이터 프라이버시, 알고리즘 추천, 그리고 끊임없는 광고가 걱정되시나요? 여기 대안이 있습니다. 바로 연합우주(fediverse)입니다.
페디버스(fediverse)는 “federated”(연합된)와 “universe”(우주)를 합친 말로, 한국어권에서는 주로 “연합우주”라고 불립니다. 연합우주는 하나의 거대한 플랫폼이 아닌, 서로 대화할 수 있는 독립적인 서버(인스턴스)들의 네트워크입니다.
이게 어떻게 가능할까요? 바로 ActivityPub이라는 프로토콜 덕분입니다. 이 프로토콜은 서로 다른 소셜 미디어 플랫폼이 정보를 교환할 수 있게 해주는 공통 언어 같은 것입니다.
연합우주를 이해하는 가장 쉬운 방법은 이메일 시스템과 비교하는 것입니다.
Gmail 사용자가 네이버 메일 사용자에게 이메일을 보낼 수 있는 것처럼, Mastodon 사용자는 Misskey나 PeerTube 사용자와 소통할 수 있습니다. (Mastodon, Misskey, PeerTube가 무엇인지는 아래에서 설명하겠습니다. Gmail과 네이버처럼 서로 다른 서비스라고 보시면 됩니다.) 이것이 가능한 이유는 이 서비스들이 모두 같은 언어인 ActivityPub 프로토콜로 대화하기 때문입니다.
연합우주에서 사용자 ID는 @사용자명@인스턴스.도메인 형식으로 되어 있습니다. 이메일 주소와 매우 비슷하죠? 예를 들면:
@[email protected]: mastodon.social 인스턴스 사용자@[email protected]: pixelfed.social 인스턴스 사용자@[email protected]: 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 (한국 중심) |
커뮤니티(서브레딧과 유사), 투표, 토론 |
연합우주를 이해할 때 흔히 혼동되는 개념이 있습니다. 바로 플랫폼(소프트웨어)과 인스턴스(서버)의 차이인데요.
플랫폼은 Mastodon, Misskey, Pixelfed와 같은 소프트웨어 자체를 의미합니다. 이들은 오픈 소스 소프트웨어로, 누구나 다운로드받아 설치할 수 있습니다.
인스턴스는 그 소프트웨어를 실행하는 개별 서버를 말합니다. mastodon.social과 우리.인생은 모두 Mastodon 플랫폼을 실행하는 별도의 인스턴스입니다.
Meta의 Threads 같은 일부 서비스는 플랫폼과 인스턴스가 동일합니다. 하지만 대부분의 연합우주 서비스는 여러 인스턴스로 구성되어 있습니다.
연합우주가 갖는 몇 가지 매력적인 특징이 있습니다:
연합우주에 참여하는 것은 생각보다 쉽습니다:
한국 사용자라면 Mastodon 인스턴스인 우리.인생, Misskey 인스턴스인 스텔라 같은 한국어 중심 인스턴스를 추천합니다. 한국어 환경을 지원하고 한국 사용자들이 활발하게 활동하고 있어 시작하기 좋습니다.
아니면 이 글이 올라온 Hackers' Pub도 괜찮습니다. 소프트웨어 엔지니어들을 위한 소셜 미디어랍니다. 아직 개발중이라 공개적으로 가입을 받고 있지는 않습니다만, 홍민희에게 연락 주시면 계정을 생성해 드릴 수 있습니다.
이제 개발자 관점에서 ActivityPub이 어떻게 작동하는지 자세히 살펴보겠습니다.
ActivityPub은 W3C에서 권장하는 표준 프로토콜로, 분산 소셜 네트워킹의 기반이 됩니다. ActivityStreams 2.0 데이터 형식을 기반으로 하며, 서로 다른 서버 간에 정보를 교환하는 방법을 정의합니다.
ActivityPub은 몇 가지 핵심 개념으로 구성됩니다:
홍길동(@[email protected])이 게시물을 작성하고, 이영희(@[email protected])가 이에 반응하는 과정을 살펴봅시다:
게시물 작성:
홍길동이 Mastodon에서 게시물을 작성합니다. Mastodon 서버는 이 게시물을 ActivityStreams 2.0 형식의 Create(Note) 액티비티로 변환합니다. 이 액티비티는 홍길동의 팔로워(이영희 포함)에게 전달됩니다.
게시물 수신: 이영희의 Misskey 서버는 이 액티비티를 받고 처리하여 이영희의 타임라인에 홍길동의 게시물을 표시합니다.
상호작용:
이영희가 게시물에 좋아요를 누르면, Misskey 서버는 Like(Note) 액티비티를 생성하여 홍길동의 Mastodon 서버로 보냅니다. 홍길동은 이영희가 자신의 게시물을 좋아했다는 알림을 받게 됩니다.
마치 다른 언어를 사용하는 사람들이 통역사를 통해 대화하는 것과 비슷하죠? ActivityPub이 바로 그 통역사 역할을 합니다.
개발자로서 실제 ActivityPub 메시지가 어떻게 생겼는지 궁금하실 텐데요. 몇 가지 예시를 살펴봅시다:
{
"@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이 포함되어 있죠.
{
"@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) 액티비티입니다. 게시물 내용, 해시태그, 공개 범위 등이 포함되어 있습니다.
{
"@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 서버를 구현하고 싶다면 다음 단계를 따라야 합니다:
Create, Follow, Like 등)을 처리하는 로직을 구현합니다.개발을 시작하기 전에 Mastodon, Misskey 같은 기존 구현체의 코드를 살펴보는 것이 도움이 됩니다. 처음부터 모든 것을 구현하는 것보다 Fedify 같은 프레임워크를 활용하는 것도 좋은 방법입니다.
연합우주에서 @[email protected] 같은 사용자 ID를 어떻게 실제 ActivityPub 액터 URL로 변환할까요? 그 비밀은 WebFinger 프로토콜에 있습니다:
GET https://misskey.io/.well-known/webfinger?resource=acct:[email protected]
이 요청을 보내면 서버는 다음과 같은 응답을 반환합니다:
{
"subject": "acct:[email protected]",
"links": [
{
"rel": "self",
"type": "application/activity+json",
"href": "https://misskey.io/users/leeyeonghui"
}
]
}
이제 https://misskey.io/users/leeyeonghui URL을 통해 사용자의 전체 프로필 정보를 얻을 수 있습니다. 마치 전화번호부에서 이름으로 전화번호를 찾는 것과 비슷하죠!
연합우주는 계속 성장하고 있지만, 몇 가지 도전 과제도 있습니다:
그러나 Threads와 같은 주요 서비스들이 ActivityPub을 채택하기 시작하면서, 연합우주의 미래는 밝아 보입니다. 개발자로서, 이런 성장하는 생태계에 참여할 수 있는 기회가 많이 있습니다.
연합우주와 ActivityPub은 중앙화된 소셜 미디어의 대안으로서 점점 더 주목받고 있습니다. 사용자에게 더 많은 통제권을 부여하고, 다양하고 풍부한 온라인 경험을 제공하는 연합우주의 세계는 계속해서 확장되고 있습니다.
개발자로서, 여러분은 이 새로운 탈중앙화된 웹의 생태계에 기여할 수 있습니다. 기존 애플리케이션에 ActivityPub 지원을 추가하거나, 완전히 새로운 서비스를 만들거나, 현재의 도전 과제를 해결하는 솔루션을 개발할 수 있습니다.
한국 개발자들의 참여가 늘어나면 한국 사용자들을 위한 더 다양하고 풍부한 서비스가 생길 것이고, 이는 더 건강하고 다양한 인터넷 문화를 만드는 데 기여할 것입니다.
그럼, 연합우주로의 여행을 시작해 보시는 건 어떨까요?
“미키가 화력발전소 컨베이어벨트에서 목숨을 잃은 청년이나 구의역 스크린도어를 수리하다 사고를 당한 청년과 다른 존재라고 생각하지 않아요. 불행한 산재 사고가 나도 현실에서 같은 일은 유지되고 인간이 계속 교체될 뿐이죠.”
봉준호 “미키, 화력발전소·구의역에서 숨진 청년과 다르...
You can now switch to vertical tabs from your tabs context menu
Sometimes people think #curl is a simple little HTTP tool, while in reality there's a whole internet transfer machine in there supporting 28 protocols.
@[email protected] · Reply to 염산하's post
@hollo 검색해보니 auto 라고 넣으면 된다고 해서, 그렇게 설정해보니 잘 동작하고 있습니다.
@[email protected] · Reply to Hollo :hollo:'s post
@hollo railway에서 사용중인데, 지금 redeploy 를 해보니 S3_REGION 이 필수라는 오류 메시지가 나면서 배포에 실패하고 있습니다. 이전까지는 괜찮았고요. cloudflare R2를 사용 중이라서인지... S3_REGION 환경변수 없이 처음부터 사용하고 있었던 것으로 기억합니다. 도커 이미지는 latest 로 되어 있습니다. 현재 사용중인 도커 이미지 버전을 보는 방법을 몰라서 현재 동작중인 이미지 버전이 무엇인지는 모르겠지만, 1월 28일에 redeploy 했으니 1월 21일에 릴리스된 0.4.4 일 것 같습니다.
@[email protected] · Reply to Woojin Kim's post
@me swappiness 가 높군요?
유용해 보이는 레딧 게시 https://www.reddit.com/r/ObsidianMD/s/dSs3C91zKa
Give it any YouTube playlist(entire courses for instance) and receive a clean, formatted and structured file with all the details of that playlist.
It's a simple yet effective script using the free Google Gemini API.
I haven't found any free tool available with this scale, so I made one.
Check it out : https://github.com/Ebrizzzz/Youtube-playlist-to-formatted-text
Update :
Added Language Support, now the output file is in the language of user's input.(might not be as good as English, test it yourself!)
Added single video URL support, no need to put it in a playlist.
"독립선언 약 250년 후, 미국에는 새 왕이 등장했다. 왕의 이름은 일론 머스크." https://www.theverge.com/elon-musk/609164/auto-draft
미국에서 머스크와 부하들이 수많은 미국 정부 기관을 초법적으로 장악하고 있는 현 사태의 심각성을 정리한 기사.
@[email protected] · Reply to Woojin Kim's post
@me 그러게요 다들 큰글자 터미널만 쓰거나 윈/맥만 쓰거나 하는건지...
@[email protected] · Reply to Woojin Kim's post
@me 저도 올해 갑자기 노안이 와서 애플워치 글씨가 안보입니다 ㅠㅠ
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
@hongminhee @arnelson
One feature I like about Zen browser is its ability to override all keyboard shortcuts, including Firefox's built-in ones.
@[email protected] · Reply to Woojin Kim's post
@me @arpesia_lubia 한국어 사용자 입장에서 입력기 부분은 macOS도 버전업 될때마다 조금씩 이상한 부분들이 생겼다가 마이너 업글에서 해결되는 일이 반복되는 수준이고... 리눅스를 메인으로 쓰는데 제일 걸림돌이 한국어 입력기라서 윈도우가 진짜 대단하다 싶긴 합니다.
어제 만든 Yoyak을 GeekNews에도 올려 보았습니다!
@[email protected] · Reply to Woojin Kim's post
@me 불가능한 조건을 걸면 협상이 안되잖아요 ㅋㅋㅋ