얇은 훅은 혼자 오지 않는다: 훅이 쌓이고 엮일 때

지난 글에서 제값을 하지 못하는 얇은 커스텀 훅은 만들지 말자고 했다. 그런데 레거시 코드를 한참 돌아다녀 보니 얇은 훅은 혼자 오지 않았다. 쌓이고, 엮이고, 서로를 감쌌다. 이번에는 그렇게 마주친 유형을 사례로 정리한다. 코드는 모두 익명화하고 구조만 남겼다. [Read More]

레거시를 다음으로 옮기는 전환용 피처 플래그, 지우기 쉽게 설계하기

커머스 프론트엔드에서 목록 항목에 붙는 조건부 표시(배지)의 데이터 소스를 바꾸는, 작아 보이는 작업이었다. 그런데 그 과정에서 피처 플래그를 어떻게 설계해야 나중에 아프지 않은지, 그리고 레거시 구조가 어떻게 작은 변경을 긴 작업으로 만드는지를 다시 배웠다. 기능 자체는 익명화하고 구조와 판단만 남긴다. [Read More]

AI 도구를 바꾸는 비용을 낮추는 법 (2) — Cursor에서 Claude로, 구체 사례

지난 글에서는 “규칙만 분리해 두면 도구가 바뀌어도 다시 만들 것은 많지 않다”는 원칙을 정리했다. 이번 글은 그 원칙을 Cursor → Claude Code로 실제 옮기며 부딪힌 구체 사례들이다. 사내 티켓·도메인·패키지·민감 정보는 빼고, 구조와 판단 기준만 남긴다. [Read More]

앱 WebView에서 장바구니가 많을 때 — 로그가 없으면 FE가 보는 것

커머스 앱 WebView에서 장바구니 개수가 많을 때만 화면이 멈춘다는 VOC가 들어왔다. Sentry·Firebase에는 아무것도 없었다. 이 글은 그때 팀 채널에서 정리했던 증상·가설·시도를 회사 식별 없이 다른 팀도 쓸 수 있는 체크리스트로 옮긴 것이다. 선행: WebView와 UA · HTML-in-Canvas·capability [Read More]