본문 바로가기

카테고리 없음

백엔드 개발자 면접 질문 #2 - 정규화란?

답변: 데이터의 의도치 않은 수정 삭제 입력 등이 일어나지 않도록 데이터의 무결성을 보장하기 위해 DB를 설계하는 과정.
 

1. 정규화란 무엇인가요?

정의:

정규화(Normalization)는 데이터베이스 설계 과정에서 데이터를 체계적으로 조직화하여 중복을 최소화하고, 데이터 무결성(Integrity)을 보장하기 위한 과정입니다. 이를 통해 데이터베이스는 효율적이고, 일관성 있는 구조를 가지게 됩니다.


2. 정규화의 목적은 무엇인가요?

  • 데이터 중복 제거:
    중복된 데이터를 제거하여 저장 공간을 절약하고 유지보수 비용을 감소시킵니다.
  • 데이터 무결성 보장:
    데이터를 일관성 있게 유지하여, 삽입, 삭제, 갱신 시 이상(Anomaly)을 방지합니다.
  • 데이터베이스 확장성:
    데이터 구조 변경 시 최소한의 영향만 미치도록 설계합니다.

3. 정규화의 단계는 어떻게 구성되어 있나요?

1차 정규화(1NF):

  • 각 컬럼이 원자값(Atomic Value)만 가지도록 설계.
  • 목표: 반복 그룹 제거.

2차 정규화(2NF):

  • 1NF를 만족하며, 부분 함수 종속 제거.
  • 목표: 복합 키에 종속된 속성을 분리.

3차 정규화(3NF):

  • 2NF를 만족하며, 이행 함수 종속 제거.
  • 목표: 컬럼 간 종속성을 분리.

고급 정규화 (BCNF, 4NF, 5NF):

  • 특정 조건에서 발생하는 더 복잡한 이상(Anomaly)을 해결.
  • 일반적으로 3NF까지 구현하면 충분하지만, 필요 시 고급 정규화 단계 적용.

4. 정규화의 장단점은 무엇인가요?

장점:

  • 데이터 무결성 유지: 중복 데이터 제거로 데이터 일관성을 보장.
  • 효율적인 저장 공간 사용: 데이터 중복을 줄임.
  • 유지보수 용이: 데이터 변경 시 영향을 최소화.

단점:

  • 복잡성 증가: 설계 및 쿼리가 복잡해질 수 있음.
  • 성능 저하 가능성: 지나친 정규화로 조인(Join) 연산이 많아져 성능이 저하될 수 있음.

5. 정규화와 비정규화(Denormalization)의 차이는 무엇인가요?

구분정규화(Normalization)비정규화(Denormalization)
목적 데이터 무결성과 중복 제거 성능 최적화와 쿼리 속도 향상
데이터 중복 제거 의도적으로 중복 허용
쿼리 성능 조인 연산으로 인해 느려질 수 있음 조인 최소화로 쿼리 속도가 빨라짐
사용 사례 데이터 일관성이 중요한 경우 실시간 처리와 읽기 성능이 중요한 경우

6. 정규화의 적용 사례는 무엇인가요?

  • ERP 시스템: 복잡한 데이터 구조를 관리하고 중복 제거.
  • CRM 데이터베이스: 고객 정보를 일관성 있게 유지.
  • 온라인 쇼핑몰: 주문, 상품, 고객 정보를 효율적으로 분리.

7. 면접에서 추가 질문 대비하기:

정규화를 과도하게 적용했을 때 문제점은?

  • 과도한 정규화는 조인(Join) 연산을 과도하게 발생시켜 성능을 저하시킬 수 있습니다. 이 경우 비정규화를 고려하여 성능을 최적화할 수 있습니다.

정규화를 설계할 때 무엇을 고려해야 하나요?

  • 요구사항 분석: 데이터 무결성과 성능 간 균형을 맞추는 설계가 중요합니다.
  • 성능 요구사항: 정규화된 데이터베이스가 성능 문제를 초래한다면 비정규화나 캐싱을 고려합니다.

 

 

심화 - 정규화와 정규형

**정규화(Normalization)**와 **정규형(Normal Form)**은 데이터베이스 설계에서 관련된 개념이지만, 서로 다른 의미를 가집니다. 면접에서 이 차이를 명확히 이해하고 설명하면 더욱 전문적으로 보일 수 있습니다.


1. **정규화(Normalization)**란?

정규화는 데이터베이스 설계 과정 그 자체를 말합니다.

  • 데이터를 체계적으로 구조화하여 중복을 줄이고, 데이터 무결성을 보장하기 위해 수행되는 일련의 단계적 작업입니다.
  • 결과물: 정규화를 거친 데이터베이스는 특정 정규형(Normal Form)을 만족합니다.

예:

  • 데이터베이스 설계를 처음부터 정규화 과정에 따라 단계별로 개선하는 작업.

2. **정규형(Normal Form)**이란?

정규형은 정규화 과정의 목표 상태 또는 데이터베이스가 만족해야 하는 조건을 의미합니다.

  • 데이터베이스가 특정 정규형에 속하는지 나타내는 표준화된 기준입니다.
  • 일반적으로 1차 정규형(1NF)부터 5차 정규형(5NF), BCNF(Boyce-Codd Normal Form)까지 있습니다.

예:

  • 1NF: 테이블의 모든 필드가 원자값(Atomic Value)만 가져야 함.
  • 2NF: 1NF를 만족하고, 부분 함수 종속 제거.
  • 3NF: 2NF를 만족하고, 이행 함수 종속 제거.

3. 정규화와 정규형의 차이

구분정규화 (Normalization)정규형 (Normal Form)

정의 데이터베이스를 특정 정규형으로 변환하는 과정 데이터베이스가 만족하는 상태나 조건
목적 데이터 중복 제거 및 데이터 무결성 보장 데이터베이스 설계 품질 측정 기준
형태 과정(작업) 결과(상태)
단계 1NF → 2NF → 3NF → BCNF 등 단계별 수행 각 단계별로 만족해야 하는 기준
비유 "산을 오르는 과정" "산 정상의 특정 고도"

4. 정규화와 정규형의 관계

  • 정규화는 데이터를 설계하고 정리하는 과정입니다.
  • 이 과정의 결과로 데이터베이스는 특정 정규형(1NF, 2NF, 3NF 등)을 만족하게 됩니다.

5. 예시로 이해하기

정규화의 과정:

  1. 데이터를 1NF로 변환 → 모든 필드가 원자값(Atomic Value)을 가지도록 테이블 설계.
  2. 1NF에서 2NF로 변환 → 부분 함수 종속 제거.
  3. 2NF에서 3NF로 변환 → 이행 함수 종속 제거.

정규형의 상태:

  • 1NF: 모든 컬럼이 단일값(원자값)만 가짐.
  • 2NF: 1NF + 기본키에만 완전 종속.
  • 3NF: 2NF + 비기본키 간 종속 제거.

6. 면접에서의 추가 질문 대비

"정규화를 어디까지 수행해야 하나요?"

  • 일반적으로 3NF 또는 BCNF까지 수행하면 충분합니다.
  • 하지만 성능이나 요구사항에 따라 더 높은 정규형(4NF, 5NF)을 적용하거나 일부 비정규화를 고려할 수 있습니다.

"정규화를 과도하게 수행하면 문제가 있나요?"

  • 과도한 정규화는 조인(Join) 연산이 많아져 성능 저하를 초래할 수 있습니다.
  • 읽기 성능이 중요한 시스템에서는 비정규화를 통해 데이터 중복을 허용하기도 합니다.

이처럼 정규화와 정규형의 차이를 명확히 구분하여 설명하면, 면접에서 더 깊은 이해를 보여줄 수 있습니다.