[SQLD] 1과목 데이터 모델링의 이해 - 2장 4절:대량 데이터에 따른 성능



1. 대량 데이터발생에 따른 테이블 분할 개요.

- 일처의 처리량이 한군데에 몰리는 현상은 어떤 업무에 있어서 중요한 업무에 해당되는 데이터가 특정 테이블에 있는 경우에 발생이 되는데 이런 경우 트랜잭션이 분산 처리될 수 있도록 테이블단위에서 분할의 방법을 적용할 필요가 있다.

- 대량의 데이터가 존재하는 테이블에 많은 트랜잭션이 발생하여 성능이 저하되는 테이블 구조에 대해 수평/수직 분할 설계를 통해 성능저하를 예방할 수 있음.

- 수평분할 : 칼럼단위로 분할하여 I/O 경감.

- 수직분할 : 로우단위로 분할하여 I/O 경감.


하나의 테이블에 대량의 데이터가 존재하는 경우에는 인덱스의 Tree구조가 너무 커져 효율성이 떨어져 데이터를 처리(입력,수정,삭제,조회) 할 때 디스크 I/O를 많이 유발하게 된다.

하나의 테이블에 많은 수의 컬럼이 존재하면 데이터가 디스크의 여러 블록에 존재하므로 디스크에서 데이터를 읽는 IO량이 많아지게되어 성능이 저하되게 된다.


- 조회조건에 따른 인덱스를 적절하게 이용하면 해당 테이블에 데이터가 아무리 많아도 원하는 데이터만 접근하기 때문에 I/O의 양이 그다지 증가하지 않을것으로 생각할 수 있으나 대량의 데이터가 하나의 테이블에 존재하게 되면 인덱스를 생성할 때 인덱스의 크기가 커지게 되고 그렇게되면 인덱스를 찾아가는 단계가 깊어지게 되어 조회성능에 영향을 미치게된다.

- 칼럼이 많아지게되면 물리적인 디스크에 여러 블록에 데이터가 저장되게 되어 데이터를 처리할 때 여러블록에서 I/O를 해야하는 SQL문장의 성능이 저하될 수 있다.

- 칼럼이 많을경우 로우체이닝과 로우마이그레이션이 많아지게되어 성능이 저하된다.

* 로우체이닝: 로우 길이가 너무 길어서 데이터블록 하나에 모두 저장되지 않고 두 개 이상의 블록에 걸쳐 하나의 로우형태가 저장되어있는 형태.

* 로우 마이그레이션: 특정 데이터 블록에서 수정이 발생하게되면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈공간을 찾아 저장하는 방식.

=> 로우체이닝과 로우마이그레이션이 발생하여 많은 블록에 데이터가 저장되면 데이터베이스 메모리에서 디스크와 I/O가 발생할 때 불필요하게 많은 I/O가 발생하여 성능이 저하된다.


2. 한 테이블에 많은 수의 컬럼을 가지고 있을 경우.

- 많은 칼럼을 가지고 있는 테이블에 대해서 트랜잭션이 발생될 때 어떤 칼럼에 대해 집중적으로 발생하는지 분석하여 테이블을 쪼개어 주면 디스크 I/O가 감소하게 되어 성능이 개선된다.

- 분리된 테이블은 디스크에 적어진 칼럼이 저장되므로 로우 마이그레이션과 로우체이닝이 많이 줄어들 수 있다.


3. 대량 데이터 저장 및 처리로 인한 성능.

- 테이블에 많은 양의 데이터가 예상될 경우 파티셔닝을 적용하거나 PK에 의해 테이블을 분할하는 방법을 적용할 수있다.

- 오라클은 LIST PARTITION(특정값 지정), RANGE PARTITION(범위), HASH PARTITION(해쉬적용), COMPOSITE PARTITION(범위와 해쉬가 복합) 등이 가능하다.

- 데이터양이 몇 천만 건을 넘어서면 논리적으로는 하나의 테이블로 보이지만 물리적으로는 여러 개의 테이블스페이스에 쪼개어 저장될 수 있는 구조의 파티셔닝을 적용하도록 한다.


가. RANGE PARTITOIN 적용

- 요금 테이블에 PK가 요금일자+유금번호로 구성되어있고 데이터 건수가 1억2천만 건인 대용량 테이블의 경우 하나의 테이블로는 너무 많은 데이터가 존재하므로 성능이 느려진다. 이 때 요금의 특성상 월 단위로 데이터를 처리하는 경우가 많으므로 PK인 요금일자의 년+월을 이용하여 12개의 파티션 테이블을 만들게되면 SQL 문장을 처리할 때는 마치 하나의 테이블처럼 보이는 요금테이블을 이용하여 처리되지만 DBMS내부적으로는 SQL WHERE 절에 비교된 요금일자에 의해 각 파티션에 있는 정보를 찾아가므로 평균 10000만 건의 데이터가 있는 곳을 찾아도 되어 성능이 향상될 수 있다.

- 가장 많이 사용되는 파티셔닝의 기준으로 대상 테이블이 날자 또는 숫자값으로 분리가 가능하고 각 영역별로 트랜잭션이 분리된다면 RANGE PARTITOIN을 적용한다. 또한 데이터 보관주기에 따라 테이블에 데이터를 쉽게 지우는 것이 가능하므로 테이블 관리가 용이하다.


나. LIST PARTITION 적용

- 지점, 사업소, 사업장, 핵심적인 코드값 등으로 PK가 구성되어 있고 대량의 데이터가 있는 테이블이라면 값 각각에 의해 파티셔닝 되는 LIST PARTITION을 적용할 수 있다.

- 리스트 파티션은 대용량 데이터를 특정 값에 따라 분리 저장할 수는 있으나 RANGE PARTITION과 같이 데이터 보관주기에 따라 쉽게 삭제하는 기능은 제공될 수 없다.


다. HASH PARTITION 적용

- 기타  HASH PARTITION은 지정된 HASH 조건에 따라 해싱 알고리즘이 적용되어 테이블이 분리되며 설계자는 테이블에 데이터가 정확하게 어떻게 들어갔는지 알 수 없다.

- 성능 향상을 위해 사용하며 데이터 보관주기에 따라 쉽게 삭제하는 기능은 제공할 수 없다.


4. 테이블에 대한 수평분할/수직분할 절차

- 테이블에 대한 수평분할/수직분할에 대한 결정은 다음의 4가지 원칙을 적용한다.

1)데이터 모델링을 완성한다.

2)데이터베이스 용량을 산정한다.

3) 대량 데이터가 처리되는 테이블에 대해서 트랜잭션 처리 패턴을 분석한다.

4) 컬럼단위로 집중화된 처리가 발생하는지 로우단위로 집중화된 처리가 발생하는지 분석하여 집중화된 단위로 테이블 분리하는것을 검토한다.


* 칼럼의 수가 많은경우 트랜잭션의 특성에 따라 1:1 형태로 분리할 수 있는지 검증하면된다.

* 칼럼의 수가 적지만 데이터 용량이 많아 성능저하가 예상되는 경우 테이블에 대해 파티셔닝 전략을 고려하도록 한다.


 

[SQLD] 1과목 데이터 모델링의 이해 - 2장 3절:반정규화와 성능


1.반정규화를 통한 성능향상 전략.


가. 반정규화의 정의

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

- 협의의 반정규화는 데이터를 중복하여 성능을 향상시키기 위한 기법이라고 정의할 수 있고 좀 더 넓은 의미의 반정규화는 성능을 향상시키기 위해 정규화된 데이터 모델에서 중복, 통합, 분리등을 수행하는 모든 과정을 말한다.

- 데이터를 중복하여 반정규화를 적용하는 이유는 데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 예상되거나 칼럼을 계산하여 읽을 때 성닝이 저하될 것이 예상되는 경우 반정규화를 수행한다.

- 프로젝트에서는 설계 단계에서 반정규화를 적용하게 된다.

* 반정규화를 기술적으로 수행하지 않는 경우

1) 성능이 저하된 데이터베이스가 생성될 수 있다.

2) 구축단계나 시험단계에서 반정규화를 적용할 때 수정에 따른 노력비용이 더 많이 들게된다.


나. 반정규화의 적용방법.

-  개발을 하다가 SQL문장 작성이 복잡해지고 그에 따라  SQL 단위 성능 저하가 예상되어 다른 테이블에서 조인하여 가져와야 할 칼럼을 기준이 되는 테이블에 중복하여 SQL문장을 단순하게 처리하도록 하기위해 요청하는 경우가 많다. 

 (무분별하게 칼럼의 반정규화를 많이 하게되는것은 데이터에 대한 무결성을 깨뜨리는 결정적인 역할을 하는 경우가 많다.)

- 반정규화에 대한 필요성이 결정되면 칼럼의 반정규화 뿐만아니라, 테이블의 반정규화와 관계의 반정규화를 종합적으로 고려하여 적용해야 한다. 또한 막연하게 중복을 유도하는 것만을 수행하기 보다는 성능을 향상시킬 수 있는 다른 방법들을 고려하고 그 이후에 반정규화를 적용하도록 해야 한다.

- 반정규화를 적용할 때는 기본적으로 데이터 무결성이 깨질 가능성이 많기 때문에 반드시 데이터 무결성을 보장할 수 있는 방법을 고려한 후 반정규화를 적용하도록 해야한다.


* 반정규화 절차

1) 반정규화의 대상을 조사한다.

- 데이터의 양을 조사하고 그 데이터가 해당 프로세스를 처리할 때 성능저하가 나타날 수 있는지 검증해야한다.

* 자주 사용되는 테이블에 접근하는 프로세스의 수가 많고 항상 일정한 범위만을 조회하는 경우 반정규화를 검토한다.

* 테이블에 대량의 데이터가 있고 대량의 데이터 범위를 자주 처리하는 경우에 처리범위를 일정하게 줄이지 않으면 성능을 보장할 수 없을 경우에 반정규화를 검토한다.

* 통계성 프로세스에 의해 통계정보를 필요로 할 때 별도의 통계테이블을 생성한다.

* 테이블에 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 반정규화를 검토한다.


2) 반정규화의 대상에 대해 다른 방법으로 처리할 수 있는지 검토한다

- 가급적이면 데이터를 중복하여 데이터 무결성을 깨뜨릴 위험을 제어하기 위하여 반정규화를 결정하기 전에 성능을 향상시킬 수 있는 다른 방법을 모색하도록 한다.

* 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 뷰를 사용하면 해결할 수도 있다.

(성능을 고려한 뷰를 생성하여 개발자가 뷰를 통해 접근함으로 써 성능저하의 위험을 예방할 수 있다)

* 대량의 데이터 처리나 부분처리에 의해 성능이 저하되는 경우 클러스터링을 적용하거나 인덱스를 조정함으로써 성능을 향상시킬 수 있다.

( 클러스터링을 적용하는 방법은 대량의 데이터를 특정 클러스터링 팩트에 의해 저장방식을 다르게 하는 방법이다.

이 방법의 경우 데이터를 입력,수정,삭제 하는 경우 성능이 많이 저하되므로 조회중심의 테이블이 아니라면 생성하면 안된다. )

* 대량의 데이터는 PK의 성격에 따라 부분적인 테이블로 분리할 수 있다. 즉 파티셔닝 기법이 적용되어 성능저하를 방지할 수 있다.

* 응용애플리케이션에서 로직을 구사하는 방법을 변경함으로써 성능을 향상시킬 수 있다.

(응용메모리에 데이터를 처리하기 위한 값을 캐쉬한다든지 중간 클래스 영역에 데이터를 캐쉬하여 공유하게 하여 성능을 향상 시키는 것도 성능을 향상시키는 방법이 될 수 있다.)


3) 반정규화를 적용한다.

- 반정규화를 적용하기 이전에 충분히 성능에 대한 고려가 이루어져 판단이 들었다면 세가지 규칙을 고려하여 반정규화를 적용한다

- 반정규화를하는 대상으로는 테이블, 속성, 관계에 대해 적용할 수 있으며 꼭 테이블과 속성, 관계에 대해 중복으로 가져가는 방법만이 반정규화가 아니고 테이블, 속성, 관계를 추가할 수도 있고 분할할 수도 있으며 제거할 수도 있다.



2. 반정규화의 기법.

가. 테이블 반정규화

 기법분류

기법

내용 

테이블 병합 

1:1 관계 테이블 병합 

1:1 관계를 통합하여 성능 향상 

 1:M 관계 테이블 병합

1:M 관계를 통합하여 성능향상 

 슈퍼/서브타입 테이블 병합

슈퍼/서브 관계를 통합하여 성능향상 

 테이블 분할

수직분할 

칼럽단위의 테이블을 디스크 I/O를 분산처리하기 위해 테이블을 1:1로 분리하여 성능향상(트랜잭션의 처리되는 유형파악이 선행되야함) 

 수평분할

로우 단위로 집중 발생되는 트랜잭션을 분석하여 디스크 I/O 및 데이터 접근 효율성을 높여 성능을 향상하기 위해 로우단이로 테이블을 쪼갬(관계가 없음) 

 테이블 추가

중복테이블 추가 

다른 업무이거나서버가 다른 경우 동일한 테이블구조를 중복하여 원격조인을 제거하여 성능 향상 

 통계 테이블 추가

SUM, AVG 등을 미리 수행하여 계산해 둠으로써 조회 시 성능을 향상 

 이력 테이블 추가

이력테이블 중에서 마스터 테이블에 존재하는 레코드를 중복하여 이력테이블에 존재하는 방법은 반정규화의 유형 

 부분 테이블 추가

하나의 테이블의 전체 칼럼 중 자주 이용하는데 자주 이용하는 집중화된 칼럼들이 있을 때 디스크 I/O를 줄이기 위해 해당 칼럼들을 모아놓은 별도의 반정규화된 테이블을 생성 

 


나. 칼럼 반정규화

 반정규화 기법

내용 

 중복칼럼 추가

조인에 의해 처리할 때 성능저하를 예방하기위해(조인을 감소하기위해) 중복된 칼럼을 위치시킴 

 파생칼럼 추가

트랜잭션이 처리되는 시점에 계산에 의해 발생되는 성능저하를 예방하기 위해 미리 값을 계산하여 칼럼에 보관함

(Derived Column이라고함.) 

 이력테이블 칼럼 추가

대량의 이력데이터를 처리할 때 불특정 날 조회나 최근 값을 조회할 때 나타날 수 있는 성능 저하를 예방하기 위해 이력테이블에 기능성 칼럼(최근값 여부, 시작과 종료일자 등)을 추가함. 

 PK에 의한 칼럼 추가

복합의미를 갖는 PK를 단일 속성으로 구성하였을 경우 발생됨. 단일 PK 안에서 특정 값을 별도로 조회하는 경우 성능저하가 발생될 수 있음. 이 때 이미 PK안에 데이터가 존재하지만 성능향상을 위해 일반속성으로 포함하는 방법이 PK의한 칼럼추가 반정규화임. 

 응용시스템의 오작동을 위한 칼럼추가

업무적으로는 의미가 없지만 사용자가 데이터를 처리하다가 잘못 처리하여 원래 값으로 복구하기를 원하는 경우 이전 데이터를 임시적으로 중복하여 보관하는 기법.

칼럼으로 이것을 보관하는 방법은 오작동 처리를 위한 임시적인 기법이지만 이것을 이력데이터 모델로 풀어내면 정상적인 데이터모델의 기법이 될 수 있음. 

 


다. 관계 반정규화.

 반정규화 기법

내용 

 중복관계 추가

데이터를 처리하기 위한 여러 이동경로를 거쳐 조인이 가능하지만 이 때 발생할 수 있는 성능저하를 예방하기 위해 추가적인 관계를 맺는방법이 관계 반정규화이다. 

 


=> 테이블과 칼럼의 반정규화는 데이터 무결성에 영향을 미치게 되나 관계의 반정규화는 데이터 무결성을 깨뜨릴 위험을 갖지 않고서도 데이터 처리의 능력을 향상시킬 수 있는 반정규화의 기법이 된다.


3. 정규화가 잘 정의된 데이터 모델에서 성능이 저하될 수 있는 경우.

- 공급자라고 하는 엔터티가 마스터 이고 전화번호와 메일주소 위치가 각각 변경되는 내용이 이력형태로 관리되는 데이터 모델의 경우, 반정규화 하여 마스터 엔터티에 최신 이력의 전화번호와 메일주소 위치를 저장할 경우  간단하게 조회할 수 있다.

- 데이터베이스서버가 분리되어 분산데이터베이스가 구성되어 있을 때 속성 반정규화를 통해 성능을 향상시킬 수 있다.


* 반정규화를 적용할 때 중요한 것은 데이터를 입력, 수정, 삭제할 때는 성능이 떨어지는 점을 기억해야하며, 데이터 무결성 유지에 주의해야한다.


 

[SQLD] 1과목 데이터 모델링의 이해 - 2 2:정규화와 성능


1. 정규화를 통한 성능 향상 전략.

- 정규화를 하는 것은 기본적으로 데이터에 대한 중복성을 제거해 주고 데이터가 관심사 별로 처리되는 경우가 많기 때문에 성능이 향상되는 특징을 가지고 있다.

- 엔터티가 계속 발생되므로 SQL 문장에서 조인이 많이 발생하여 성능저하가 나타나는 경우에는 사례별로 유의하여 반정규화를 적용하는 전략이 필요하다.

 * 데이터를 처리할 때 성능이라고 하면 조회성능과 입력/수정/삭제 성능의 두 분류로 구분된다.

- 정규화를 수행한다느 것은 데이터를 결정하는 결정자에 의해 함수적 종속성을 가지고 있는 일반 속성을 의존자로 하여 입력/수정/삭제 이상을 제거하는것이다.

 * 데이터의 중복성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테ㅣ블의 데이터 용량이 최소화 되는 효과가 있다.

=> 정규화된 테이블은 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있는 특성이 있다.

일반적으로 정규화를 수행해야 데이터 처리의 능력(입력/수정/삭제)이 향상되며, 데이터 조회처리 트랜잭션시에 성능저하가 나타날 수 있다.


2.반정규화된 테이블의 성능저하 사례1.

- 2차 정규화를 적용한 테이블에 대해서 조인을 하더라도 PK Unique Index를 이용하면 조인 성능 저하는 미미하게 발생한다.

 * PK가 걸려있는 방향으로 조인이 걸려 Unique Index를 곧바로 찾아서 데이터릴 조회하기 때문에 하나의 테이블에서 조회하는 작업과 비교했을 때 미미하게 성능차이가 날 뿐 사용자에게 큰 영향을 줄만큼 저하되는 일은 없다.


3. 반정규화된 테이블의 성능저하 사례2

- 이 업무는 물건을 매각할 때 매각일자를 정하고 그 일자에 해당하는 매각시간과 매각장소가 결정하는 속성의 성격을 가지고 있다. 즉 매각일자가 결정자가 되고 매각장소가 의존자가 되는 함수적 종송관계가 형성되는 관계이다.

- 대량의 데이터에서 조인 조건이 되는 대상을 찾기 위해 인라인뷰를 사용하기 때문에 성능이 저하된다.

이를 정규화 하려면 복합식별자 중에서 일반속성이 주식별자 속성 중 일부에만 종속관계를 가지고 있으므로 2차정규화의 대상이된다.

- 2차정규화르 적용하여 매각일자를 PK로 하고 매각시간과 매각장소는 일반속성이 되었으며 정규화를 적용했기 때문에 매각일자를 PK로 사용하는 매각일자별 매각내역과도 관계가 연결된다.


4. 반정규화된 테이블의 성능저하 사례3.

- 두 개 이상의 속성으로 나열하여 반정규화한 경우.

- 유형기능분류코드 단위로 데이터처리를 해야하여 인덱스를 생성하려면 9개의 인덱스를 생성하야한다.

- 한테이블에 인덱스가 많아지면, 조회성능은 좋아질 수 있으나 데이터 입력, 수정, 삭제 성능은 저하된다.


5. 함수적 종속성에 근거한 정규화 수행 필요.

- 함수의 종속성은 데이터들이 어떤 기준값에 의해 종속되는 현상을 지칭하는것이다.

- 이 때 기준값을 결정자 라고 하고 종속되는 값을 종속자 라고 한다.



 

- 사람이라는 엔터티는 주민등록번호, 이름, 출생지, 호주 라는 속성이 존재한다. 여기에서 이름, 출생지, 호주라는 속성은 주민등록번호 속성에 종속된다.

 즉 주민등록번호가 이름, 출생지, 호주를 함수적으로 결정한다 라고 말할 수 있다.

- 기본적으로 데이터는 속성간의 함수종속성에 근거하여 정규화 되어야 한다.


 1과목 데이터 모델링의 이해 - 2 1:성능 데이터 모델링의 개요

 

 

1.성능 데이터 모델링의 정의

- 데이터 모델링을 할 때 어떤 작업 유형에 따라 성능 향상을 도모해야 하는지 목표를 분명하게 해야 정확한 성능향상 모델링을 할 수 있다.

- 성능 데이터 모델링이란 데이터베이스 성능향상을 목적으로 설계단계의 데이터 모델링 때부터 정규화, 반정규화, 테이블통합, 테이블 분할, 조인구조, PK, FK 등 여러 가지 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것.

- 성능 데이터 모델링은 정규화를 통해서도 수행할 수 있고 인덱스의 특징을 고려해서 컬럼의 순서를 변형할 수 있다. 대량의 데이터 특성에 따라 정규화된 모델이라도 테이블을 수직 또는 수평 분할하여 적용하는 방법과 논리적인 테이블을 물리적인 테이블로 전환할 때 데이터 처리의 성격에 따라 변환하는 방법도 성능 데이터 모델의 범주에 포함될 수 있다.


2. 성능 데이터 모델링 수행 시점

- 프로젝트 수행에 있어서 사전에 할수록 비용이 적게든다.

- 분석/설계 단계에서 데이터 모델에 성능을 고려한 데이터 모델링을 수행할 경우 성능저하에 따른 재업무 비용을 최소화 할 수 있는 기회를 갖게된다.

- 만약 어떤 트랜잭션이 해당 비즈니스 처리에 핵심적이고 사용자 업무처리에 있어 중요함을 가지고 있고 성능이 저하되면 안되는 특징을 가지고 있다면 프로젝트 초기에 운영환경에 대비한 테스트 환경을 구현하고 그곳에 트랜잭션을 발생시켜 실제 성능을 테스트 해야한다.


3.성능 데이터 모델링 고려사항.

1) 데이터 모델링을 할 때 정규화를 정확하게 수행해야 한다.

- 정규화된 모델이 주요 관심사별로 분산시키는 효과가 있기 때문에 그 자체로 성능을 향상시키는 효과가 있다.

2) 데이터베이스의 용량산정을 수행한다.

- 용량산정을 수행하면 어떤 엔터티(테이블)에 데이터가 집중되는지 파악을 할 수 있다.

3) 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.

-  CRUD 메트릭스를 보고 파악하는 방법과 시퀀스 다이어그램을 보면 트랜잭션 유형을 파악하기에 용이하다.

4) 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다.

-  용량산정과 트랜잭션의 유형 데이터를 근거로 정확하게 테이블 반정규화를 적용한다.

5) 이력모델의 조정, PK/FK조정, 슈퍼타입/서브타입 조정 등을 수행한다.

- 대량의 데이터가 처리되는 이력모델에 대해 성능고려를 하고 PK/FK의 순서가 인덱스 특성에 따라 성능에 미치는 영향도가 크기 때문에 PK/FK를 성능이 우수한 순서대로 칼럼의 순서를 조정해야한다.

6) 성능관점에서 데이터 모델을 검증한다.

- 전체적으로 성능에 대한 충분한 고려가 되었는지를 데이터 모델 검토를 통해 다시한번 확인한다.


1장 1절 모델링의 이해


1.모델링의 이해


가. 모델링의 정의

모델 :  

 1)모형, 축소형의 의미로 사람이 살아가면서 나타날 수 있는 다양한 현상에 대해 일정한 표기법에 의해 표현해 놓은 모형. 

 2) 사람이 어떤 목적을 달성하기 위해 커뮤니케이션의 효율성을 극대화한 고급화된 표현방법.

=> 모델링이란 모델을 만들어가는 일 자체.


 * 모델링의 다양한 정의

1)Webster 사전: 가설 또는 일정한 양식에 맞춘 표현, 어떤것에 대한 예비표현으로 그로부터 최종대상이 구축되도록 하는 계획으로서 기여하는 것.

2)복잡한 '현실세계'를 단순화 시켜 표현하는 것.

3)모델이란 사물 또는 사건에 관한 양상이나 관점을 연관된 사람이나 그룹을 위하여 명확하게 하는 것.

4)모델이란 현실 세계의 추상화된 반영이다.


 나. 모델링의 특징 : 추 ! 단 ! 명 !

1) 추상화: 추상화는 현실세계를 일정한 형식에 맞추어 표현을 한다는 의미.

2) 단순화: 단순화는 현실세계를 약속된 규약에 의해 제한된 표기법이나 언어로 표현하여 쉽게 이해할 수 있도록 하는 개념을 의미.

3) 명확화 : 누구나 이해하기 쉽게하도록 대상에 대한 애매모호함을 제거하고 정확하게 현상을 기술하는 것.


=>  모델링이란 현실세계를 추상화, 단순화, 명확화 하기위해 일정한 표기법에 의해 표현하는 기법


다. 모델링의 3가지 관점. 데 !프! 상!

1) 데이터 관점 : 업무가 어떤 데이터와 관련이 있는지 또는 데이터간의 관계는 무엇인지에 대해 모델링 하는 방법.

2) 프로세스 관점: 업무가 실제 하고있는 일은 무엇인지 무엇을 해야하는지 모델링하는 방법

3) 데이터와 프로세스의 상관관점: 업무가 처리하는 일의 방법에 따라 데이터는 어떻게 영향을 받고 이쓴지 모델링 하는 방법. 


2. 데이터 모델의 기본 개념 이해

가. 데이터 모델링의 정의

- 정보시스템을 구축하기 위해 해당 업무에 어떤 데이터가 존재하는지 또는 업무가 필요로 하는 정보는 무엇인지 분석.

- 기업 업무에 대한 종합적인 이해를 바탕으로 데이터에 존재하는 업무규칙에 대하여 참 또는 거짓을 판별할 수 있는 사실을 데이터에 접근하는 방법. 사람 전산화와는 별개의 관점에서 이를 명확하게 표현하는 추상화 기법.


* 데이터 모델링의 목적.

1) 업무정보를 구성하는 기초가 되는 정보들을 일정한 표기법에 의해 표현함으로써 정보시스템 굼축의 대상이 되는 업무를 정확하게 분석하는것.

2) 분석된 모델을 가지고 실제 데이터베이스를 생성하여 개발 및 데이터관리에 사용하기 위한 것.


즉! 데이터 모델링이란

1) 정보시스템을 구축하기 위한 데이터 관점의 업무분석 기법

2) 현실세계의 데이터에 대해 약속된 표기법에 의해 표현하는 과정

3) 데이터베이스를 구축하기 위한 분석 설계의 과정


나. 데이터 모델이 제공하는 기능

- 시스템을 현재 또는 원하는 모습으로 가시화 하도록 도와줌.

- 시스템의 구조와 행동을 명세화 할 수 있게함.

- 시스템을 구축하는 구조화된 을 제공함.

- 시스템을 구축하는 과정에서 결정한 것을 문서화한다.

- 다양한 영역에 집중하기 위해 다른 영역의 세부 사항은 숨기는 다양한 관점을 제공한다.

- 특정 목표에 따라 구체화된 상세 수준의 표현방법을 제공한다.


3. 대이터 모델링의 중요성 및 유의점

- 데이터 모델링의 중요한 이유는 파급효과, 복잡한 정보 요구사항의 간결한 표현, 데이터의 품질이 있다.


가.파급효과

 시스템이 구축되는 과정에서는 많은 단위테스트 들이 수행되며, 단위 테스트가 성공적으로 수행되고 완료되면 전체를 묶어서 병행테스트와 통합테스트를 수행한다. 만약 통합테스트와 병행테스트를 하는 시점에서 데이터 모델의 변경이 필요하게 된다면 구조변경에 따른 표준 영향 분석, 응용 변경 영향 분석 등 많은 영향분석이 일어나게된다.

 즉 시스템 구축 프로젝트에서 큰 위험요소가 될 수 있다. 이러한 이유로 시스템 구축 작업 중 데이터 설계가 중요하다고 볼 수 있다.


나. 복잡한 정보 요구사항의 간결한 표현

 데이터 모델은 시스템을 구축하는 많은 관계자들이 설계자의 생각대로 정보요구사항을 이해하고 이를 운용할 수 있는 애플리케이션을 개발하고 데이터 정합성을 유지할 수 있도록 하는 것이므로. 모델이 갖추어야할 가장 중요한 점은 정보 요구사항이 정확하고 간결하게 표현되어야 한다는 것이다.


다. 데이터 품질

데이터는 기업의 중요한 자산으로 오래지날 수록 활용도는 높아진다. 오래동안 저장된 데이터가 그저그런 데이터, 정확성이 떨어지는 데이터라고 한다면 해당 데이터로 얻을 수 있었던 소중한 비즈니스의 기회를 상실할 수도 있는 문제이다.


* 데이터 모델링을 할 때의 유의점.

1) 중복: 데이터 모델은 같은 데이터를 사용하는 사람, 시간, 장소를 파악하는데 도움을 준다. 이러한 지식 응용은 데이터베이스가 여러 장소에 같은 정보를 저장하는 잘못을 하지 않도록 한다.

2) 비유연성: 데이터 모델을 어떻게 설계했느냐에 따라 사소한 업무변화에도 모델이 수시로 변경됨으로써 유지보수가  어려워 질 수 있다. 데이터의 정의를 데이터의 사용 프로세스와 분리함으로써 데이터 모델링은 데이터 혹은 프로세스의 변화가 애플리케이션과 데이터베이스에 중대한 변화를 일으킬 수 있는 가능성을 줄인다.

3) 비일관성: 데이터와 데이터간 상호 연관관계에 대한 명확한 정의는 이러한 위험을 사전에 예방할 수 있도록 한다.


4.데이터 모델링의 3단계 진행


- 추상화 수준에 따라 개념적 데이터모델, 논리적 데이터모델, 물리적 데이터모델로 정의할 수 있다.


 데이터 모델링

 내용

 개념적 모델링

  추상화 수준이 높으며, 업무중심적이고 포괄적인 수준의 모델링 진행.

 전사적 데이터모델링, EA 수립 시 많이 사용.

 논리적 모델링

 시스템으로 구축하고자 하는 업무에 대해 Key 속성 관계 등을 정확하게 표현. 재사용성이 높음

 물리적 모델링

 실제로 데이터베이스에 이식할 수 있도록 성능, 저장 등 물리적인 성격을 고려하여 설계 

 


* 전사적 데이터모델링: 데이터 모델링 과정이 전 조직에 걸쳐 이루어 진다면, 전사적 데이터모델링 이라고한다.


가. 개념적 데이터 모델링: 

- 조직, 사용자의 데이터 요구사항을 찾고 분석하는데서 시작한다. 핵심 엔티티와 그들 간의 관계를 발견하고 그것을 표현하기 위해서 엔티티 - 관계 다이어그램을 생성한다.

- 엔터티 - 관계 다이어그램은 조직과 다양한 데이터베이스 사용자에게 어떠한 데이터가 중요한지 나타내기 위해 사용된다.

- 개념 데이터 모델은 사용자와 시스템 개발자가 데이터 요구사항을 발견한 것을 지원한다.

- 개념 데이터 모델은 추상적이기 때문에 상위 문제에 대한 구조화를 쉽게 하며, 사용자와 개발자가 시스템 기능에 대해 논의할 수 있는 기반을 형성한다.

- 개념 데이터 모델은 현 시스템이 어떻게 변형되어야 하는가를 이해하는데 유용하다.


나. 논리적 데이터 모델링

- 논리 데이터 모델링은 데이터 베이스 설계 프로세스의 Input 으로써, 비즈니스 저보의 논리적인 구조와 규칙을 명확하게 표현하는 기법 또는 과정이라 할 수 있다.

- 논리 데이터 모델링의 결과로 얻어지는 논리데이터 모델은 데이터 모델링이 최종적으로 완료된 상태라고 정의할 수 있다. 

- 물리적인 스키마 설계를 하기 전 단계의 데이터 모델 상태를 일컫는 말이다.

- 논리 모델링의 핵심은 어떻게 엑세스하고 누가 데이터를 엑세스 하며, 그러한 엑세스의 전산화는 독립적으로 다시말해서 누가 어떻게 그리고 전산화와는 별개로 비즈니스 데이터에 존재하는 사실들을 인식하여 기록하는 것이다.

- 시스템 구축을 위해서 가장 먼저 시작할 기초적인 업무를 하는 초기단계에서부터 인간이 결정해야 할 대부분의 사항을 모두 정의하는 시스템 설계의 전 과정을 지원하는 '과정의 도구' 라고 한다.

- 정규화를 통해 논리 데이터 모델상세화 과정이 대표적인 활동으로, 논리 데이터 모델의 일관성을 확보하고 중복을 제거하여 속성들이 가장 적절한 엔티티에 배치되도록 함으로써 보다 신뢰성 있는 데이터 구조를 얻는데 목표가 있다.

- 논리적 데이터 모델의 상세화는 식별자 확정, 정규화, M:M 관계 해소, 참조 무결성 규칙 정의 등을 들 수 있으며, 추가적으로 이력관리에 대한 정략을 정의하여 이를 논리 데이터 모델에 반영함으로써 데이터 모델링을 완료하게 된다.


다. 물리적 데이터 모델링

- 물리데이터 모델링은  논리 데이터 모델이 데이터 자정소로서 어떻게 컴퓨터 하드웨어에 표현될 것인가를 다룬다.

- 데이터가 물리적으로 컴퓨터에 어떻게 저장될 것인가에 대한 정의를 물리적 스키마라고 한다.

- 이 단계에서는 테이블, 칼럼, 등으로 표현되는 물리적인 저장구조와 사용될 저장 장치 자료를 추출하기 위해 사용될 접근방법 등이 있다.


* 실질적인 프로젝트에서는 개념적 데이터 모델링, 논리적 데이터모델링 물리적 데이터 모델링 순서로 수행하기보다는 개념적 데이터 모델링과 논리적 데이터모델링을 한꺼번에 수행하여 논리적 데이터 모델링으로 수행하는 경우가 대부분이다.


5. 프로젝트 생명주기에서 데이터 모델링

- waterfall 기반에서는 데이터모델링의 위치가 분석과 설계 단계로 구분되어 명확하게 정의할 수 있다.

- 정보공학이나 구조적 방법론에서는 분석단계에서 업무중심의 논리적인 데이터 모델링을 수행한 후 설계단계에서 하드웨어와 성능을 고려한 물리적인 데이터 모델링을 수행하게된다.

- 나선형모델 에서는 업무크기에 따라 논리적 모델링과 물리적 데이터 모델이 분석, 설계단계 양쪽에서 수행되며 비중은 분석단계에서 논리적 데이터 모델이 더 많이 수행되는 형태가된다.

- 데이터 축과 애플리케이션 축으로 분리되어 프로젝트가 진행되면서 각각 도출된 사항은 상호검증을 지속적으로 수행하며 단계별 완성도를 높힌다. 단 객체지향 개념은 데이터와 프로세스를 한꺼번에 바라보면서 모델링을 전개하므로 데이터 모델링과 프로세스 모델링을 구분하지 않고 일체형으로 진행.


6. 데이터 모델링에서 데이터 독립성의 이해

가. 데이터독립성의 필요성

- 일체적 구성에서 기능화된 구성의 가장큰 목적은 상호간 영향에서 벗어나 개별 형식이 가지는 고유 기능을 유지시키며 그 기능을 극대화하는 것이다.

- 어떤 단위에 대해 독립적인 의미를 부여하고 그것을 효과적으로 구현하게 되면 자신이 가지는 고유한 특징을 명확하게 할 뿐만아니라, 기능의 변경으로부터 쉽게 변경되지 않고 자신의 고유한 기능을 가지고 기능을 제공하는 장점을 가지게 된다.

- 데이터 독립성의 반대말은 데이터 종속성이다.

- 데이터 독립성은 지속적으로 증가하는 유지보수 비용을 점감하고, 데이터 복잡도를 낮추며 중복된 데이터를 줄이기 위한 목적이 있으며 끊임없이 요구되는 사용자 요구사항에 대해 화면과 데이터베이스 간에 서로 독립성을 유지하기 위한 목적으로 데이터 독립성 개념이 출현했다고 할 수 있다.


=> 데이터 독립성을 통해 다음과 같은 효과를 얻을 수 있다.

* 각 View의 독립성을 유지하고 계층별 View에 영향을 주지않고 변경이 가능하다.

* 단계별 스키마에 따라 데이터 정의어와 데이터 조작어가 다름을 제공한다.


나. 데이터베이스 3단계 구조.

- 외부단계: 사용자와 가까운 단계로 사용자 개개인이 보는 자료에 대한 관점과 관련이 있는 부분. 사용자가 처리하고자 하는 데이터 유형에 따라 관점에 따라 방법에 따라 다른 스키마 구조를 가지고있다.

- 개념단계: 사용자가 처리하는 데이터 유형의 공통적인 사항을 처리하는 통합된 뷰를 스키마 구조로 디자인한 형태

- 내부적단계: 데이터가 물리적으로 저장된 방법에 대한 스키마 구조를 말한다.


다. 데이터독립성 요소


 항목

내용 

 

 외부스키마

- View 단계 여러 개의 사용자 관점으로 구성, 개개 사용자 단계로서 개개 사용자가 보는 개인적 DB 스키마,

- DB의 개개 사용자나 응용프로그래머가 접근하는 DB 정의

사용자 관점 접근하는 특성에 따른 스키마 구성 

   개념스키마

- 개념단계 하나의 개념적 스키마로 구성 모든 사용자 관점을 통합한 조직 전체의 DB를 기술하는 것

- 모든 응용 시스템들이나 사용자들이 필요로 하는 데이터를 통합한 조직 전체의 DB를 기술한 것으로 DB에 저장되는 데이터와 그들간의 관계를 표현하는 스키마.

 통합관점

  내부스키마

 - 내부단계, 내부 스키마로 구성, DB가 물리적으로 저장된 형식

- 물리적 장치에서 데이터가 실제적으로 저장되는 방법을 표현하는 스키마

 물리적 저장관점

 



라. 두 영역의 데이터 독립성

- 3단계로 개념이 분리되면서 각각의 영역에 대한 독립성을 지정하는 용어가 논리적 독립성과 물리적 독립성 이다.

 독립성

내용 

특징 

 논리적 독립성

 - 개념 스키마가 변경되어도 외부 스키마에는 영향을 미치지 않도록 지원하는 것.

- 논리적 구조가 변경되어도 응용프로그램에 영향 없음

 - 사용자 특성에 맞는 변경 가능

- 통합 구조 변경 가능

 물리적 독립성

 - 내부 스키마가 변경되어도 외부/개념 스키마는 영향을 받지 않도록 지원하는것

- 저장장치의 구조변경은 개념스키마에 영향 없음

- 물리적 구조 영향 없이 개념 구조 변경가능

- 개념구조 영향 없이 물리적인 구조 변경가능  

 


마. 사상(Mapping)

- 상호 독립적인 개념을 연결시켜주는 다리를 뜻한다.


 사상

내용 

예 

외부적 / 개념적 사상

(논리적 사상)

- 외부적 뷰와 개념적 뷰의 상호 관련성을 정의함.

 사용자가 접근하는 형식에 따라 다른 타입의 필드를 가질 수 있음. 개념적 뷰의 필드 타입은 변화가 없음.

개념적 / 내부적 사상

(물리적 사상)

- 개념적 뷰와 저장된 데이터베이스의 상호관련성을 정의함.

 만약 저장된 데이터베이스 구조가 바뀐다면 개념적/ 내부적 사상이 바뀌어야함. 그래야 개념적 스키마가 그대로 남아있음.


- 외부 화면이나 사용자에게 인터페이스 하기 위한 스키마 구조는 전체가 통합된 개념스키마와 연결된다는 것이 논리적 사상.

- 통합된 개념적 스키마 구조와 물리적으로 저장된 구조의 물리적인 데이터베이스와 연결되는 구조가 물리적인 사상.

- 데이터 독립성을 보장하기 위해 사상하는 스크립트를 DBA가 필요할 때맏 변경해야한다. 

- 외부적, 개념적, 내부적 독립성을 보장하기 위해서 변경사항이 발생했을 때 DBA가 적절하게 작업을 해주기 때문에 독립성이 보장된다고도 할 수 있다.


7. 데이터 모델링의 중요한 세 가지 개념.


가. 데이터 모델링의 세 가지 요소

1) 업무가 관혀나는 어떤 것.(Things)

2) 어떤것이 가지는 성격. (Attributes)

3) 업무가 관여하는 어떤 것 간의 관계. (Relationships) 

=> 자연계에 존재하는 모든 유형의 정보들을 세가지 관점의 접근방법을 통해 모델링을 진행하는 것이다.


나. 단수와 집합(복수)의 명

- 데이터 모델링의 세가지 개념에 대해 단수와 복수의 개념을 분명하게 구분하고있다.


개념

복수 / 집합개념

타입 / 클래스 

개별 / 단수개념

어커런스 / 인스턴스 

어떤 것

엔터티 타입엔터티

 엔터티

인스턴스, 어커런스 

어떤 것 간의 연관

관계

패어링

 어떤 것의 성격

 속성

속성값

 


8. 데이터 모델링의 이해관계자

가. 이해관계자의 데이터 모델링 중요성 인식.

- 정보시스템을 개발한다고 할 때 데이터 모델링, 데이터베이스 구축 추축된 데이터이 적절한 활용은 어떤 타스크보다 중요하다.

- 대부분 기업에 있어서 정보시스템의 데이터베이스 구조는 사용자에게 숨겨진 형태로 구축되어 왔다.(정보의 고립화)


나. 데이터 모델링의 이해관계자

- 정보시스템을 구축하는 모든사람은 데이터 모델링도 전문적으로 할 수 있거나, 완성된 모델을 정확하게 해석할 수 있어야 한다.

- IT 기술에 조사하거나 전공하지 않더라도 해당 업무에서 정보화를 추진하는 위치에 있는 사람도 데이터 모델링에 대한 개념 및 세부 사항에 대해 어느정도 지식을 가지고 있어야 한다.



9. 데이터 모델의 표기법인 ERD의 이해

가. 데이터 모델 표기법.

- 1976년 피터첸이 ER Model이라는 표기법을 만들었다.


나. ERD 표기법을 통해 모델링 하는 방법.

- ERD는 각 업무 부서에서 도출된 엔터티와 엔터티간의 관계를 이해하기 쉽게 도식화된 다이어그램으로 표현하는 방법으로써 해당 업무에서 데이터 흐름과 프로세스 연관성을 이야기 하는 데 가장 중요한 표기법이자 산출물이다.

- UML 표준 기법을 사용하는 오브젝트 모델링은 해당 업무에 가장 적절한 클래스 다이어그램을 그려내는 것이 가장 중요하다고 한다면, 정보공학을 기반으로 하는 모델링에서는 해당업무에 가장 적절한 ERD를 그려내는것이 목표이다.


1) ERD 작업 순서

엔터티를 그린다 => 엔터티를 적절하게 배치한다 => 엔터티간 관계를 설정한다 => 관계명을 기술한다 => 관계의 참여도를 기술한다 => 관계의 필수여부를 기술한다 



 

2) 엔터티 배치

- 가장 중요한 엔터티를 왼쪽 상단에 배치하고 이것을 중심으로 다른 엔터티를 나열하면서 전개하면 사람의 눈이 편안한 모델링을 할 수 있다.

- 업무 흐름에 중심이 되는 엔터티, 보통 업무 흐름에 있어서 중심이 되는 엔터티는 타 엔터티와 많은 간계를 가지고 있으므로 중앙에 배치한다.

- 업무를 진행하는 중심엔터티와 관계를 갖는 엔터티들은 중심에 배치된 엔터티를 주위에 배치하도록 한다.





3) ERD 관계의 연결

- 엔터티에 배치가 되면 관계를 정의한 분석서를 보고 서로 관련 있는 엔터티 간에 관계를 설정하도록 한다.

- 초기에는 모두 Primary Key로 속성이 상속되는 식별자 관계를 설정하도록 한다.

- 중복되는 관계가 발생하지 않도록하고 Circle 관계도 발생하지 않도록 유의하여 작성한다.




4) ERD 관계명 표시

- 관계설정이 완료되면 연결된 관계에 관계 이름을 부여하도록 한다.

- 현재형을 사용하고 지나치게 포괄적인 용어는 사용하지 않도록 한다.

- 실제 프로젝트 에서는 관계의 명칭을 크게 고려하지 않아도 된다. (유추 가능하기 때문)






5) ERD 관계 관계차수와 선택성 표시

- 관계가 참여하는 성격 중 엔터티 내에 인스턴스들이 얼마나 관계에 참여하는지를 나타내는 관계차수를 표현한다.

- IE표기법에서 1:1관계는 실선으로 표기, Barker 표기법 에서는 점선과 실선을 혼합하여 표기한다.

1:M 관계는 까바귀발과 같은 모양으로 그려준다. 관계의 필수/선택 표시는 관계선에 원을 그려서 표현한다.


 *  I/E 표기법




* Barker 표기법





10. 좋은 데이터 모델의 요소

가. 완전성: 업무에서 필요로 하는 모든 데이터가 데이터 모델에 정의되어야 한다,


나. 중복배제: 하나의 데이터베이스 내에 동일한 사실은 반드시 한 번만 기록하여야 한다. 데이터 중복관리로 인해서 여러가지 바람직하지 않은 형태의 데이터 관리 비용을 지불할 수 있다. 예를들어 저장공간 낭비, 중복관리되고있는 데이터의 일관성을 유지하기 위한 추가적인 데이터 조작 등이 있다.


다. 업무규칙: 데이터 모델링 과정에서 도출되고 규명되는 수많은 업무규칙을 데이터 모델에 표현하고 이를 해당 데이터 모델을 사용하는 모든 사용자가 공유할 수 있도록 제공해야한다.


라. 데이터 재사용 : 데이터의 재사용성을 향상시키고자 한다면 데이터의 통합성과 독립성에 대해 충분히 고려해야한다. 데이터 설계에서 가장 대두되는것이 통합모델이다. 통합모델 이어야만 데이터 재사용성을 향상시킬 수 있다.


마. 의사소통 : 데이터 모델은 대상으로 하는 업무를 데이터 관점에서 분석하고 이를 설계하여 나오는 최종 산출물이다. 데이터를 분석하는 과정에서 자연스럽게 많은 업무 규칙들이 도출된다. 이 과정에서 도출되는 많은 업무 규칙들은 데이터모델에 엔티티, 서브타입, 속성, 관계 등의 형태로 최대한 자세하게 표현되어야 한다. 이렇게 표현된 많은 업무 규칙들을 해당 정보시스템을 운용, 관리하는 관련자들이 설계자가 정의한 업무규칙들을 동일하게 받아들이고 정보시스템을 확용할 수 있게하는 역할을 한다


바. 통합성 : 가장 바람직한 데이터 구조의 형태는 동일한 데이터는 조직 전체에서 한번 만 정의되고 이를 여러 다른 영역에서 참조, 활용하는 것이다.