IT 여러가지

IT: RDBMS 반정규화

dewstream 2025. 7. 8. 08:00
728x90

※ IT: RDBMS Denormalization.
 
안녕하세요. 듀스트림입니다.
 
정규화에 이어서 오늘은 반정규화입니다.


반정규화(Denormalization)?

정규화된 테이블을 성능과 운영 효율성 향상 등을 위해 의도적으로 중복을 허용하고 정규형 제약을 완화하는 설계 기법입니다.

  • 데이터 무결성보다 조회 성능을 우선시
  • JOIN 횟수 최소화 → I/O 줄이기
  • 분석, 집계, 보고 시스템 등에서 사용

반정규화가 필요한 이유

정규화 문제점반정규화가 필요한 이유
JOIN이 너무 많음복잡한 쿼리로 인해 응답 시간 증가
Index 사용률 저하Join Key와 Predicate 불일치 시 인덱스 효과 ↓
다중 테이블 업데이트업무 로직상 자주 조회되는 정보를 한 테이블로 합침
통계 집계 성능 저하반복적인 집계를 미리 계산해서 저장
비정형 또는 로깅 테이블JSON 형태, 로그성 데이터는 정규화에 불리

반정규화 유형과 예시

유형설명예시
테이블 병합자주 JOIN 되는 테이블을 하나로 병합주문 + 고객 → 주문_고객 테이블
중복 컬럼 추가다른 테이블의 Key/Name 등을 중복 저장Employee 테이블에 부서명 직접 포함
파생 컬럼 추가계산 결과를 미리 컬럼으로 보관매출금액 = 수량 * 단가 저장
집계 컬럼 저장COUNT, SUM, AVG 등을 별도 테이블 또는 컬럼으로 유지게시글에 댓글 수 필드 유지
이력/스냅샷 테이블조회 시점의 상태 유지일일 단위 사용자 활동 스냅샷 저장
중첩 구조(JSON 등)정규화 대신 구조체 저장PostgreSQL의 JSONB 컬럼 사용
테이블 분할자주 조회되는 열만 따로 분리 (가역적 분해)고객 테이블을 기본정보, 마케팅 동의로 분리

반정규화의 장단점

장점

  • 조회 속도 개선 (JOIN 제거)
  • 쿼리 단순화 → 유지보수 편리
  • 집계 데이터 처리 효율화
  • 분석·BI Tool 친화적

 
단점

  • 데이터 중복 → 일관성 유지 어려움
  • 업데이트 비용 증가 → 하나의 변경이 여러 테이블에 영향을 줄 수 있음
  • 트랜잭션/트리거/ETL 관리 필요
  • 디스크 공간 증가

반정규화 적용 판단 기준

기준설명
조회가 압도적으로 많음반정규화 고려
JOIN 테이블 수 5개 이상성능 병목 발생 가능으로 반정규화 고려
집계 쿼리 반복 실행Materialized View, Summary Table 고려
최종 사용자가 쿼리 복잡도 어려움구조 단순화 필요
정규화 구조가 너무 깊음Depth 3 이상 → View 또는 병합 고려
무결성보다 실시간 조회 중요캐시 테이블, 반정규화 테이블 활용

PostgreSQL에서 반정규화 활용 전략

전략설명
물리적 View → Materialized View집계 결과를 저장해 두고 REFRESH 주기로 갱신
중복 저장 시 트리거(TRIGGER)데이터 무결성을 위한 자동 갱신
JSONB구조화된 속성의 유연한 저장과 인덱싱 지원
PARTITIONING + SUMMARY시간 파티션 + 파티션별 요약 테이블 활용
UNLOGGED Table / Cache Table빈번 조회용 테이블은 별도로 운영
Foreign Table / FDW + Denormalized Replica외부 시스템과의 연결에서도 반정규화 버전 제공 가능

반정규화 예시

▸ 정규화 구조

-- 주문
CREATE TABLE orders (
  order_id SERIAL PRIMARY KEY,
  customer_id INT,
  order_date DATE
);

-- 고객
CREATE TABLE customers (
  customer_id SERIAL PRIMARY KEY,
  customer_name TEXT,
  region TEXT
);

 
▸ 반정규화 구조

CREATE TABLE order_summary (
  order_id SERIAL PRIMARY KEY,
  customer_id INT,
  customer_name TEXT,
  region TEXT,
  order_date DATE
);

→ customer_name, region을 중복 저장
→ 주문 내역 조회 시 JOIN 불필요


정규화와 반정규화 비교 요약

정규화반정규화
중복 제거, 이상 방지성능 향상, 단순화
설계 원칙 중심실용과 운영 중심
변경·추적에 유리읽기 성능에 유리
JOIN 많아질 수 있음쿼리 단순화, 속도 향상

결론적으로 정규화와 반정규화는 데이터 품질과 서비스 속도 향상의 Trade-off입니다.
 
오늘은 여기까지~
 

728x90

'IT 여러가지' 카테고리의 다른 글

IT: for Loop vs while Loop  (0) 2025.07.13
IT: RDBMS 스타스키마  (1) 2025.07.09
IT: RDBMS 정규화  (2) 2025.07.07
IT: 데이터 이행  (1) 2025.05.25
IT: 데이터 클렌징  (0) 2025.05.25