컴퓨터공학

정규화란 무엇인가? 데이터 구조를 정제하는 방법

nyambu 2025. 3. 28. 13:00

정규화란 무엇인가? 데이터 구조를 정제하는 방법
정규화란 무엇인가? 데이터 구조를 정제하는 방법

1. 정규화의 개념과 목적

 정규화(Normalization)란 데이터의 중복을 제거하고, 논리적으로 일관성 있는 데이터 구조를 설계하기 위한 과정이다.
관계형 데이터베이스를 설계할 때 동일한 정보가 여러 곳에 반복되면 데이터의 무결성이 깨지고, 관리가 어려워진다. 이런 상황을 방지하기 위해 데이터를 세부적으로 분해하고 구조화하는 작업이 필요하며, 이 과정을 정규화라고 한다.

 

 정규화는 단순히 테이블을 나누는 것이 아니라, 데이터의 의미와 관계를 명확히 분석하고, 그 결과에 따라 최적의 테이블 구조를 만드는 설계 기법이다. 데이터베이스 설계자라면 반드시 이해하고 적용해야 할 기본 원칙 중 하나이다.

 

정규화를 통해 얻을 수 있는 대표적인 효과는 다음과 같다:

  • 데이터 중복 감소: 동일한 정보가 여러 곳에 저장되는 것을 방지한다.
  • 삽입, 삭제, 갱신 이상(Anomaly) 제거: 불필요한 이상현상 발생을 방지할 수 있다.
  • 데이터 무결성 향상: 제약 조건과 구조적 설계를 통해 데이터 일관성을 유지할 수 있다.
  • 저장 공간 절약: 중복이 줄어들면서 효율적인 공간 활용이 가능해진다.

 반면, 지나친 정규화는 조인(Join) 연산이 많아져 성능 저하를 일으킬 수 있으며, 읽기 위주 시스템에서는 일부 비정규화를 다시 적용하기도 한다. 하지만 설계 초기 단계에서는 정규화를 기본으로 하고, 이후 상황에 따라 조정하는 방식이 권장된다.


2. 이상현상(Anomaly)이란 무엇인가?

 정규화를 수행하는 가장 큰 이유는 **이상현상(Anomaly)**을 제거하기 위함이다. 이상현상이란 테이블 구조가 잘못 설계되었을 때 발생하는 비정상적인 현상이며, 주로 삽입 이상, 삭제 이상, 갱신 이상으로 나뉜다.

2-1. 삽입 이상 (Insertion Anomaly)

 어떤 데이터를 입력하려고 할 때 불필요한 정보까지 함께 입력해야만 저장이 가능한 상황을 말한다. 예를 들어, 고객 정보를 입력하려는데 주문 내역이 없으면 입력이 불가능한 구조라면 이는 삽입 이상이다.

  • 사례: ‘철수’라는 고객을 새로 등록하려고 하는데, 주문 정보가 없으면 입력 자체가 되지 않음

2-2. 삭제 이상 (Deletion Anomaly)

 하나의 정보를 삭제하면서 원치 않는 다른 정보까지 함께 사라지는 현상을 의미한다. 예를 들어, 고객이 마지막 주문을 삭제했더니 고객 정보도 함께 사라지는 경우가 이에 해당한다.

  • 사례: ‘영희’ 고객의 주문 하나를 삭제했는데, 고객 정보 자체가 데이터베이스에서 사라짐

2-3. 갱신 이상 (Update Anomaly)

데이터가 여러 곳에 중복되어 저장된 경우, 하나만 수정하면 데이터 간 불일치가 발생하는 현상이다.

  • 사례: 고객 전화번호가 3군데 저장돼 있는데, 한 군데만 수정해서 나머지와 불일치

 이상현상은 시스템의 신뢰도와 유지보수성을 크게 떨어뜨리기 때문에, 정규화를 통해 사전에 예방해야 한다. 특히 대규모 시스템에서는 이상현상 하나가 전체 기능 오류로 이어질 수 있으므로 반드시 고려해야 한다.


3. 제1정규형(1NF): 원자값으로 분해하라

 제1정규형(First Normal Form, 1NF)은 모든 열이 원자값(Atomic Value)만을 가지도록 테이블을 정리하는 단계이다.
원자값이란 더 이상 나눌 수 없는 최소 단위의 값을 의미한다.

 

예를 들어, 다음과 같은 테이블을 보자.

고객ID 이름 전화번호
1001 철수 010-1111-2222, 010-3333-4444

위의 경우 전화번호가 여러 개 저장되어 있으므로, 1NF를 만족하지 않는다.
이를 다음과 같이 분해하면 1NF가 된다.

고객ID 이름 전화번호
1001 철수 010-1111-2222
1001 철수 010-3333-4444

 1NF는 모든 필드에 반복되는 그룹이나 집합 데이터가 없어야 함을 의미하며, 테이블을 구조적으로 정제하는 첫 번째 단계이다.


4. 제2정규형(2NF): 부분 종속성을 제거하라

 제2정규형(Second Normal Form, 2NF)은 기본 키가 복합 키(두 개 이상의 열로 구성된 경우)일 때, 일부 속성이 키의 일부분에만 종속되는 문제를 제거하는 과정이다. 이 과정을 통해 **부분 함수 종속(Partial Dependency)**을 없애고, 테이블을 더 정제된 형태로 만든다.

 

예시 테이블을 보자:

수강ID 학생ID 강의ID 학생이름 강의명
001 A100 L101 홍길동 수학

 이 테이블에서 기본 키는 (학생ID, 강의ID) 복합 키이다. 그런데 학생이름은 학생ID에만 종속되고, 강의명은 강의ID에만 종속된다. 이 구조는 부분 종속이 존재하므로 2NF를 만족하지 않는다.

 

 이를 해결하려면 테이블을 다음과 같이 분리해야 한다:

  1. 학생 테이블: (학생ID, 학생이름)
  2. 강의 테이블: (강의ID, 강의명)
  3. 수강 테이블: (학생ID, 강의ID)

이로써 모든 속성이 기본 키 전체에 완전하게 종속되도록 만들 수 있으며, 데이터의 중복도 줄어든다.


5. 제3정규형(3NF): 이행 종속을 제거하라

 제3정규형(Third Normal Form, 3NF)은 기본 키가 아닌 속성이 다른 기본 키가 아닌 속성에 종속되는 이행 종속(Transitive Dependency)을 제거하는 과정이다.

 

예시:

학생ID 학생이름 학과ID 학과명
A100 홍길동 D01 컴퓨터공학

 여기서 학과명은 학과ID에 종속되어 있고, 학과ID는 학생ID에 종속되어 있다. 즉, 학과명은 학생ID를 통해 간접적으로 종속되는 구조이다. 이 구조는 이행 종속을 포함하므로 3NF를 위반한다.

 

해결 방법:

  1. 학생 테이블: (학생ID, 학생이름, 학과ID)
  2. 학과 테이블: (학과ID, 학과명)

 이제 학과명은 학과ID에 직접 종속되고, 학생 테이블에서는 불필요한 중복이 제거된다. 이는 데이터 일관성과 유지보수 측면에서 큰 장점이 된다.


6. 비정규화(Denormalization)의 개념과 필요성

 정규화는 이론적으로 완벽한 데이터 구조를 만들 수 있지만, 실무 환경에서는 항상 적용되기 어렵다. 그 이유는 성능 때문이다. 테이블이 지나치게 분리되어 있으면 데이터를 조회할 때 다수의 조인(Join) 연산이 발생하며, 이로 인해 속도가 느려질 수 있다.

6-1. 비정규화란?

 비정규화(Denormalization)는 의도적으로 정규화를 일부 되돌리는 작업이다. 즉, 일부 중복을 허용하면서 데이터 처리 속도를 개선하려는 방법이다. 이 작업은 데이터 무결성을 일정 부분 포기하는 대신, 읽기 속도나 성능을 중시하는 시스템에 적합하다.

6-2. 언제 사용하는가?

  • 분석용 데이터(OLAP)에서 조회 속도가 중요한 경우
  • 조회는 빈번하지만, 데이터 변경은 드문 경우
  • 웹사이트에서 다수의 사용자가 동시에 데이터에 접근하는 경우

예시:

  • 게시글 테이블에 사용자 이름을 저장하여 사용자 테이블과의 조인을 생략
  • 주문 내역에 상품 가격을 저장해, 상품 테이블 가격이 바뀌어도 과거 기록 보존

6-3. 주의할 점

  • 중복 데이터 발생
  • 수정 시 일관성 유지 어려움
  • DB 저장 공간 증가

 따라서 비정규화는 반드시 정규화를 기반으로 설계한 후, 성능 테스트를 거쳐 제한적으로 적용해야 한다. 무분별한 비정규화는 데이터 품질 저하로 이어질 수 있다.


7. 정규화의 실무 적용 전략

실제 시스템에서는 정규화 원칙을 무조건 따르기보다, 비즈니스 로직과 트래픽 특성에 맞춰 유연하게 적용하는 것이 일반적이다.

7-1. 실무에서의 적용 방식

  • 관리 시스템(관리자 화면, 백오피스 등)
    데이터의 정확성이 우선되므로 정규화가 철저하게 적용된다. 갱신 이상, 삭제 이상을 방지하는 것이 핵심이다.
  • 고객-facing 시스템(앱, 웹 등)
    빠른 응답 속도가 중요하므로, 일부 비정규화를 허용하고 캐싱 또는 조회 최적화를 활용한다.
  • 데이터 웨어하우스, BI 시스템
    다차원 분석, 집계, 그래프 생성이 중심이기 때문에 정규화보다 성능 중심 설계가 일반적이다.

7-2. 설계자는 고려해야 한다

  1. 데이터의 변경 빈도
  2. 조회 패턴
  3. 사용자 수
  4. 시스템 용량과 자원
  5. 무결성 유지가 필요한 범위

이처럼 정규화는 기본 설계의 기준이고, 실제 적용은 시스템 특성에 따라 조율하는 것이 바람직하다.


8. 정규화 vs NoSQL: 구조화 vs 유연성

NoSQL은 정규화와는 반대되는 철학을 기반으로 한다. NoSQL 데이터베이스는 비정형, 유연한 구조, 빠른 쓰기 및 읽기 성능을 우선시하며, 테이블이 아닌 문서(Document), 키-값(Key-Value), 그래프 구조 등을 활용한다.

8-1. 정규화 기반(RDB)의 특징

  • 정확성 우선
  • 관계 정의 명확
  • SQL 기반 질의
  • 데이터 무결성 강함
  • 스키마 고정

8-2. NoSQL의 특징

  • 유연성 우선
  • 관계 정의 없음 또는 약함
  • 스키마 유동적
  • 중복 허용, 비정규화 구조
  • 고속 처리, 확장성 뛰어남

8-3. 어떤 상황에 쓰이는가?

  • RDB: 금융, 정부, ERP 등 정확성과 신뢰성이 최우선인 시스템
  • NoSQL: SNS, 로그 분석, IoT 등 유연성과 속도가 중요한 서비스

 따라서 데이터 정규화 개념을 이해하고 있으면, NoSQL 시스템을 설계할 때에도 데이터의 흐름, 관계, 중복에 대한 감각을 유지할 수 있다. 결국 정규화는 어떤 데이터베이스든 기본이 되는 사고방식이다.