본문 바로가기

IT

**정보처리기사: 정규화, 딱 3단계로 끝!**



정보처리기사 준비하면서 ‘정규화’라는 말에 벌써 머리가 지끈거리시나요? 복잡한 데이터베이스 이론에 막막함을 느끼는 비전공자분들이 많으실 텐데요.

하지만 걱정하지 마세요! 이 글에서는 데이터베이스 정규화의 핵심 원리를 비전공자 눈높이에 맞춰 쉽고 명확하게 설명해 드립니다.

데이터를 효율적으로 관리하고 데이터베이스 '이상 현상(Anomaly)'을 방지하는 정규화 1단계부터 3단계까지, 실생활 예시를 통해 확실하게 이해하고 정보처리기사 시험까지 대비할 수 있도록 도와드릴게요.

 



## 데이터베이스 정규화, 왜 필요할까요? (정보처리기사의 필수 개념)

데이터 정규화(Normalization)는 데이터베이스의 중복성을 줄이고 데이터 무결성을 확보하기 위한 과정입니다. 쉽게 말해, 데이터를 깔끔하고 효율적으로 정리하는 방법이라고 생각하시면 됩니다. 만약 데이터가 엉망진창으로 저장되어 있다면 어떤 문제가 생길까요?

바로 **'이상 현상(Anomaly)'**이 발생합니다. 주요 이상 현상은 다음과 같습니다.




● **삽입 이상 (Insertion Anomaly)**
새로운 데이터를 추가하려는데, 불필요한 다른 정보까지 강제로 입력해야 하거나, 특정 정보를 입력하지 못하는 경우를 말합니다. 예를 들어, 아직 강의를 신청하지 않은 학생의 정보만 추가하고 싶은데, 꼭 수강 과목 정보까지 함께 넣어야 한다면 삽입 이상이 발생한 것입니다.




● **삭제 이상 (Deletion Anomaly)**
특정 데이터를 삭제할 때, 꼭 필요한 다른 정보까지 함께 삭제되어 버리는 경우입니다. 어떤 과목의 마지막 수강생 정보가 삭제되었는데, 그 과목 정보 자체가 사라져 버린다면 삭제 이상이죠.




● **갱신 이상 (Update Anomaly)**
중복된 데이터 중 일부만 갱신되어 데이터 불일치가 발생하는 경우입니다. 한 교수의 연락처가 여러 곳에 중복되어 있는데, 일부만 수정하고 나머지는 그대로 두면 어떤 연락처가 맞는 정보인지 알 수 없게 됩니다.

이러한 문제들을 해결하고 데이터베이스를 안정적으로 운영하기 위해 정규화가 필수적이며, 정보처리기사 시험에도 자주 출제되는 중요한 개념입니다. 이제 정규화 1단계부터 3단계까지 차례대로 살펴보겠습니다.

---

### 정규화 1단계: 제1정규형 (1NF


- First Normal Form)


- 모든 셀은 하나의 값만!

**


● 목표**: 테이블의 모든 속성 값은 원자 값(Atomic Value)이어야 합니다. 즉, 하나의 셀에는 더 이상 쪼갤 수 없는 하나의 값만 존재해야 합니다. 그리고 반복되는 그룹 속성(Repeating Group)을 제거해야 합니다.

**


● 비유**: 장바구니에 담긴 여러 상품을 한 줄에 쭉 나열하는 대신, 각 상품을 한 줄에 하나씩 적는 것과 같습니다.

**


● 위반 사례**: 아래 `학생_수강정보` 테이블을 보세요. '수강과목'과 '교수이름' 셀에 여러 값이 콤마(,)로 구분되어 들어가 있습니다. 이것이 바로 1NF 위반입니다.

학생ID 학생이름 수강과목 교수이름
101 김철수 데이터베이스, 자료구조 이교수, 박교수
102 이영희 데이터베이스 이교수



**


● 1NF 적용 후**: 각 셀에 하나의 값만 오도록 데이터를 분리합니다. 이렇게 하면 각 행이 고유한 의미를 가지게 됩니다. 이제 기본키를 `(학생ID, 수강과목)`으로 설정할 수 있습니다.

학생ID 학생이름 수강과목 교수이름
101 김철수 데이터베이스 이교수
101 김철수 자료구조 박교수
102 이영희 데이터베이스 이교수



---

### 정규화 2단계: 제2정규형 (2NF


- Second Normal Form)


- 부분 함수 종속 제거!

**


● 목표**: 제1정규형을 만족하고, **기본키가 아닌 모든 속성**은 **기본키 전체**에 대해 완전 함수 종속이어야 합니다. 즉, 기본키의 일부에만 종속되는 '부분 함수 종속(Partial Functional Dependency)'을 제거해야 합니다.

**


● 비유**: 과목을 신청한 학생 정보가 있는데, 학생 이름은 '학생 ID'만 알면 알 수 있고, 과목 정보는 '과목 이름'만 알면 알 수 있는 상황입니다. '과목 이름'과 '학생 ID' 둘 다 알아야 하는 것이 아니라는 뜻이죠.

**


● 위반 사례**: 위 1NF 적용 후 테이블에서 기본키는 `(학생ID, 수강과목)`입니다.
* `학생이름`은 `학생ID`에만 종속됩니다. (`수강과목`과는 상관없죠?)
* `교수이름`은 `수강과목`에만 종속됩니다. (`학생ID`와는 상관없죠?)

이처럼 기본키의 일부에만 종속되는 속성들이 존재하므로 2NF를 위반합니다.

**


● 2NF 적용 후**: 부분 함수 종속을 제거하기 위해 테이블을 쪼개어 독립적인 관계로 만듭니다.

**


1. `학생_정보` 테이블** (`학생ID`를 기본키로 가집니다)

학생ID 학생이름
101 김철수
102 이영희



**


2. `과목_정보` 테이블** (`수강과목`을 기본키로 가집니다)

수강과목 교수이름
데이터베이스 이교수
자료구조 박교수



**


3. `수강신청_내역` 테이블** (`학생ID`, `수강과목`을 복합 기본키로 가집니다. 이 테이블이 학생과 과목을 연결해줍니다.)

학생ID 수강과목
101 데이터베이스
101 자료구조
102 데이터베이스



---

### 정규화 3단계: 제3정규형 (3NF


- Third Normal Form)


- 이행 함수 종속 제거!

**


● 목표**: 제2정규형을 만족하고, **기본키가 아닌 속성 간에 이행 함수 종속(Transitive Functional Dependency)이 없어야 합니다.** 쉽게 말해, 기본키가 아닌 어떤 속성이 또 다른 비기본키 속성을 결정해서는 안 됩니다.

**


● 비유**: 교수님의 연락처를 알고 싶을 때, 과목 정보를 통해 교수님 이름을 찾고, 다시 그 교수님의 연락처를 찾아야 하는 상황과 비슷합니다. 과목이 직접 연락처를 알려주는 것이 아니라, 과목 -> 교수이름 -> 연락처처럼 중간 단계를 거치죠.

**


● 위반 사례**: 위 2NF 적용 후 `과목_정보` 테이블에 '교수연락처' 속성이 추가되었다고 가정해 봅시다.

수강과목 교수이름 교수연락처
데이터베이스 이교수 010-1234-5678
자료구조 박교수 010-9876-5432



여기서 기본키는 `수강과목`입니다.
* `수강과목` -> `교수이름` (기본키가 비기본키를 결정)
* `교수이름` -> `교수연락처` (비기본키가 또 다른 비기본키를 결정)

이러한 `수강과목` -> `교수이름` -> `교수연락처` 관계는 이행 함수 종속이며 3NF를 위반합니다. `교수연락처`는 `수강과목`에 직접적으로 종속되는 것이 아니라, `교수이름`을 통해 종속되기 때문입니다.

**


● 3NF 적용 후**: 이행 함수 종속을 제거하기 위해 새로운 테이블을 만듭니다.

**


1. `과목_정보` 테이블** (수정)

수강과목 교수이름
데이터베이스 이교수
자료구조 박교수



**


2. `교수_정보` 테이블** (새로 생성)

교수이름 교수연락처
이교수 010-1234-5678
박교수 010-9876-5432



이제 데이터베이스는 다음과 같이 4개의 테이블로 구성되며, 3NF를 만족합니다.

* `학생_정보` (`학생ID`, `학생이름`)
* `과목_정보` (`수강과목`, `교수이름`)
* `교수_정보` (`교수이름`, `교수연락처`)
* `수강신청_내역` (`학생ID`, `수강과목`)

 



## 정규화, 이제 두렵지 않죠?

데이터 정규화는 단순히 시험 문제를 푸는 것을 넘어, 실제 데이터베이스를 효율적으로 설계하고 관리하며 데이터의 일관성과 무결성을 지키는 데 필수적인 과정입니다. 복잡해 보이지만, 단계별로 차근차근 살펴보면 충분히 이해할 수 있는 개념이에요.

정보처리기사 시험에서는 각 정규형의 **정의**와 **위반 사례**, 그리고 이로 인해 발생하는 **이상 현상**을 정확히 이해하는 것이 중요합니다. 오늘 배운 예시들을 다시 한번 떠올리며 개념을 완전히 익히신다면, 어떤 정규화 문제가 나와도 자신 있게 풀 수 있을 거예요! 꾸준히 학습하셔서 꼭 좋은 결과 얻으시길 바랍니다.