물리 데이터 저장소 설계
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 프레임워크 절차
- 클래스 -> 테이블 변환 : 클래스의 인스턴스(Instance)는 테이블 레코드(Record)로 변환
- 애트리뷰트 -> 컬럼 변환 : 클래스 인스턴스의 애트리뷰트(Attribute)는 테이블 컬럼(Column) 변환
- 클래스 간 관계 -> 테이블 간 관계 변환 : 클래스 간 관계(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) 등이 있다.