TECH NOTES
기술노트
현장에서 검증된 개발 지식을 기록합니다.
143414331432143114301429142814271426142514241423
Frontend
<dialog> 요소 — 라이브러리 없이 접근성 갖춘 네이티브 모달
HTML dialog 요소와 showModal() 하나로 포커스 가둠·배경 비활성화·ESC 닫기·접근성 역할까지 공짜로 얻는 법. 백드롭 클릭으로 닫기, 닫힘 애니메이션 등 놓치기 쉬운 디테일까지 예제로 다뤘다.
AI
구조화 출력 신뢰성 — 스키마 강제·검증·재시도
LLM 구조화 출력을 100% 믿을 수 없을 때의 방어법. 스키마 강제·검증·재시도 3단 구조, 토큰 잘림과 안전 거부처럼 강제로 못 막는 실패의 처리, enum과 additionalProperties 활용까지 JSON 출력을 튼튼하게 만드는 실전이다.
Tools
Makefile 제대로 쓰기 — .PHONY, 자동 변수, 증분 빌드
C 빌드용이라는 편견은 접어두세요. .PHONY, 자동 변수, 패턴 규칙으로 언어 무관 프로젝트의 증분 빌드와 명령 런처를 만드는 법, 그리고 탭 함정과 서브셸 실수까지.
Database
EXPLAIN ANALYZE로 실행계획 읽기 — 느린 쿼리를 눈으로 잡기
EXPLAIN ANALYZE로 데이터베이스가 쿼리를 실제 어떻게 실행했는지 읽는 법 — actual time·rows 추정치·스캔 종류를 보고 느린 쿼리를 감이 아니라 근거로 잡는다.
Infra
테일 샘플링 — 에러 트레이스는 남기고 트레이스 저장 비용은 줄이는 법
head 샘플링은 에러 트레이스를 확률에 맡긴다. OTel Collector의 tail_sampling으로 트레이스 내용을 보고 저장을 결정해, 에러는 보존하고 저장 비용은 줄이는 법.
Backend
타임아웃 예산과 데드라인 전파 — 유령 작업을 없애는 법
서비스 체인에서 각자 타임아웃을 잡으면 생기는 유령 작업 문제. 데드라인 전파와 Go context로 남은 시간을 넘겨 자원 낭비를 막는 법을 정리했습니다.
Frontend
폰트 폴백 메트릭 오버라이드 — 웹폰트 교체 시 CLS 없애기
웹폰트가 뒤늦게 교체되며 화면이 툭 밀리는 CLS를 없애는 폰트 폴백 메트릭 오버라이드 기법. size-adjust와 ascent-override 사용법, 배율을 직접 구하는 방법, next/font 자동화까지 실전 위주로 정리했다.
AI
추론 모델은 언제 쓰나 — effort와 비용의 균형
추론 모델을 언제 켜고 끄나. effort와 적응형 사고로 생각의 깊이를 조절하는 법, 작업 유형별 라우팅, 출력 토큰이 잘리는 max_tokens 함정까지 지능과 지연과 비용의 삼각형을 저울질하는 실전 감각을 정리했다.
Tools
셸 리다이렉션과 파일 디스크립터 — 2>&1이 뜻하는 것
2>&1을 부적처럼 붙이지만 왜 그런지 모른다면. stdin/stdout/stderr가 0·1·2인 이유부터 순서를 틀리면 로그가 새는 함정까지, 셸 리다이렉션을 원리로 정리했습니다.
Database
PostgreSQL 전문검색 — tsvector·GIN으로 검색 만들기
LIKE의 한계를 넘어 PostgreSQL 내장 전문검색으로 빠른 검색 만들기. tsvector·tsquery·GIN 인덱스, ts_rank 랭킹, 한국어 형태소 처리까지 실무 흐름으로 설명한다.
Infra
Prometheus Exemplar — 메트릭 그래프에서 트레이스로 한 번에 점프하기
튀는 지연 그래프에서 그래서 어떤 요청인지에 막힌 적 있다면. Prometheus exemplar로 메트릭 샘플에 trace_id를 심어 트레이스로 바로 넘어가는 계측과 설정법을 정리했다.
Backend
재시도 지수 백오프와 지터(Jitter) — 재시도 폭풍을 막는 법
고정 간격 재시도가 서버를 무너뜨리는 이유와 지수 백오프·지터로 재시도 폭풍을 막는 법. Full Jitter, Retry-After, 재시도 예산까지 실전 정리.