[SQLD 요약 정리] 1과목 2장 데이터 모델과 성능

박선영·2023년 11월 6일
0

[SQLD 이론 정리]

목록 보기
2/4
post-thumbnail

👋에필로그

책 [SQLD 자격검정 실전문제]과 한종구 강사님의 시험대비 유튜브 강의를 참고하여 공부하며 정리한 내용입니다.


2장 데이터 모델과 성능

1절 성능 데이터 모델링의 개요

01_성능 데이터 모델링

💡성능 데이터 모델링이란

분석 및 설계 단계부터 데이터베이스 성능을 고려한 데이터 모델링을 수행하는 기법으로, 성능을 중심으로 데이터 모델링을 수행한다.

성능 데이터 모델링 수행 절차

  1. 데이터 모델링 시 정규화 정확하게 수행
  2. 데이터베이스의 용량 예상 증가량 고려하여 조사
  3. 데이터베이스에 발생되는 트랜잭션 유형 파악
  4. 용량과 트랜잭션 유형에 따라 반정규화 수행
  5. 이력 모델, PK/FK, 슈퍼타입/서브타입 조정 등을 수행
  6. 성능관점에서 데이터 모델 검증

2절 정규화와 성능

01_정규화

💡정규화란

데이터의 일관성, 최소한의 중복, 최대한의 데이터 유연성을 위해 데이터를 분해하는 과정이다.

정규화를 통해 이상현상을 줄이며, 데이터 모델의 독립성을 확보할 수 있다.
엔터티를 상세화하는 과정으로 논리 데이터 모델링 수행 시점에 고려한다.

이상현상 Abnormality

🔘 삽입이상
: 행 삽입 시 지정되지 않은 속성 값이 NULL을 가지는 경우

🔘 갱신이상
: 데이터 갱신 시 일부분만 갱신되어 일관성이 유지되지 않은 경우

🔘 삭제이상
: 행 삭제 시 원하지 않은 연쇄 삭제가 발생하는 경우

정규화 단계

🔶 제1정규화
: 테이블 내 속성의 원자성을 확보
- 기본키 설정

🔶 제2정규화
: 기본키가 2개 이상의 속성으로 이루어진 경우 부분 함수 종속성 제거

🔘 제3정규화
: 기본키를 제외한 컬럼 간 종속성(이행 함수 종속성) 제거

🔘 BCNF(Boyce-Codd Normal Form)
: 기본키 외의 후보키가 있는 경우, 후보키가 기본키를 종속시킬 경우 분해
- 결정자 함수 종속성을 제거하는 강한 제3정규화

🔘 제4정규화
: 여러 컬럼이 한 컬럼을 종속시키는 경우 분해하여 다중값 종속성 제거

🔘 제5정규화
: 조인에 의한 종속성 제거

정규화 주의사항

  • 모든 정규화는 이전 정규화를 만족해야 한다.
  • 정규화로 이상현상은 제거할 수 있지만 테이블 분해로 인해 조인이 증가하여 조회 성능이 저하될 수 있다. (I/O증가 및 조인 연산 증가)
  • 단일 테이블 조회 시에는 중복이 제거되어 조회 성능은 향상될 수 있다.

3절 반정규화와 성능

01_반정규화

💡반정규화란

시스템의 성능 향상 및 개발 운영의 단순화를 위해 정규화된 데이터 모델을 중복, 통합, 분리하는 데이터 모델링 기법이다.

반정규화로 인해 조회 성능은 향상되지만 데이터 모델의 유연성은 떨어진다.
반정규화는 역정규화로 비정규화와 다른 의미이다.

반정규화 적용하는 경우

  • 정규화로 인해 수행 속도가 느려진 경우
  • 다량의 범위를 자주 처리해야 하는 경우
  • 특정 범위의 데이터만 자주 처리하는 경우
  • 요약/집계 정보를 자주 사용하는 경우

02_반정규화 수행 절차

1. 대상 조사 및 검토 ▶ 문제 파악

데이터 처리 범위, 통계성 등을 조사하여 문제를 파악한다.

🔘 대량의 범위 처리 및 빈도수
: 테이블에 접근하는 프로세스가 많고 일정한 범위만 조회 및 처리하는 경우

🔘 통계성 프로세스
: 통계 정보를 필요로 할 때 별도의 통계테이블 생성

🔘 테이블 조인 수
: 조회를 위해 테이블에 많은 조인 연산이 필요한 경우

2. 다른 방법 검토

반정규화 대신 클러스터링, 뷰, 인덱스, 파티셔닝, 캐시(응용 프로그램) 등의 방법을 수행할 수 있는지 검토한다.

🔘 클러스터링, 인덱스
: 대량이나 부분 처리에 의해 성능이 저하되는 경우 클러스터링 적용 및 인덱스 조정 (조회가 대부분일 경우 클러스터링 적용)

🔘 뷰
: 많은 조인 연산으로 조회 성능이 떨어지는 경우 뷰 사용

🔘 파티셔닝
: 파티셔닝 키의 성격에 따라 테이블로 분리하여 물리적으로 저장공간 분리

🔘 캐시
: 응용 프로그램에서 로직을 구사하는 방법을 변경함으로써 성능 향상

반정규화 수행

🔘 테이블 반정규화

방법테이블 반정규화설명
테이블 병합1:1 관계 테이블 병합
1:M 관계 테이블 병합
슈퍼/서브타입 테이블 병합
테이블 분할수직 분할칼럼단위 테이블을 디스크 I/O 분산 처리하기 위해
테이블을 1:1로 분리
수평 분할로우단위로 집중 발생되는 트랜잭션을 분석해
디스크 I/O 및 데이터 접근 효율성을 향상하기 위해
로우단위로 테이블 분할
테이블 추가중복 테이블 추가업무나 서버가 다른 경우 동일한 테이블 구조를
중복하여 원격조인 제거
통계 테이블 추가집계를 미리 계산해 수행하여 조회시 성능 향상
이력 테이블 추가마스터테이블의 정보를 중복하여 이력테이블 생성
부분 테이블 추가자주 이용하는 집중화된 칼럼으로 구성된
별도의 반정규화된 테이블 생성

🔘 속성 반정규화

칼럼 반정규화설명
중복 칼럼 추가중복된 칼럼을 추가하여 조인 성능 저하 방지
파생 칼럼 추가계산한 값을 보관하여 계산 시의 성능 저하 방지
이력 테이블 칼럼 추가기능성 칼럼을 추가하여
특정일자나 최근값 조회 시의 성능 저하 방지
PK에 의한 칼럼 추가PK를 일반속성으로 추가하여
특정 값 조회시 성능 저하 방지
응용 프래그램 오작동 해결을 위한 칼럼 추가업무적으로는 의미가 없으나 오작동 발생 시
복구하기 위해 임시적으로 중복하여 보관

🔘 관계 반정규화

관계 반정규화설명
중복 관계 추가많은 조인 연산으로 인한 성능 저하 방지를 위해 추가적인 중복 관계 생성

+ 슈퍼/서브 타입 데이터 모델

업무를 구성하는 데이터를 공통점과 차이점의 특징을 고려하여 효과적으로 표현.

슈퍼/서브 타입 데이터 모델

🔘 슈퍼 타입
: 공통부분

🔘 서브 타입
: 공통으로부터 상속받아 다른 엔터티와 차이가 있는 속성

슈퍼/서브 타입 데이터 모델의 변환기술

🔘 OneToOne Type
: 개별로 발생되는 트랜잭션에 대해 개별 테이블로 구성

🔘 Plus Type
: 슈퍼타입 + 서브타입에 대해 발생되는 트랜잭션에 대해서는 슈퍼+서브타입 테이블로 구성

🔘 Single Type / All in One Type
: 전체가 하나의 트랜잭션으로 발생할 경우 하나의 테이블로 구성

4절 데이터베이스 구조

01_데이터베이스

데이터베이스 구조

🔘 중앙 집중형 데이터베이스
: 하나의 물리적인 시스템에 여러 명의 사용자가 접속

🔘 분산 데이터베이스
: 물리적으로 떨어져 있지만 네트워크로 연결된 데이터베이스로 분산 작업

02_분산 데이터베이스

데이터베이스 구조

🔘 분할 투명성
: 고객은 하나의 논리적 관계가 분할되어 각 사본이 여러 시스템에 저장되어 있음을 알 필요가 없다.

🔘 위치 투명성
: 고객은 데이터베이스의 위치를 알 필요가 없으며, 어느 위치에서 접속하더라도 동일한 명령으로 접근할 수 있어야 한다.

🔘 지역 사상 투명성
: 지역 DBMS와 물리적 데이터베이스 간의 사상이 보장되기 때문에 각 지역 시스템과 무관한 이름을 사용할 수 있다.

🔘 중복 투명성
: 객체가 여러 시스템에 중복되어도 데이터의 일관성이 유지되어야 한다.

🔘 장애 투명성
: 지역 시스템이나 통신망에 이상이 발생해도 데이터의 무결성은 보장되어야 한다.

🔘 병행 투명성
: 응용프로그램이 동시에 분산 데이터베이스에 트랜잭션을 수행해도 결과에 이상이 없어야 한다.

분산 데이터베이스 설계를 고려해야는 경우

  • 성능이 중요한 경우
  • 공통코드, 기준정보, 마스터데이터의 성능을 향상하고자 하는 경우
  • 실시간 동기화가 요구되지 않는 Near Real Time 특징을 가지고 있는 경우
  • 특정 서버에 부하가 집중되어 분산하고자 하는 경우
  • 백업 사이트를 구성하는 경우

📝정리

1과목 2장에서는 성능 데이터 모델링에 대한 이야기가 나온다.
성능 향상을 위한 데이터 모델링 방식인 정규화와 반정규화, 분산 데이터베이스를 주로 다루고 있다.

정규화의 방식과 역정규화의 방식에 어떤 것들이 있는지 주황색으로 칠해진 부분을 조금 유의해서 읽어보면 좋을 것 같다.

profile
데이터를 만지는 사람

0개의 댓글