콘텐츠로 이동

02. 정규화 & 반정규화#

1과목 · 데이터 모델과 성능. ★ = 시험 빈출


1. 성능 데이터 모델링 개요#

정의#

데이터 모델링을 할 때 작업 유형에 따라 성능 향상을 도모해야 한다.

★ 수행 시점#

분석/설계 단계에서 수행 → 후속 비용 절감

고려 사항#

  • 정규화 / 반정규화 수행
  • 대량 데이터 분석 (파티션)
  • 통합/분리 등 데이터 모델 재정의
  • 슈퍼/서브타입 모델 검토
  • PK/FK 인덱스 적용

2. ★ 정규화 (Normalization)#

정의#

"데이터에 대한 중복성을 제거하여 일관성을 유지하기 위한 작업"

핵심 효과#

정규화 성능
정규화 잘 됨 입력/수정/삭제 성능 향상
반정규화 많이 조회 성능 향상

★ 함수적 종속성 (Functional Dependency)#

데이터들이 어떤 기준값에 의해 종속되는 현상

  • 결정자: 주민등록번호
  • 종속자: 이름, 출생지, 주소
  • 표기: 결정자 → 종속자

정규형 단계별#

정규형 조건 예시
1NF 모든 속성이 원자값 (반복 칼럼 제거) 한 칼럼에 여러 값 X
2NF 1NF + 부분 함수 종속 제거 복합 PK 중 일부에만 종속되는 속성 분리
3NF 2NF + 이행 함수 종속 제거 A→B→C 일 때 C를 분리
BCNF 3NF + 모든 결정자가 후보키 결정자가 키가 아닌 경우 분리

정규화 예시#

정규화 전#

[학생] 학번, 이름, 과목1, 과목2, 과목3

1NF (원자값)#

[학생수강] 학번, 이름, 과목

2NF (부분 종속 제거)#

[학생] 학번, 이름 [수강] 학번, 과목


3. ★ 반정규화 (De-normalization)#

정의#

"정규화된 엔터티/속성/관계에 대해 시스템의 성능향상과 개발·운영의 단순화를 위해 중복·통합·분리 등을 수행하는 데이터 모델링 기법"

★ 적용 시점#

  • 조인으로 인한 성능 저하가 예상될 때
  • 결과를 도출하기 위한 처리 성능이 저하될 때
  • 다량의 범위 처리, 통계성 처리 필요할 때

★ 적용 방법 (3단계)#

1. 반정규화 대상 조사 2. 다른 방법 유도 검토 (뷰, 인덱스, 파티션) 3. 반정규화 적용

★ 반정규화 기법#

종류 기법
테이블 테이블 병합 / 테이블 분할 / 테이블 추가
칼럼 중복칼럼 추가 / 파생칼럼 추가 / 이력테이블 칼럼 추가 / PK에 의한 칼럼 추가 / 응용시스템 오작동 대비 칼럼 추가
관계 중복관계 추가

4. 대량 데이터에 따른 성능#

로우 체이닝 vs 로우 마이그레이션#

용어 정의
로우 체이닝 (Row Chaining) 로우 길이가 너무 길어 하나의 블록에 저장 못 하고 두 개 이상 블록에 저장
로우 마이그레이션 (Row Migration) 수정된 데이터가 기존 블록에 못 들어가 다른 블록으로 이동

→ 둘 다 디스크 I/O 증가 → 성능 저하

★ 파티션 종류#

종류 기준
RANGE PARTITION 범위 (날짜, 숫자 범위)
LIST PARTITION 목록 (지역, 카테고리)
HASH PARTITION 해시 함수 (균등 분포)

테이블 분할#

  • 수평 분할 (Horizontal): 행을 기준으로 분할 (파티션)
  • 수직 분할 (Vertical): 칼럼을 기준으로 분할

5. ★ 슈퍼타입/서브타입 모델#

개요#

"Extended ER 모델" — 업무의 공통점과 차이점을 고려하여 표현

  • 슈퍼타입: 공통 속성
  • 서브타입: 차이 속성 (슈퍼로부터 상속)

[당사자] ← 슈퍼타입 / \ [개인][법인] ← 서브타입

★ 변환 타입 3가지#

변환 타입 방식 장점 단점
OneToOne Type 슈퍼+서브 각각 테이블 유지 명확한 구조 JOIN 많음, 트랜잭션 많음
Plus Type 슈퍼 제거, 서브에 슈퍼 속성 통합 (서브별 분리) 서브별 트랜잭션 빠름 UNION 발생 가능
Single Type 슈퍼+서브 모두 하나로 통합 JOIN 없음, 빠름 칼럼 多, NULL 많음, 저장공간 ↑

★ 선택 기준#

트랜잭션 유형 추천 방식
서브타입 개별 처리가 많음 Plus Type
슈퍼+서브 같이 처리가 많음 OneToOne Type
데이터 양이 적고 통합처리 많음 Single Type

6. ★ PK/FK 인덱스와 성능#

PK 칼럼 순서의 중요성#

  • 인덱스의 앞쪽 속성값이 = 또는 BETWEEN 으로 와야 효율 좋음
  • PK 순서를 무심코 잡으면 Full Scan 유발 → 성능 저하

잘못된 예시#

sql -- PK: (입사일자, 사원번호) -- 자주 쓰는 쿼리: WHERE 사원번호 = 'E001' AND 입사일자 BETWEEN '2024-01-01' AND '2024-12-31' -- → 사원번호로 빠른 검색 불가능 (PK 앞쪽이 입사일자)

올바른 예시#

sql -- PK: (사원번호, 입사일자) -- 사원번호로 먼저 찾고 입사일자로 좁히기 → 빠름

FK 인덱스#

★ FK 제약이 걸렸을 때는 반드시 FK 인덱스 생성

  • 미생성 시 → JOIN 성능 저하
  • 사용 안 되는 인덱스는 제거

7. 분산 데이터베이스#

정의#

"빠른 네트워크 환경을 이용해 DB를 여러 지역/노드에 위치시켜 사용성/성능 등을 극대화시킨 데이터베이스"

★ 6가지 투명성#

투명성 의미
분할 데이터가 분할됨을 사용자가 의식 X
위치 위치를 사용자가 의식 X
지역 사상 지역 DBMS와 물리적 DB 간 사상
중복 중복 데이터를 사용자가 의식 X
장애 장애에도 트랜잭션 정확히 처리
병행 동시 처리에도 결과 영향 X

분산 기법#

기법 종류
테이블 위치 분산 테이블을 다른 서버에 위치
테이블 분할 분산 수평 분할 / 수직 분할
테이블 복제 분산 부분 복제 / 광역 복제
테이블 요약 분산 분석 요약 / 통합 요약

장단점#

장점 단점
성능 향상 설계 복잡
가용성 ↑ 무결성 보장 어려움
신뢰성 ↑ 비용 ↑
확장성 ↑ 잠재적 오류 ↑

시험 핵심 체크리스트#

  • 정규화의 핵심 효과 (중복 제거)
  • 1NF/2NF/3NF/BCNF 각 단계 조건
  • 반정규화 적용 3단계 (조사 → 검토 → 적용)
  • 반정규화 기법 분류 (테이블/칼럼/관계)
  • 로우 체이닝 vs 로우 마이그레이션 차이
  • 파티션 3종류 (RANGE/LIST/HASH)
  • 슈퍼/서브타입 변환 3타입 (OneToOne/Plus/Single)
  • PK 칼럼 순서가 성능에 미치는 영향
  • 분산 DB 6가지 투명성