AI/Claude Code codex `/imagen`에 한글 헤드라인 시각화 맡기기 — brand-spec 락과 본문 기반 정확도 gpt-image-2 capability snapshot, brand-spec 락, 본문 기반 정확도(v1/v2 비교 3사례), anti-pattern 14개 명시 차단까지 — 134개 블로그 카드 이미지를 자동 생성하면서도 통일된 비주얼 시스템을 유지한 디자인 자동화 패턴을 정리합니다.
AI/Claude Code Ghost MCP로 134개 글 일괄 메타 작업하기 — slug↔ID 매핑과 fd-3 stdin 패턴 Ghost MCP로 134개 글에 일괄 메타 작업을 적용하다 마주친 컨텍스트 폭증·동시성 함정. 슬러그↔ID 매핑 인덱스, 페이지네이션·search 함정, fd-3 stdin 분리, parallel tool_use 한도까지 운영 패턴 5가지를 코드와 함께 정리했습니다.
AI/Claude Code 134개 블로그 이미지를 0 Claude 토큰으로 — Claude×Codex 멀티에이전트 분업 패턴 Claude를 오케스트레이션, Codex를 실행에 두면 134개 이미지 자동화에서 Claude 토큰을 거의 0으로 유지할 수 있습니다. 책임 분리·디스크 경유 본문·MCP 우회 패턴까지, 멀티 에이전트 분업의 정량 사례를 정리합니다.
도구/GitHub 폴더별 GitHub 계정 분리: SSH 호스트 별칭 + git includeIf 완벽 가이드 한 머신에서 두 GitHub 계정을 쓸 때 commit author가 잘못 찍히거나 push가 거부되는 문제를, SSH 호스트 별칭과 git includeIf로 폴더 단위 자동 전환되도록 셋업하는 표준 패턴을 다룹니다.
도구/GitHub `gh repo star`는 존재하지 않습니다: CLI 설치 wizard에서 GitHub 스타 자동화하기 오픈소스 CLI 도구에 "GitHub star 한 번 부탁드려요" 프롬프트를 붙일 때 만나게 되는 네 가지 함정과 해법. 핵심은 `gh repo star`라는 서브커맨드 자체가 gh CLI에 없다는 점, 그리고 선택적 후속 작업의 Ctrl+C 처리·재프롬프트 방지 marker 타이밍·stderr 누수 제어입니다.
백엔드/Python-Flask 작지만 기억할 만한 네 가지: Alembic 빈 마이그레이션, 시뮬레이션 엔드포인트, F841 ignore, 'done' vs 'success' 시리즈 마지막 편은 작지만 기억할 만한 네 가지 수정을 묶었습니다. 빈 Alembic revision이 생기는 이유, "시뮬레이션" 주석이 남긴 엔드포인트, F841 ignore 뒤의 숨은 버그, 프론트/백엔드 상태 문자열 불일치 — 모두 "임시는 영구화된다"는 공통 교훈을 가집니다.
백엔드/Python-Flask Rate Limiting을 걷어낸 날: 폐쇄망 배포에서 보안은 더하는 것이 아니다 "보안은 항상 더하는 것"이라는 통념의 반례. 폐쇄망 + nginx 프록시 배포에서 Flask-Limiter가 부과하던 의존성/운영 혼란/인지 부담을 가치-비용으로 저울질하고 제거한 의사결정 기록입니다. Next.js 구현 편의 자매 글입니다.
백엔드/Python-Flask 서버 기동을 거부시키는 설정 검증과 Path().name 한 줄로 막는 Path Traversal `ALLOWED_ORIGINS`를 까먹으면 CORS가 `*` 폴백으로 조용히 열려 있던 문제와 URL 파라미터에 `../`를 꽂으면 상위 디렉토리 접근이 가능했던 path traversal을 각각 한 줄로 수정한 이야기입니다.
백엔드/Python-Flask 하나의 백엔드로 Detection/Classification/Segmentation 지원하기: task별 데이터셋 포맷 분기 UI의 task 드롭다운은 있었지만 백엔드는 항상 detection만 돌리고 있었습니다. 5 사이즈 × 3 task = 15 variant를 task별 데이터셋 포맷(bbox/ImageFolder/polygon)과 메트릭 컬럼 분기로 통합한 기록입니다.
백엔드/Python-Flask 조용한 ML 버그: train과 val이 같은 폴더를 가리키면 mAP가 거짓말을 한다 YOLO 학습에서 mAP가 높게 찍히는데 실제 배포 시 정확도가 안 나온다면 `data.yaml`을 먼저 확인해 보세요. train과 val이 같은 폴더를 가리키는 "조용한 ML 버그"의 전말과 80/20 재현 가능 분할 수정기입니다.
백엔드/Python-Flask Python/SQLAlchemy N+1 쿼리 잡기: 이미지 라벨링 플랫폼 실전 편 코드 리뷰에서 발견된 세 곳의 N+1 쿼리. 이미지 100장이면 DB 라운드트립이 101회였던 이유와 `IN` 쿼리 + 벌크 DELETE로 2회로 줄인 실전 기록을 Python/SQLAlchemy로 정리했습니다. Prisma 편의 자매글입니다.
백엔드/Python-Flask Flask에서 ML 학습 백그라운드 실행: threading의 한계와 ProcessPoolExecutor 전환 Flask에서 YOLO 학습을 `threading.Thread`로 돌리면 GIL 병목, 취소 불가, orphan 기록 세 문제가 생깁니다. `ProcessPoolExecutor`로 전환하면서 PID 기반 SIGTERM 폴백과 서버 기동 시 복구 훅까지 함께 다룹니다.
백엔드/Python-Flask JSON 파일 데이터베이스에서 PostgreSQL로: 서비스 시그니처를 유지하며 데이터 레이어 교체하기 `users.json`, `labels/*.json` 파일 저장소를 PostgreSQL로 교체하면서 라우트 9개는 한 줄도 수정하지 않았습니다. 계층 경계를 미리 뽑아 둔 지난 편 리팩토링의 보상을 그대로 보여 주는 실전 기록입니다.
백엔드/Python-Flask 1,932줄 app.py를 54줄로: 모놀리식 Flask를 Blueprint로 분해하기 인수인계 받은 Flask 백엔드의 `app.py`가 1,932줄 한 파일에 42개 API가 섞여 있었습니다. Application Factory 패턴과 Blueprint로 도메인을 분리하고, 42개 경로를 그대로 유지하며 프론트엔드 변경 없이 리팩토링한 실전 기록입니다.
AI/도구활용 양방향 링크 시스템 회고: 프로젝트 스케일에 따른 도구화 결정 같은 양방향 마커 시스템을 세 개 프로젝트에 적용했고, 각각 다른 선택을 했습니다. CI 검증까지 확장한 프로젝트, 45파일 일괄 적용한 프로젝트, 그리고 27개 마커로 멈춘 프로젝트. 스케일이 어떻게 도구화 결정을 가르는지에 관한 회고입니다.
프론트엔드/크롬확장 코드에 박힌 매직 넘버가 버그가 되는 순간: 사이드 프로젝트 MAX_RECENT=25 제거기 아무도 기억 못 하는 상수 `MAX_RECENT = 25`가 사용자에겐 "사라지는 탭" 버그였습니다. 왜 25였는지 추적했고, 답이 "그냥"이어서 지웠습니다. 임의의 제한이 코드 속에서 자라나 버그로 바뀌는 과정을 정리합니다.
프론트엔드/크롬확장 단일 크롬 확장에서 멀티테넌트 구현하기: Space Isolation 패턴과 30개 메시지 핸들러 스코핑기 하나의 크롬 확장 안에 여러 격리된 데이터 공간을 두려면 메시지 핸들러마다 "현재 공간" 개념을 주입해야 합니다. 30개 가까운 핸들러에 Space Isolation 패턴을 녹이고, cross-page sync를 깨지 않으면서, 리팩토링 부수 효과로 dead code까지 정리한 경험을 정리했습니다.
백엔드/인증-보안 Hono + Cloudflare Workers + D1로 라이선스 서버 만들기: Lemon Squeezy 웹훅 완전 가이드 사이드 프로젝트에 Pro 라이선스를 붙이려면 서버가 필요합니다. Cloudflare Workers + Hono + D1로 주말에 구축한 라이선스 서버, 그리고 Lemon Squeezy 웹훅 이벤트 순서 함정으로 하루를 날린 이야기를 공유합니다.
프론트엔드/크롬확장 크롬 확장에 위장 공간 만들기: AES-GCM과 티어드 패딩으로 Plausible Deniability 구현 단순 암호화는 내용만 숨기고 존재는 드러냅니다. 크롬 확장에서 Plausible Deniability를 달성하기 위해 AES-GCM 고정 슬롯, 티어드 패딩, CSPRNG, 그리고 Auto-Timeout UX까지 네 레이어를 쌓은 실전 사례를 공유합니다.
도구/GitHub 머지와 배포 분리하기: main push 대신 tag push로 production 배포하기 태그를 release artifact로 취급하고 머지 이벤트와 릴리스 이벤트를 분리한 GitHub Actions CI/CD 구성을 정리했습니다.
백엔드/API설계 Subscription 모델링: 왜 planId는 불변이어야 하는가 (trialPlanId 분리 패턴) Trial은 구독의 한 종류가 아니라 구독 위에 얹힌 임시 레이어입니다. planId를 불변으로 유지하고 trialPlanId로 기능을 덧칠한 설계 이야기입니다.
백엔드/API설계 분산 트랜잭션이 없을 때: Payment Provider와 DB의 cancelFailed 롤백 패턴 DB + PG의 다단계 연산은 원자적이지 않습니다. Saga 보상 대신 마커를 저장하고 cron이 자동 복구하는 패턴으로 해결했습니다.
백엔드/API설계 스케줄 결제의 숨겨진 덫: PENDING Invoice를 먼저 만들어야 하는 이유 webhook을 Invoice 생성 트리거로 쓰면 세 가지 문제가 터집니다. 스케줄 등록 시점에 PENDING Invoice를 미리 만드는 구조로 해결한 방법을 정리했습니다.
백엔드/인증-보안 OAuth와 이메일 가입을 하나의 온보딩 플로우로 통합하기 계정 생성과 조직 설정을 분리하면 OAuth·이메일 두 가입 경로가 하나의 온보딩 페이지로 모입니다. 미들웨어 한 줄이 이 통합을 가능하게 합니다.
백엔드/인증-보안 NextAuth v5 JWT 콜백: OAuth와 Credentials 사용자 한 곳에서 분기하기 OAuth 경로에서는 user 객체에 회사 관계가 없어 토큰 초기화에 실패합니다. account.type 분기와 추가 DB 조회로 해결한 방법을 정리했습니다.