TECH NOTES
기술노트
현장에서 검증된 개발 지식을 기록합니다.
105104103102101100999897969594
Database
조회수 하나가 사이트맵을 망친다 — Prisma updatedAt과 lastmod 오염
조회수를 Prisma update로 올리면 @updatedAt이 매번 바뀌어 사이트맵 lastmod와 dateModified가 "마지막으로 누가 본 시각"이 된다. 원인, 탐지 SQL, raw SQL 카운터로 고친 방법을 정리했다.
Database
실행계획이 갑자기 바뀌었을 때 — 플랜 고정과 쿼리 힌트 다루기
어제까지 빠르던 쿼리가 오늘 느려지는 이유와 대응책을 정리한다. 파라미터 스니핑, 통계 갱신에 따른 계획 변경, 힌트와 플랜 고정의 사용법, 그리고 그 전에 해야 할 구조적 해결을 다룬다.
Database
학습 기반 쿼리 최적화 — 모델이 옵티마이저를 도울 수 있는 지점
옵티마이저가 실행계획을 고르는 과정에서 무엇이 틀리는지, 학습 기반 접근이 어디를 개선하는지 정리한다. 카디널리티 추정 오류, 플랜 선택, 적용 시 운영 리스크와 검증 방법을 다룬다.
Database
포스트그레SQL 파티션 재구성 — 병합·분할을 안전하게 수행하는 절차
시계열 파티션을 합치거나 쪼개야 할 때 쓰는 DETACH/ATTACH 패턴을 정리한다. 잠금 범위, CONCURRENTLY 옵션, 제약 조건 검증 생략, 대용량에서의 배치 이동까지 실무 절차로 다룬다.
Database
포스트그레SQL 전문검색의 한계 — tsvector로 안 되는 것과 BM25 확장의 자리
tsvector·ts_rank가 실제 검색 품질에서 부족해지는 지점을 짚는다. 랭킹 모델의 차이, 한국어 형태소 처리, 자동완성과 오타 보정, 그리고 언제 전용 검색엔진이나 BM25 확장으로 넘어가야 하는지 정리한다.
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 조합까지.