[DB] (4) 데이터베이스 반정규화 : 성능 최적화를 위한 전략

이영교·2024년 8월 29일
0

DB

목록 보기
4/11
post-thumbnail

반정규화의 목표

데이터베이스 설계에서 중요한 목표 중 하나는 효율적인 데이터 저장 및 검색이다. 이를 위해 데이터베이스 정규화는 중복 데이터를 최소화하고 데이터 무결성을 유지하는 데 목표를 가지고 있다. 하지만, 모든 상황에서 정규화가 최선의 선택이 될 수 없다. 성능 향상이 필요할 경우 반정규화를 고려해야 하는데, 그렇다면 반정규화는 어떤 것을 의미하는지 알아보자.

반정규화는 데이터베이스의 성능 향상을 위해 의도적으로 정규화된 데이터 구조를 일부 해체하는 과정을 의미한다. 이는 데이터 중복을 일부 허용하거나 추가적인 데이터 구조를 도입하는 것을 포함할 수 있다. 주로 조회 성능을 최적화하고, 복잡한 조인 과정을 단순화하며, 자주 사용되는 데이터를 더 빠르게 접근할 수 있도록 하는 데 목표를 두고 있다.

이번 블로그 글에서는 반정규화의 절차와 기법, 성능에 대해 알아보고자 한다.

반정규화 절차

반정규화는 데이터의 일관성을 유지하는 비용이 더 발생하기 때문에, 반정규화를 수행하기 전 다른 방법을 먼저 유도한 후, 반정규화를 수행한다. 수행하는 절차는 크게 세 가지로 구분된다.

  1. 반정규화 대상 조사
    일정한 범위를 조회하려는 프로세스가 많은지, 대량의 데이터 범위를 자주 처리하는지 등을 조사한다.
  2. 다른 방법 유도
    성능을 고려한 뷰를 생성하는 방법, 인덱스 변경 및 생성, 응용 메모리 영역에서 데이터를 캐시 처리 등을 고려한다.
  3. 반정규화 적용

반정규화 기법

반정규화의 기법은 크게 세 가지로 구분된다.

  1. 테이블 반정규화
    (테이블 병합) 데이터의 중복이 발생하지 않는 선에서, 1:1 관계, 1:M 관계, 슈퍼/서브 타입 테이블 병합을 진행하여 조인을 통해 데이터를 읽어야 했던 비용을 절감할 수 있다.
    (테이블 분할) 테이블에서 특정 컬럼만 조회할 때, Disk I/O를 낮추기 위해 수평/수직 분할 방법을 활용한다. 이를 통해, 전체 데이터에서 조회하는 것보다 더 적은 컬럼을 조회하기 때문에 비용을 줄일 수 있다.
    (테이블 추가) 중복, 통계, 이력, 부분 테이블을 추가하여 기존에 연산을 해야 했던 부분들을 미리 수행하여 비용을 절감할 수 있다.
  2. 컬럼 반정규화
    (중복 컬럼 추가) 조인을 감소시키기 위해 다수 테이블에 중복된 컬럼을 추가할 수 있다.
    (파생 컬럼 추가) 계산에 의한 성능 부하를 예방하기 위해 미리 값을 계산한 컬럼을 추가할 수 있다.
    (임시 컬럼 추가) 애플리케이션 오작동 시 이전 데이터로 복구하기 위한 임시 컬럼을 추가할 수 있다.
  3. 관계 반정규화
    (중복 관계 추가) 여러 경로를 거쳐야 조인이 가능한 경우 추가적인 관계를 생성해서 성능을 향상시킬 수 있다.

고려사항

반정규화는 중복성의 원리를 이용해서 데이터 조회 성능을 향상시키는 역할을 한다. 데이터를 조회할 때 디스크 I/O양이 많아서 성능 저하가 예상되는 경우, 정규화로 인해 엔티티가 증가하고 조인의 개수가 많아지는 경우에 사용하면 성능을 향상시킬 수 있다.

결론

반정규화를 사용하여 데이터베이스의 성능을 향상시키는 방법을 알 수 있다. 그러나 잘못 사용하면 데이터의 일관성 관리 문제의 어려움을 겪을 수 있기 때문에 일관성과 성능 사이에서 적절한 균형을 찾아야 할 것 같다.

profile
글쓰기 연습하는 사람입니다.

0개의 댓글