본문으로 건너뛰기
brandon@moba: ~/whoami
brandon@moba:~$ whoami --verbose

프로덕션 시스템을 만드는 백엔드 엔지니어입니다. 영화를 전공하다 엔지니어가 되었고, 지금은 Moba에서 백엔드를 리드하고 있어요. 이 블로그엔 그동안 배운 것들을 기록합니다.

동기화한 이벤트
7M
발행한 글
167
폴리글랏 서비스
6
이중 언어 기록
EN/KR
#

프로젝트

devops

Anthropic Prompt Cache TTL과 비용 메커니즘

Anthropic이 2026년 3월 초쯤 Claude Code의 prompt cache TTL을 1시간에서 5분으로 조용히 줄였어요. 이걸 모르면 메시지 사이에 5분 이상 비는 순간 cache가 날아가고, 다음 메시지에 전체 conversation prefix를 처음부터 다시 써야 해요. 기본 입력 단가의 1.25배짜리 비용으로요.

devops

pre-commit hook race가 내 파일을 남의 커밋에 집어넣은 사건

한 저장소에 커밋하는 두 세션, 느린 pre-commit hook, 그리고 `fatal: cannot lock ref HEAD`. 시끄러운 실패는 쉬운 쪽이에요 — 조용한 실패는 내 staged 파일을 다른 세션의 커밋에 그쪽 메시지로 넘겨버려요.

devops

Serena MCP — Claude Code 다중 프로필 설정 (cpers/cwork)

Claude Code 이중 프로필 환경(cpers/cwork)과 Codex에 Serena MCP server를 설치하는 전체 절차. 권장 hook 4개, system-prompt 교체, 그리고 설치 도구가 기본 ~/.claude.json에만 쓰고 프로필별 저장소는 놓치는 함정까지 다뤄요.

ai-ml

Claude Code Agent Teams를 실제 작업에 쓰며 배운 점

Agent Teams의 현재 동작과 version별 pane 문제, 작업 소유권, 결과 전달 실패를 구분해서 정리한 사용 기록이에요.

ai-ml

Gemini 비대칭 Embedding 활용하기

Query와 document를 다르게 인코딩하면 검색 품질이 좋아져요. Gemini는 이걸 task_type 파라미터로 표현했고, 새 모델에서는 같은 아이디어가 prompt 안으로 옮겨갔어요.

backend

BeautifulSoup + lxml memory overhead: scraper에 크기 제한이 필요한 이유

httpx로 페이지를 받아 BeautifulSoup에 넘기는 scraper는 OOM 위험을 안고 있어요. 파싱한 DOM tree가 원본 HTML보다 훨씬 많은 메모리를 쓰기 때문이에요. streaming과 두 겹의 크기 거부로 정리한 과정이에요.

backend

FastAPI Dependency Injection 패턴

모든 라우트 핸들러에서 `Depends(get_current_user)`를 반복하면 보일러플레이트가 생기고 불일치가 발생하기 쉬워요

backend

FastAPI domain 예외 handler: 404여야 할 응답이 500으로 나갈 때

service layer에서 raise한 domain 예외는 FastAPI에 등록하기 전까지 전부 500으로 나가요. 계층 전체를 handler 하나로 묶으면서 알게 된 것과, review가 뒤늦게 짚어준 네 가지 함정을 정리했어요.

backend

PostgreSQL IN 절 파라미터 제한

PostgreSQL wire protocol은 파라미터 쿼리를 65,535개 바인드 파라미터로 제한해요. TypeORM의 `In([...])`을 500-1,000개로 쪼개면 실질적인 성능 한계 안에 머물러요.

backend

캘린더 동기화에서 Stale Record와 Orphan Record의 차이

Google Calendar API 동기화가 남기는 두 종류의 찌꺼기 행은 겉보기에 똑같지만 처리 방법은 정반대예요

enko