글 91개

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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




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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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