이것저것 개발기록

"데이터 설계의 정석" DB 정규화(Normalization) 핵심 요약 본문

IT 이야기

"데이터 설계의 정석" DB 정규화(Normalization) 핵심 요약

Garam Kim 2026. 1. 3. 12:00

"테이블 하나에 다 때려 넣으면 안 되나요?"
데이터 중복을 제거하고 이상 현상(Anomaly)을 방지하는 데이터베이스 정규화. 왜 해야 하고, 어디까지 해야 할지 실무 관점에서 정리해 드립니다.

1. 정규화는 왜 하는가?

정규화의 가장 큰 목적은 데이터의 중복을 최소화하고 데이터 무결성을 보장하는 것입니다. 정규화가 안 된 테이블에서는 데이터를 수정할 때 일부만 바뀌는 수정 이상, 데이터 삭제 시 엉뚱한 정보까지 날아가는 삭제 이상 같은 문제가 발생합니다.

2. 꼭 알아야 할 1~3 정규화 (1NF, 2NF, 3NF)

  • 제1정규형(1NF): 모든 속성 값은 원자 값(Atomic Value)이어야 합니다. 한 칸에 여러 개의 데이터를 넣지 마세요.
  • 제2정규형(2NF): 부분 함수 종속성을 제거합니다. 기본키가 복합키일 때, 키의 일부에만 종속되는 속성을 분리하는 작업입니다.
  • 제3정규형(3NF): 이행적 함수 종속성을 제거합니다. 기본키가 아닌 속성끼리 종속 관계가 있다면 테이블을 쪼개야 합니다.

💡 실무 노트

실무에서는 무조건 고차 정규화(BCNF, 4NF 등)를 고집하지는 않습니다. 정규화를 할수록 테이블이 잘게 쪼개져서 조인(JOIN) 연산이 많아지고, 결국 조회 성능이 떨어질 수 있거든요.

팁: 성능을 위해 의도적으로 중복을 허용하는 반정규화(De-normalization)를 고민해야 할 때도 있습니다. 대규모 트래픽이 발생하는 통계 쿼리 같은 곳에서는 정규화된 구조보다 합쳐진 구조가 훨씬 빠를 때가 많으니, 상황에 맞는 유연한 설계가 시니어와 주니어를 가르는 한 끗 차이가 됩니다.

"설계 단계의 1시간 투자가 운영 단계의 100시간을 아껴줍니다."