Post

[매일매일]백엔드 기술일기: 데이터베이스 정규화 vs 역정규화 – 한눈에 이해하기

데이터베이스 설계에서 가장 기본이면서도 중요한 개념 중 하나가 정규화(Normalization)입니다.하지만 실무에서는 반대로 역정규화(Denormalization)가 필요한 경우도 많죠.이번 글에서는 정규화와 역정규화의 개념, 목적, 각 단계별 설명, 그리고 선택 기준까지 한 번에 정리해보겠습니다.

✅ 정규화란?

“데이터 중복을 줄이고, 데이터 무결성을 높이기 위해 테이블을 구조적으로 정리하는 과정”

정규화는 삽입, 삭제, 갱신 이상(Anomaly)을 방지하고, 데이터가 일관성 있게 관리될 수 있도록 도와줍니다.여러 단계가 존재하며, 단계별로 더 정교한 구조로 분해됩니다.

🔹 1정규화 (1NF) – 원자값으로 분해설명: 모든 컬럼은 원자값(Atomic Value)만 가지도록 함예시:잘못된 예 → 취미: 독서, 등산올바른 예 → 취미: 독서, 취미: 등산 (행을 나누거나 테이블 분리)

🔹 2정규화 (2NF) – 완전 함수 종속설명: 부분 함수 종속 제거, 기본키의 일부가 아닌 전체에 종속된 속성만 남기기예시:복합키 (학생ID, 과목ID) → 교수이름 (❌)→ 교수이름은 과목에만 종속되므로 별도 테이블로 분리

🔹 3정규화 (3NF) – 이행적 종속 제거설명: A → B → C 라는 이행 종속이 있다면, A → C 관계 제거예시:학생ID → 학과코드 → 학과명→ 학과명은 별도 테이블로 분리

🔹 BCNF (보이스-코드 정규형)설명: 모든 결정자는 후보키가 되어야 함예시:강의실 → 강사, 시간표→ 강사도 키가 될 수 있다면 BCNF로 분리 필요

❗ 역정규화란?

“읽기 성능 향상을 위해 일부러 데이터 중복을 허용하고 테이블을 다시 합치는 과정”

정규화를 통해 데이터는 깔끔하게 분리되지만, 조회 시 JOIN 연산이 많아지며 성능 저하가 발생할 수 있습니다.이럴 때는 정규화된 구조를 다시 적절히 합쳐서 조회 성능을 높이는 것이 역정규화입니다.

📌 예시게시글 목록을 조회할 때, 댓글 수, 좋아요 수를 실시간 계산하지 않고 테이블에 저장사용자 정보와 주소 테이블을 JOIN하지 않고 한 테이블에 병합하여 사용​✅ 장점조회 속도 향상복잡한 JOIN 최소화​❌ 단점데이터 중복 발생삽입/수정 시 데이터 일관성 유지 어려움

🔍 정규화 vs 역정규화 비교

항목

정규화

역정규화

목적

중복 제거, 무결성 확보

조회 성능 향상

장점

구조적, 깔끔한 설계

빠른 읽기 성능

단점

JOIN 많아짐 → 느림

중복, 데이터 불일치 가능성

사용 예

ERP, 회계 시스템

게시판, 피드, 추천 시스템

🧪 언제 어떤 걸 선택할까?정규화가 기본입니다.→ 데이터 무결성이 가장 중요할 때역정규화는 성능이 중요한 경우에만 선택적으로→ 대용량 트래픽 시스템, 실시간 피드 등

📚 추가 학습 자료 및 출처🎥 [10분 테코톡] 켈리의 정규화 정리 영상→ https://www.youtube.com/watch?v=FZdr2HED5nA📝 [망나니개발자 블로그] 정규화 쉽게 이해하기→ https://mangkyu.tistory.com/47🧾 [리디 기술 블로그] ‘개발했더니 내 서재였던 건에 대하여’→ https://tech.ridicorp.com/2021/12/27/ridi-bookshelf-normalization.html​참고자료https://velog.io/@bsjp400/Database-DB-%EC%A0%95%EA%B7%9C%ED%99%94-%EB%B9%84%EC%A0%95%EA%B7%9C%ED%99%94%EB%9E%80

[Database] DB 정규화 & 비정규화란? 안녕하세요. 이번 포스팅엔 DB 정규화에 대한 내용을 정리해보려고 합니다!관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라고 한다. 데이터베이스 정규화의 목표는 이상이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것에 있 velog.io

🧩 마무리하며정규화와 역정규화는 단순히 “좋다, 나쁘다”가 아니라 상황에 맞는 선택이 핵심입니다.백엔드 개발자라면 둘 다 능숙하게 다루고, 프로젝트의 성격에 따라 적절히 적용할 수 있어야겠죠.💬 정규화 vs 역정규화, 여러분의 선택은?

This post is licensed under CC BY 4.0 by the author.