August 25, 2026 · 7 min read
Playwright로 로그인 페이지에 접근하면 Request Blocked가 반환되는데 같은 URL을 curl로 부르면 200이 오는 상황을 다룹니다. 도메인 단위로 범위가 잡힌 브라우저 지문 탐지의 동작 방식, user-agent 위장과 navigator.webdriver 패치가 통하지 않는 이유, 우회 대신 자동화를 접는 판단까지 정리합니다.
August 19, 2026 · 6 min read
패키지 이름을 바꾸면서 버전 범위를 그대로 뒀다. 포크는 이름만 새로 시작하고 버전은 이어받는다. npm은 ETARGET으로 죽고 빌드는 실패했지만 프로덕션 도메인은 이전 배포를 계속 가리켰다. 사이트가 200인 것과 배포가 성공한 것은 다른 일이다.
August 13, 2026 · 14 min read
은퇴 안전인출률 4% 룰의 원 출처인 Bengen 1994와 Trinity Study 1998을 직접 확인하고, 수익률 순서 위험을 Python 시뮬레이션으로, 미국 데이터 편향을 17개국, 38개국 국제 비교로 정량화한다. 한국에서 무엇을 기준으로 삼아야 하는지 국민연금 차감 후 부족액 계산까지 정리한다.
August 06, 2026 · 19 min read
DNS가 도메인 이름을 IP로 바꾸는 전 과정을 재귀 질의·레코드 타입·캐싱·TTL 중심으로 뜯어봅니다. UDP 53이 언제 TCP로 넘어가는지, dig로 직접 확인하는 방법, 그리고 캐시 포이즈닝·터널링·리바인딩 같은 DNS 공격과 DNSSEC·DoT·DoH 방어까지 보안 엔지니어 관점으로 정리합니다.
August 05, 2026 · 4 min read
create-react-app 프로젝트를 Vite 5로 옮기면서 만난 세 가지 함정 — JSX 확장자, %PUBLIC_URL%, react-helmet. 어느 것도 에러 메시지가 친절하지 않았다.
July 14, 2026 · 5 min read
할 일 목록을 드래그해도 아무 일도 일어나지 않았습니다. 콘솔 에러조차 없었습니다. 원인은 개발이 중단된 react-beautiful-dnd가 React 18 StrictMode에서 Droppable을 등록하지 못하는 것이었고, API가 똑같은 포크 @hello-pangea/dnd로 import 한 줄만 바꿔 해결했습니다.
July 10, 2026 · 6 min read
Pomodoro 타이머를 다른 탭에 두고 작업하다 돌아오니 25분이 한참 남아 있었습니다. 원인은 브라우저의 백그라운드 탭 setInterval 스로틀링이었고, tick 카운트다운을 Date.now() 기반 벽시계 재계산으로 바꿔 해결했습니다.
July 02, 2026 · 8 min read
KISA 보호나라와 벤더 PSIRT의 보안 권고문 RSS를 표준 라이브러리만으로 수집하고, SQLite UNIQUE 제약으로 중복을 걸러 새 권고문만 메일로 알려주는 수집기를 처음부터 만들어봅니다. 재시도 전략, 첫 실행 seed 모드 등 운영에서 겪는 함정까지 다룹니다.
June 23, 2026 · 6 min read
Kaggle T4로 3B 모델을 파인튜닝하던 중 주간 무료 quota가 46% 지점에서 소진됐습니다. checkpoint에서 학습을 이어붙이는 과정에서 만난 세 가지 함정 — 텐서 수 불일치, 디스크 풀, OOM 메모리 잔존 — 과 해결책을 정리합니다.