자격증/정보처리기사

반정규화 vs 정규화 차이 방법 비교 예시

딸기뚜왈기 2025. 2. 12. 16:28

정규화가 항상 조회 성능을 저하시킨다는 것은 잘못된 생각. 

기본적으로 중복된 데이터를 제거함으로써 조회성능을 향상시킬 수 있음.

 

1. 정규화(Normalization)

정규화는 데이터 중복을 최소화하고 데이터의 무결성을 보장하기 위해 테이블을 나누는 과정입니다.

🎯 정규화의 목적

1️⃣ 데이터 중복 제거 → 데이터 일관성 유지
2️⃣ 데이터 무결성(Integrity) 보장 → 이상(Anomaly) 방지
3️⃣ 데이터 저장 공간 절약
4️⃣ 데이터 수정 시 불필요한 업데이트 최소화

🛠 정규화 방법 (정규형 Normal Form)

정규화는 1NF → 2NF → 3NF → BCNF 순서로 수행됩니다.

정규형정규화 방법설명

1NF (제1정규형) 원자성(Atomicity) 보장 컬럼 값이 더 이상 분해되지 않는 단일 값으로 구성되도록 함
2NF (제2정규형) 부분적 종속성 제거 기본키(PK)에 대해 완전 함수 종속이 되도록 테이블을 분리
3NF (제3정규형) 이행적 종속성 제거 기본키에 종속되지 않은 속성을 제거하고 별도 테이블로 분리
BCNF (보이스-코드 정규형) 결정자(Determinant) 문제 해결 기본키가 아닌 컬럼이 후보키(Candidate Key)에 종속되지 않도록 개선

📌 정규화 예제

정규화 전 (중복 데이터 존재)

주문번호고객명고객전화번호상품명상품가격

1001 홍길동 010-1111-2222 노트북 1,500,000
1002 김철수 010-3333-4444 스마트폰 900,000
1003 홍길동 010-1111-2222 태블릿 700,000

정규화 후 (1NF, 2NF, 3NF 적용)

  • 고객 테이블 (중복 제거)고객ID고객명고객전화번호
    C001 홍길동 010-1111-2222
    C002 김철수 010-3333-4444
  • 주문 테이블 (고객과 주문을 분리)주문번호고객ID
    1001 C001
    1002 C002
    1003 C001
  • 상품 테이블 (상품 정보 분리)상품ID상품명상품가격
    P001 노트북 1,500,000
    P002 스마트폰 900,000
    P003 태블릿 700,000

정규화 결과

  • 데이터 중복이 사라지고 무결성이 향상됨
  • 데이터 수정이 용이해짐 (예: 홍길동의 전화번호 변경 시 고객 테이블만 수정하면 됨)

2. 반정규화(Denormalization)

반정규화는 정규화를 일부 해제하여 성능을 최적화하는 과정입니다.

  • 정규화된 데이터 구조는 JOIN이 많아져 성능이 저하될 수 있음
  • 반정규화는 테이블을 합치거나, 중복을 허용하여 쿼리 성능을 개선

🎯 반정규화의 목적

1️⃣ 복잡한 JOIN 연산 감소 → 조회 속도 향상
2️⃣ 데이터 조회 성능 최적화 → 읽기(Read) 성능 개선
3️⃣ 인덱스 활용 최적화 → 불필요한 인덱스 조회 감소
4️⃣ 보고서, 통계 데이터를 미리 계산하여 저장 → 실시간 연산 부담 감소

🛠 반정규화 방법

방법설명

중복 데이터 허용 테이블 간 JOIN을 줄이기 위해 일부 속성을 중복 저장
테이블 통합(Merging Tables) 자주 JOIN되는 테이블을 하나로 합침
중간 테이블(중복 속성 추가) 자주 조회되는 데이터를 별도로 저장하여 조회 성능 향상
파티셔닝(Partitioning) 큰 테이블을 여러 개의 작은 테이블로 분할하여 성능 최적화

📌 반정규화 예제

정규화된 데이터 (JOIN 필요)

  • 고객 테이블고객ID고객명고객전화번호
    C001 홍길동 010-1111-2222
    C002 김철수 010-3333-4444
  • 주문 테이블주문번호고객ID주문날짜
    1001 C001 2024-02-10
    1002 C002 2024-02-11

🔻 문제점

  • 주문 목록을 조회할 때 고객 정보를 가져오려면 JOIN 필요 → 성능 저하

반정규화된 데이터 (JOIN 최소화)

  • 주문 테이블 (고객 정보 포함)주문번호고객ID고객명고객전화번호주문날짜
    1001 C001 홍길동 010-1111-2222 2024-02-10
    1002 C002 김철수 010-3333-4444 2024-02-11

반정규화 결과

  • 주문 테이블에서 고객 정보를 바로 조회 가능 → JOIN 없이 빠른 조회 가능
  • 하지만, 고객 전화번호가 변경될 경우 모든 주문 데이터 수정이 필요함 (데이터 중복 허용)

정규화 vs 반정규화 비교

비교 항목정규화 (Normalization)반정규화 (Denormalization)

목적 데이터 중복 제거, 무결성 보장 성능 최적화, 조회 속도 개선
장점 데이터 일관성 유지, 이상 현상 방지 JOIN 감소, 읽기 성능 향상
단점 복잡한 JOIN 필요 → 성능 저하 데이터 중복 증가 → 수정 비용 증가
적용 시점 설계 초기 (기본 원칙) 성능 최적화가 필요할 때

결론

  • 정규화는 기본 원칙 → 데이터 중복을 줄이고 무결성을 유지하는 것이 목적
  • 반정규화는 성능 최적화 → 복잡한 JOIN을 줄이고 조회 속도를 높이는 것이 목적
  • 실무에서는 정규화를 기본으로 하고, 성능 문제가 발생하면 반정규화를 적용하는 것이 일반적