TECH NOTES
기술노트
현장에서 검증된 개발 지식을 기록합니다.
147614751474147314721471147014691468146714661465
AI
GQA·MQA — KV 캐시를 줄이는 어텐션 헤드 공유
여러 어텐션 헤드가 키·값을 공유해 KV 캐시를 몇 배 줄이는 GQA와 MQA. 품질 손실은 왜 작은지, 긴 컨텍스트·동시 요청에서 왜 이득이 큰지 정리했다.
Tools
ripgrep(rg) — grep보다 빠른 코드 검색의 비결
ripgrep(rg)이 grep보다 빠른 진짜 이유는 언어가 아니라 안 뒤지는 데 있습니다. .gitignore 존중, 병렬 처리, 선형 정규식 엔진과 grep과의 차이·실전 옵션을 정리했습니다.
Database
HOT 업데이트 — 인덱스 쓰기를 건너뛰는 PostgreSQL 최적화
UPDATE 많은 테이블만 유독 인덱스가 부풀어 오른다면 HOT을 못 타는 겁니다. Heap-Only Tuple의 조건과 hot_pct 측정, 인덱스 다이어트·fillfactor로 끌어올리는 법.
Infra
TCP 혼잡 제어 — CUBIC vs BBR, 무엇이 다른가
손실 기반 CUBIC과 대역폭·지연을 재는 BBR의 차이, 그리고 sysctl 한 줄로 바꾸는 법. 언제 어떤 혼잡 제어를 써야 처리량이 오르는지 실전 관점으로 설명합니다.
Backend
블룸 필터(Bloom Filter) — 12MB로 1천만 개를 훑는 확률적 집합
'없음'은 확실하고 '있음'은 확률적인 블룸 필터. 적은 메모리로 값비싼 조회를 걸러내는 원리와 거짓 양성률 조절, 삭제 불가 같은 함정까지 짚었습니다.
Frontend
command · commandfor — JavaScript 없이 버튼으로 팝오버·다이얼로그 열기
버튼에 command·commandfor 속성만 붙이면 자바스크립트 코드 없이 팝오버와 다이얼로그를 여닫습니다. 내장 명령과 커스텀 명령, 접근성 이점, 지원 현황과 폴백 처리까지 동작하는 예제로 차근차근 살펴봅니다.
AI
플래시 어텐션(FlashAttention) — 어텐션을 메모리로 다시 설계하다
결과는 똑같이 내면서 GPU 메모리 왕복을 줄인 플래시 어텐션의 원리. 타일링과 online softmax로 n×n 행렬을 저장하지 않고 같은 값을 더 빠르게 얻는 법을 설명한다.
Tools
Git 훅(hooks) — 커밋·푸시 순간에 끼어드는 자동화
Git 훅은 커밋·푸시 순간에 내 스크립트를 끼워 넣는 확장 지점입니다. pre-commit·commit-msg·pre-push의 동작, 종료 코드 규칙, 훅이 공유되지 않는 함정과 해결법까지 정리했습니다.
Database
PostgreSQL MVCC — xmin·xmax와 스냅샷으로 보는 동시성
PostgreSQL의 UPDATE가 왜 테이블을 부풀리는지 궁금했다면. xmin·xmax 시스템 컬럼과 스냅샷으로 MVCC의 실제 동작과 블로트·wraparound라는 대가까지 파고듭니다.
Infra
HTTP/2 멀티플렉싱 — 하나의 연결로 요청을 병렬 처리하는 법
HTTP/2 멀티플렉싱이 하나의 TCP 연결에서 요청을 병렬로 처리하는 원리와, 여전히 남는 TCP 계층 head-of-line 블로킹까지. 실무에서 신경 쓸 점을 정리했습니다.
Backend
일관성 해싱(Consistent Hashing) — 노드가 늘어도 캐시가 무너지지 않는 이유
노드 하나 추가에 캐시 전체가 날아가는 hash%N의 함정과, 해시 링·가상 노드로 재배치를 K/N으로 줄이는 일관성 해싱의 원리를 코드와 함께 정리했습니다.
Frontend
CSS Masonry 레이아웃 — 그리드로 벽돌 쌓기, 어디까지 왔나
핀터레스트식 벽돌 레이아웃을 grid-template-rows: masonry 한 줄로 만듭니다. CSS 네이티브 메이슨리의 문법과 2026년 현재 지원 상황, column·자바스크립트 대안, @supports 점진 적용까지 실전 관점에서 정리했습니다.