이종관
Back to Posts

데이터베이스 반정규화(Denormalization) 전략

읽기 성능 최적화를 위한 반정규화 기법과 적용 시 고려사항

2025년 1월 15일·5 min read·
data
database
denormalization
data-modeling
performance
trade-offs

반정규화란?

**반정규화(Denormalization)**는 정규화를 일부러 깨뜨리고 중복 데이터를 허용함으로써 읽기 성능을 개선하는 설계 기법입니다.

정규화는 데이터 중복과 이상 현상을 최소화하지만, 비즈니스 요구에 따라 성능을 위해 트레이드오프가 필요할 때 반정규화를 적용합니다.

반정규화의 필요성

1. 성능 개선

-- 정규화된 구조: 3개 테이블 JOIN 필요
SELECT o.order_id, c.name, p.product_name
FROM orders o
JOIN customers c ON o.customer_id = c.id
JOIN products p ON o.product_id = p.id;

-- 반정규화 후: 단일 테이블 조회
SELECT order_id, customer_name, product_name
FROM orders_denormalized;

2. 개발 단순화

복잡한 다중 조인을 간소화하여 SQL과 애플리케이션 로직을 간결하게 만듭니다.

3. OLAP/BI 환경 최적화

분석 도구에서 여러 테이블을 반복 조인하는 비용을 줄여 분석 시간을 단축합니다.

반정규화의 단점

단점설명
데이터 불일치중복 데이터 갱신 시 불일치 위험
쓰기 비용 증가INSERT/UPDATE/DELETE 시 더 많은 테이블 수정
구조 복잡도어디서 중복을 유지하는지 파악 어려움
유지보수 어려움시간이 지나면 설계 의도 파악 곤란

반정규화 기법

1. 중복 속성 추가

-- 주문 테이블에 고객 이름 중복 저장
ALTER TABLE orders ADD COLUMN customer_name VARCHAR(100);

-- 장점: JOIN 없이 바로 조회
-- 단점: 고객 이름 변경 시 orders도 업데이트 필요

2. 집계 결과 저장

-- 일별 매출 집계 테이블
CREATE TABLE daily_sales_summary (
    date DATE PRIMARY KEY,
    total_sales DECIMAL(15, 2),
    order_count INT,
    avg_order_value DECIMAL(10, 2)
);

-- 실시간 집계 대신 미리 계산된 결과 조회

3. Materialized View

-- PostgreSQL
CREATE MATERIALIZED VIEW order_summary AS
SELECT
    date_trunc('day', order_date) as day,
    SUM(amount) as total,
    COUNT(*) as count
FROM orders
GROUP BY 1;

-- 주기적 갱신
REFRESH MATERIALIZED VIEW order_summary;

4. 중복 테이블 복제

자주 쓰이는 참조 데이터를 여러 DB나 샤드에 복제하여 네트워크 트래픽 감소, 지연 시간 개선

5. 정규화 단계 해제

BCNF → 3NF로 의도적으로 낮춰 한 테이블에 더 많은 속성을 담아 조인 횟수를 줄임

적용 시 고려사항

접근 패턴 분석

읽기 비중 높음 (99% 읽기, 1% 쓰기)
→ 반정규화 적합

쓰기 비중 높음 (50% 읽기, 50% 쓰기)
→ 반정규화 신중히 검토

명확한 성능 목표

  • 쿼리 응답 시간 목표 수치화
  • 충분한 벤치마크 테스트 진행
  • 무조건적인 반정규화 피하기

데이터 동기화 전략

방식장점단점
트리거실시간 동기화DB 부하 증가
배치 작업DB 부하 분산일시적 불일치
애플리케이션 로직유연함코드 복잡도 증가

반정규화 전 검토 사항

반정규화 결정 전에 먼저 고려해야 할 것들:

  1. 실행 계획(EXPLAIN) 분석
  2. 인덱스 최적화
  3. 캐싱 도입 (Redis, Memcached)
  4. 쿼리 튜닝

이 방법들로 충분하지 않을 때만 반정규화를 검토하세요.

정리

환경반정규화 권장도
OLAP/BI/데이터 마트높음
읽기 위주 웹 서비스중간
OLTP (트랜잭션 중심)낮음

반정규화는 고성능을 추구하는 실무 환경에서 자주 활용되지만, 데이터 무결성 관리를 위한 체계적인 전략이 필수입니다. 정규화와 반정규화를 적절히 활용하는 균형 잡힌 데이터 모델링이 중요합니다.