Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- AbstractAggregateRoot
- 캐시
- devops
- 인증
- 웹개발
- 네트워크
- 백엔드
- SnowFalke
- 성능최적화
- 세션
- java
- JPA
- db
- Spring Boot
- 프론트엔드
- 백엔드기초
- spring event
- Spring
- CS
- 클린코드
- DEVIEW2023
- 인프라
- redis
- http
- 웹성능최적화
- interceptor
- 백엔드개발자
- 백엔드개발
- 데이터베이스
- 보안
Archives
- Today
- Total
이것저것 개발기록
"데이터 설계의 정석" DB 정규화(Normalization) 핵심 요약 본문
"테이블 하나에 다 때려 넣으면 안 되나요?"
데이터 중복을 제거하고 이상 현상(Anomaly)을 방지하는 데이터베이스 정규화. 왜 해야 하고, 어디까지 해야 할지 실무 관점에서 정리해 드립니다.
1. 정규화는 왜 하는가?
정규화의 가장 큰 목적은 데이터의 중복을 최소화하고 데이터 무결성을 보장하는 것입니다. 정규화가 안 된 테이블에서는 데이터를 수정할 때 일부만 바뀌는 수정 이상, 데이터 삭제 시 엉뚱한 정보까지 날아가는 삭제 이상 같은 문제가 발생합니다.
2. 꼭 알아야 할 1~3 정규화 (1NF, 2NF, 3NF)
- 제1정규형(1NF): 모든 속성 값은 원자 값(Atomic Value)이어야 합니다. 한 칸에 여러 개의 데이터를 넣지 마세요.
- 제2정규형(2NF): 부분 함수 종속성을 제거합니다. 기본키가 복합키일 때, 키의 일부에만 종속되는 속성을 분리하는 작업입니다.
- 제3정규형(3NF): 이행적 함수 종속성을 제거합니다. 기본키가 아닌 속성끼리 종속 관계가 있다면 테이블을 쪼개야 합니다.
💡 실무 노트
실무에서는 무조건 고차 정규화(BCNF, 4NF 등)를 고집하지는 않습니다. 정규화를 할수록 테이블이 잘게 쪼개져서 조인(JOIN) 연산이 많아지고, 결국 조회 성능이 떨어질 수 있거든요.
팁: 성능을 위해 의도적으로 중복을 허용하는 반정규화(De-normalization)를 고민해야 할 때도 있습니다. 대규모 트래픽이 발생하는 통계 쿼리 같은 곳에서는 정규화된 구조보다 합쳐진 구조가 훨씬 빠를 때가 많으니, 상황에 맞는 유연한 설계가 시니어와 주니어를 가르는 한 끗 차이가 됩니다.
"설계 단계의 1시간 투자가 운영 단계의 100시간을 아껴줍니다."
'IT 이야기' 카테고리의 다른 글
| "폰트 하나 때문에 속도가?" 웹 폰트 최적화 전략 (FOIT vs FOUT) (0) | 2026.01.04 |
|---|---|
| "거대해진 DB를 감당하는 법" 데이터베이스 샤딩(Sharding) 입문 (0) | 2026.01.04 |
| "LCP 점수가 낮다면?" 프론트엔드 이미지 최적화 가이드 (0) | 2026.01.03 |
| "객체 지향의 꽃" 의존성 주입(DI) 이해하기 (0) | 2026.01.02 |
| "서버가 빨라지는 마법" 상황별 캐시(Cache) 전략 총정리 (0) | 2026.01.02 |