7일차 : 2장 2.물리 데이터 저장소 설계

Dev_HG·2020년 7월 4일
0

물리 데이터 저장소 설계

1.물리 데이터 저장소

1.물리데이터 저장소의 개념

  • 논리 데이터 모델을 사용하고자 하는 각 DBMS의 특성을 고려하여 데이터베이스 저장 구조(물리 데이터 모델)로 변환하기 위한 데이터 저장소이다.

2. 물리 데이터 저장소 모델 변환

  • 논리 데이터 저장소에서 물리 데이터 저장소 모델로 변환하는 절차는 다음과 같다.

1. 단위 개체를 테이블로 변환

  • 논리 모델에서 정의된 개체(Entity)는 물리 모델에서 테이블로 변환한다.
    [변환 방법]
  • 일반적으로 테이블과 개체 명칭을 동일하게 하는 것을 권고
  • 개체는 한글명을 사용
  • 테이블은 소스 코드의 가독성을 위해 영문명을 사용

2. 속성으로 컬럼을 변환

  • 논리 모델에서 정의된 속성은 물리 모델에서 컬럼으로 변환
    [변환 방법]
  • 개발자와 사용자 간 의사소통을 위해 표준화된 약어를 사용하도록 권고
  • SQL 예약어 사용은 피해야함
  • SQL 문장 가독성을 높이기 위해 컬럼 명칭은 되도록 짧은 것을 권고
  • 컬럼명으로 복합단어를 사용할 경우 미리 정의된 표준에 의해 명명해야함

3.UID를 기본 키(Primary Key)로 변환

  • 논리 모델에서 정의된 UID는 물리 모델에서 기본 키로 변환
    [변환 방법]
  • 개체의 UID에 해당하는 모든 속성에 대해 기본 키로 선언
  • Not Null, Unique 등의 제약조건을 추가로 정의
  • 관계에 의한 외래 키가 기본키에 포함될 수 있음

4. 관계를 외래 키(Foreign Key)로 변환

  • 논리 모델에서 정의된 관계는 외래 키로 변환한다
    [변환 방법]
  • 외래 키 명은 기본키 이름을 그대로 사용하나 다른 의미를 가질 경우 변경 가능
  • 순환 관계에서 자신의 기본 키는 외래 키로 정의

5. 컬럼 유형(Type)과 길이(Length) 정의

  • DBMS에서 제공하는 데이터 유형 중 적절한 유형을 정의하고, 해당 데이터의 최대 길이를 파악하여 길이를 설정한다.
    [자주 사용 되는 데이터 유형(Oracle)]
  • CHAR : 최대 2000바이트의 고정 길이 문자열 저장 가능
  • VARCHAR2 : 최대 4000바이트의 가변 길이 문자열 저장 가능
  • DATE : 날짜 값을 저장
  • NUMBER : 38 자릿수의 숫자 저장 가능
  • BLOB, CLOB : 바이너리(Binary), 텍스트 데이터 최대 4GB까지 저장

6. 반 정규화(De-normalization)

  • 시스템 성능 향상과 개발 및 운영의 단순화를 위해 데이터 모델을 통합하는 반 정규화를 수행
    [반 정규화 수행방법]
  • 중복 테이블 추가 : 집계 테이블 추가, 특정 부분만 포함하는 테이블 추가
  • 테이블 조합 : 1:1 관계 테이블 조합, 1:M 관계 테이블 조합, 슈퍼타입/ 서브타입 테이블 조합
  • 테이블 분할 : 수직 분할/수평 분할 조합
  • 테이블 제거 : 테이블 재정의, 접근하지 않는 테이블 제거
  • 컬럼 중복화 : 조인 성능 향상을 위한 중복 허용

cf: 슈퍼 타입(Super Type) : 모든 서브 타입으로 상속되는 공통 속성이다.
cf: 서브 타입(Sub Type) : 개체의 전체집합에서 일부만 모아 놓은 부분 속성이다.
cf: 수직 분할(Vertical Patitioning) : 테이블의 일부 열을 빼내는 형태로 분할하는 방식으로 관계의 정규화는 수직 분할에 관련된 과정이다.
cf: 수평 분할(Horizontal Partitioning) : 하나의 테이블의 각 행을 다른 테이블에 분산시키는 방식이다.

3. 물리 데이터 저장소 구성

  • DBMS를 선정한 이후 물리 데이터 저장소 구성을 위한 활동

1. 테이블 제약조건(Constraint) 설계

  • 대표적인 테이블 제약조건으로 삭제 제약조건, 갱신 제약조건이 있다.
    [삭제 제약 조건(Delete Constraint)]
  • 연쇄(Cascade) : 참조한 테이블에 있는 외부 키와 일치하는 모든 Row가 삭제
  • 제한(Restricted) : 참조한 테이블에 있는 외부 키에 없는 것만 삭제 가능
  • 무효(Nullify) : 참조한 테이블에 정의된 외부 키와 일치하는 것을 Null로 수정

[갱신 제약조건(Update Constraint)]

  • 연쇄(Cascade) : 참조한 테이블에 있는 외부 키와 일치하는 모든 Row수정
  • 제한(Restricted) : 참조한 테이블에 있는 외부 키에 없느느 것만 수정가능
  • 무효(Nullify) : 참조한 테이블에 정의된 외부 키와 일치하는 것을 Null로 수정

2. 인덱스(Index) 설계

  • 인덱스 적용 기준, 컬럼 선정, 고려사항 등을 고려하여 설계

인덱스 적용 기준

  • 인덱스 분포도가 10~15% 이내인 경우 아래 수식을 참고한다.
    cf : 분포도(Selectivity) : 특정 컬럼의 데이터가 테이블에 평균적으로 분포되어 있는 정도이다.
  • 분포도 = (1/(컬럼 값의 종류)) X 100(단위는%)
  • 분포도 = (컬럼 값의 평균 Row 수)/(테이블의 총 Row 수)X100
  • 분포도가 범위 이상이더라도 부분 처리를 목적으로 하는 경우 적용 한다.
  • 조회 및 출력 조건으로 사용되는 컬럼인 경우 적용한다.
  • 인덱스 자동생성 기본 키와 Unique 키의 제약조건을 사용할 경우 적용 한다.

인덱스 컬럼 선정

  • 분포도가 좋은 컬럼은 단독적으로 생성
  • 자주 조합되어 사용되는 컬럼은 결합 인덱스로 생성
  • 결합 인덱스는 구성되는 컬럼 순서 선정(사용빈도, 유일성, 정렬 등)에 유의
  • 가능한 한 수정이 빈번하지 않은 컬럼을 선정

설계 시 고려사항

  • 지나치게 많은 인덱스는 오버해드(Overhead)로 작용
  • 인덱스는 추가적인 저장 공간이 필요함을 고려해야 한다.
  • 넓은 범위를 인덱스 처리 시 오히려 전체 처리보다 많은 오버헤드를 발생 시킬 수 있음에 유의해야 한다.
  • 인덱스와 테이블의 저장 공간을 적절히 분리될 수 있도록 설계해야 한다.

3. 뷰(View) 설계

  • 뷰의 속성 및 고려사항을 참고하여 설계 한다.

뷰 속성

  • 대표적인 뷰의 속성으로 REPLACE,FORCE,NOFORCE 등이 있다.
  • REPLACE : 뷰가 이미 존재하는 겨우 재생성
  • FORCE : 기존 테이브의 존재 여부에 관계 없이 뷰생성
  • NOFORCE : 기본 테이블이 존재할 때만 뷰 생성
  • WITH CHECK OPTION : 서브 쿼리 내의 조건을 만족하는 행만 변경
  • WITH READ ONLY : 데이터 조작어(DML) 작업불가
    cf : DML(Data Definition Language) : 테이블에 데이터를 검색, 삽입, 수정, 삭제하는 데 사용하며 SELECT, INSERT, DELETE, UPDATE문 등이 있다.

4. 클러스터(Cluster) 설계

  • 클러스터의 적용 기준 및 고려사항을 참고하여 설계

적용 기준

  • 인덱스의 단점을 해결한 기법으로, 분포도가 넓을수록 오히려 유리하다.
  • 액세스 기법이 아니라 액세스 효율 향상을 위한 물리적 저장 방법이다.
  • 분포도가 넓은 테이블의 클러스터링은 저장 공간의 절약이 가능하다.
  • 대량의 범위를 자주 액세스하는 경우 적용한다.
  • 인덱스를 사용한 처리 부담이 되는 넓은 분포도에 활용한다.
  • 인덱스를 사용한 처리 부담이 되는 넓은 분포도에 활용
  • 여러 개의 테이블이 빈번하게 조인을 일으킬 때 활용

클러스터 설계 시 고려사항

  • 검색 효율은 높여 주나 입력, 수정, 삭제 시는 부하가 증가함을 고려한다.
  • UNION, DISTINCT,ORDER BY, GROUP BY가 빈번한 컬럼이면 검토 대상이다.
  • 수정이 자주 발생하지 않는 컬럼은 검토 대상이다.
  • 처리 범위가 넓어 문제가 발생하는 경우는 단일 테이블 클러스터링을 고려한다.
  • 조인이 많아 문제가 발생되는 경우는 다중 테이블 클러스터링을 고려한다.

5. 파티션(Partition) 설계

  • 파티션의 종류, 장점, 순서 등을 확인한다.

파티션의 종류

파티션의 종류에는 레인지 파티셔닝, 해시 파티셔닝, 리스트 파티셔닝, 검포지트 파이셔닝 기법이 있다.

[파티션의 종류]

  • 레인지 파티셔닝(Range Partitioning) : 지정한 열의 값을 기준으로 분할
  • 해시 파티셔닝(Hash Partitioning) : 해시 함수에 따라 데이터를 분할
  • 리스트 파티셔닝(List Partitioning) : 미리 정해진 그룹핑 기준에 따라 데이터를 분할
  • 컴포지트 파티셔닝(Composite Partitioning) : 범위 분할 이후 해시 함수를 적용하여 제분할

파티션의 장점

  • 파티션의 장점으로는 성능 향상, 가용성 향상, 백업 가능, 경합 감소 등이 있다.
    [파티션의 장점]
  • 성능 향상 : 데이터 액세스 범위를 줄여 성능 향상
  • 가용성 향상 : 전체 데이터의 훼손 가능성이 감소 및 데이터 가용성 향상
  • 백업 가능 : 분할 영역으르 독립적으로 백업하고 복구 가능
  • 경합 감소 : 디스크 스트라이밍으로 입출력 성능을 향상, 디스크 컨트롤러에 대해 경합의 감소
    cf : 디스크 스트라이핑(Disk Striping) : 성능 향상을 위해 데이터를 1개 이상의 디스크 드라이브를 병렬로 사용할 수 있는 기술이다.

6. 디스크(Disk) 구성 설계

  • 정확한 용량을 산정하여 디스크 사용의 효율을 높인다.
  • 업무량이 집중되어 있는 디스크를 분리하여 설계
  • 입출력 경합을 최소화하여 데이터의 접근 성능을 향상시킨다.
  • 디스크 구성에 따라 테이블스페이스 개수와 사이즈 등을 결정한다.
  • 파티션 수행 테이블은 별도로 분류

2. ORM 프레임 워크

1. ORM(Object-Relational Mapping) 프레임워크의 개념

  • 관계형 데이터베이스와 객체지향 프로그래밍 언어 간 호환되지 않은 데이터를 변환하는 프로그래밍 기법
  • 객체지향 언어에서 사용하는 객체를 관계형 데이터베이스로 변환하여 테이블을 구성하는 데 활용3

2. ORM프레임워크의 유형

  • ORM 프레임워크에는 크게 SQL Mapping 기반 기술과 OR Mapping 기반 기술로 구분
  • SQL Mapping 기반 기술로는 iBatis, Mybatis가 있고, OR Mapping 기반 기술로는 Hibernate 등이 있다.
    cf : iBatis :SQL에 기반한 데이터베이스와 자바, 닷넷(.NET), 루비(Ruby) 등을 연결시켜 주는 역할을 하는 개발 프레임워크이다.
    cf : MyBatis : 객체지향 언어인 자바의 관계형 DB 프로그래밍을 좀더 쉽게 할 수 있게 도와주는 개발 프레임워크이다. iBatis에서 명칭이 변경
    cf : Hibernate : 자바 언어를 위한 객체 관계 매핑 프레임워크이다. 객체 지향 도메인 모델을 관계형 데이터베이스로 매핑하기 위한 프레임워크를 제공

3. ORM 프레임워크 매핑 기법

  • 객체(Object) : 테이블(Table) : 객체 지향 내 객체는 데이터베이스에서 테이블로 변환
  • 속성(Attribute) : 컬럼(Column) : 객체의 속성은 데이터베이스에서 컬럼으로 변환
  • 오퍼레이션(Operation) : 프로시저/함수(Procedure/Function) : 객체의 행위인 오퍼레이션은 데이터베이스에서 프로시저 또는 함수로 변환

4. ORM 프레임워크 절차

  1. 클래스 -> 테이블 변환 : 클래스의 인스턴스(Instance)는 테이블 레코드(Record)로 변환
  2. 애트리뷰트 -> 컬럼 변환 : 클래스 인스턴스의 애트리뷰트(Attribute)는 테이블 컬럼(Column) 변환
  3. 클래스 간 관계 -> 테이블 간 관계 변환 : 클래스 간 관계(Association, Aggregation, Generalization)를 데이터베이스의 테이블 제약사항(Constraint)로 변환

[논리 데이터 저장소 구조]

[부분적 ORM]

  • 개요 : SQL을 특정 이름으로 정의하여 사용
  • 매피 사용 : SQL Mapper
  • 방법 : iBatis, MyBatis, Embeded SQL
  • 장점 : 데이터 전송 방식의 효율성

[완전 ORM]

  • 개요 : 내부 엔진에서 SQL 자동생성
  • 매피 사용 : Object Relation Mapper
  • 방법 : Hibernate
  • 장점 : 효율적인 매핑 기법

3. 트랜잭션 인터페이스

1. 트랜잭션 인터페이스(Transaction Interface)의 개념

  • 데이터베이스 트랜잭션의 골격 및 인터페이스를 정의하는 활동이다.
  • 트랜잭션은 데이터베이스 입출력과 기능적 형태로 정의된다.
    cf : 트랜잭션(Transaction) : 인가 받지 않은 사용자로부터 데이터를 보장하기 위해 DBMS가 가져야하는 특성이자, 데이터베이스 시스템에서 하나의 논리적 기능을 정상적으로 수행하기 위한 작업의 기본 단위

2. 트랜잭션 인터페이스의 특징

  • 트랜잭션 인터페이스는 ACID원칙을 기반으로 설계
  • 원자성(Atomicity) : 트랜잭션 연산을 데이터베이스 모두에 반영 또는 반영하지 말아야 함(All or Nothing)
  • 일관성(Consistency) : 트랜잭션이 실행을 성공적으로 완료할시 일관성 있는 데이터베이스 상태를 유지
  • 독립성(Isolation) : 둘 이상 트랜잭션 동시 실행 시 한 개의 트랜잭션만 접근이 가능하여 간섭불가
  • 영속성(Durability) : 성공적으로 완료된 트랜잭션 결과는 영구적으로 반영

3. 트랜잭션 인터페이스 설계

  • 데이터 접근 방법 및 인터페이스를 절차적으로 명세
  • 트랜잭션 인터페이스는 주로 프로그래밍 언어로 구현
  • 대표적인 사례로 JDBC(Java Database Connectivity), ODBC(Open DataBase Connectivity) 등이 있다.
profile
꾸준함

0개의 댓글