洪 民憙 (Hong Minhee)
@hongminhee@hackers.pub · 1004 following · 707 followers
Hi, I'm who's behind Fedify, Hollo, BotKit, and this website, Hackers' Pub! My main account is at
@hongminhee洪 民憙 (Hong Minhee)
.
Fedify, Hollo, BotKit, 그리고 보고 계신 이 사이트 Hackers' Pub을 만들고 있습니다. 제 메인 계정은:
@hongminhee洪 民憙 (Hong Minhee)
.
Fedify、Hollo、BotKit、そしてこのサイト、Hackers' Pubを作っています。私のメインアカウントは「
@hongminhee洪 民憙 (Hong Minhee)
」に。
Website
- hongminhee.org
GitHub
- @dahlia
Hollo
- @hongminhee@hollo.social
DEV
- @hongminhee
velog
- @hongminhee
Qiita
- @hongminhee
Zenn
- @hongminhee
Matrix
- @hongminhee:matrix.org
X
- @hongminhee
최근 부탁을 받아 PixiJS로 작은 미니 게임을 하나 만들었습니다. 만든 게임은 나이키의 조던 출시 이벤트 파티에서 쓰였습니다. 제가 만든 프로그램을 사람들이 사용하는 모습을 현장에서 직접 보니 신기하기도 하고 뿌듯하기도 했네요. 가끔 정형적인 앱에서 벗어나 자유분방한 프로그램을 만들고 싶었는데 그런 욕구를 해소할 수 있는 좋은 기회였습니다!
I'll be presenting @fedifyFedify: ActivityPub server framework at
@fosdem 2026! My talk Fedify: Building ActivityPub servers without the pain was accepted for the Social Web Devroom. See you in Brussels on January 31–February 1!
Loongson 칩 들어간 미니PC를 써보니 일반적인 컴퓨팅 경험은 나쁘지 않은데. 팬 소리가 너무 시끄럽다. 어떻게 좀 소음을 줄일 방법을 강구하지 않으면 못 써먹겠다.
Update: I just submitted a talk proposal to the Social Web Devroom at
@fosdem 2026—Fedify: Type-safe ActivityPub for TypeScript. Guess I'm flying to Brussels after all. 😅
It got accepted! See you all in Brussels. 🎉
洪 民憙 (Hong Minhee) shared the below article:
Claude Code가 모델이 하지도 않은 말을 했다고 하는 이유.
자손킴 @jasonkim@hackers.pub
Claude Code에서 첫 번째 요청을 입력하면 가장 먼저 다음과 같은 JSON을 API로 보낸다. 이 요청은 실제 작업에 앞서 대화 주제를 파악하고 제목을 생성하기 위한 보조 요청이다.
{
"model": "claude-haiku-4-5-20251001",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "Request Body의 구조를 분석하고 분류별로 묶어서 표현한다. ultrathink"
}
]
},
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "{"
}
]
}
],
"system": [
{
"type": "text",
"text": "You are Claude Code, Anthropic's official CLI for Claude."
},
{
"type": "text",
"text": "Analyze if this message indicates a new conversation topic. If it does, extract a 2-3 word title that captures the new topic. Format your response as a JSON object with two fields: 'isNewTopic' (boolean) and 'title' (string, or null if isNewTopic is false). Only include these fields, no other text. ONLY generate the JSON object, no other text (eg. no markdown)."
}
],
"tools": [],
"metadata": {
"user_id": "user-id"
},
"max_tokens": 32000,
"stream": true
}
시스템 프롬프트를 보면 이 요청이 신규 대화인지 판단하고, 신규 대화라면 2-3 단어의 제목을 추출하여 isNewTopic과 title 필드로 구성된 JSON만 반환하라고 지시하고 있다.
여기서 내 눈에 띈 것은 첫 번째 요청임에도 불구하고 마치 멀티턴 대화가 진행된 것처럼 messages의 마지막 role이 assistant라는 점이었다. 게다가 Claude가 { 한 글자만 응답한 것처럼 구성되어 있다.
이 요청에 대한 응답은 다음과 같다.
{
"id": "msg_id",
"type": "message",
"role": "assistant",
"model": "claude-haiku-4-5-20251001",
"content": [
{
"type": "text",
"text": "\n \"isNewTopic\": true,\n \"title\": \"Request Body Formatting\"\n}"
}
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 187,
"output_tokens": 26,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0
}
}
content.text를 보기좋게 정리해서 적으면 다음과 같다.
"isNewTopic": true,
"title": "Request Body Formatting"
}
완전한 JSON에서 맨 앞의 {가 빠진 형태다. 알고 보니 이것은 prefill 기법이라 불리는 것으로, 모델이 응답의 앞부분을 이미 출력한 것처럼 설정하여 이어지는 응답을 원하는 형식으로 유도하는 방법이다.
Claude Code는 이 기법을 활용해 모델이 JSON 형식으로 응답하도록 강제하고 있다. 단순히 "JSON으로 응답해줘"라고 요청하는 것보다 훨씬 확실한 방법이다. 모델 입장에서는 이미 {로 시작했으니 자연스럽게 JSON을 완성할 수밖에 없기 때문이다.
Prefill은 JSON 외에도 다양하게 활용할 수 있다. 예를 들어 ```python으로 시작하면 모델이 파이썬 코드 블록을 완성하게 되고, <analysis>로 시작하면 XML 형식의 응답을 유도할 수 있다.
Big change coming to BotKit: multi-bot support!

Currently, each BotKit instance can only run a single bot. We're redesigning the architecture to let you host multiple bots—both static and dynamically created—on a single instance.
The new API will look like this:
const instance = createInstance({ kv });
const greetBot = instance.createBot("greet", { ... });
const weatherBots = instance.createBot(async (ctx, id) => { ... });Check out the full design:
지금까지 경험한 Pop!_OS 24.04 (COSMIC DE)의 문제들을 나열해보자면,
- COSMIC 기본 앱들에서 nimf와 fcitx5로 한글 입력이 안됨. 중국어, 일본어 사용자들도 비슷한 문제 겪고 있는 듯.
- 잠금화면에서 자동으로 암호 입력란에 포커스가 잡히지 않음.
- 외장 헤드폰 연결하고 상단 트레이 메뉴에서 음량을 조절하면 헤드폰 연결이 끊기면서 기본 스피커로 연결됨.
- Wayland 문제 때문에 파이어폭스 PiP 창이 자동으로 맨 위에 고정되지 않음.
- Wayland 문제 때문에 COSMIC의 클립보드 내역 기록 프로그램 clipboard-manager를 앱 스토어에서 설치하면 작동하지 않고 소스에서 빌드해야 함. 그마저도 CopyQ보다 쓰기 불편함.
이외에도 디테일이 부족함이 느껴졌음. 정식 출시되었으나 여전히 안정화가 필요한 것 같음.
앞으로 리눅스 사용기는 여기다가 올릴게요
@markeb54맹꽁이
어쩌다 커서, 윈드서프 대신에 오리지널 VS Code + 코파일럿을 쓰고 있는데, AI의 UX 통합이랑 측면에선 이쪽이 더 낫네? 윈드서프는 채팅 UI 벗어나면 잡버그때문에 못쓸 수준이다.
리액트의 dumb component는 이름과달리 약간은 더 똑똑할 필요가 있는데. dumb component는 업데이트를 반드시 부모를 통해서만 해야한다. 이때 fine-grained reactivity로 성능을 높이려면 (딱히 별 하는 일도 없는) wrapper가 필요하다. 그리고 데이터 페칭과 관련될 경우 또 wrapper를 반드시 만들어 줘야한다.
이걸 어떻게 해결할수 있나? dumb component가 Props로 raw value가 아닌 signal을 받게하는 것이다. 아쉽게도 현재 JS에 표준 Signal 인터페이스가 없기에 jotai atom 등을 써야하는데, 그러면 컴포넌트가 프레임워크에 의존하게 되어 덜 dumb해지는 문제가 있다.
서버 운영자라면 꼭 들어야할 개인정보보호 교육 안내
해를 넘기기 전에 들어서 수료증 꼭 받아두세요.
(2025년 기준)
-
개인정보배움터 (개인정보보호위원회) 가입: https://edu.privacy.go.kr/
-
"사업자 온라인교육" 클릭
-
"AI 투명성 확보 및 개인정보보호 가이드" 강의 청취 후 수료증 발급
-
서버 이용 가이드 등 별도 문서에 수료증 링크해두기
불특정 다수를 상대로 서비스 하고 계시고, 주 서비스 지역 및 이용자가 한국인 경우 꼭 들어두세요.
primes :: (Integral a) => [a]
primes = 2 : ([3, 5 ..] & filter (not . has_divisor))
where
has_divisor n =
any ((0 ==) . (n `mod`) . fst) $ takeWhile ((n >=) . snd) primes_with_square
primes_with_square :: (Integral a) => [(a, a)]
primes_with_square = [(p, p * p) | p <- primes]
euler project 문제 풀다가..
New on the blog: Delightfully Simple Shell Pipelines with nushell.
https://ianwwagner.com/delightfully-simple-pipelines-with-nushell.html
New post: a real-world look at how Fedify uses LogTape for logging.
Covers hierarchical categories, implicit contexts for request tracing, and why “silent by default” matters for library authors.
https://hackers.pub/@hongminhee/2025/logtape-fedify-case-study
ライブラリ作者のみなさん、ロギングどうしてますか?winston? Pino? debug? どれもしっくりこなくて、結局自分で作りました。
오늘의 불근신 개그.
I couldn't find a logging library that worked for my library, so I made one https://lobste.rs/s/ouph7k #javascript
https://hackers.pub/@hongminhee/2025/logtape-fedify-case-study
https://github.com/yamadashy/repomix/releases/tag/v1.10.0
Repomix가 소스코드를 압축해서 LLM 친화적인 텍스트를 뽑아주는 CLI도구인데, 이제 그걸 넘어서 Claude Code Skill도 뽑아주는 기능이 추가되었다 .....
이거 solid 같은 청개구리 스택 전용으로도 괜찮아보이지 않을까(?)
https://github.com/yamadashy/repomix/releases/tag/v1.10.0
Repomix가 소스코드를 압축해서 LLM 친화적인 텍스트를 뽑아주는 CLI도구인데, 이제 그걸 넘어서 Claude Code Skill도 뽑아주는 기능이 추가되었다 .....
어라 뭔가 단문에도 임시 저장 기능이 있네 (원래 있었나)
오라클 쿠버네티스 노드가 무작위로 10분~1시간 뒤에 죽는 문제 -> 원인은 cloud agent가 실행한 dnf가 혼자서 모든 메모리를 먹고 죽는것 -> 노드 램 4기가는 부족하다
어라 뭔가 단문에도 임시 저장 기능이 있네 (원래 있었나)
https://nextjs.org/blog/security-update-2025-12-11
Next.js의 추가 보안 업데이트가 있습니다.
지난주에 CVE-2025-66478 보안취약점때문에 부랴부랴 패키지 업데이트한 기억이 있는데, 이번에도 몇개 패치되었네요.
Next.js를 App Router 방식으로 쓰는 개발자분들은 잊지 말고 업데이트하셔요.
fix-react2shell-next 패키지로 검사 및 업데이트 가능합니다.
❯ npx fix-react2shell-next
fix-react2shell-next - Next.js vulnerability scanner
Checking for 4 known vulnerabilities:
- CVE-2025-66478 (critical): Remote code execution via crafted RSC payload
- CVE-2025-55184 (high): DoS via malicious HTTP request causing server to hang and consume CPU
- CVE-2025-55183 (medium): Compiled Server Action source code can be exposed via malicious request
- CVE-2025-67779 (high): Incomplete fix for CVE-2025-55184 DoS via malicious RSC payload causing infinite loop
...
당했다... 오라클 클라우드 기본 클러스터 제한 1개다... 당황스럽다... 오늘은 작업하기 글렀군...
よろず Advent Calendar 2025 11日目の記事を書きました。ここ数年、勉強しようと思っていたハングルを調べて、まとめてみた記事です。
Deno 2.6 is here:
🛠️ `dx` is the new `npx`
⚡ faster typechecking with tsgo
🔒 improved security with `deno audit --socket`
🦺 safer deps with `deno approve-scripts`
🚘 source phase import support
and more!
사이드킥 모니터링 시스템을 만들었는데 이거 테스트 어떻게하지 역시 괜히 계정 만들고 탈퇴하기 뿐인가...??
드디어 배송 완료 후 기동.
지난주 금요일에 Next.js의 보안취약점 cvss 10 (필수패치해야하는) 소식이 나와서 바로 패치대응했다. (App router 방식을 쓰면 무적권 패치해야 한다) 그리고 이번주에는 Cloudflare DNS를 쓰는 곳에 모두 Zero Trust를 도입했고 이제야(?) 마음이 편해졌다.
덧) 허용된 IP 만 By Pass 하거나, 사내 도메인 메일 인증 정책을 추가했다.
https://github.com/anthropics/claude-code/issues/7490#issuecomment-3625781216
오! 클로드 코드 항상 쉘을 bash만 스폰하고 그랬는데 해결방법이 생겼다.
alias claude 'SHELL=/opt/homebrew/bin/zsh command claude'
근데 원래 이 접근법도 안되었던것 같은데... 되네?
그거 아시나요 극장에서 이어폰 착용은 모나딕하다는 사실
Out of the following operating systems, which one do you use the most, not at work, but in your free personal time?
Please consider boosting for a larger sample size. Thank you.
식탁보 1.14.0에서 오랫만에 업데이트를 진행하면서, 생성형 AI의 도움을 받아 적극적인 현대화를 달성하고 있습니다.
-
InnoSetup 대신 Velopack을 사용한 간소화된 사용자 인스톨러 경험 구현
-
MSBUILD 프로젝트 대신 .NET SDK로 .NET Framework 프로젝트 마이그레이션 (추후 완전히 .NET 10과 Avalonia로도 전환할 수 있게 함)
-
TableCloth 프로젝트의 경우 .NET 8/9에서 .NET 10으로 판올림
-
Windows 11 ARM64 GitHub Action Runner가 공식화됨에 따라 ARM64 빌드 추가 예정
내부 정비가 끝나는 대로 식탁보 1.15.0 버전을 출시하도록 하겠습니다. 또한 생성형 AI 코드 어시스턴트의 도움을 적극 받아 1인 개발에서 오는 한계를 극복해보려 합니다.
최신 소스 커밋 목록은 https://github.com/yourtablecloth/TableCloth/commits/main/ 에서 확인하실 수 있습니다.
올해도 Advent of Code는 글렀다
'를 기본으로 사용하면 문장 중간중간에 들어가는 '를 항상 이스케이핑 해줘야되기 때문에 " 를 기본으로 하는게 좋다는 주장에... 승복하고 말았음
페라이트 자석이 도착했으니까 연휴간 메모리를 짜볼 예정
Why don't recommend to implement ActivityPub from scratch
https://amase.cc/articles/en/why-dont-recommend-implement-activitypub/
Optique 0.8.0: Conditional parsing, pass-through options, and LogTape integration https://lobste.rs/s/wh35st #javascript
https://hackers.pub/@hongminhee/2025/optique-080
Vercel 제품들은 딱 봐도 설계가 너무 구리게 느껴지는데, 그렇다고 깊게 생각해보진 않고 또 쨋든 사람들이 젤 많이 쓰긴하니까, 내 느낌이 잘못된건지 헷갈린다.
https://github.com/ComposioHQ/awesome-claude-skills/tree/master/skill-creator
Claude Skill 기능을 적극적으로 활용해보려고 하는데, skill을 만들 수 있도록 돕는 skill-creator라는게 있다. 이걸 좀 더 참고해서 어떻게 나한테 쓸만한걸 만들 수 있는지 한번 살펴봐야겠다.
Hackers Pub 송년회 라이트닝토크에서 발표 안하려고 했는데? 뭔가 소소하게 공유할꺼리가 생겼다. 그리고.......... Hackers Pub에서 LLM 활용하는 방법 굉장히 과한 밀도로 공유하게 될 것 같다.... 당장 내가 일하는 회사도 LLM을 엄청 적극적으로 활용하고 있기도 하고, 그걸로 사업하는 회사여서 더욱 가속도가 붙는 것도 있는 듯.
CLIパーサーの新しい記事を書きました。--reporterの値によって--output-fileが必須になったり禁止になったり…そういう関係、型で表現できたら楽じゃないですか?
린터 규칙을 새로 작성할 때 마다 꽤 곤란한데 뭔가 좋은 방법이 없을까
최적화 작업이 무사히 끝났다. 꽤 만족스러운 시간들이였음
The Sass if() syntax is deprecated in favor of the modern CSS syntax.
https://sass-lang.com/documentation/breaking-changes/if-function/










いっかく 
