alt

(DB실무) Part3-데이터 모델과 성능

2026년 11월 8일 공유

데이터 모델과 성능

콘텐츠 유형: 강의

개요

데이터 모델링 단계에서 성능을 함께 고려하는 성능 데이터 모델링의 목적과 절차를 살펴본다. 핵심은 먼저 정규화를 통해 데이터 이상 현상을 방지하고, 실제 용량과 트랜잭션 패턴을 분석한 뒤 필요한 경우에 한해 반정규화나 인덱스 조정을 적용하는 것이다.

핵심 개념

  • 성능 데이터 모델링: 데이터베이스 성능을 고려해 모델을 설계하는 작업. 구현·테스트·운영 단계에서 구조를 되돌려 수정하는 비용을 줄이려면 분석·설계 단계부터 성능을 검토해야 한다.
  • 정규화: 함수 종속성에 따라 데이터를 주제별 테이블로 분리해 중복과 삽입·삭제·갱신 이상을 줄이는 과정.
  • 반정규화: 정규화를 무시하는 것이 아니라, 정규화 이후 성능 저하가 확인된 부분을 대상으로 조회 성능 향상을 위해 중복·통합·분할 등을 적용하는 방법.
  • 관계형 데이터베이스의 제약 조건: 도메인 제약, 키 제약, 개체 무결성 제약, 참조 무결성 제약.
  • 인덱스: 검색 속도를 높이는 자료 구조. 검색 성능을 개선하지만 생성·관리에는 시간과 저장 공간이 들기 때문에 필요한 곳에 선별적으로 적용한다.

상세 노트

1. 성능 모델링의 절차

성능을 고려한 모델링은 빠를수록 좋다. 운영 중 성능 문제가 발견되면 재설계와 재구현에 큰 비용이 들 수 있다.
  1. 정규화를 정확히 수행해 이상 현상을 방지하고 관심사별로 테이블을 분리한다.
  1. 데이터베이스 용량과 접근량을 산정해 부하가 큰 엔터티를 식별한다.
  1. 대상 엔터티에서 발생하는 CRUD 트랜잭션 유형과 패턴을 분석한다.
  1. 용량 및 트랜잭션 특성에 근거해 필요한 반정규화를 검토한다.
  1. 반정규화로 해결되지 않는 문제는 이력 모델, PK·FK 설정, 슈퍼타입·서브타입 구조 등을 조정하고 최종 성능을 검증한다.
접근이 드문 테이블은 모델 구조를 세밀하게 조정해도 효과가 작을 수 있다. 성능 개선 대상은 실제로 부하가 큰 테이블과 주요 트랜잭션을 중심으로 선정한다.

2. 관계형 데이터베이스와 제약 조건

관계형 데이터베이스의 릴레이션은 테이블이며, 행은 튜플·레코드, 열은 속성·칼럼으로 부른다. 기본 키(PK)는 튜플을 식별하고, 다른 테이블의 PK를 참조하는 값은 외래 키(FK)다.
  • 도메인 제약: 속성은 정의된 범위의 값을 가져야 하며, 관계형 테이블의 속성값은 원자적이어야 한다. 복합 속성과 다중값 속성은 테이블 구조에 맞게 분리한다.
  • 키 제약: 릴레이션의 튜플은 서로 식별 가능해야 한다. 후보 키 중 대표 키로 선택한 것이 기본 키다.
  • 개체 무결성: 기본 키는 유일하고 NULL이 아니어야 한다.
  • 참조 무결성: 외래 키는 NULL이거나 참조 대상 테이블에 실제로 존재하는 값을 가져야 한다. 존재하지 않는 값을 참조하거나, 참조되는 행을 무조건 삭제하면 무결성이 깨질 수 있다.
일부 설명에서는 키 제약과 개체 무결성을 합쳐 ‘개체 무결성’으로 다루기도 하므로 문맥에 따라 구분한다.

3. 정규화와 이상 현상

여러 주제의 정보를 한 테이블에 섞어 두면 다음과 같은 이상 현상이 발생할 수 있다.
  • 삭제 이상: 한 정보를 삭제했는데 함께 저장된 다른 정보까지 사라진다.
  • 삽입 이상: 특정 정보를 입력하려면 아직 존재하지 않는 다른 정보도 필요해 입력이 막힌다.
  • 갱신 이상: 같은 정보가 여러 행에 중복되어 있어 일부만 변경되면 데이터가 불일치한다.
정규화는 테이블을 학생·과목·수강처럼 주제별로 나누어 이상 현상을 줄인다.
  • 제1정규형(1NF): 모든 속성값이 원자값이다.
  • 제2정규형(2NF): 제1정규형을 만족하고, 복합 키의 일부에만 종속되는 부분 함수 종속을 제거한다.
  • 제3정규형(3NF): 제2정규형을 만족하고, 일반 속성이 다른 일반 속성을 결정하는 이행 함수 종속을 제거한다.
실무에서는 일반적으로 제3정규형을 목표로 삼는다. 함수 종속성에서 결정자는 다른 속성을 결정하는 속성 또는 속성 집합이며, 정규화는 키 전체에 종속되는 속성 중심으로 테이블을 구성하는 과정이다.

4. 정규화가 성능에 미치는 영향

정규화는 항상 성능을 낮추는 것이 아니다.
  • 관심사별로 데이터가 분리되고 중복이 줄어들어, 필요한 정보를 찾거나 갱신할 때 처리량이 감소할 수 있다.
  • 특히 삽입·삭제·갱신은 중복 데이터의 관리 부담이 줄어 성능과 일관성이 개선될 수 있다.
  • 반면 조회 시 여러 테이블을 조인해야 할 수 있다. 따라서 조회 성능은 쿼리의 조건과 접근 패턴에 따라 향상되거나 저하될 수 있다.
예를 들어 학생 정보가 대규모 수강 테이블에 중복 저장되어 있다면, 학생 정보만 조회할 때 불필요하게 많은 행을 살펴봐야 한다. 학생 정보를 별도 테이블로 분리하면 이러한 조회는 효율적일 수 있지만, 학생·수강·과목 정보를 함께 조회할 때는 조인이 필요하다.

5. 반정규화

반정규화는 정규화를 수행한 뒤, 조회 성능 문제를 해결하기 위해 데이터 모델의 일부를 의도적으로 변경하는 작업이다. 중복을 만들 수 있어 데이터 무결성 관리가 중요하므로, 먼저 인덱스 조정·뷰·클러스터링·프로그램 처리 로직 개선 등 다른 방법을 검토한다.
칼럼 반정규화
  • 중복 칼럼 추가: 자주 함께 조회되는 다른 테이블의 속성을 복사해 조인을 줄인다.
  • 파생 칼럼 추가: 계산 비용이 큰 합계 등 예상 가능한 값을 미리 저장한다. 값이 바뀔 때 함께 갱신해야 한다.
  • 이력 테이블 칼럼 추가: 이력 중 최신 데이터인지 여부를 표시하는 칼럼을 두어 최신 행을 빠르게 찾는다.
  • PK의 의미를 분리하는 칼럼 추가: PK에 포함된 정보를 별도 속성으로 저장해 해당 조건의 검색을 빠르게 한다.
  • 데이터 복구용 칼럼 추가: 현재 값과 직전 값을 함께 보관해 오류나 실수 발생 시 복구를 돕는다.
테이블 반정규화
  • 테이블 병합: 함께 조회되는 테이블을 합쳐 조인을 줄인다. 일반 관계의 병합이나 슈퍼타입·서브타입 통합이 여기에 해당한다.
  • 테이블 분할: 접근 패턴에 따라 칼럼을 나누는 수직 분할, 행을 나누는 수평 분할을 적용한다. 이는 정규형 수준 자체를 낮추는 것과는 다를 수 있지만, 성능을 위해 구조를 변경하는 반정규화 기법으로 설명되기도 한다.
  • 테이블 추가: 중복 테이블, 통계 테이블, 이력 테이블, 부분 테이블 등을 추가해 자주 수행되는 조회를 지원한다. 부분 테이블 추가는 원본을 유지하면서 일부 칼럼을 별도 테이블에 복제하는 방식이며, 원본에서 칼럼을 떼어내는 수직 분할과 다르다.
슈퍼타입·서브타입 구조는 접근 패턴에 따라 선택한다.
  • 원투원 타입: 공통 정보와 서브타입 정보를 별도 테이블로 유지한다. 각 테이블에 개별 접근하는 경우에 적합하다.
  • 플러스 타입: 슈퍼타입과 서브타입을 종류별로 통합한다. 공통 정보와 특정 서브타입 정보를 함께 조회하는 경우를 고려한다.
  • 싱글 타입: 모든 유형을 하나의 테이블로 합친다. 여러 서브타입을 함께 조회할 때 조인을 줄일 수 있지만, 테이블이 커지고 확장성이 낮아질 수 있다.
관계 반정규화
테이블 수는 그대로 두고 관계를 추가해 조인 경로를 단축한다. 기존 경로로 조회할 수 있더라도 조인이 지나치게 길고 해당 조회가 빈번한 경우에 검토한다.

6. 테이블 분할과 파티션

테이블 용량이 크고 트랜잭션이 특정 행 또는 열에 집중되는 패턴이 확인되면 분할을 검토한다. 분할 방식은 실제 데이터량과 트랜잭션 접근 패턴을 기준으로 정한다.
  • 레인지 파티션: 연속적인 범위로 분할한다.
  • 리스트 파티션: 지역명처럼 지정된 값에 따라 분할한다.
  • 해시 파티션: 해시 함수를 적용한 결과로 분할한다.

7. 인덱스와 키 순서

테이블은 저장 순서가 정렬되어 있다고 보장되지 않으므로, 조건에 맞는 행을 찾으려면 전체 테이블을 읽는 풀 스캔이 발생할 수 있다. 인덱스는 검색에 자주 사용되는 속성을 별도로 정렬해 저장하고, 해당 행의 위치를 찾도록 돕는다.
  • PK나 유일성 제약을 가진 칼럼에는 인덱스가 자동 생성될 수 있다.
  • FK를 포함해 조회 조건으로 자주 사용되는 칼럼은 추가 인덱스 후보가 될 수 있다.
  • 인덱스는 공간을 차지하고 데이터 변경 시 유지 관리 비용이 발생하므로 무조건 많이 만들지 않는다.
  • 복합 PK의 칼럼 순서는 인덱스 정렬과 검색 효율에 영향을 준다. 자주 검색 조건으로 쓰이는 칼럼을 앞쪽에 배치하면 해당 검색에서 인덱스를 효율적으로 사용할 수 있다. 뒤쪽 칼럼만 조건으로 검색하면 인덱스 전체를 확인해야 할 수 있다.
성능 개선의 기본 원칙은 정규화로 이상 현상을 방지한 뒤, 실제 용량과 트랜잭션 패턴을 근거로 필요한 곳에만 반정규화와 인덱스 조정을 적용하는 것이다.
공개 노트 모두 보기