데이터베이스 설계에서 정규화(Normalization)는 필수 개념이에요.
IT 면접에서도 자주 출제되는 만큼, 오늘은 정규화의 개념과 면접에서 받을 수 있는 질문을 정리해 볼게요! 😊
1. 데이터베이스 정규화란?
정규화(Normalization)는 데이터 중복을 최소화하고, 데이터 무결성을 보장하며, 데이터베이스의 효율성을 높이는 과정이에요.
잘못된 데이터 구조로 인해 발생하는 삽입, 갱신, 삭제 이상(Anomaly)을 방지할 수 있어요.
✅ 정규화의 핵심 목표
• 데이터 중복 제거: 불필요한 데이터 반복을 없앰
• 데이터 무결성 보장: 데이터의 일관성을 유지
• 데이터베이스 성능 최적화: 저장공간을 절약하고 쿼리 성능 향상
2. 정규화의 주요 단계(Normal Forms, NFs)
정규화는 여러 단계로 진행되며, 각 단계는 특정한 문제를 해결해요.
각 정규형을 쉽게 이해할 수 있도록 간단한 예제를 들어볼게요.
🔹 제1정규형(1NF) – 원자값(Atomic Value) 보장
✔️ 조건: 모든 컬럼의 값이 **원자값(Atomic Value)**이어야 해요.
✔️ 예시
고객ID고객명연락처
1 | 홍길동 | 010-1234-5678, 02-987-6543 |
💡 문제점: 연락처가 하나의 셀에 여러 개 들어가 있어요.
👉 1NF 변환:
고객ID고객명연락처
1 | 홍길동 | 010-1234-5678 |
1 | 홍길동 | 02-987-6543 |
🔹 제2정규형(2NF) – 부분 함수적 종속 제거
✔️ 조건: 1NF를 만족하면서, **부분 함수적 종속(Partial Dependency)**이 없어야 해요.
✔️ 예시
주문ID고객ID고객명제품명
1001 | 1 | 홍길동 | 노트북 |
💡 문제점: 고객명은 주문ID에 종속되지 않고 고객ID에만 종속돼요.
👉 2NF 변환:
1. 주문 테이블
| 주문ID | 고객ID | 제품명 |
|––––|––––|––––|
| 1001 | 1 | 노트북 |
2. 고객 테이블
| 고객ID | 고객명 |
|––––|––––|
| 1 | 홍길동 |
🔹 제3정규형(3NF) – 이행적 종속 제거
✔️ 조건: 2NF를 만족하면서, **이행적 종속(Transitive Dependency)**이 없어야 해요.
✔️ 예시
고객ID고객명우편번호주소
1 | 홍길동 | 12345 | 서울 강남구 |
💡 문제점: 우편번호가 주소에 종속되어 있어요.
👉 3NF 변환:
1. 고객 테이블
| 고객ID | 고객명 | 우편번호 |
|––––|––––|––––|
| 1 | 홍길동 | 12345 |
2. 우편번호 테이블
| 우편번호 | 주소 |
|––––|––––|
| 12345 | 서울 강남구 |
🔹 BCNF(Boyce-Codd Normal Form) – 후보 키가 아닌 결정자 제거
✔️ 조건: 3NF를 만족하면서 모든 결정자가 후보 키여야 해요.
✔️ 예시
• 3NF에서는 후보 키가 아닌 결정자가 존재할 수도 있는데, BCNF에서는 이를 제거해야 해요.
🔹 제4정규형(4NF) – 다치 종속 제거
✔️ 조건: 3NF를 만족하면서, **다치 종속(Multivalued Dependency)**을 제거해야 해요.
✔️ 예시
• 한 고객이 여러 개의 연락처와 이메일을 가지고 있을 경우, 이를 별도 테이블로 분리해요.
3. 면접에서 자주 묻는 질문
면접에서 정규화에 대한 개념을 물어보는 경우가 많아요.
다음 질문들을 연습해 보면 좋아요! 😊
🔹 기본 개념 질문
• 데이터베이스 정규화란 무엇이며, 왜 필요한가요?
• 1NF, 2NF, 3NF의 차이점을 설명해 주세요.
🔹 응용 질문
• 정규화의 장점과 단점은 무엇인가요?
• 정규화와 반정규화(Denormalization)의 차이점은 무엇인가요?
• 언제 반정규화를 적용하는 것이 유리한가요?
4. 실전 답변 예시
📌 Q: 3NF와 BCNF의 차이점은 무엇인가요?
📌 A: 3NF는 이행적 종속을 제거하여 데이터 중복을 방지하지만, 결정자가 반드시 후보 키일 필요는 없어요.
반면, BCNF는 모든 결정자가 후보 키가 되어야 한다는 점에서 더 엄격한 정규형이에요.
📌 Q: 반정규화(Denormalization)는 언제 사용하나요?
📌 A: 반정규화는 성능 최적화가 필요할 때 사용돼요.
예를 들어, JOIN 연산이 너무 많아 속도가 느려지는 경우, 일부 데이터를 중복 저장하여 성능을 개선할 수 있어요.
5. 면접 준비 팁
✔️ ERD(Entity-Relationship Diagram)를 그려서 정규화를 직접 연습해 보세요.
✔️ SQL 예제를 작성해 보고, 실제 정규화 과정을 실습해 보세요.
✔️ 정규화와 반정규화의 실제 사례를 찾아보고, 프로젝트에 적용할 수 있는 방법을 고민해 보세요.
💡 다음 면접 준비 포스트에서는
👉 “트랜잭션(Transaction)과 ACID 원칙”에 대해 다뤄볼 예정이에요! 🚀
'개발자 면접 질문' 카테고리의 다른 글
IT 면접 질문 – 데드락(Deadlock)과 해결 방법 (0) | 2025.02.07 |
---|---|
IT 면접 질문 – 트랜잭션(Transaction)과 ACID 원칙 (0) | 2025.02.06 |
[Spring Framework] DI와 Bean 개념 쉽게 이해하기 (1) | 2025.02.04 |
스프링 웹개발 핵심 개념 (웹 MVC & JPA) (1) | 2025.02.02 |
스프링 프레임워크의 본질과 핵심 개념 | IoC, DI, AOP 완벽 정리 (0) | 2025.02.01 |
댓글