Topic

DB Smell

JackerLab 2025. 4. 21. 04:02
728x90
반응형

개요

'Code Smell'처럼 'DB Smell'은 데이터베이스에서 유지보수성과 확장성을 해치는 구조적 결함 또는 나쁜 설계 습관을 의미합니다. 즉시 오류를 발생시키진 않지만, 장기적으로는 성능 저하, 비즈니스 로직 중복, 데이터 품질 저하 등의 문제를 유발합니다. 이 글에서는 대표적인 DB Smell의 유형, 원인, 진단 방법, 개선 전략을 실무 중심으로 소개합니다.


1. DB Smell이란?

항목 설명
정의 데이터베이스 설계·구현 상에서 나타나는 구조적 문제 또는 나쁜 냄새(징후)
발생 위치 테이블 구조, 컬럼 설계, 관계 모델, 인덱스, 트리거, 제약 조건 등
위험 요소 데이터 중복, 무결성 저하, 성능 문제, 비표준 설계 유입

DB Smell은 궁극적으로 기술 부채로 이어지며, 코드뿐 아니라 데이터 모델에서도 반복적으로 발생합니다.


2. 대표적인 DB Smell 유형

유형 설명 문제점
중복 컬럼 동일한 의미의 컬럼이 여러 테이블에 존재 데이터 불일치, 관리 복잡
무관한 테이블 조인 명확한 관계 없는 테이블 간 조인 필요 쿼리 비효율, 논리적 혼란
비표준 명명 규칙 컬럼/테이블 이름 규칙 없이 무작위 사용 협업 어려움, 자동화 불가
다목적 컬럼 하나의 컬럼에 여러 타입·목적의 데이터 저장 쿼리 조건 복잡, NULL 과다 발생
스키마 내 비정규화 정규화를 무시한 반복 데이터 존재 중복 증가, 정합성 저하
외래키 누락 명시적 외래키 없이 애플리케이션에서 관리 무결성 보장 어려움
과도한 트리거 사용 트리거로 주요 로직 처리 사이드 이펙트, 디버깅 곤란
규칙 없는 제약조건 NULL, UNIQUE, DEFAULT 제약 미사용 데이터 품질 통제 불가

Smell은 설계 시점 또는 기술적 단축(shortcut)의 반복을 통해 점진적으로 누적됩니다.


3. 진단 방법

기법 설명 도구
ERD 리뷰 스키마 시각화를 통한 구조 검토 DB Diagram, Vertabelo
스키마 린트 검사 설계 규칙 기반 자동 검출 SQLFluff, SchemaSpy, Liquibase diff
메타데이터 분석 DB 메타데이터를 활용한 규칙 위반 탐지 INFORMATION_SCHEMA, system catalog
데이터 프로파일링 값의 패턴과 분포 기반 이상 탐지 OpenRefine, Dataedo
SQL 로그 분석 비효율적인 조인, 트리거 호출 등 파악 AWR, pg_stat_statements

정기적인 스키마 리뷰와 표준화 체크리스트 기반의 린팅이 효과적입니다.


4. 개선 전략

전략 설명 적용 예시
정규화 수행 반복되는 데이터 구조 분해 다목적 컬럼 → 관계 테이블 분리
명명 규칙 정립 테이블/컬럼/인덱스 표준 가이드 수립 snake_case + 접두사 규칙 등
스키마 리팩토링 무관한 관계, 중복 컬럼 제거 JOIN 대상 일원화, PK/FK 재설정
데이터 타입 정제 컬럼의 실제 용도에 맞는 타입 지정 ENUM 또는 LOOKUP 테이블 적용
무결성 강화 NOT NULL, CHECK, UNIQUE, FK 적극 사용 업무 규칙 DB 내에서 선 적용
트리거 정비 비즈니스 로직은 앱 계층 이동 권장 트리거 로깅 수준 최소화

기술 부채 제거는 일회성이 아닌 지속적 리팩토링과 리뷰 프로세스가 필요합니다.


5. 결론

DB Smell은 당장은 드러나지 않지만, 시스템이 확장될수록 데이터 품질과 유지보수성에 큰 위협이 됩니다. 애자일·DevOps 환경에서는 데이터 스키마도 코드처럼 버전 관리하고 리팩토링하는 문화가 필요합니다. 정기적인 진단과 개선을 통해 더 탄탄하고 확장 가능한 데이터베이스 구조를 만들 수 있습니다.

728x90
반응형

'Topic' 카테고리의 다른 글

빅데이터(Big Data) & 빅데이터 2.0  (0) 2025.04.21
Query Offloading  (0) 2025.04.21
DB 리팩토링(Database Refactoring)  (0) 2025.04.21
DB 튜닝(Database Tuning)  (0) 2025.04.21
다차원 색인 구조(Multidimensional Index Structures)  (0) 2025.04.21