데이터베이스 역정규화

블로그·2025년 3월 2일

1. 정규화(Normalization)란?

정규화(Normalization)는 데이터베이스에서 데이터의 중복을 최소화하고, 일관성을 유지하기 위해 데이터를 여러 개의 관계형 테이블로 나누는 과정이다. 이를 통해 데이터 무결성을 보장하고, 삽입/수정/삭제 시 발생할 수 있는 이상(anomaly)을 방지할 수 있다.

정규화를 하는 이유

  1. 데이터 중복 최소화: 동일한 데이터가 여러 곳에 저장되는 것을 방지하여 저장 공간을 절약하고, 데이터의 일관성을 유지한다.
  2. 데이터 무결성 유지: 한 곳에서 데이터를 수정하면, 그 데이터가 참조된 모든 곳에서 동일하게 반영되도록 보장한다.
  3. 이상 현상 제거:
    • 삽입 이상: 불필요한 데이터를 추가하지 않으면 원하는 데이터를 삽입할 수 없는 문제.
    • 갱신 이상: 특정 데이터를 수정할 때 여러 곳에서 수정해야 하는 문제.
    • 삭제 이상: 데이터를 삭제할 때 의도치 않게 다른 중요한 데이터도 함께 삭제되는 문제.

정규화 과정

정규화는 보통 1NF(제1정규형)부터 5NF(제5정규형)까지 있으며, 일반적으로 3NF(제3정규형) 또는 BCNF(Boyce-Codd Normal Form)까지 수행한다.

  • 제1정규형(1NF): 각 컬럼이 원자값(Atomic Value)을 가져야 한다.
  • 제2정규형(2NF): 부분 함수 종속을 제거하고, 기본 키에 완전 함수 종속이 되도록 한다.
  • 제3정규형(3NF): 이행적 함수 종속을 제거하여 데이터 중복을 더욱 줄인다.
  • BCNF: 모든 결정자가 후보 키가 되도록 보장한다.

정규화 예시

정규화 전 (비정규형 테이블)

주문 ID고객 이름고객 주소상품 ID상품명가격
1홍길동서울시 강남구101노트북1,500,000
2홍길동서울시 강남구102키보드50,000
3이순신부산시 해운대구101노트북1,500,000

정규화 후

고객 테이블

고객 ID고객 이름고객 주소
1홍길동서울시 강남구
2이순신부산시 해운대구

상품 테이블

상품 ID상품명가격
101노트북1,500,000
102키보드50,000

주문 테이블

주문 ID고객 ID상품 ID
11101
21102
32101

이렇게 정규화를 하면 데이터 중복을 줄이고 무결성을 유지할 수 있다.


2. 역정규화(Denormalization)란?

역정규화(Denormalization)는 성능 향상을 위해 정규화된 데이터베이스를 다시 합치는 과정이다. 즉, 데이터 중복을 허용하고 테이블을 조인하는 비용을 줄여 성능을 개선하는 방법이다.

역정규화를 하는 이유

  1. 조회 성능 향상: 자주 사용되는 데이터를 미리 결합하여 조회 시 복잡한 조인을 줄인다.
  2. 쓰기 작업 최적화: 특정 상황에서는 정규화된 테이블보다 쓰기 성능이 더 좋아질 수 있다.
  3. 시스템 부하 감소: 조인 연산이 많으면 CPU와 메모리 사용량이 증가하는데, 이를 줄이기 위해 역정규화를 적용할 수 있다.

역정규화 예시

역정규화 전 (정규화된 구조)

주문 ID고객 ID고객 이름고객 주소상품 ID상품명가격
11홍길동서울시 강남구101노트북1,500,000
21홍길동서울시 강남구102키보드50,000
32이순신부산시 해운대구101노트북1,500,000

이 경우, 고객 정보를 가져오기 위해 고객 테이블주문 테이블을 조인해야 한다.

역정규화 후

주문 ID고객 ID고객 이름고객 주소상품명가격
11홍길동서울시 강남구노트북1,500,000
21홍길동서울시 강남구키보드50,000
32이순신부산시 해운대구노트북1,500,000

이렇게 하면 조인 없이 데이터를 빠르게 조회할 수 있지만, 고객 정보가 중복 저장되기 때문에 고객의 주소가 변경될 경우 모든 레코드를 수정해야 한다는 단점이 있다.


3. 정규화와 역정규화, 언제 사용할까?

기준정규화역정규화
데이터 중복최소화증가
데이터 무결성강함낮아질 수 있음
조인 연산많음줄어듦
조회 성능느려질 수 있음빨라질 수 있음
유지보수성용이함어려울 수 있음
  • 정규화를 사용해야 하는 경우
    • 데이터 무결성이 중요한 경우 (금융, 의료 등)
    • 데이터 중복을 줄이고 저장 공간을 절약해야 하는 경우
  • 역정규화를 사용해야 하는 경우
    • 조회 성능이 중요한 경우 (대규모 트래픽 웹사이트, 데이터 분석 등)
    • 조인 비용이 너무 커서 시스템 부하가 발생하는 경우

4. 결론

정규화와 역정규화는 데이터베이스 설계에서 중요한 개념이며, 각각의 장단점이 존재한다. 일반적으로 정규화를 기본으로 적용하되, 성능 최적화를 위해 필요한 경우에 한해 역정규화를 신중히 고려하는 것이 좋다. 상황에 따라 적절한 방법을 선택하여 데이터베이스를 효율적으로 운영하는 것이 중요하다.

0개의 댓글