6-1. 역정규화란 무엇인가
역정규화(De-normalization)는 말 그대로 정규화의 반대 작업이다.
정규화는 데이터를 여러 테이블로 쪼개고 중복을 제거해 무결성을 높이는 과정이다. 하지만 정규화를 과도하게 적용하면 다음과 같은 문제가 생기기도 한다.
- 필요한 데이터를 조회하려면 조인이 지나치게 많이 필요하다.
- 자주 필요한 계산을 매번 실시간으로 수행해야 한다.
이럴 때 의도적으로 중복을 허용하거나, 계산 결과를 컬럼·테이블에 미리 저장하는 것이 역정규화이다.
6-2. 역정규화의 목적
- 조회 쿼리 성능 향상
- 조인 횟수 감소
- 특정 보고서, 통계 등에 대한 응답 시간 단축
즉, 성능 개선이 역정규화의 핵심 목적이다.
6-3. 역정규화의 대표적인 패턴
- 중복 컬럼 추가
- 예:
order_item 테이블에 상품 단가와 수량만 있더라도, orders 테이블에 total_price 컬럼을 추가해 주문 총액을 저장한다.
- 조회 시마다 합계를 계산하지 않아도 되어 속도가 빨라진다.
- 집계 테이블(요약 테이블) 생성
- 일별 주문 수, 일별 매출액처럼 자주 조회되는 통계 데이터를 별도 테이블에 미리 저장한다.
- 자주 조인되는 테이블 병합
- 조회 패턴상 항상 같이 사용하는 테이블 두 개를 하나로 합쳐 조인을 없애기도 한다.
6-4. 역정규화의 단점과 주의점
역정규화는 반드시 신중하게 사용해야 한다. 대가가 분명히 존재하기 때문이다.
- 데이터 중복으로 인해 수정 시 일관성 유지가 어렵다.
- 동일한 정보를 여러 곳에서 업데이트해야 하므로 애플리케이션 로직이 복잡해진다.
- 잘못 설계하면 오히려 유지보수 비용과 버그 가능성이 커진다.