원칙

반정규화는 출발점이 아니라 예외적 최적화입니다. 먼저 정규화된 상태를 만들고, 성능 병목이 측정으로 확인된 경우에만 좁게 적용한 뒤 운영 규칙을 같이 붙입니다.

1. 기본 상태 3NF까지 먼저 정규화

중복을 줄이고 데이터 역할을 분리한 구조에서 시작합니다. 반정규화는 기본 설계의 대체재가 아닙니다.

→
2. 검증 게이트 실행 계획과 지표로 병목 확인

느리다는 느낌이 아니라 실제 쿼리 비용, 응답 시간, 스캔 범위를 보고 판단합니다. 측정 없이는 적용하지 않습니다.

→
3. 상태 변화 문제 지점만 선별 반정규화

전체 스키마를 바꾸지 않고 필요한 쿼리·테이블에만 적용합니다. JOIN 제거, 집계 즉시 제공처럼 목적이 분명해야 합니다.

테이블 병합 중복 컬럼 요약 테이블
적용 후 관리 반정규화된 상태는 중복 데이터 운영 규칙까지 함께 가져갑니다

적용 자체보다, 그 뒤에 무엇을 제한하고 어떻게 맞추며 왜 남겼는지가 유지보수를 좌우합니다.

어디까지 넓힐까
최소 범위
병목이 확인된 쿼리·테이블만 대상으로 합니다. 전체 스키마를 한 번에 반정규화하면 부작용이 커집니다.
값을 어떻게 맞출까
정합성 전략
트리거·배치·MV 같은 동기화 방식을 정하고, 실패 시 재동기화나 복구 절차까지 미리 정의합니다.
왜 남겨 두었나
문서화
적용 이유와 트레이드오프를 기록해 둬야 나중에 유지보수, 성능 재검토, 리팩토링의 근거가 남습니다.
한 줄 정리: 반정규화는 정규화 → 측정 → 제한 적용 → 정합성 관리 순서로 다뤄야 안전한 성능 최적화가 됩니다.