2025. 8. 27. 22:17ㆍ개발/DB
정규화를 하면 성능이 떨어진다던데요 ?
✅ 정규화를 하면 성능이 떨어진다던데요 ?
특정 회사의 데이터베이스를 까보면 정규화가 안 되어 있는 설계를 종종 만난다. 그래서 DB 설계를 하신 분한테 왜 정규화를 적용시키지 않았냐고 물어보면 대부분 아래와 같이 답변한다.
- 정규화를 지키면 테이블 개수가 많아져서 관리가 불편해요.
- → 데이터 중복으로 인해 발생하는 단점들이 훨씬 크고 관리하기가 더 어렵다.
- 정규화로 테이블을 나누면 조회할 때 JOIN을 해야 해서 쿼리가 복잡해져요.
- → 이렇게 얘기하는 사람 치고 SQL문 잘 작성하는 사람 못봤다. 자신이 JOIN 문이 어려우니까 쿼리가 복잡하다고 얘기하는 것이다. SQL문에서 JOIN문은 기본적인 문법 중 하나다.
- JOIN을 많이 하면 할수록 성능이 안 좋아져서 정규화를 안 했어요.
- → 실제로 JOIN을 많이 했을 때 성능이 안 좋아지는 경우도 존재한다. 하지만 이렇게 얘기하는 사람치고 실제로 성능 측정해본 사람이 아무도 없다. ‘JOIN을 하면 성능이 안 좋지 않을까요?’라고 추측만 할 뿐이다. 성능 개선은 느려지기 전까지 최대한 안 건드리는 게 Best다. 설령 성능 개선을 해야 할 필요성을 느끼더라도 반드시 ‘측정’을 기반으로 해야 한다.
- 귀찮아서요(?)
- → 실력 없는 사람들이 자주 하는 변명이다.
✅ 실전 지침
특별한 이유가 없다면 무조건 정규화를 지켜서 DB 설계를 해라. 즉, 데이터 중복이 발생하지 않게끔 설계해라.
✅ 역정규화란?
정규화란 DB를 설계하면서 중복을 없애는 과정이라고 설명했었다. 역정규화란 성능을 향상시키기 위해 정규화된 DB를 다시 중복을 허용하는 형태로 변경하는 과정을 뜻한다.
✅ 역정규화는 언제 하나요 ?
- 특별한 이유가 없는 한 정규화를 지켜서 DB 설계를 하라고 얘기했다. 이 때, 정규화로 인해 비효율적으로 SQL문을 실행시켜서 실제로 성능이 느려질 때가 있다. 정규화된 테이블 구조에서 SQL문 자체를 최대한 고쳐봐도 성능이 개선되지 않을 때가 있다. 이 때는 역정규화를 고려해보기도 한다. => 최후의 보루로 역정규화를 고려해보는 상황이다.
- 역정규화는 매우 제한적으로 사용해야 한다. 그리고 데이터 중복으로 인해 실수로 데이터가 잘못 관리되는 현상(이상현상)이 발생하지 않도록 많은 노력을 기울여야 한다.
When and How You Should Denormalize a Relational Database
Custom Software Development and Consulting Company | RubyGarage
RubyGarage is a full-cycle custom software development company that offers complete software development and consulting services. We partner with enterprises, startups, and startup accelerators.
rubygarage.org
만약 DB 설계를 이제 입문한 수강생이라면 역정규화는 학습하지 말고 그냥 넘겨버리자. DB 설계를 자유자재로 할 수 있고, 서비스를 배포해본 경험도 어느 정도 쌓였을 때쯤 학습해도 늦지 않다.
이 다음에는 어떤 걸 공부해야 하나요?
- 나외있는 서비스데이터베이스 설계해보기
- 프로젝트 직접해보기
- aws로 서비스 배포해보기
'개발 > DB' 카테고리의 다른 글
설계한 모델을 실제 DB에 반영하기 (1) | 2025.08.26 |
---|---|
ERD란 ? / ERD 해석하기 (0) | 2025.08.21 |
[실습] 화면 UI 디자인을 보고 DB 설계해보기 (2) | 2025.08.21 |
[실습] 요구사항을 보고 DB 설계해보기 - JSCODE 커뮤니티 (0) | 2025.08.21 |
[실습] 요구사항을 보고 DB 설계해보기 - JSCODE 쇼핑몰 (0) | 2025.08.21 |