위 내용들을 다음 예제를 통해서 좀 더 쉽게 접근해 보도록 한다.
다음은 보험사의 고객에 대한 간단한 유즈케이스 이다.
|
보험계약은 계약자, 피보험자, 수익자로 이루어 진다. 계약은 보험 모집인이 계약자와 계약을 성사 시켜 회사에 계약서를 제출하고 회사는 이를 승인하여야만
계약이 이루어 진다. |
위 유즈케이스 구문에서 제일 첫 번째 문장인 "보험계약은 계약자,피보험자,수익자로 이루어 진다. 계약은 보험 모집인이 계약자와 계약을 성사 시켜
회사에 계약서를 제출하고 회사는 이를 승인하여야만 계약이 이루어 진다." 만 볼 때 계약자,피보험자,수익자,보험모집인은 엔티티 중 사람 타입으로 식별을 할 수 있다.
때문에 다음과 같이 사람의 타입을 가지고 있는 attribute를 두어서 표현을 할 수 있을 것이다.




그림 1
그런데 다음 문장에서 이들 보험계약에 참여하는 사람들의 특성을 표현하고 있다.
계약자는 보험 계약을 유지 하기 위해서 보험료 입금에 필요한 정보를 추가적으로 가질 수 도 있을 것이고 피 보험자는 자신의 건강상태 정보를 가져야 한다.
즉 사람들 마다 각각 자신의 역할 마다 추가되는 정보 및 특성을 가지고 있다는 것을 알 수 있는 것이다.
때문에 단순히 attribute를 두어서 사람들을 표현하기가 어려울 수도 있다. 예를 들어 보험료 납부를 자동이체로 처리 한다면 자동이체에 대한 계좌 정보가 필요할 것이다.
이는 보험계약자만 필요한 정보이지 피보험자,수익자,보험모집인의 경우는 필요하지 않을 것이다.
그래서 각각의 사람들을 전혀 공통적인 특성을 가지고 있지 않는 개별적인 존재로 분석을 하면
다음과 같이 표현을 할 수 도 있다.

그림 2
솔직히 그림 2에서 표현된 것처럼 표현하지는 않을 것이다. 왜냐하면 이들 모두는 공통된 특성을 가진다.
여기서 말하는 공통된 특성은 이들 모두 사람을 표현하고 있고 사람은 기본적으로 공통된 데이터를 가진다. 나이,이름,성별,연락처 등등.
이렇게 공통적인 테이터가 있는 경우 상위 타입을 두어서 공통된 특성을 모아 놓은 다음 각각의 특성을 표현할 수 있는 하위 타입을
두면 된다. 결과적으로 다음과 같이 정리 될 수 있을 것이다.

그림 3
이렇게만 된다면 여기서 고객에 대한 분석이 끝나고 얼마나 행복할까?
고객과 업무 분석 도중 고객이 이런 말은 하였다고 가정해 보자
"보험계약의 계약자는 사람도 되고 법인 기업체도 가능합니다.",하나의 보험 계약에는 여러 명의 수익자가 발생할 수 있습니다.” 등등 추가 적인 요인이 발생할 수 있다.이러한 추가적인 요건에 좀더 빠르게 대응하기 위해서는 무엇보다 정리와 도메인을 적절히 표현하는 것이 필요하며 Analysis Patten이라는 것은 그러한 것을 정리하고 시스템을 분석해 줄 수 있는 방법을 제시하고 있는 것이다.
어떤 사람들은 분석 단계에서 도출된 Entity들을 그대로 설계작업을 거쳐 DB화 시키려고 한다. 이럴 경우 DBA와 충돌이 발생할 수 있다. DBA의 경우는 어떻게 하면 좀 더 구조적으로 명확한 자료 구조를 만드는지가 최우선 과제이기 때문에 그림 3과 같이 각각의 특성에 따라 분리된 entity들을 DB로 생성을 할 수 없다고 할 것이기 때문이다. 왜? 단지 조금씩 특성이 틀리지만 공통된 정보도 있기 때문에 하나의 테이블로 만들어도 무방하다고 볼 것이기 때문이다.
100%로 맞는 말이다. 그림3은 도메인을 분석하기 위한 다이어그램일 뿐이다. 절대로 DB의 모델이 될 수 없으며 되어서도 안 된다.

