TECH NOTES
기술노트
현장에서 검증된 개발 지식을 기록합니다.
848382818079787776757473
Database
부분 인덱스 — WHERE로 인덱스를 작게 만드는 기술
WHERE 조건으로 일부 행만 인덱싱하는 부분 인덱스. 소프트 삭제 유니크, 치우친 상태값 최적화 등 실전 사례와 immutable 조건 같은 함정을 정리했다.
Database
EXPLAIN ANALYZE로 실행계획 읽기 — 느린 쿼리를 눈으로 잡기
EXPLAIN ANALYZE로 데이터베이스가 쿼리를 실제 어떻게 실행했는지 읽는 법 — actual time·rows 추정치·스캔 종류를 보고 느린 쿼리를 감이 아니라 근거로 잡는다.
Database
PostgreSQL 전문검색 — tsvector·GIN으로 검색 만들기
LIKE의 한계를 넘어 PostgreSQL 내장 전문검색으로 빠른 검색 만들기. tsvector·tsquery·GIN 인덱스, ts_rank 랭킹, 한국어 형태소 처리까지 실무 흐름으로 설명한다.
Database
커버링 인덱스 — SELECT가 테이블을 아예 안 읽게 만들기
커버링 인덱스로 Index Only Scan을 유도해 테이블 힙 페치를 없애는 법. INCLUDE 절, 키 컬럼과의 차이, Heap Fetches가 0이 안 되는 이유까지 실무 관점으로 정리했다.
Database
무중단으로 컬럼 추가하기 — 안전한 마이그레이션
NOT NULL+DEFAULT를 큰 테이블에 한 번에 걸면 잠금으로 장애가 난다. 단계적(expand-contract) 마이그레이션 절차.
Database
EXPLAIN ANALYZE 읽는 법 — 느린 쿼리 진단
Seq Scan·Nested Loop·actual time·rows 추정 오차. EXPLAIN ANALYZE에서 진짜 병목을 찾는 읽기 순서.
Database
복합 인덱스 컬럼 순서, 왜 중요한가
복합 인덱스 (a,b)는 a로 시작하는 조건엔 쓰이지만 b만으론 못 탄다. 등호·범위·정렬을 고려한 순서 설계.
Database
DB 커넥션 풀 사이즈, 크게 잡을수록 좋은 게 아니다
풀을 무작정 키우면 DB가 컨텍스트 스위칭으로 더 느려진다. 코어 수 기반 공식과 서버리스 환경의 함정.
Database
트랜잭션 격리수준과 데드락, 실무 기준
Read Committed로 충분한 경우가 대부분이지만, 잔액·재고는 더 강한 격리나 잠금이 필요하다. 데드락 회피 원칙까지.
Database
PostgreSQL 테이블이 계속 커진다 — VACUUM과 부풀음
행을 지워도 디스크가 안 줄고 느려지는 건 MVCC 죽은 튜플(bloat) 때문. autovacuum·VACUUM·인덱스 재생성 정리.
Database
PostgreSQL 인덱스를 만들었는데 안 타는 이유
인덱스가 있어도 Seq Scan을 하는 건 이유가 있다. 함수 가공·형변환·낮은 선택도·통계 부재 등 원인을 EXPLAIN으로 짚는다.
DB
PostgreSQL pgBackRest 백업 — 12TB DB, 시간당 백업 전략
12TB PostgreSQL DB의 시간당 incremental + 일 differential + 주 full 백업. pgBackRest 운영 1년 노하우.