TECH NOTES
기술노트
현장에서 검증된 개발 지식을 기록합니다.
150615051504150315021501150014991498149714961495
AI
LLM 양자화 — GPTQ·AWQ·GGUF, INT4가 뭘 버리고 뭘 지키나
가중치를 4비트로 줄여도 왜 멀쩡한지, GPTQ·AWQ·GGUF의 차이와 Q4_K_M 같은 이름 읽는 법, 품질과 크기의 스위트스폿까지 정리한 로컬 LLM 양자화 가이드.
Etc
ANSI 이스케이프 코드 — 터미널에 색과 커서를 다루는 법
ls의 색깔, 진행 막대, 스피너는 모두 ANSI 이스케이프 코드로 동작합니다. CSI·SGR 색 코드, 커서 제어, 리셋·파이프·폭 계산 함정까지 원리부터 실전까지 정리했습니다.
Database
prepared statement 플랜 캐시 — generic vs custom plan
빠르라고 넣은 prepared statement가 오히려 느려지는 이유. generic vs custom plan의 저울질, 편중 데이터의 함정, plan_cache_mode와 PgBouncer 조합까지.
Infra
NUMA와 hugepages — 메모리 지역성 튜닝의 기본
멀티소켓 서버의 NUMA 원격 접근과 hugepages의 TLB 최적화, THP의 지연 스파이크 함정까지. 언제 손대고 언제 두어야 하는지 실전 기준으로 설명합니다.
Backend
2단계 커밋(2PC) — 분산 트랜잭션의 원자성과 그 대가
여러 시스템에 걸친 트랜잭션을 전부 커밋 아니면 전부 롤백으로 만드는 2PC의 원리와 치명적 블로킹 문제, 그리고 사가·아웃박스 같은 현대적 대안을 비교합니다.
Frontend
AbortSignal.timeout() · any() — fetch 취소를 한 줄로
fetch 타임아웃에 더는 setTimeout·clearTimeout이 필요 없습니다. AbortSignal.timeout()과 any()로 취소 로직을 한 줄로 줄이고 타임아웃과 사용자 취소를 구분하는 최신 패턴을 소개합니다.
AI
지식 증류(Distillation) — 큰 모델의 지능을 작은 모델에 옮기기
큰 교사 모델의 확률 분포를 작은 학생이 따라 배우는 지식 증류. 부드러운 라벨이 왜 강한지, 온도의 역할과 데이터 증류의 라이선스 주의점까지 짚었다.
Etc
IEEE 754 심화 — NaN, 무한대, 그리고 음의 0
NaN·무한대·음의 0은 버그가 아니라 IEEE 754가 정의한 특수값입니다. 비트 구조, NaN이 자기 자신과도 다른 이유, 무한대·음의 0의 함정과 안전한 검사법을 정리했습니다.
Database
카디널리티 추정 — 플래너가 행 수를 예측하는 법
인덱스가 있는데 왜 안 탈까. 범인은 대개 틀린 행 수 추정입니다. pg_stats 통계와 EXPLAIN의 추정 대 실제, 확장 통계로 컬럼 상관을 바로잡는 법을 다룹니다.
Infra
OCSP 스테이플링 — 인증서 폐기 확인을 빠르게
OCSP 스테이플링이 인증서 폐기 확인의 왕복과 프라이버시 노출을 없애는 원리와 Nginx 설정. 왜 이 기법이 나왔고 무엇을 해결했는지 짚어봅니다.
Backend
CDC(변경 데이터 캡처) — DB 변경을 실시간 스트림으로 흘려보내기
DB의 삽입·수정·삭제를 트랜잭션 로그에서 뽑아 실시간 스트림으로 내보내는 CDC. 폴링 대 로그 기반 비교, Debezium, 아웃박스 패턴, 도입 주의점을 정리했습니다.
Frontend
Intl.Segmenter — 이모지·한글을 사람이 보는 글자 수로 세기
str.length가 이모지 하나를 8로 세는 이유와 해법을 파헤칩니다. Intl.Segmenter로 grapheme·단어·문장을 로케일 규칙에 맞게 정확히 쪼개고 글자 수를 제대로 세는 실전 패턴과 성능 팁까지 정리했습니다.