재귀 크롤러의 세 부품과 런타임별 구현 부담
재귀 링크 체커는 worklist·visited set·quiescence detector 셋뿐이고, 런타임마다 그중 무엇을 기본 제공하고 무엇을 직접 구현해야 하는지가 다르다.
네이버 지도 마커 + fitBounds
좌표를 데이터에서 계산하고, 0·1·N 카메라를 가르고, 줌 오버슈트·여백·마커 생명주기를 처리하는 절차.
언제 — naver.maps v3 에 마커를 여러 개 찍고 카메라를 자동으로 맞출 때. 증상이 있으면 바로 간다.
React 컴포넌트 안정성 규칙 열셋 — 앱 컴포넌트와 라이브러리 컴포넌트
tearing·FOUC·hydration 부터 Activity·ViewTransition 까지, 각 규칙이 언제 필요한지 적용 범위와 함께.
언제 — 컴포넌트에 이 규칙을 적용할지 정할 때. 먼저 이게 앱 컴포넌트인지 라이브러리 컴포넌트인지 가른다. 앱 컴포넌트는 자기가 어디서 쓰이는지 알기 때문에 절반은 해당이 없다 — 전부 예방적으로 적용하면 그게 새로운 over-engineering 이다.
Chrome 외부 앱 딥링크 "항상 열기" 해제
설정 UI에 항목이 없는 커스텀 스킴 자동 실행 허용을, origin 단위로 되돌리는 순서.
언제 — 커스텀 스킴(myapp://) 다이얼로그에서 "항상 열기 허용"을 실수로 체크해 되돌리고 싶을 때. 설정 UI 에는 항목이 없고 실제 상태는 프로필의 JSON 에 origin 단위로 저장된다.
TOTP 2FA 구현 (otpauth)
등록·확정·검증 세 단계와, 라이브러리가 안 해주는 것들. OTP 검증 서버 같은 건 없다.
언제 — 앱 기반 2FA(TOTP, RFC 6238)를 직접 붙일 때. 먼저 직접 구현할 일인지부터 가른다.
영상 → 번역 자막 파이프라인 (온디바이스)
단어 타임스탬프에서 문장 재조립, 배치 번역, 자막 큐 재분할, VTT mux까지. 배치 전용.
언제 — 영상에 번역 자막을 붙일 때. 배치 처리 전제, 실시간 아님. STT 는 만들지 않고 이미 있는 걸 쓴다 — 새로 만드는 건 R4 이후 전부다.
SPA 메모리 누수 soak test
백엔드가 서버를 오래 돌려 누수를 잡듯, 프런트에서는 시작 화면과 끝 화면이 같은 플로우를 반복해서 잡는다. drawer 열고 닫기를 200번 돌린 뒤 리스너·노드 수가 처음보다 늘어 있으면 그게 누수다 — 같은 자리로 돌아왔는데 늘었으니까. Playwright 로 클릭을 반복하고 CDP 로 수를 읽는다.
그래서 플로우를 고르는 기준이 곧 판정 기준이다. 무한 스크롤·채팅처럼 설계상 메모리가 늘어나는 화면은 이 방식으로 판정할 수 없다.
출처
TypeScript 타입변수 추론 진단
T가 왜 그 타입으로 정해졌는지 역추적하는 절차. 수집·해소 2단계 모델과 우회 패턴.
언제 — 함수 호출에서 T 가 엉뚱하게 정해졌을 때. 증상으로 찾아 들어간다.
프로그래밍 원칙을 조작 가능하게 — 증상·절차·경계로 다시 쓰기
선언형 슬로건("파생하라", "추상을 미뤄라")을 언제 적용하고 언제 적용하지 말지의 절차로 바꾼 일곱 레시피.
언제 — 원칙 목록이 "무엇을 믿어라"는 주는데 "언제 어떻게 하라"를 안 줄 때. 원칙마다 증상 → 절차 → 경계(언제 적용하지 말 것) 를 붙인다. 경계가 핵심이다 — 슬로건은 자기가 틀리는 지점을 말하지 않는다.