GPU 한 장으로 언어모델을 처음부터 학습시켜 봅니다. TinyStories 데이터셋과 1,600만 파라미터짜리 디코더 전용 트랜스포머로 15분 만에 읽히는 영어 동화를 생성했습니다. 어텐션 마스크가 왜 필요한지, 가중치 묶기가 무엇을 절약하는지, perplexity 20이 실제로 어떤 문장을 뜻하는지를 실제 학습 로그와 생성 결과로 확인합니다. RTX 3090 실측 기준.
실제 8노드 쿠버네티스 클러스터에 CloudNativePG(CNPG) v1.30.0을 설치하고, 3인스턴스 Postgres 클러스터를 띄운 뒤, 정말로 프라이머리를 죽여봤습니다. 부트스트랩부터 복제 확인, 프라이머리 강제 삭제 후 페일오버(23.1초 만에 레플리카 승격, 데이터 무손실), 그리고 죽은 노드가 레플리카로 자가 복구되어 3/3으로 돌아오기까지 — 전 과정을 실측 로그와 함께 기록합니다. NFS 스토리지 위에서 돌린 홈랩 환경의 정직한 숫자와 함정도 그대로 담았습니다.
Rust 오퍼레이터가 "GPU 노드 4개 전부 NotReady"라는 진단을 내린 뒤, 그 죽음의 원인을 실제 8노드 클러스터(GPU Operator v25.3.0, KubeVirt v1.7.0)에서 끝까지 추적했습니다. gpu-fedora와 rhel9-gpu-vm이 112일간 ErrorUnschedulable로 멈춰 있던 진짜 이유는 화려한 GPU 설정이 아니라 kubelet 한 줄 에러 — "running with swap on is not supported" — 였습니다. swap이 kubelet을 죽이고 → 노드가 NotReady가 되고 → GPU가 물리적으로 묶인 VM은 다른 노드로 갈 수 없어 영원히 멈추는, 패스스루의 물리 법칙을 실측 로그·CR·PCI 등록 정보와 함께 부검합니다.
Rust 1.97.0이 2026년 7월 9일에 stable로 릴리스됐습니다. 이 글은 릴리스 노트에서 실제로 바뀐 세 가지 — v0 심볼 맹글링의 stable 승격, Cargo의 경고 거부(deny warnings), 그동안 숨어 있던 링커 출력의 기본 노출 — 을 정리하고, 며칠 전 바로 그 cargo 1.97로 쿠버네티스 GPU 오퍼레이터를 빌드했던 실측 경험과 겹쳐 봅니다. 정직한 결론 하나: 오퍼레이터를 짤 때 정말 중요했던 건 툴체인 버전이 아니라 kube-rs 0.96이라는 생태계였습니다. 그리고 누가 지금 올려야 하는지도 담담하게 적었습니다.
8노드 실운영 홈랩 클러스터(k8s v1.32.5)를 상대로, kube-rs를 써서 GPU 오퍼레이터를 Rust로 직접 만들어 돌렸습니다. GpuInventory 커스텀 리소스를 정의하고, 두 개의 컨트롤러(노드 스캔→CR 상태 기록, 노드 감시→ConfigMap 갱신)를 한 바이너리로 띄워 클러스터 밖에서 실행했습니다. 그리고 오퍼레이터가 실제로 뱉은 결과 — GPU 노드 4개 중 Ready 0개, 즉 GPU 함대 전체가 죽어 있다는 진단 — 와, 그 과정에서 실제로 만난 두 가지 함정(server-side apply의 invalid object type 에러, 상태 기록이 자기 자신을 다시 부르는 무한 리컨사일 루프)을 실측 로그와 함께 정리합니다.
RTX 5090(Blackwell, 32GB) 한 장에 SSH로 붙어 작은 모델 셋을 직접 돌려봤습니다. char-level GPT를 밑바닥부터 28초 만에 학습시키고(10.75M 파라미터, 117만 tokens/s), 전용 OCR(TrOCR)과 소형 VLM(Qwen2-VL-2B)을 같은 이미지에 붙여 CER로 대결시키고, MusicGen으로 8초짜리 음악을 1.9초(4.2배 실시간)에 생성했습니다. 그 과정에서 만난 정직한 함정들 — 워밍업 없는 벤치마크가 38배 거짓말을 한 사건, CER이라는 지표가 대문자 하나로 뻥튀기되는 이야기, Blackwell sm_120에 맞는 PyTorch를 찾는 삽질 — 까지 실측 수치와 함께 정리합니다.
Anthropic이 2025년 가을에 처음 도입하고 12월에 오픈 표준화한 Agent Skills는 2026년 5월 현재 Claude Code의 표준 확장 방식이 되었다. 본질은 단순하다 — YAML 프론트매터 + 마크다운 지시 + 필요하면 스크립트/레퍼런스. 모델이 description을 읽고 스스로 invoke 여부를 결정한다. 이 글은 SKILL.md의 정확한 스펙(필드 전부), 디렉터리 레이아웃, 호출 모델, 패키징/배포, 그리고 release-notes-from-git-log Skill을 끝까지 만들어보는 핸즈온이다. MCP·subagent·plugin과의 결정 트리, 실제 개발자들이 만들고 있는 Skill 사례까지.
직접 인증을 만들지 말고 Keycloak을 쓰자. 이 글은 따라 하는 핸즈온이다 — Docker로 Keycloak 26을 띄우고, Realm·Client·User·Role을 설정하고, OIDC 엔드포인트를 curl로 찔러보고, Spring Boot Resource Server와 Node.js·Next.js를 연동한다. Authorization Code + PKCE 토큰 흐름 전체, 프로덕션 체크리스트, 그리고 redirect_uri mismatch·CORS·issuer 불일치 같은 자주 막히는 곳 트러블슈팅까지.
Zapier도 n8n도 쓰지 않고, Bun으로 200줄짜리 스크립트를 짜서 Linear 이슈 종료 → Slack 알림 → Notion 체인지로그 자동 작성까지 묶는다. Notion Data Sources API, Slack Bolt 4, Linear GraphQL 2026년 현황을 짚고, LLM을 분류·요약·드래프트의 글루로 끼워 넣는 패턴을 다룬다. 시크릿 관리, 웹훅 vs 폴링, 레이트리밋, 운영 비용 비교, 그리고 정직한 안티패턴까지 핸즈온으로.
AI를 가장 레버리지 높게 배포하는 표면은 IDE가 아니라 Slack이다 — 팀 전체가, 일이 일어나는 곳에서 쓴다. 이 글은 따라 하는 핸즈온이다. Slack 앱을 만들고, Bolt SDK로 멘션에 응답하는 최소 봇을 띄우고, Claude·Gemini·OpenClaw 게이트웨이를 연동하고, 스레드 컨텍스트를 다루고, MCP로 봇에 GitHub·Jira·DB 같은 도구를 쥐여주고, 스트리밍 UX·프로덕션 운영·Prompt Injection 방어까지.
VS Code 확장과 LSP는 더 이상 신비롭지 않다. Extension API의 명령·프로바이더·웹뷰부터, JSON-RPC로 떠도는 LSP 메시지의 해부, vscode-languageserver와 tower-lsp로 짜는 진짜 서버, Tree-sitter 통합, Marketplace와 OpenVSX 배포까지 — TODO 하이라이터 한 개와 가상의 설정 언어 LSP 한 개를 처음부터 끝까지 만들어 본다.