백엔드 면접 용어 사전
데이터베이스normalization

정규화

중복과 종속을 제거해 갱신 이상을 막는 설계 과정. 조인이 늘어 조회 비용이 커질 수 있다.

중복과 잘못된 종속을 제거해 갱신 이상을 막는 설계 과정.

무엇을 막는가 — 세 가지 이상현상

정규화가 안 된 테이블을 보자.

주문번호 | 회원ID | 회원이름 | 회원등급 | 상품 | 수량
1       | 100   | 김철수   | GOLD    | 노트북 | 1
2       | 100   | 김철수   | GOLD    | 마우스 | 2
3       | 200   | 이영희   | SILVER  | 키보드 | 1
이상무슨 일이
갱신 이상같은 사실이 여러 곳에 → 일부만 고쳐짐김철수 등급을 VIP로 바꿀 때 1번 행만 고치면 데이터가 모순
삽입 이상불필요한 값 없이는 행을 못 넣음아직 주문 안 한 회원을 등록할 수 없다
삭제 이상지우면 관계없는 정보까지 사라짐3번 주문을 지우면 이영희 정보가 통째로 사라진다

근본 원인은 하나 — 한 테이블에 서로 다른 주제(주문과 회원)가 섞여 있다.

단계

단계제거 대상
1NF다중값 속성한 칸에 값 하나만 ("서울, 부산" ✗)
2NF부분 함수 종속복합키의 일부에만 종속되는 컬럼 분리
3NF이행적 종속A→B→C 에서 C를 분리
BCNF결정자가 후보키가 아닌 경우3NF의 예외 상황 정리

함수 종속이란 "A를 알면 B가 결정된다"는 관계다(회원ID → 회원이름). 정규화는 이 종속 관계를 정리해 각 테이블이 하나의 주제만 갖게 만드는 일이다.

위 예를 정규화하면

주문(주문번호, 회원ID, 상품, 수량) 회원(회원ID, 회원이름, 회원등급) 등급을 바꾸려면 회원 테이블 한 행만 고치면 된다. 이상현상이 사라진다.

대가

테이블이 쪼개지므로 조인이 늘어난다. 조회가 압도적으로 많은 시스템에서는 조인 비용이 병목이 될 수 있다.

면접 답변 골격

"정규화를 기본으로 설계하고, 측정한 병목에만 반정규화를 적용합니다. 처음부터 성능을 걱정해 중복을 두면 정합성 유지 책임을 애플리케이션이 전부 떠안게 되고, 그게 더 비쌉니다."

실무에서 3NF까지가 일반적이고 BCNF 이상은 잘 가지 않는다.

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — 데이터베이스 — 인덱스·트랜잭션·격리수준·N+1