무색
기술블로그
에세이
연구
소개

무색

소프트웨어로 비즈니스의 가능성을 만듭니다. 웹·앱 개발, 음성 AI, 자동화 콘텐츠 제작까지 — 기술이 필요한 곳에 무색이 있습니다.

연락처

contact@museck.com

사업자 정보

상호: 무색

대표: 배성재

사업자등록번호: 577-58-00836

인천광역시 연수구 인천타워대로 323, 에이동 8층 801-802호 AB-132 (송도동, 송도 센트로드)

© 2026 무색. All rights reserved.
개인정보처리방침·이용약관·연락처
INCHEON, KR

기술 블로그

글 91개

전체홈랩 삽질기museck 만들기논문 번역기자막 파이프라인이미지 생성GPU 위젯Claude 스킬
에이전트 팀크로스커팅n8n 자동화편LLM 서버 운영기애드센스 블로그 네트워크검색 트렌드 분석스킬 공장
네이버+구글 트렌드 통합 라이브러리 — sumi-e 키 비주얼
검색 트렌드 분석

네이버 + 구글 트렌드를 하나로 묶는 Python 라이브러리를 만들었다

한국 시장의 검색 트렌드를 분석하려면 네이버와 구글을 동시에 봐야 한다. 두 소스의 시계열을 정렬하고, 상관분석하고, 괴리를 감지하는 Python 라이브러리를 처음부터 만든 과정.

2026. 3. 4.
workspace-skill → agent-forge 리팩토링 — stipple 키 비주얼
스킬 공장

workspace-skill에서 agent-forge로: 180개 파일 리네이밍의 기록

workspace-skill이라는 이름이 더 이상 맞지 않았다. 스킬 17개, 에이전트, 브랜드 전용 스킬을 포함한 저장소를 agent-forge로 리네이밍하면서 디렉토리 3계층화, 스킬 통합, 명명 규칙 소급 적용까지 수행한 대규모 마이그레이션.

2026. 3. 3.
스킬 생태계 확장 — sumi-e 키 비주얼
스킬 공장

스킬 4개에서 17개로: 패키지 관리자가 없는 세계에서 살아남기

스킬 4개일 때는 관리가 필요 없었다. 17개가 되면서 install-registry, 브랜드 그룹 분리, 에이전트-스킬 명명 규칙 등 소프트웨어 패키지 관리와 닮은 체계를 구축해야 했다.

2026. 3. 2.
스킬 버전 관리 시스템 — sumi-e 키 비주얼
스킬 공장

AI 에이전트의 프롬프트를 코드처럼 관리하기: skill-version-manager 설계

AI 에이전트의 프롬프트도 소프트웨어다. 스킬이 10개를 넘어가면서 버전 관리, 설치 경로 추적, 릴리스 워크플로우가 필요해졌다. git과 디렉토리 규칙만으로 가벼운 시스템을 설계한 과정.

2026. 3. 1.
CI/CD K8s 배포 복제 — bauhaus 키 비주얼
애드센스 블로그 네트워크

기존 프로젝트의 CI/CD를 새 프로젝트에 복제하기: Gitea Actions + ArgoCD

museck의 CI/CD 파이프라인을 새 프로젝트에 복제한 과정. Dockerfile 재활용, Gitea Actions 워크플로, ArgoCD auto-sync까지 10분이면 끝나는 GitOps 패턴.

2026. 2. 28.
멀티테넌트 SEO 전략 — bauhaus 키 비주얼
애드센스 블로그 네트워크

멀티테넌트 블로그의 SEO 전략: 동적 sitemap, JSON-LD, canonical URL

하나의 Next.js 앱에서 여러 서브도메인의 SEO를 관리하는 방법. 테넌트별 동적 sitemap, robots.txt, JSON-LD 구조화 데이터, canonical URL 구현기.

2026. 2. 27.
멀티테넌트 PayloadCMS 아키텍처 — stipple 키 비주얼
애드센스 블로그 네트워크

단일 Next.js + PayloadCMS로 멀티 서브도메인 블로그 운영하기

PayloadCMS multi-tenant 플러그인으로 단일 인스턴스에서 여러 서브도메인 블로그를 운영하는 아키텍처를 구축한 기록. middleware 테넌트 해석부터 SiteConfigs 컬렉션 설계까지.

2026. 2. 26.
법적 페이지, AdSense, About/Contact — bauhaus 키 비주얼
museck 만들기

AdSense 거부에서 배운 것: 법적 페이지, Sitemap ISR, 사이트 완성도

AdSense "저가치 콘텐츠" 거부를 받았다. 진짜 원인은 콘텐츠가 아니라 sitemap이 5개 URL만 반환하고 있었던 것. 법적 페이지 추가, sitemap ISR 적용, About/Contact 페이지까지 — 사이트 완성도를 높인 기록.

2026. 2. 25.
Umami + Next.js Rewrites 프록시 — bauhaus 키 비주얼
museck 만들기

Umami + Next.js Rewrites: 프라이버시 웹 분석 프록시 구축기

Google Analytics 없이 웹 트래픽을 분석하고 싶었다. 셀프호스팅 Umami를 연동하다 Chrome의 Private Network Access 차단에 부딪혔고, Next.js rewrites로 프록시하는 방법으로 해결했다.

2026. 2. 24.
Next.js 16 ISR generateStaticParams 필수 — generative 키 비주얼
museck 만들기

Next.js 16 ISR 미스터리: generateStaticParams가 없으면 ISR도 없다

revalidate = 60을 설정했는데 왜 모든 페이지가 fully dynamic일까? Google Search Console 색인 경고에서 시작된 디버깅이 Next.js 16 canary의 문서화되지 않은 ISR 조건을 밝혀냈다.

2026. 2. 23.
Mermaid, FAQ, OG, Favicon, CDN — sumi-e 키 비주얼
museck 만들기

기술 블로그 품질 강화: Mermaid 다이어그램, FAQ 스키마, OG 이미지, Favicon, CDN 캐시

Mermaid 다이어그램 렌더링, FAQ 구조화 데이터, OG 이미지 치수, Favicon, Cloudflare CDN 캐시까지. 하나씩은 작은 개선이지만 모이면 기술 블로그의 품질이 확 달라진다.

2026. 2. 22.
Next.js 16 ISR 지뢰밭 — isometric 키 비주얼
museck 만들기

Next.js 16 ISR 지뢰밭: searchParams, loading.tsx, health route 세 가지 함정

Next.js 16 canary에서 ISR 페이지를 배포하다 발견한 세 가지 문서에 없는 함정. searchParams와 revalidate 충돌, 리다이렉트 라우트의 loading.tsx 문제, NextResponse.json 호환성 이슈를 정리했다.

2026. 2. 20.
콘텐츠 타입 분리 /blog → 3개 — generative 키 비주얼
museck 만들기

콘텐츠 타입 분리: /blog 하나를 세 개로 쪼갠 대수술

/blog 하나에 섞여 있던 콘텐츠를 /tech-blog, /essay, /research로 분리하면서 파일 29개를 수정한 대수술 기록. 공통 컴포넌트 추출, warm-cache, 대규모 작업 흐름.

2026. 2. 19.
Next.js 16 캐싱 삽질 오디세이 — isometric 키 비주얼
museck 만들기

Next.js 16 캐싱 삽질 오디세이: 하루에 12커밋, 세 번의 전략 전환

Cache Components → useCache → ISR. Next.js 16의 새 캐싱 메커니즘을 세 번 시도하고 두 번 실패한 뒤, 결국 ISR로 돌아온 하루 12커밋 삽질기.

2026. 2. 18.
Next.js 셀프호스팅 강화 — generative 키 비주얼
museck 만들기

Next.js 셀프호스팅 강화: tini, Build ID, Version Skew 방지까지

K8s 롤링 업데이트 중 Version Skew, PID 1 시그널 누락, public/ 미포함 같은 Next.js 셀프호스팅의 실전 함정들과 해결책을 정리했다.

2026. 2. 17.
Next.js 16 + Tailwind v4 + React Compiler — sumi-e 키 비주얼
museck 만들기

Next.js 16 + Tailwind v4 + React Compiler 메가 업그레이드: 한 번에 세 개 올리기

PayloadCMS 3.77이 요구하는 Next.js 16 업그레이드에 맞춰 Tailwind v4 CSS-first 전환, React Compiler 활성화까지 하루 만에 동시 진행한 실전 기록.

2026. 2. 16.
Next.js SEO: robots.ts ~ JSON-LD — bauhaus 키 비주얼
museck 만들기

Next.js App Router SEO 구현: robots.ts부터 JSON-LD까지 하루 만에

SEO 제로 상태에서 robots.ts, 동적 sitemap, generateMetadata, JSON-LD까지 하루 만에 구현한 과정. Next.js 메타데이터 API의 실전 활용기.

2026. 2. 15.
블로그 시리즈 시스템 구축 — isometric 키 비주얼
museck 만들기

블로그 시리즈 시스템 구축: PayloadCMS 컬렉션 설계부터 탭 필터링 UI까지

PayloadCMS에 Series 컬렉션을 추가하고, relationship 필드로 포스트와 연결하고, 탭 필터링 UI로 시리즈별 콘텐츠 탐색을 구현한 과정.

2026. 2. 14.
병렬 용어 추출과 stream-json 파싱 — stipple 키 비주얼
논문 번역기

번역 파이프라인 병렬화: asyncio.gather()와 Claude Code stream-json 파싱 수정

순차 실행되던 용어 추출과 레이아웃 분석을 asyncio.gather()로 병렬화하고, Claude Code headless 모드의 stream-json 파싱 깨짐을 수정한 과정.

2026. 2. 13.
ASR 서버 프로덕션 하드닝 — pencil-sketch 키 비주얼
자막 파이프라인

ASR 서버 프로덕션 하드닝: 하루 동안 쌓인 8개 개선

2026. 2. 12.
JupyterLab 터미널 GPU Worker — isometric 키 비주얼
자막 파이프라인

JupyterLab 터미널로 GPU Worker 관리하기: 삽질의 기록

2026. 2. 11.
Claude Code 헤드리스 JSON→stream-json — generative 키 비주얼
자막 파이프라인

Claude Code 헤드리스 모드: JSON 스키마에서 stream-json으로 갈아탄 이유

2026. 2. 10.
Qwen3.5 양자화 NVFP4 + CUDA Graph — generative 키 비주얼
LLM 서버 운영기

vLLM 서빙 속도 2배: NVFP4 양자화와 CUDA Graph 최적화

RTX 5090에서 Qwen3.5-27B를 서빙할 때, AWQ-4bit에서 NVFP4로 모델을 교체하고 CUDA Graph를 활성화해서 ~28 tok/s에서 ~54 tok/s로 2배 속도 향상을 달성한 과정.

2026. 2. 9.
Mastra + vLLM 로컬 LLM Playground — bauhaus 키 비주얼
LLM 서버 운영기

Mastra + vLLM으로 로컬 LLM Playground 만들기

vLLM 서버에 Mastra 프레임워크를 연결해서 브라우저 기반 Playground를 만들었다. 멀티턴 대화, GPU 자동 관리, 그리고 공식 문서에 없는 삽질 포인트들.

2026. 2. 8.
vLLM CUDA 의존성 지옥 — isometric 키 비주얼
LLM 서버 운영기

RTX 5090에서 vLLM 돌리기: cu130 의존성 지옥 탈출기

RTX 5090에서 vLLM을 실행하려면 CUDA 13.0 wheel이 필요한데, 실제 .so 파일은 cu12 패키지에만 있다. uv와 CUDA 생태계의 충돌을 해결한 삽질기.

2026. 2. 7.
Next.js K8s 배포 하드닝 — sumi-e 키 비주얼
홈랩 삽질기

Next.js K8s 배포 강화: startupProbe, graceful shutdown, Server Actions 암호화

Next.js를 K8s에 self-hosting하면서 적용한 startupProbe, graceful shutdown, Server Actions 암호화 키 설정. 프로덕션 배포에서 놓치기 쉬운 운영 포인트 정리.

2026. 2. 6.
Gitea 운영 삽질기 — generative 키 비주얼
홈랩 삽질기

Gitea 운영 삽질기: webhook 차단, LevelDB 락, 1.25 업그레이드

K8s에서 Gitea를 운영하면서 만난 webhook 차단과 LevelDB 파일 락 문제를 해결하고, 1.23에서 1.25로 업그레이드한 과정.

2026. 2. 5.
ArgoCD 배포 알림 고도화 — bauhaus 키 비주얼
홈랩 삽질기

ArgoCD 배포 알림 고도화: oncePer 중복 방지부터 resync 튜닝까지

ArgoCD + ntfy 알림의 중복, 파싱 에러, 3분 지연을 잡아가며 배운 oncePer 메커니즘, mono-repo에서의 cross-app 중복 해결, Go template과 YAML 파서 충돌 우회, resync 간격 튜닝 경험기.

2026. 2. 4.
와일드카드 서브도메인 멀티사이트 — generative 키 비주얼
홈랩 삽질기

와일드카드 서브도메인으로 멀티사이트 블로그 운영하기: Cloudflare Tunnel + Traefik v3

홈랩 K8s에서 *.museck.com 와일드카드 서브도메인으로 멀티사이트 블로그를 운영하는 아키텍처를 정리했다. Cloudflare Tunnel 라우트 우선순위, Traefik v3 HostRegexp 삽질기, Kustomize base/overlay 패턴까지.

2026. 2. 3.
Umami Analytics K8s 셀프호스팅 — sumi-e 키 비주얼
홈랩 삽질기

Umami Analytics를 K8s에 셀프호스팅하기: GA 없이 웹 분석하는 법

Google Analytics 대신 오픈소스 Umami를 K8s 클러스터에 배포했다. 프라이버시 걱정 없이 페이지뷰, 방문자, 리퍼러를 수집하는 전체 과정을 정리한다.

2026. 2. 2.
PayloadCMS Lexical 4개 레이어 — 등각 투영 구조
museck 만들기

PayloadCMS Lexical 에디터에 코드 블록 넣기: 4개 레이어 삽질기

PayloadCMS 3.x의 Lexical 에디터에 코드 블록과 Live Preview를 추가하면서 겪은 삽질을 정리했다. 커스텀 Feature 하나 넣으려면 서버, 클라이언트, import map, 시리얼라이저까지 4개 레이어를 전부 건드려야 한다.

2026. 2. 1.
Post #64 Key Visual — sumi-e style
크로스커팅

python-guide 스킬의 진화: 실전에서 발견한 테스트 누락 패턴

Claude Code용 python-guide 스킬을 설계하고, GPU 파이프라인 프로젝트에서 누락된 테스트 패턴을 발견하고 개선한 과정. 멀티레이어 테스트 전략과 스킬 기반 개발의 피드백 루프.

2026. 1. 30.
Post #63 Key Visual — generative style
크로스커팅

2주간 20개 프로젝트에서 만난 삽질 패턴 총정리

Docker 빌드, K8s 네트워킹, 환경변수 격리, 인증, 라이브러리 호환성까지. 20개 프로젝트를 동시에 진행하며 반복적으로 빠진 함정 패턴을 5가지 카테고리로 정리한 삽질 백과사전.

2026. 1. 30.
Post #62 Key Visual — sumi-e style
크로스커팅

RTX 5090 하나로 AI 서비스 6개 돌리기: GPU 공유 전략

단일 RTX 5090에서 vLLM, Whisper, ComfyUI, PyAnnote 등 6개 AI 서비스를 운영하며 터득한 GPU 공유 전략. nvidia-smi 수동 확인에서 GPU API 기반 자동 관리까지의 진화 과정을 정리했다.

2026. 1. 29.
도미노 자동화: 웹훅 하나로 서비스 5개가 연쇄 반응하는 구조 — pencil-sketch 스타일 키 비주얼
크로스커팅

도미노 자동화: 웹훅 하나로 서비스 5개가 연쇄 반응하는 구조

11개 프로젝트에서 발견한 자동화 체인 패턴을 정리했다. Git push 한 번에 빌드-배포-알림이 자동으로 이어지고, 블로그 발행 한 번에 4개 소셜 플랫폼에 동시 포스팅된다. n8n을 허브로 한 이벤트 기반 자동화의 실제 구현과 삽질기.

2026. 1. 29.
9개 프로젝트에서 발견한 Config as Code의 공통 원칙 — bauhaus 스타일 키 비주얼
크로스커팅

9개 프로젝트에서 발견한 Config as Code의 공통 원칙

Kustomize overlay, Helm values, n8n JSON export, cert-manager YAML, husky 설정, Claude Code 스킬까지. 9개 프로젝트를 횡단하며 발견한 Config as Code의 공통 원칙과 환경별 분기 패턴을 정리했다.

2026. 1. 28.
WSL에서 K8s까지: 10개 서비스가 공유하는 GPU 브릿지 패턴 — sumi-e 스타일 키 비주얼
크로스커팅

WSL에서 K8s까지: 10개 서비스가 공유하는 GPU 브릿지 패턴

K8s 클러스터에 GPU를 패스스루할 수 없는 홈랩에서, WSL2의 GPU 서비스를 K8s 네트워크에 통합하는 방법. Windows portproxy와 수동 Endpoints 패턴으로 10개 서비스를 연결한 실전 경험.

2026. 1. 28.
모든 것을 API로: 홈랩 10개 프로젝트가 가르쳐준 것 — sumi-e 스타일 키 비주얼
크로스커팅

모든 것을 API로: 홈랩 10개 프로젝트가 가르쳐준 것

GPU 추론 서버, 논문 번역기, 자막 생성기, 이미지 생성 도구까지. 홈랩의 모든 내부 서비스를 HTTP API로 노출하고, K8s Service로 통합하고, Cloudflare Tunnel로 외부에 공개한 경험을 정리했다.

2026. 1. 27.
Claude Code 서브에이전트 패턴 총정리 — sumi-e 스타일 키 비주얼
크로스커팅

Claude Code 서브에이전트 패턴 총정리: 8가지 실전 사례

블로그 자동화, 논문 번역, 이미지 생성, SNS 배포까지. 2주간 8개 프로젝트에서 Claude Code의 Task tool로 서브에이전트를 설계하며 발견한 패턴과 원칙을 정리했다.

2026. 1. 27.
서버 진행상황을 클라이언트에서 보는 세 가지 패턴 — generative 스타일 키 비주얼
크로스커팅

서버 진행상황을 클라이언트에서 보는 세 가지 패턴

GPU 추론, 논문 번역, 자막 생성 같은 오래 걸리는 서버 작업의 진행 상황을 실시간으로 전달하는 패턴을 정리했다. 폴링, NDJSON 스트리밍, WebSocket 중 어떤 걸 써야 하는지, 실제 코드와 삽질기를 함께 다룬다.

2026. 1. 25.
Obsidian NFS 지식 관리 키 비주얼
크로스커팅

Obsidian + NFS: 번역 논문과 노트를 한곳에서 관리하기

NFS 공유 스토리지 위에 Obsidian 볼트를 올리고, AI 번역 파이프라인과 마스터 용어 사전을 연결해 지식을 한곳에 모은 이야기. 홈랩 SSD 패스스루부터 glossary.json까지, 파일 하나로 여러 서비스가 협업하는 구조를 정리했다.

2026. 1. 24.
Claude Code 헤드리스 모드 키 비주얼
크로스커팅

Claude Code 헤드리스 모드: 서브프로세스로 AI 삽입하기

Claude Code의 --print 플래그를 써서 AI를 자동화 파이프라인에 서브프로세스로 끼워넣은 6가지 사례. 논문 번역, 자막 교정, 블로그 작성 에이전트까지 실전 패턴과 삽질기를 정리했다.

2026. 1. 24.
K8s 배포 패턴 비교 키 비주얼
크로스커팅

K8s 배포 패턴 비교: 수동 매니페스트에서 Helm까지

홈랩 K8s 클러스터에서 실제로 사용한 세 가지 배포 방식을 비교한다. 수동 매니페스트로 시작해서 Kustomize overlays를 거쳐 Helm OCI 차트까지, 각 방식이 적합한 상황과 ArgoCD GitOps와의 결합 패턴을 정리했다.

2026. 1. 23.
MCP 서버 3종 비교 키 비주얼
크로스커팅

MCP 서버 3종 비교: AI 에이전트는 외부 시스템을 어떻게 다루는가

PayloadCMS MCP, GPU 상태 API, ComfyUI 파이프라인. AI 에이전트와 외부 시스템을 연결하는 3가지 방법을 비교하고, 실제 블로그 자동화 파이프라인에서 어떻게 조합했는지 정리했다.

2026. 1. 23.
AI 에이전트 블로그 파이프라인 키 비주얼
에이전트 팀

5개 AI 에이전트로 블로그 파이프라인 자동화하기

블로그 글 하나를 쓰려면 CMS, 이미지 생성, SNS 배포까지 5개 서비스를 넘나들어야 한다. Claude Code Agent Teams로 전담 에이전트 5명을 조율하는 콘텐츠 파이프라인을 만들었다.

2026. 1. 22.
블로그 SNS 자동 공유 키 비주얼
Claude Code로 2주 만에 만든 것들 — 소셜 자동화편

블로그 발행하면 4개 SNS에 자동 공유되게 만든 과정

블로그 글 발행할 때마다 LinkedIn, X, Threads, Instagram에 손으로 공유하는 게 귀찮아서 n8n + Claude API + Postiz로 자동화했다. Postiz API 삽질기 포함.

2026. 1. 22.
서브에이전트 블로그 발행 키 비주얼
Claude Code로 2주 만에 만든 것들 — 소셜 자동화편

서브에이전트로 블로그 발행 자동화하기

Claude Code 서브에이전트와 PayloadCMS MCP를 조합해서 '주제만 말하면 CMS에 초안이 저장되는' 콘텐츠 파이프라인을 만들었다. 프롬프트 외부화, Human-in-the-loop, Lexical JSON 삽질기까지.

2026. 1. 21.
n8n 동영상 자막 아키텍처 키 비주얼
n8n 자동화편

15개 노드에서 2개로: n8n 동영상 자막 서비스의 아키텍처 결정

n8n으로 동영상 자막 서비스를 만들었더니 OOM으로 터졌다. 15개 노드를 2개로 줄이고, n8n은 HTML만 서빙하고 브라우저가 GPU 서버와 직접 통신하는 구조로 피벗한 이야기.

2026. 1. 21.
n8n PDF 번역 — pencil-sketch 스타일 키 비주얼
n8n 자동화편

n8n으로 PDF 논문 번역 서비스 만들기

n8n Webhook으로 PDF 번역 서비스를 만들면서 겪은 OOM 크래시, Form Trigger 한계, 병렬 노드 에러 전파 문제와 해결 과정을 정리했다.

2026. 1. 20.
CWD 감지 — isometric 스타일 키 비주얼
Claude 스킬

하드코딩된 경로가 깨진 날 — skill-version-manager의 CWD 감지

WSL2 환경을 옮기자 하드코딩된 경로가 깨졌다. skill-version-manager v1.1.0에서 CWD 기반 자동 감지로 리팩터링한 과정과, 개발 도구가 환경에 의존하지 않아야 하는 이유를 정리한다.

2026. 1. 20.
/wrap 세션 마무리 — bauhaus 스타일 키 비주얼
Claude 스킬

/wrap 하나로 세션 마무리 자동화하기

Claude Code 세션이 끝날 때마다 커밋, 문서화, 스킬 기록을 반복하는 게 귀찮았다. /wrap 스킬 하나로 이 마무리 루틴을 자동화한 과정을 정리했다.

2026. 1. 19.
SwiftUI GPU 모니터 — isometric 스타일 키 비주얼
GPU 위젯

WSL에서 Swift 짜고 macOS 위젯으로 GPU 모니터링하기

홈랩 GPU 상태를 바탕화면에서 바로 확인하고 싶었다. WidgetKit으로 60초마다 API를 폴링하는 macOS 위젯을 만들었고, xcodegen 덕분에 WSL의 Claude Code에서 Swift 프로젝트를 통째로 관리할 수 있었다.

2026. 1. 19.
GPU 상태 API — stipple 스타일 키 비주얼
GPU 위젯

GPU 하나를 여러 서비스가 나눠 쓸 때, 상태 API가 답이다

홈랩의 RTX 5090 한 장을 vLLM, ComfyUI, 음성인식이 번갈아 쓴다. 누가 쓰고 있는지 알 방법이 없어서 FastAPI로 GPU 상태 API를 만들고 K8s Endpoints로 네트워크에 통합한 과정을 정리했다.

2026. 1. 18.
네거티브 프롬프트가 안 먹힌다 — sumi-e 스타일 키 비주얼
이미지 생성

네거티브 프롬프트가 안 먹힌다 — 모델별 프롬프트 스킬 만들기

z_image_turbo는 CFG를 쓰지 않아서 네거티브 프롬프트가 무시된다. 이 특성을 파악하고 Claude Code 스킬로 체계화한 과정을 정리했다.

2026. 1. 18.
GPU 하나를 여러 서비스가 나눠 쓸 때 — pencil-sketch 스타일 키 비주얼
홈랩 삽질기

GPU 하나를 여러 서비스가 나눠 쓸 때, ComfyUI 온디맨드 관리

RTX 5090 하나에 vLLM, ASR, ComfyUI가 공존한다. GPU idle 체크부터 JupyterLab WebSocket 원격 시작, health check polling까지 275줄짜리 관리 스크립트를 만든 과정.

2026. 1. 17.
GPU 파이프라인, 어떻게 테스트하지? — stipple 스타일 키 비주얼
자막 파이프라인

GPU 파이프라인, 어떻게 테스트하지?

GPU 모델에 의존하는 ML 파이프라인도 대부분의 로직은 GPU 없이 테스트할 수 있다. mock과 fixture를 활용한 3단계 테스트 피라미드 구축기.

2026. 1. 17.
모델 로딩 30초를 없앤 방법 — bauhaus 스타일 키 비주얼
자막 파이프라인

모델 로딩 30초를 없앤 방법: Persistent Worker 서버

음성 인식 파이프라인에서 요청마다 GPU 모델을 로드하는 데 30초씩 걸렸다. 모델을 VRAM에 상주시키고 stdin/stdout 시그널 프로토콜로 통신하는 Persistent Worker 패턴과, 이를 HTTP API로 감싸는 과정을 정리했다.

2026. 1. 16.
Forced Aligner 토큰에서 원문 복원하기 — pencil-sketch 스타일 키 비주얼
자막 파이프라인

Forced Aligner 토큰에서 원문 복원하기: 한국어 자막의 자연스러운 줄바꿈

Forced Aligner가 구두점을 삭제하고 어절을 쪼개 버리면 자막이 엉망이 된다. 원문 텍스트와 토큰을 정렬하는 매핑 알고리즘을 만들고, 한국어 연결어미까지 인식하는 분할 로직을 구현한 과정을 정리했다.

2026. 1. 16.
CLI 자막 도구를 웹 서비스로 — isometric 스타일 키 비주얼
자막 파이프라인

CLI 자막 도구를 웹 서비스로: n8n OOM에서 직접 라우팅까지

CLI로만 쓰던 자막 생성 파이프라인에 웹 UI를 붙였다. n8n으로 프로토타입을 만들었다가 OOM으로 터지고, 브라우저에서 GPU 서버로 직접 통신하는 구조로 재설계한 과정을 정리했다.

2026. 1. 15.
subprocess 환경변수, 기본값이 함정이다 — isometric 스타일 키 비주얼
자막 파이프라인

subprocess 환경변수, 기본값이 함정이다

subprocess.Popen()의 기본 동작은 메인 프로세스 환경변수를 전부 상속한다. 자격증명 누출과 venv 충돌을 allowlist 패턴으로 해결한 과정.

2026. 1. 15.
Claude Code headless 모드의 JSON 파싱 함정 두 가지 — generative 스타일 키 비주얼
자막 파이프라인

Claude Code headless 모드의 JSON 파싱 함정 두 가지

Claude Code CLI를 subprocess로 호출해 ASR 텍스트를 교정하다가 JSON 파싱이 깨졌다. --max-turns와 structured_output 필드에 숨어있던 함정을 기록한다.

2026. 1. 14.
GPU 모델 3개를 하나의 파이프라인에서: subprocess worker 격리 패턴 — isometric 스타일 키 비주얼
자막 파이프라인

GPU 모델 3개를 하나의 파이프라인에서: subprocess worker 격리 패턴

음성 인식 파이프라인에서 GPU 모델 3개의 의존성 충돌을 해결한 과정. Docker 대신 subprocess + 독립 venv 패턴으로 가볍게 프로세스를 격리하고, stdin/stdout/stderr 파이프로 통신하는 방법을 정리했다.

2026. 1. 14.
서브에이전트가 같은 파일을 동시에 수정하면 생기는 일 — generative 스타일 키 비주얼
논문 번역기

서브에이전트가 같은 파일을 동시에 수정하면 생기는 일

멀티 에이전트 시스템에서 서브에이전트가 동시에 같은 파일을 수정하면 데이터가 날아간다. 에이전트 역할 분리와 Scatter-Gather 패턴으로 glossary 워크플로우를 리팩토링한 과정.

2026. 1. 13.
논문 번역에서 용어가 뒤죽박죽이라면: TranslateGemma + 마스터 용어 사전 — bauhaus 스타일 키 비주얼
논문 번역기

논문 번역에서 용어가 뒤죽박죽이라면: TranslateGemma + 마스터 용어 사전

같은 논문에서 attention mechanism이 세 가지로 번역되는 문제를 겪었다. 모델을 파인튜닝하는 대신 glossary injection 방식으로 해결한 과정을 정리했다.

2026. 1. 13.
vLLM이 두 번 뜨는 날: nvidia-smi에서 GPU API로 — sumi-e 스타일 키 비주얼
논문 번역기

vLLM이 두 번 뜨는 날: nvidia-smi에서 GPU API로

nvidia-smi의 메모리 사용량만으로 GPU 상태를 판단하다가 vLLM을 중복 시작하는 사고가 터졌다. GPU API를 만들어 프로세스 레벨까지 보는 상태 머신으로 리팩토링한 과정을 정리했다.

2026. 1. 12.
Zotero에서 원클릭 논문 번역: Claude Headless로 서버 만들기 — generative key visual
논문 번역기

Zotero에서 원클릭 논문 번역: Claude Headless로 서버 만들기

논문 번역할 때마다 터미널 열어서 명령어 치기 귀찮아서 만들었다. Zotero에서 PDF 우클릭 한 번이면 FastAPI 서버가 Claude를 headless로 돌려 번역 결과를 돌려준다.

2026. 1. 12.
번역 버튼 누르고 20분, 지금 뭘 하고 있는 건지 알고 싶었다 — bauhaus key visual
논문 번역기

번역 버튼 누르고 20분, 지금 뭘 하고 있는 건지 알고 싶었다

논문 번역이 수십 분 걸리는데 진행 상황을 알 수 없고, GPU 서버도 매번 수동으로 켜야 했다. Claude의 stream-json 출력을 실시간 파싱하고 JupyterLab WebSocket으로 원격 GPU 서버를 자동 관리하는 과정을 정리했다.

2026. 1. 11.
CI/CD 빌드가 느려서 3곳을 동시에 고쳤다 — stipple key visual
museck 만들기

CI/CD 빌드가 느려서 3곳을 동시에 고쳤다

Gitea Actions 워크플로우, Dockerfile, .dockerignore 세 곳을 동시에 손봐서 빌드 시간을 줄인 과정. Docker 레이어 캐시부터 BuildKit 마운트 캐시, 병렬 push까지 4개 커밋에 걸친 점진적 최적화 기록이다.

2026. 1. 11.
100페이지 논문 번역이 40분 걸릴 때: LLM 동시성과 재시도 전략 — bauhaus key visual
논문 번역기

100페이지 논문 번역이 40분 걸릴 때: LLM 동시성과 재시도 전략

PDF 논문 번역에 40분이나 걸리던 파이프라인을 동시성 튜닝, temperature 기반 재시도, 캐시 전략으로 개선한 과정. vLLM continuous batching을 활용한 QPS 16배 증가와 temperature escalation 재시도 패턴을 다룬다.

2026. 1. 10.
MCP로 AI 에이전트가 CMS를 직접 조작하게 만든 이야기 — pencil-sketch key visual
museck 만들기

MCP로 AI 에이전트가 CMS를 직접 조작하게 만든 이야기

PayloadCMS에 MCP 플러그인을 붙여서 AI 에이전트가 블로그 글을 자동으로 작성하고 저장하는 파이프라인을 만들었다. n8n 웹훅으로 발행 알림까지 자동화한 과정을 정리했다.

2026. 1. 10.
BabelDOC 커스텀 번역 모델 — 모듈 파이프라인
논문 번역기

BabelDOC에 내 번역 모델 끼워넣기 (fork 없이)

오픈소스 PDF 번역 도구 BabelDOC에 Rosetta와 GLM 모델을 editable install로 끼워넣은 과정. fork 없이 Strategy 패턴으로 커스텀 Translator를 구현하고 삽질한 기록.

2026. 1. 9.
husky + lint-staged — 이중 검증 게이트
museck 만들기

CI에서 터지기 전에 잡자: husky + lint-staged 설정기

린트 에러를 CI에서 발견하고 수정해서 다시 푸시하는 삽질, 이제 그만하고 싶었다. husky와 lint-staged로 커밋 시점에 자동 검증하는 Git 훅을 붙인 이야기.

2026. 1. 9.
안티브루탈리즘 디자인 — 날카로운 기하학적 구성
museck 만들기

Tailwind 토큰 바꿨을 뿐인데 홈페이지가 브루탈리즘이 됐다

무색 홈페이지를 미니멀에서 안티브루탈리즘으로 전면 리뉴얼한 과정. 디자인 토큰만 잘 분리해두면 색상 5개, 폰트 3종 교체로 사이트 전체 분위기가 바뀐다.

2026. 1. 8.
GitOps Production 배포 자동화 — 두 갈래 파이프라인
museck 만들기

GitOps로 Production 배포 자동화하기

앱 코드에 K8s 매니페스트가 섞여 있던 구조를 GitOps로 분리하고, Staging에서 검증된 이미지를 Production으로 프로모션하는 워크플로우를 만든 과정. 태그 자동 해석과 멱등성 보장까지.

2026. 1. 8.
Docker 빌드에서 터진 7가지 호환성 지뢰: ESM + React 19 + PayloadCMS
museck 만들기

Docker 빌드에서 터진 7가지 호환성 지뢰: ESM + React 19 + PayloadCMS

로컬에서 잘 돌아가던 Next.js 15 + PayloadCMS 프로젝트가 Docker 빌드에서 7개의 에러를 연쇄적으로 터뜨렸다. ESM/CJS 충돌부터 React 19 breaking change, DB 없는 빌드 환경 대응까지 하나씩 해결한 과정을 정리한다.

2026. 1. 7.
Gitea Actions + DinD로 셀프 호스팅 CI/CD 삽질기
museck 만들기

Gitea Actions + DinD로 셀프 호스팅 CI/CD 삽질기

GitHub Actions처럼 쓰려고 했던 Gitea Actions. DinD 환경에서 표준 액션이 전부 안 먹히는 바람에 7번의 커밋 끝에 파이프라인을 완성한 과정을 정리했다.

2026. 1. 7.
Next.js 15 standalone 앱을 Docker와 K8s로 배포하기
museck 만들기

Next.js 15 standalone 앱을 Docker와 K8s로 배포하기

PayloadCMS + Next.js 15 프로젝트를 멀티스테이지 Docker 빌드로 경량화하고, Kubernetes 매니페스트를 작성해 홈랩 클러스터에 올린 과정을 정리했습니다. standalone 모드의 장점과 Health Check 연동까지 다룹니다.

2026. 1. 6.
PayloadCMS + Next.js 15로 회사 홈페이지 만들기
museck 만들기

PayloadCMS + Next.js 15로 회사 홈페이지 만들기

PayloadCMS 3.x와 Next.js 15 App Router로 회사 홈페이지를 처음부터 구축한 과정. 디자인 토큰 설정부터 블록 기반 페이지 빌더까지, 초기 아키텍처 결정이 왜 중요한지 정리했다.

2026. 1. 6.
ntfy + ArgoCD 배포 알림: 글로벌 구독의 함정과 per-app 알림
홈랩 삽질기

ntfy + ArgoCD 배포 알림: 글로벌 구독의 함정과 per-app 알림

홈랩 GitOps 파이프라인에서 배포 성공 알림을 받기 위해 ntfy를 셀프 호스팅하고 ArgoCD notifications controller와 연동했다. mono-repo 환경에서 글로벌 구독이 알림 폭주를 일으키는 문제를 per-app annotation으로 해결한 과정을 다룬다.

2026. 1. 5.
Postiz 소셜 미디어 자동화 배포: Helm OCI + Temporal 삽질기
홈랩 삽질기

Postiz 소셜 미디어 자동화 배포: Helm OCI + Temporal 삽질기

홈랩 K8s에 Postiz를 배포하면서 커밋 13개에 걸쳐 겪은 삽질기. Bitnami subchart 서비스 이름, Temporal 필수 의존성, ConfigMap 마운트 경로 충돌, 메모리 4Gi, Google OAuth 환경변수까지 하나씩 잡아나간 과정을 정리했다.

2026. 1. 5.
OpenClaw AI 게이트웨이를 홈랩에 배포한 이야기
홈랩 삽질기

OpenClaw AI 게이트웨이를 홈랩에 배포한 이야기

홈랩에 멀티채널 AI 에이전트 게이트웨이(OpenClaw)를 배포하면서 겪은 reverse proxy pairing 문제 해결과 NFS UID 매핑 삽질기. trustedProxies, all_squash 등 실전 팁을 정리했다.

2026. 1. 4.
내부 AI 서비스를 Cloudflare Tunnel로 외부에 공개하기
홈랩 삽질기

내부 AI 서비스를 Cloudflare Tunnel로 외부에 공개하기

홈랩에서 돌리던 논문 번역과 동영상 자막 서비스를 외부에 공개하면서 겪은 과정. Cloudflare Tunnel과 Traefik 리다이렉트 조합으로 n8n webhook을 프론트엔드 삼아 별도 웹 서버 없이 API를 열었다.

2026. 1. 4.
WSL GPU 서비스를 K8s에 연결하는 수동 Endpoints 패턴
홈랩 삽질기

WSL GPU 서비스를 K8s에 연결하는 수동 Endpoints 패턴

GPU 패스스루가 안 되는 K8s 환경에서 WSL의 GPU 서비스를 클러스터 네트워크에 통합하는 방법을 정리했습니다. 수동 Service + Endpoints 패턴과 Windows portproxy를 조합하면 ASR, ComfyUI, vLLM 같은 서비스를 K8s 내부에서 DNS로 접근할 수 있습니다.

2026. 1. 3.
n8n 워크플로우 자동화 — K8s 셀프호스팅
홈랩 삽질기

n8n 워크플로우 자동화, K8s 홈랩에 셀프 호스팅하기

n8n을 Kubernetes 홈랩 클러스터에 셀프 호스팅한 과정을 정리했다. SQLite PVC와 NFS 공유 스토리지를 연결하고 ArgoCD로 GitOps 관리하는 구성이다.

2026. 1. 3.
SSD 패스스루 + NFS 공유 스토리지 구축
홈랩 삽질기

SSD 패스스루 + NFS 공유 스토리지 구축기

홈랩에서 여러 서비스가 같은 파일을 공유해야 할 때, Samsung 990 PRO SSD를 3단계 패스스루하고 K8s NFS Server Pod으로 공유 스토리지를 만든 과정을 정리했다. 소비자별 PV/PVC 패턴과 삽질 기록도 함께.

2026. 1. 2.
MetalLB L2 Failover — Cilium ARP 함정과 해결
홈랩 삽질기

MetalLB L2 Failover가 안 되던 날 - Cilium과 ARP의 함정

홈랩 K8s 클러스터에서 worker 노드를 끄니 MetalLB L2 failover가 작동하지 않았다. Cilium CNI의 가상 인터페이스가 ARP를 불안정하게 만든 게 원인이었고 L2Advertisement에 interfaces 제한을 추가해 해결했다.

2026. 1. 2.
홈랩 모니터링 — Prometheus에서 Loki로 전환
홈랩 삽질기

홈랩 모니터링, Prometheus 걷어내고 Loki로 갈아탄 이야기

홈랩 K8s 클러스터에서 kube-prometheus-stack의 리소스 부담을 느끼고 Loki + Promtail + Grafana 경량 스택으로 전환한 경험. 실제 사용 패턴에 맞는 도구를 고르는 게 중요하다는 걸 배웠다.

2026. 1. 1.
Cloudflare Tunnel — 터널을 통한 내부 서비스 공개
홈랩 삽질기

Cloudflare Tunnel로 홈랩을 인터넷에 공개한 이야기

홈랩에서 운영하는 서비스를 museck.com으로 공개하기 위해 Cloudflare Tunnel을 도입했다. 포트포워딩이나 공인 IP 없이 K8s Pod 하나로 외부 접근을 해결한 과정과 TLS 문제가 저절로 풀린 이야기.

2026. 1. 1.
DinD 사이드카 — 컨테이너 안의 컨테이너
홈랩 삽질기

containerd 기반 K8s에서 Docker 빌드하기: DinD 사이드카와 ArgoCD 크래시 수정기

containerd 기반 Kubernetes 클러스터에서 Docker 빌드를 위해 DinD 사이드카 패턴을 적용하고, ArgoCD repo-server의 copyutil init 컨테이너 크래시를 Helm values override로 해결한 과정을 공유합니다.

2025. 12. 31.
GitOps 파이프라인 — Git에서 K8s까지 배포 흐름
홈랩 삽질기

홈랩에 GitOps 파이프라인 구축하기: Gitea + ArgoCD App of Apps 패턴

수동 kubectl apply의 한계를 넘어 Gitea(Git + Registry + CI)와 ArgoCD App of Apps 패턴으로 홈랩 GitOps 체계를 구축한 과정. YAML 파일 하나 커밋하면 새 서비스가 자동 배포되는 구조를 만들었습니다.

2025. 12. 31.
홈랩 TLS 자동화 — 자물쇠와 인증서 체인
홈랩 삽질기

홈랩 TLS 자동화: mkcert 자체 서명에서 cert-manager + Let's Encrypt로

홈랩에서 자체 서명 인증서(mkcert)를 쓰다 보안 경고와 외부 접속 문제에 부딪혔다. cert-manager + Cloudflare DNS-01 challenge로 와일드카드 인증서를 자동 발급하고, 모든 서비스를 공인 도메인으로 전환한 과정을 정리했다.

2025. 12. 30.