TECH NOTES
기술노트
현장에서 검증된 개발 지식을 기록합니다.
1009998979695949392919089
Database
SQL 윈도우 함수 실전 — ROW_NUMBER·RANK·LAG/LEAD로 top-N·전월대비·이동평균 뽑기
OVER·PARTITION BY·ORDER BY와 ROWS/RANGE 프레임으로 그룹별 top-N, LAG 전월 대비, 누적합, 7일 이동평균, 세션화를 실제 SQL 예시로 정리했습니다. GROUP BY와의 차이와 흔한 함정까지.
Database
DB 커넥션 풀 튜닝 — PgBouncer와 풀 사이징 공식으로 커넥션 폭증 잡기
커넥션 풀은 클수록 좋은 게 아니다. 왜 PostgreSQL 커넥션이 비싼지, 풀 크기 공식과 리틀의 법칙, PgBouncer transaction/session 풀링, prepared statement 함정, 서버리스·람다 커넥션 폭증까지 실무로 정리한다.
Database
CDC와 Debezium — DB 변경을 실시간 파이프라인으로 흘려보내기
폴링 대신 트랜잭션 로그(WAL)를 읽어 DB 변경을 실시간으로 캡처하는 CDC. Debezium과 Kafka Connect로 캐시 무효화·검색 인덱스 동기화·아웃박스 패턴을 구현하고 스키마 변경까지 다루는 실전 가이드.
Database
PostgreSQL 인덱스 완전정복 — B-tree·GIN·GiST·BRIN 언제 어떻게 쓰나
PostgreSQL 인덱스 총정리. B-tree·GIN·GiST·BRIN을 언제 쓰는지, 복합 인덱스 컬럼 순서 정하는 법, 부분·표현식·커버링 인덱스, EXPLAIN으로 실제 타는지 확인하는 법과 인덱스가 안 타는 흔한 이유까지 실무 기준으로 정리했다.
Database
PostgreSQL 파티셔닝 — 수억 행 로그 테이블 다루기
큰 시계열 테이블을 RANGE 파티셔닝으로 나누기. 파티션 프루닝으로 조회를 빠르게, DROP으로 오래된 데이터를 즉시 지우는 실전 운영법을 담았습니다.
Database
pgvector — PostgreSQL로 벡터 검색·RAG 구현하기
PostgreSQL 안에서 임베딩 유사도 검색을 하는 pgvector. 거리 연산자 선택, HNSW 인덱스, 하이브리드·필터 검색까지 실전 관점으로 정리했습니다.
Database
prepared statement 플랜 캐시 — generic vs custom plan
빠르라고 넣은 prepared statement가 오히려 느려지는 이유. generic vs custom plan의 저울질, 편중 데이터의 함정, plan_cache_mode와 PgBouncer 조합까지.
Database
카디널리티 추정 — 플래너가 행 수를 예측하는 법
인덱스가 있는데 왜 안 탈까. 범인은 대개 틀린 행 수 추정입니다. pg_stats 통계와 EXPLAIN의 추정 대 실제, 확장 통계로 컬럼 상관을 바로잡는 법을 다룹니다.
Database
work_mem — 정렬과 해시가 디스크로 새는 순간
정렬·해시가 디스크로 스필하면 쿼리가 급격히 느려집니다. work_mem이 연산당이라는 함정, EXPLAIN으로 스필을 잡는 법, OOM 없이 안전하게 올리는 국소 튜닝.
Database
LISTEN/NOTIFY — PostgreSQL만으로 실시간 알림 구현하기
별도 메시지 브로커 없이 DB만으로 실시간 알림을. LISTEN/NOTIFY의 트랜잭션 결합·페이로드 한계와, 유실을 막는 아웃박스 패턴, 커넥션 풀 함정까지 정리했습니다.
Database
fillfactor — UPDATE 많은 테이블을 살리는 저장 옵션
페이지를 일부러 덜 채우는 fillfactor가 왜 UPDATE 헤비 테이블의 성능을 좌우할까. HOT 업데이트가 앉을 자리를 만드는 원리와 워크로드별 권장값, 검증법까지.
Database
HOT 업데이트 — 인덱스 쓰기를 건너뛰는 PostgreSQL 최적화
UPDATE 많은 테이블만 유독 인덱스가 부풀어 오른다면 HOT을 못 타는 겁니다. Heap-Only Tuple의 조건과 hot_pct 측정, 인덱스 다이어트·fillfactor로 끌어올리는 법.