[데이터베이스]실전 데이터 모델링의 단계(펌)

류명운

·

2014. 11. 29. 02:44

반응형

http://www.dator.co.kr/encore/textyle/205361(펌)


실전 데이터 모델링의 단계

앞으로 데이터 모델링의 상세한 과정을 설명하게 되면 나무는 볼 수 있으나 숲을 보지 못할 것이 염려되어 주요 단계별로 처리할 전체적인 작업 내용에 대해서 간략하게 조금씩만 언급하기로 하겠다. 

그러나 너무 많은 단계를 소개하면 복잡해 질 것이므로 여기서는 ''기본 논리적 데이터 모델링''만 소개하고 ''상세 논리적 데이터 모델링''은 뒤에서 별도로 소개하기로 한다.




기본 논리적 데이터 모델링 단계에서는 주요 엔터티들을 기준으로 엔터티를 정의하고, 그들 간의 릴레이션을 정의한 개념적 논리모델을 ERD로 그린다. 여기에 나타난 엔터티를 대상으로 속성 후보를 선정하여 구체적인 검증과정을 거치게 되면 속성이 결정되고 경우에 따라 보다 상세한 엔터티가 추가된다.

이어서 이 단계까지 완료된 주요 엔터티들에 대한 식별자를 확정하며, 데이터 모델의 골격이 되는 이것들은 매우 견고하게 정의되어야 하므로 상세한 사례 데이터를 작성해 가며 데이터 모델을 검증하면 기본 논리적 데이터 모델링이 완성된다.

이와 같은 진행 과정의 세부적 단계를 간략하게 나마 좀더 구체적으로 설명해 보기로 하겠다.

1.1 엔터티 정의 (엔터티 후보 선정)

엔터티는 하나씩 확정해 갈 수 있는 것이 아니다. 먼저 여러 엔터티 후보들을 다양한 경로를 통해 선정하여 최종 엔터티들을 결정해 가는 구체적인 절차를 거쳐 종합적이고 전략적으로 엔터티를 확정하게 된다.


1.2 엔터티 정의 (엔터티 형태별 분류)

후보로 선정된 모든 엔터티들을 대상으로 모델링을 시작해 간다면 우리는 필연적으로 엄청난 복잡성에 빠지게 되며, 오류의 확률도 그만큼 증가하게 된다. 이를 방지하기 위해 앞서 예를 들었던 골조 자재에 해당하는 핵심 엔터티들을 분류해 내고, 이들의 의미를 분명하게 정의하기 위하여 주제영역별로 엔터티들을 분류하는 과정이다.



1.3 엔터티 정의 (엔터티 검증 및 확정)

이 과정부터는 핵심 엔터티에 대해서만 정의해 간다. 엔터티의 결정은 매우 중요하고 생각처럼 쉽지 않은 과정이다. 집합이란 정의하기에 따라 통합될 수도, 분리될 수도 있다. 우리가 분명하게 알고 있다고 생각하는 ''사원'' 엔터티 조차도 사실은 정확하게 정의되고 있지 못하고 있다. 가령, 내근사원만을 정의한 것인지, 협력회사, 관계사들도 포함되어 있는 집합인지, 만약 보험회사라면 설계사나 대리점도 사원에 포함되는지 등을 구체적으로 정의해야 한다. 엔터티의 정의가 부실한 상태에서 모델링을 계속해 가는 것은 사상누각과 같다. 기초가 부실하면 과정이 아무리 견실하더라도 의미가 없기 때문에 앞으로 엔터티 정의에 대해서 많은 지면을 할애할 것이다.



2.1 릴레이션 정의 (릴레이션 존재 파악)

엔터티와 엔터티 간에는 하나 이상의 관계가 존재할 수 있다. 엔터티가 단지 100개만 되더라도 최소한 10,000 가지의 관계가 발생할 수 있다. 만약 엔터티 개수가 1,000개 라면 얼마가 되는가? 그리고 그것들을 오류없이 정확하게 정의할 수 있겠는가? 생각처럼 쉽게 접근할 수 있는 것이 아니다.

이 단계의 보다 용이한 접근을 위하여 우리는 관계 상관도(relationship matrix)를 이용하여 제3자 입장에서 관계의 존재 유무만 파악한다.



2.2 릴레이션 정의 (관계명칭 확정)

관계가 존재한다는 용의점이 파악되면 이들을 대상으로 보다 구체적인 단계로 진행한다. 이 단계에서 그 용의점이 구체적으로 어떤 내용의 관계를 의미하는 지를 결정한다. 다시 말해서 이 단계에서는 릴레이션의 내용을 명확하게 정의하는 작업을 한다. 릴레이션의 정의 또한 엔터티에서 처럼 하나로 묶을 수도 있고 구체적으로 세분화 시킬 수도 있으며, 어떤 결정을 하였느냐에 따라 나중에 미치는 영향은 실로 중차대하기 때문에 이 또한 쉽게 생각할 단계는 아니다. 이 단계의 결과는 관계 상관도의 최종 모습으로 나타난다. 



3.1 개념 ERD 작성 (핵심 엔터티 배치)

관계 상관도를 완성한 후 내용을 분석해서 가로, 세로의 빈 칸에 내용이 많이 채워진 것들을 골라낸다. 내용이 많이 채워졌다는 것은 그만큼 다른 엔터티와 많은 관계를 맺고 있는 주요 엔테티란 의미가 된다. 이러한 엔터티들을 선별해서 이제부터 ERD를 작성해 가야 하므로 적절한 위치에 구도를 잡아 배치한다.



3.2 개념 ERD 작성  (키이 엔터티 연결)

앞 단계에서 선택된 엔터티는 대부분 뒤에서 설명할 메인(main) 엔터티들이며, 이들의 부모가 되는 키이(key) 엔터티들을 적당한 위치에 놓고 릴레이션을 맺어나가면 마치 철제 빔을 조인트로 연결한 건물의 골조와 같은 모습이 된다. 



3.3 개념 ERD 작성  (릴레이션 확정)

이렇게 조인트로 연결한다는 작업의 의미는 릴레이션을 그려 넣는 것을 말한다. 앞서 정의한 릴레이션은 단지 관계명칭의 정의를 통한 관계의 내용만 정의한 것이지만 이 단계에서는 릴레이션의 구체적인 모습을 결정하게 된다. 관계의 확정은 반드시 물증 조사에 의한 구체적인 판단에 의해서 실시되어야 한다. 릴레이션이란 어느 한 쪽이 주어가 되어서 상대를 바라보는 관계와 그 반대 쪽이 주어가 되어서 다시 이쪽의 상대를 바라보는 두가지 관계의 합성으로 생성된다. 

이 과정에서 많은 예외 사항이 검토되어야 하며, 많은 새로운 업무규칙(business rule)들이 정의되어 가고, 앞서 결정해 두었던 엔터티의 정의 또한 더욱 구체적으로 규정되어 진다. 

지금까지 작업한 결과로서 우리는 ''개념적 논리 데이터 모델(conceptual logical data model)''을 얻게 된다. 이 데이터 모델은 구체적이지는 않지만 시스템의 구조를 한 눈에 볼 수 있는 귀중한 자료라 할 수 있다. 이 데이터 모델에 가능한 최대한의 속성 후보들을 선정한 후 다음과 같은 4가지 단계를 통해 속성을 확정하거나 추가적인 엔터티를 도출하게 된다.



4.1 속성정의 1단계 (원자 단위)

속성을 결정하는 첫번째 검증 내용은 "원자 단위냐?"라고 질문하는 것이다. 원자단위란 말 그대로 더 이상 분리될 수 없는 최소한의 단위를 말한다. 그러나 화학에서 말하는 원자는 명확하지만 속성에서 말하는 원자란 소속된 엔터티와 그 속성의 구체적의 의미에 따라 달라지므로 앞으로 설명할 명확한 판단의 기준을 가지고 결정해야 한다.



4.2 속성정의 2단계 (single value)

여기서는 그 속성이 반드시 하나의 값만 가지는 지를 결정해야 한다. 이 단계는 정규화 작업의 제1정규형(1st NF)와 동일한 것으로 정상적인 모델링이라면 제1정규형은 속성 정의 단계에서 이루어 져야 함을 의미한다. 주의할 사항은 비록 현재는 하나의 값만 가지지만 앞으로는 보다 상세한 관리를 할 필요가 없는 지를 따져 보아야 한다는 것이다. 이러한 작업을 통해 모델링은 있는 그대로를 옮겨 그리는 것이 아니라 새로운 개선점을 찾아 내는 과정이 포함되어 지는 것이다. 

이 단계에 저촉되면 하위 엔터티가 추가되어야 한다. 이렇게 속성 낱개에 대한 구체적인 검토에 의해 줄기와 큰 가지만 있던 데이터 모델에 조금씩 곁가지들이 붙게 되어 모델링은 조금씩 더 상세화 되어진다.


4.3 속성정의 3단계 (가공 값 제거)

만약, 어떤 속성 후보 중에 그 엔터티의 다른 속성들로 재현할 수 있다거나, 다른 엔터티의 정보를 이용하여 재현할 수 있다면, 그 속성은 이미 원본(source)이라고 할 수 없다. 논리적 데이터 모델링에서는 이러한 가공 값들을 제거해야 한다. 데이터 모델링의 1차 목표는 자신의 본질을 정확히 정의하자는 데 있으므로 본질이 아닌 것들이 포함되어 본질을 호도해서는 안된다는 관점에서 가공 값들은 제거되어야 하는 것이다. 물론 이들은 물리적 모델링 단계에서 다시 검토되어 질 것이므로 아직 자신의 본질도 모르면서 나중에 해도 될 일을 미리 앞당겨서 불확실한 결정을 할 필요가 없다는 것이다.

이 가공 값을 판정하는 일도 실전에서는 그리 쉬운 일이 아니다. 상황에 따라 미묘하게 달라지므로 세심한 주의를 해야 하는 작업이다.


4.4 속성정의 4단계 (상세화 관리 결정)

위의 3가지 판단이 완료되었더라도 우리는 보다 전향적인 자세를 가지고 현재 관리하고 있는 것보다는 앞으로 보다 상세한 수준의 데이터를 관리해야 할 것인지를 결정하는 단계이다. 예를 들어, 지금까지는 수작업으로 결정한 ''검사 결과''를 입력해서 관리했지만, 앞으로는 ''검사 결과를 판정하기 위한 하위 데이터를 관리하여 전산화 영역을 보다 심화 시키겠다''와 같은 것을 결정하는 단계이다.

이 단계를 가볍게 여기면 개발 중에 계속적인 설계 보완이 발생하는 주된 이유가 되므로 설계자들의 적극성, 도덕성에 관계있는 단계라 하겠다. 

5.1 식별자 지정 (의미상 주어 확정)

모델링을 해 가는 과정에서는 식별자를 ''의미상의 주어''를 가지고 표현해 둔다. 의미상의 주어는 인조(artificial) 식별자가 아닌 원래 있던 속성이나, 부모 엔터티로부터 상속받은 릴레이션으로 표현한 자신의 ''탄생 원인''이 되는 속성이나 관계를 말한다. 물론 최종 식별자는 앞으로 바로 다음 단계에서 결정되어 지겠지만, 이 단계까지의 과정에서는 앞으로 불려질 자신의 최종 식별자보다는 ''자신이 누구였느냐?'', 다시 말해서 ''어떻게 해서 태어난 집합인가?''라는 것이 보다 중요하다는 것이다. 그것은 모델링은 바로 ''자신의 본질을 정확히 정의''하는 데 가장 중요한 목적이 있기 때문이다.


5.2 식별자 지정 (상속 및 단절 전략)

우리가 결정하는 식별자는 단지 개체의 식별만을 목적으로 하는 것은 아니다. 마치 우리의 이름에 성(姓)이 있은 자신의 이름의 한 부분이기도 하지만 자신의 가계(家系)를 나타내는 정보이기도 하다. 이것은 부모로부터 물려받은 상속의 결과이며, 그렇다고 해서 항상 상속만 받는다면 단일민족인 우리는 모두 동일한 성씨를 가지게 될 것이다.

이와 같이 상속과 적절한 단절은 정보의 연속성과 단순성의 중요한 효과를 재공하며, 이러한 특성을 이용하여 적절한 전략을 수립하면 비록 모델상으로는 복잡하더라도 엑세스 깊이(depth)는 단순하도록 할 수 있는 매우 전략적인 단계이다.


5.3 식별자 지정 (식별자 확정)

이와 같은 상속 및 단절 전략에 따라 우리는 상황에 따라 적절한 인조 식별자를 부여하게 된다. 자신의 이름은 ''소유는 자신이지만 남이 주로 불러 준다''는 사실처럼 식별자의 소유는 자기 엔터티이지만 연결은 주로 다른 엔터티가 하게 되므로 자신을 참조하는 주변의 여러 엔터티와 종합적인 상황 판단을 하여 결정해야 한다.


6.1 데이터 모델 검증 (사례 데이터 작성)

위의 모든 단계가 결정되었으면, 이제 우리는 기본 논리적 데이터 모델을 거의 완성했다고 하겠다. 그러나 아무리 전문 모델러와 업무에 정통한 현업 사용자들에 의해 모델링이 진행되었더라도, 우리가 인간인 이상 허점이 존재할 가능성은 얼마든지 있다. 더구나 기본 논리적 데이터 모델은 건물의 골조와 같은 것이기 때문에 매우 견고하게 정의되어야 한다. 

이러한 우려를 불식시키기 위해 우리가 해야 할 중요한 일은 사례 데이터를 작성하는 것이다. 이 단계는 일견 불필요하게 보일 수도 있지만 6가지의 대단한 효과(뒤에서 설명)를 가지고 있는, 정말 투자할 가치가 충분히 있는 작업이다.


6.2 데이터 모델 검증 (데이터 모델 확정)

사례 데이터 작성을 통해 작성된 모델을 시뮬레이션하면 데이터 모델의 보완 사항이 나타날 수 있다. 모델러와 정보를 제공하는 현업 사용자 간의 커뮤니케이션 에러도 있을 수 있으며, 전체적인 윤곽이 보여짐으로 해서 새로운 요구사항이 나타날 수도 있기 때문이다. 특히 현업 사용자는 이러한 시뮬레이션을 통해 지금까지 진행한 데이터 모델에 대한 자신의 이해를 향상시킬 수가 있고, 그 결과 모델링 과정의 잘못된 결정이나 새로운 요구사항이 더 늦지 않게 도출돨 수 있다. 이러한 도출된 문제점을 최대한 보완하는 단계는 매우 중요한 작업일 것이다.


6.3 데이터 모델 검증 (주요 속성값 정의)

상기 모든 단계가 완료되면 매우 상세한 결과가 나타난 것처럼 보이지만 사실은 아직도 많은 부분이 미흡하다. 예를 들어, ''직무''란 속성이 구체적으로 정의 되어 있지만 그 값으로는 ''전산직, 총무직,…''과 같은 값을 정의한 것인지, 아니면 ''사무원, 관리자,…''와 같은 값을 정의한 것인지 명확하지 않다는 것이다.

마찬가지로 ''상품id''가 식별자로 정의되어 있지만 일련번호로 할 것인지, 아니면 유형별로 자리수마다 의미를 줄 것인지 결정된 바가 없다. 이렇게 해당 속성에 정의할 값들의 형태를 결정하고, 그 값들이 데이터 생성 시에 반드시 입력되어야 하는 지에 대한 결정도 같이 정의하는 작업이다.

반응형