리전을 서울로 옮겼는데 프록시만 싱가포르에 남아 있었다
DB까지 다녀오는 API보다 아무 일도 안 하는 프록시가 4배 느린 이유를 쫓다 발견한 설정의 사각지대와, getUser()를 로컬 JWT 검증으로 바꾸며 감수한 트레이드오프
DB까지 다녀오는 API보다 아무 일도 안 하는 프록시가 4배 느린 이유를 쫓다 발견한 설정의 사각지대와, getUser()를 로컬 JWT 검증으로 바꾸며 감수한 트레이드오프
배포한 앱의 초기 로딩이 느려서 Supabase 무료 플랜을 의심했다가, 아무 일도 하지 않는 401 응답을 재보고 진짜 원인을 찾은 기록 — Vercel 기본 함수 리전 iad1과 서울 Supabase 사이의 태평양 왕복
AGENTS.md에 글로만 있던 8단계 작업 절차를 Claude Code 슬래시 커맨드로 묶으면서, 사람이 멈춰야 하는 지점과 사람이 타이핑해야 하는 지점이 다른 축이라는 걸 알게 된 기록
await 없이 흘려보낸 프리페치가 만든 하이드레이션 불일치 — e2e 로그에서 18건을 세고, 첫 렌더를 서버와 맞춰 없애기까지
크롬에서 유튜브 댓글창이 위아래로 진동하던 현상을 시크릿 모드 비교 → 확장 매니페스트 분석 → 주입된 CSS 추적으로 좁혀 간 기록과, 전역 주입 CSS가 남의 사이트를 부수는 패턴 정리
역할별 서브에이전트와 슬래시 커맨드로 기획-설계-구현-검증을 잇는 과정에서, 매번 손으로 때우던 지점을 하나씩 자동화한 기록
TBT 8배 회귀를 진단하다 발견한 것 — 회귀는 코드가 아니라 데이터 때문이었고, 그 데이터를 세다가 API가 1,000건에서 조용히 잘리고 있다는 걸 알았다
searchParams를 읽는 순간 페이지가 동적 렌더링으로 바뀐다 — 잘 동작하는 기능 뒤에서 렌더링 전략이 바뀐 것을 발견하고, 경로 기반 페이지네이션과 목록 캐싱으로 되돌린 기록
템플릿을 추가해도 일간 목록에 안 뜨던 버그 — 진행 중인 요청에 무효화가 흡수되면서 낡은 응답이 신선한 데이터로 캐시에 앉는 경합을 타임라인으로 재구성하고 고친 기록
Lighthouse 회귀를 쫓다 발견한 무력화된 메모이제이션 — 값이 같은데도 메모가 깨지는 이유와, 고쳤는데 지표가 안 움직여서 알게 된 측정 도구의 경계