데이터베이스의 구조는 서비스 성능과 유지보수성에 큰 영향을 줍니다. 특히 MySQL에서는 다양한 데이터 모델링 방식을 활용할 수 있으며, 각 모델에 맞는 최적화 전략이 중요합니다. 이 글에서는 정규화, 비정규화, EAV(Entity-Attribute-Value), JSON 기반 모델 등의 설계 기법과 성능 향상 팁을 소개합니다.
1. 정규화(Normalization) 모델
정규화는 중복을 줄이고 데이터 무결성을 높이기 위한 전통적인 관계형 데이터 설계 방식입니다.
- 장점: 데이터 일관성 유지, 중복 최소화
- 단점: JOIN이 많아져 복잡한 쿼리와 성능 저하 발생 가능
> INNER JOIN
이 과도하게 사용될 경우, 인덱스 설계와 캐시 튜닝이 필요합니다.
2. 비정규화(Denormalization) 모델
정규화의 반대 개념으로, 일부 데이터 중복을 허용하면서 쿼리 성능을 향상시키는 방식입니다.
- 장점: 빠른 조회 성능
- 단점: 중복 데이터 관리 부담, 무결성 위험
> 분석 쿼리, 대시보드, 레포트 등 읽기 위주의 서비스에서 적합합니다.
3. EAV(Entity-Attribute-Value) 모델
속성이 유동적인 구조를 저장할 때 사용하는 방식으로, 쇼핑몰 옵션, 설정값, 메타데이터 등에 사용됩니다.
table: attributes
+------------+-------------+---------+
| entity_id | attribute | value |
+------------+-------------+---------+
| 1001 | color | red |
| 1001 | size | L |
+------------+-------------+---------+
- 장점: 유연한 스키마
- 단점: JOIN이 많고 인덱싱 어려움 → 성능 저하
> 속성 수가 10~20개 이하일 경우에만 고려, 그렇지 않으면 테이블 컬럼화를 추천합니다.
4. JSON 컬럼 기반 모델
MySQL 5.7부터 JSON 컬럼을 공식 지원하며, 비정형 데이터를 유연하게 다룰 수 있습니다.
CREATE TABLE products (
id INT,
name VARCHAR(255),
options JSON
);
- 장점: 구조적 유연성, 개발 편의성
- 단점: 인덱싱, 조건 검색의 한계
> JSON 내부 값을 WHERE 조건으로 사용하려면 ->
, JSON_EXTRACT()
함수 활용이 필요합니다.
성능 최적화 팁
- 인덱스 전략 수립: WHERE 절, JOIN 조건 컬럼에 인덱스 필수
- 쿼리 분석:
EXPLAIN
으로 실행 계획 수시 확인 - 읽기/쓰기 분리: 복제(replication)로 분산 설계
- 캐싱 활용: Redis, Memcached와의 병행 운영 고려
다양한 데이터 모델은 상황에 따라 선택이 달라져야 합니다. 정형 데이터는 정규화, 조회 성능은 비정규화, 동적 구조는 JSON 또는 EAV 등으로 목적에 맞게 설계하고, 적절한 튜닝과 테스트를 병행하면 안정성과 성능을 모두 확보할 수 있습니다.
'개발 > DB' 카테고리의 다른 글
MySQL에서 외래 키 제약 조건 설정 시 성능 최적화 (0) | 2025.09.06 |
---|---|
MySQL에서 고급 쿼리 최적화 기법 (0) | 2025.09.05 |
MySQL에서 파티션을 통한 성능 최적화 (0) | 2025.09.04 |
MySQL에서 데이터 복제의 지연 시간 최소화 방법 (0) | 2025.09.03 |
MySQL의 클러스터링(Clustering) 개념과 설정 방법 (0) | 2025.09.02 |