프로덕션 코드가 SELECT * 쓰면 안 되는 이유
SELECT * 가 psql 탐색엔 OK. 프로덕션 코드선 시한폭탄:
- 네트워크로 모든 컬럼 — 낭비된 대역폭.
- Covering 인덱스 무력화 — planner 가 모든 컬럼 fetch 해야 하면 index-only scan 못 고름.
- 컬럼 추가 또는 재배치 시 미묘하게 깨짐 — 세 번째 컬럼이 X 라고 가정한 코드가 이제 Y read.
- 의도 흐림 — reader 가 쿼리가 어느 필드 의존하는지 모름.
룰
프로덕션 코드는 명시 컬럼 나열. 마이그레이션과 일회성 스크립트는 SELECT * OK. Default 로 모든 컬럼 선택하는 ORM 이 가끔 받아들일 만함 (매핑이 type-checked) — 그러나 테이블에 한 달에 한 번 read 하는 4MB JSONB 컬럼 있으면 그게 이제 모든 fetch 에.