정규화는 데이터 모델링의 성능 기반이다
SQLD 보수교육을 들으면서 데이터 모델링 관련 내용을 다시 정리했다. 쿼리 튜닝보다 모델링이 먼저라는 말이 맞다는 걸 실무를 거치면서 더 실감하게 됐다.
모델 표기법
데이터 모델링에서 자주 쓰이는 표기법은 크게 세 가지다.
| 표기법 | 특징 | 주 사용처 |
|---|---|---|
| IE(Information Engineering) | 까마귀 발(Crow’s Foot)로 관계 표현 | 실무에서 가장 보편적 |
| Barker | 오라클 중심, 선택/필수를 점선·실선으로 구분 | 오라클 데이터 모델링 |
| UML | 클래스 다이어그램 확장, 숫자로 다중성 표현 | 객체지향 설계 |
실무에서는 IE 표기법을 압도적으로 많이 쓴다. ERD 툴(ERWin, DA#, DBeaver)도 대부분 IE 기반이다. 관계를 읽을 때 “1(실선) 대 N(까마귀 발)” 형태로 직관적이기 때문이다.
정규화
정규화는 단계적으로 진행된다.
1차 정규형(1NF): 각 컬럼이 원자값을 가져야 한다. 하나의 셀에 여러 값이 들어가 있으면 분리해야 한다.
2차 정규형(2NF): 부분 함수 종속을 제거한다. 복합 키를 사용할 때, 키의 일부에만 종속되는 속성이 있으면 분리한다. 예를 들어 학과구분에 따라 학과번호가 결정된다면, 이를 별도 테이블로 분리하는 것이 2차 정규형이다.
3차 정규형(3NF): 이행 함수 종속을 제거한다. 키가 아닌 속성에 종속하는 것을 분리한다. 특수학과 유무에 따라 지원금이 결정된다면, 특수학과 유무를 별도로 분리해야 한다.
왜 정규화가 성능 기반인가
정규화가 잘 되어 있으면 데이터 중복이 없다. 중복이 없으면 삽입·삭제·갱신 시 이상 현상(anomaly)이 생기지 않는다. 같은 데이터를 여러 곳에서 수정해야 하는 상황이 사라지고, 데이터 일관성도 자연스럽게 유지된다.
쿼리 성능이 나쁠 때 인덱스나 쿼리 튜닝부터 손대는 경우가 많은데, 모델링 자체가 잘못되어 있다면 튜닝의 효과가 제한적이다. 데이터 모델링 단계에서 정규화를 제대로 하는 것이 가장 먼저 신경써야 할 부분이다.
단, 정규화가 무조건 정답은 아니다. 조회 성능이 중요한 환경에서는 의도적으로 역정규화(denormalization)를 선택하기도 한다. 정규화의 원칙을 이해하고 있어야 언제 예외를 둘지도 판단할 수 있다.
연결 (이유)
- DB 통신 횟수를 줄이는 것이 성능 개선의 핵심이다 — 잘 설계된 스키마(정규화)는 DB 통신 횟수 최소화의 전제 조건이며, 쿼리 튜닝보다 모델링이 먼저임
- JVM 메모리 구조를 이해해야 성능 문제의 원인을 찾을 수 있다 — DB 성능과 JVM 메모리 모두 애플리케이션 성능의 두 축으로, 함께 봐야 병목 원인을 정확히 파악할 수 있음