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 메모리 잔존 — 과 해결책을 정리합니다.
June 18, 2026 · 4 min read
같은 타겟에 같은 템플릿으로 Nuclei 스캔을 돌렸는데 매칭 수가 런마다 258~275로 흔들렸습니다. 원인은 OpenSSH 템플릿들이 SSH 포트에 동시 핸드셰이크를 날려 sshd MaxStartups에 걸린 것이었고, -concurrency를 낮춰 100% 재현성을 확보한 과정을 정리합니다.
June 09, 2026 · 4 min read
Rocky 9에서 빌드한 바이너리가 CentOS 6에서 GLIBC_2.34 not found로 실행이 안 됐습니다. 빌드 서버를 CentOS 6.5로 낮추는 전략과, 보안 하드닝 서버에서 만나는 /tmp noexec 문제와 --runtime-tmpdir 해결법을 정리합니다.
June 01, 2026 · 4 min read
개발 환경에서는 멀쩡히 동작하던 JSON 데이터 로더가 PyInstaller 바이너리에서 빈 dict를 반환했습니다. --collect-submodules와 --collect-data의 차이, sys._MEIPASS 폴백 패턴을 정리합니다.
May 27, 2026 · 5 min read
Pomodoro 타이머 앱에서 배경음이 뚝뚝 끊기는 버그를 겪었습니다. stopNoise 함수에 useCallback을 빠뜨렸고, 그게 useEffect deps 체인을 타고 매 렌더마다 오디오 컨텍스트를 close/reopen했습니다. useCallback을 왜, 언제 써야 하는지 정리합니다.
May 12, 2026 · 5 min read
Playwright로 1페이지는 수집되는데 2페이지부터 JSON 대신 빈 HTML이 반환되 는 문제를 겪었습니다. Cloudflare가 AJAX 요청을 막는 원리와 새 컨텍스트 + init_script 오버라이드로 해결한 과정을 정리합니다.
May 12, 2026 · 5 min read
Pomodoro 타이머를 만들다가 설정이 반영 안 되고, 배경음이 끊기고, 초기화가 오작동하는 버그를 연달아 겪었습니다. 원인은 전부 stale closure였고, stateRef 패턴과 useCallback으로 해결했습니다.
May 11, 2026 · 11 min read
JWT 알고리즘 혼동 공격, none 알고리즘 취약점, OAuth CSRF, 오픈 리다이렉트, 세션 하이재킹까지 웹 인증·인가에서 실제로 발생하는 취약점과 안전한 구현 방법을 코드 중심으로 정리합니다.