제 2 부 데이터 모델링 개론
데이터 모델이란 구현할 정보시스템의 골격을 정의한 설계도라고 할 수 있다. 정보시스템은 다량의 데이터와 수많은 업무규칙들이 매우 복합적이고 정밀하게 접목되어 탄생한다. 그 중에서 데이터 구조는 건물의 골격과 같은 것이기 때문에 사용자의 요구나 업무의 변화에 따라 쉽게 흔들린다면 위험성이 크게 증가함은 물론, 많은 유지·보수 비용을 필요로 하게 될 것이다.
엔코아 컨설팅 제공
제 2 장 실전 데이터 모델링의 개요
앞 장에서 데이터 모델링의 실태를 언급하면서 우리가 앞으로 올바른 데이터 모델링을 수행하기 위해 훨씬 더 객관적이고 구체적으로 접근하여야 하며, 분명한 절차와 판단의 잣대를 가져야만 가능한 일이라고 하였다.
바둑을 단지 이론만 익히고 실전훈련을 병행하지 않았다면 결코 고수가 될 수 없다. 실전에서 발생하는 미묘하고 복잡한 문제를 확신 있게 풀어갈 수 있는 응용력과 적용능력이 없다면 데이터 모델링은 한낱 책상에서나 힘을 발휘하는 참고서에 불과할 것이다. 이처럼 실전과 이론적인 것에는 적지 않은 차이가 있기 때문에 실전적인 모델링을 할 수 있다는 것은 참으로 중요하다.
가령, 자신이 엔터티의 개념을 확실하게 이해했다고 하더라도 과연 단 한번도 보고 들은 적이 없는 어떤 업체에 가서 완벽하게 엔터티를 도출할 수 있겠는가? 수천 개의 엔터티 후보들 중에서 과연 무엇을 어떻게 통·폐합하여야 할지 쉽게 결정할 수 있겠는가? 이런 실제적인 문제에 명확한 답변을 줄 수 있는 것이 바로 '실전 데이터 모델링'이다.
이 장에서는 본격적인 데이터 모델링을 설명하기에 앞서 실전 데이터 모델링의 전체적인 형태와 그 핵심적인 특징들을 먼저 소개하기로 하겠다.
|
|
2.1 실전 데이터 모델링 |
|
실전 데이터 모델링이란 수행할 업무를 전혀 모르는 상태에서 출발하여 모든 현상과 요건들을 도출하여야 함은 물론, 최적의 목적 시스템을 위해 인간이 결정해야 할 대부분을 확정해 내는 작업을 구체적, 객관적, 실전적으로 풀어 나가는 과정의 도구를 말한다.
단지 방법을 익히고, 비슷하게 흉내를 내 보는 것은 그리 어렵지 않겠지만 고도의 분석능력과 구체적인 접근 수순, 객관적인 판단 기준을 통해 온통 불확실 투성이였던 상황을 명확한 모습으로 확정 지을 수 있다는 것은 매우 중요하고 어려운 일이다.
앞으로 제시하는 데이터 모델링 또한 매우 상세화된 단계와 그 단계마다 구체적이고 객관적인 판단의 기준을 제시할 것이며, 좀더 심층적인 실전 연구를 통해 실전적인 모델링을 할 수 있도록 모든 경험과 지식을 쏟아 넣을 것이다.
|
|
2.1.1 실전 데이터 모델링의 개념
실전 데이터 모델링이 추구하고자 하는 가장 핵심적인 주장은 데이터 모델링은 반드시 시스템 설계 과정 전체를 이끌어 나가는데 적용하는 '과정의 도구'가 되어야 한다는 것이다. 이 말은 곧 실전 데이터 모델링에서는 비록 업무에 무지한 상태에서 출발하였더라도 이를 통해 모든 결정들을 완벽하게 확정해 가는 전체 과정을 지원함으로써, 기존(as-is) 업무의 체계적인 분석을 유도하고, 이를 기반으로 가장 효율적인 향후(to-be)의 업무체계를 수립해 갈 수 있도록 구체적인 과정과 객관적인 판단을 할 수 있는 모든 실전적 요소들을 제시하겠다는 것을 의미하고 있다.
|
|
|
|
|
2.1.2 실전 데이터 모델링의 단계
엔터티 정의 (엔터티 후보 선정)
엔터티는 하나씩 별도로 확정해 갈 수 있는 것이 아니다. 먼저 여러 엔터티 후보들을 다양한 경로를 통해 선정하여 최종 엔터티들을 결정해 가는 구체적인 절차를 거쳐 종합적이고 전략적인 방법으로 엔터티를 확정하게 된다.
엔터티 정의 (엔터티 형태별 분류)
후보로 선정된 모든 엔터티들을 대상으로 모델링을 시작해 간다면 우리는 필연적으로 엄청난 복잡성에 빠지게 되며, 오류를 일으킬 확률도 그만큼 증가하게 된다. 이를 방지하기 위해 앞서 예를 들었던 골조 자재에 해당하는 핵심 엔터티들을 먼저 분류해 내고, 이들의 의미를 분명하게 정의하기 위하여 데이터 영역별로 엔터티들을 분류하는 과정이다.
엔터티 정의 (엔터티 검증 및 확정)
이 과정부터는 핵심 엔터티에 대해서만 정의해 간다. 엔터티의 결정은 매우 중요하고 생각처럼 쉽지 않은 과정이다. 집합이란 정의하기에 따라 통합될 수도, 분리될 수도 있다. 우리가 분명하게 알고 있다고 생각하는 '사원' 엔터티 조차도 사실은 정확하게 정의되어 있지 못하고 있다. 가령, 내근사원만을 정의한 것인지, 협력회사, 관계사들도 여기에 포함되어 있는 집합인지, 만약 보험회사라면 설계사나 대리점도 사원에 포함되는지 등을 구체적으로 정의해야 한다.
릴레이션 쉽 정의 (릴레이션 존재파악)
엔터티와 엔터티 간에는 하나 이상의 관계가 존재할 수 있다. 엔터티가 단 100개만 되더라도 최소한 10,000 가지의 관계가 발생할 수 있다. 만약 엔터티 개수가 1,000개 라면 얼마가 되겠는가? 이것들을 우리가 오류 없이 정확하게 정의할 수 있겠는가? 생각처럼 쉽게 접근할 수 있는 것이 아니다. 이 단계의 보다 용이한 접근을 위하여 우리는 관계 상관도(relationship matrix)를 이용하여 제3자 입장에서 관계의 존재 유무만 파악한다.
릴레이션쉽 정의 (관계명칭 확정)
관계가 존재한다는 용의점이 파악되면 이들을 대상으로 보다 구체적인 단계로 진행한다. 이 단계에서 그 용의점이 구체적으로 어떤 내용의 관계를 의미하는 지를 결정한다. 다시말해서 이 단계에서는 릴레이션의 내용을 명확하게 정의하는 작업을 한다. 릴레이션쉽의 정의 또한 엔터티에서처럼 이들을 하나로 묶을 수도 있고, 구체적으로 각각을 세분화 시킬 수도 있다. 물론 어떤 결정을 하였느냐에 따라 나중에 미치는 영향은 실로 중차대하기 때문에 이 또한 쉽게 생각할 단계는 아니다. 이 단계의 결과는 관계 상관도의 최종 모습으로 나타난다.
개념 ERD 작성 (핵심 엔터티 배치)
관계 상관도를 완성한 후 내용을 분석해서 가로, 세로의 빈 칸에 내용이 많이 채워진 것들을 골라낸다. 내용이 많이 채워졌다는 것은 그만큼 다른 엔터티와 많은 관계를 맺고 있는 주요 엔터티란 의미가 된다. 이러한 엔터티들을 선별해서 이제부터 ERD를 작성해 가야 하므로 적절한 위치에 구도를 잡아 배치한다.
개념 ERD 작성 (키이 엔터티 연결)
앞 단계에서 선택된 엔터티는 대부분 뒤에서 설명할 메인(main) 엔터티들이며, 이들의 부모가 되는 키이(key) 엔터티들을 적당한 위치에 놓고 릴레이션쉽을 맺어나가면 마치 철제 빔을 조인트로 연결한 건물의 골조와 같은 모습이 된다.
개념 ERD 작성 (릴레이션 확정)
이렇게 조인트로 연결한다는 작업의 의미는 릴레이션쉽을 그려 넣는 것을 말한다. 앞서 정의한 릴레이션쉽은 단지 관계명칭의 정의를 통한 관계의 내용만 정의한 것이지만 이 단계에서는 릴레이션의 구체적인 모습을 결정하게 된다. 관계의 확정은 반드시 물증 조사에 의한 구체적인 판단에 의해서 실시되어야 한다. 릴레이션이란 어느 한 쪽이 주어가 되어서 상대를 바라보는 관계와 그 반대 쪽이 주어가 되어서 다시 이쪽의 상대를 바라보는 두 가지 관계를 합성하여 생성한다. 이 과정에서는 많은 예외 사항이 검토되어야 하며, 정의를 구체화함에 따라 새로운 업무규칙(business rule)들이 정의되어 가고, 앞서 결정해 두었던 엔터티의 정의 또한 더욱 구체적으로 규정된다.
|
|
|
|
|
지금까지 작업한 결과로서 우리는 '개념적 데이터 모델(conceptual data model)'을 얻게 된다. 앞으로 이 데이터 모델에 최대한의 속성 후보들을 선정한 후 다음과 같은 4가지 단계를 통해 속성을 확정하거나 추가적인 엔터티를 도출하게 된다.
속성정의 1단계 (원자 단위)
속성을 결정하는 첫 번째의 검증 내용은 "원자 단위냐?" 라고 질문하는 것이다. 원자단위란 말 그대로 더 이상 분리될 수 없는 최소한의 단위를 말한다. 그러나 화학에서 말하는 원자는 누가 보아도 명확하지만 속성에서 말하는 원자란 소속된 엔터티와 그 속성의 구체적인 의미에 따라 얼마든지 달라질 수 있으므로 앞으로 설명할 명확한 판단의 기준을 가지고 결정해야 한다.
속성정의 2단계 (single value)
이 단계에서는 그 속성이 반드시 단 하나의 값만 가지고 있는 지를 검증한다. 이것은 정규화 작업의 제1정규형(1st NF)과 동일한 것이다. 이 말은 곧 정상적으로 모델링을 수행하고 있다면 바로 이 단계에서 제1정규형이 이루어져야 함을 의미한다. 주의할 사항은 비록 현재는 하나의 값만 가지지만 앞으로는 보다 상세한 관리를 할 필요가 없는지를 다져 보는 것이다. 이와 같은 작업이 있음으로 해서 모델링은 단지 있는 그대로를 옮겨 그리는 것이 아니라 새로운 개선점을 찾아 개선해 가는 과정의 도구라고 할 수 있는 것이다. 이 단계에 저촉되면 하위에 새로운 엔터티를 추가해야 한다. 이처럼 속성 낱개에 대한 구체적인 검증 과정을 거치면서 지금까지 줄기와 큰 가지만 있던 앙상한 데이터 모델에 점차 곁가지들이 붙게 되어 모델링은 조금씩 더 상세화 되어져 간다.
속성정의 3단계 (가공 값 제거)
만약, 어떤 속성 후보 중에 그 엔터티에 있는 다른 속성들로 재현할 수 있거나, 다른 엔터티의 정보를 이용하여 재현할 수 있다면, 그 속성은 이미 원본(source)이라고 할 수 없다. 논리적 데이터 모델링에서는 이러한 가공 값들을 제거해야만 한다. 데이터 모델링의 1차 목표는 자신의 본질을 정확히 정의하자는 데 있으므로 아직 본질이 분명해져 있지 않은 상태에서 본질이 아닌 것들이 포함되어 본질이 호도되도록 해서는 안 된다.
속성정의 4단계 (상세화 관리 결정)
위의 3가지 판단이 완료되었더라도 우리는 보다 전향적인 자세를 가질 필요가 있다. 앞으로는 좀더 상세한 수준의 데이터를 관리해야 할 것인지를 심도있게 검토해 보아야 한다는 것이다. 이처럼 전산화 영역을 보다 심화 시키겠다는 결정을 하였다면 과거와는 다른 형태의 데이터 모델이 나타나게 될 것이다. 만약 여러분이 이 단계를 가볍게 여긴다면 개발을 진행하는 도중에 계속해서 설계를 보완하게 하는 주된 이유가 될 것이 틀림없다.
식별자 지정 (의미상 주어 확정)
모델링을 수행해 나가는 과정에서는 식별자를 '의미상의 주어(본질 식별자)'로 표현해 둔다. 의미상의 주어는 인조(artificial) 식별자가 아닌 원래 보유하고 있던 속성이나, 부모 엔터티로부터 상속받은 릴레이션쉽으로 표현한 자신의 '출생의 비밀'이 되는 속성이나 관계를 말한다. 이 단계까지는 앞으로 불려질 최종적인 식별자보다 '자신이 누구였느냐?', 다시 말해서 '어떻게 해서 태어난 집합인가?'라는 것이 보다 중요하다. 그것은 논리적 모델링은 바로 '자신의 본질을 정확히 정의'하는 것이 가장 중요한 목적이 있기 때문이다.
식별자 지정 (상속 및 단절 전략)
우리가 결정하는 식별자는 단지 '개체의 식별'만을 목적으로 하는 것은 아니다. 우리의 이름에 있는 성(姓)은 자기 이름의 한 부분이기도 하지만 자신의 가계(家系)를 나타내고 있는 정보이기도 하다. 이것은 부모로부터 물려받은 상속의 결과이다. 그렇다고 해서 항상 상속만 받는다면 단일민족인 우리는 모두 동일한 성씨를 가져야 할 것이다. 상속과 단절은 정보의 연속성과 단순성에 커다란 영향을 미친다. 이러한 특성을 이용하여 적절한 전략을 수립한다면 비록 모델상으로는 복잡하지만 실제 액세스를 하는 깊이(depth)는 단순하게 할 수 있는 매우 전략적인 단계이다.
식별자 지정 (식별자 확정)
이와 같은 상속 및 단절 전략에 따라 우리는 상황에 따라 적절한 인조 식별자를 부여하게 된다. 자신의 이름은 '소유는 자신이지만 남이 주로 불러 준다'는 사실처럼 식별자의 소유는 자기 엔터티이지만 연결은 주로 다른 엔터티가 하게 되므로 자신을 참조하는 주변의 여러 엔터티와 종합적인 상황 판단을 하여 결정해야 한다.
데이터 모델 검증 (사례 데이터 작성)
위의 모든 단계가 결정되었다면, 이제 우리는 기본 논리적 데이터 모델을 거의 완성했다고 할 수 있겠다. 그러나 아무리 전문 모델러와 업무에 정통한 현업 사용자들에 의해 모델링이 진행되었다 하더라도, 우리가 인간인 이상 허점이 존재할 가능성은 얼마든지 있다. 더구나 기본 논리적 데이터 모델은 건물의 골조와 같은 것이기 때문에 매우 견고하게 정의되어 있지 않으면 안 된다. 이러한 우려를 불식시키기 위해 우리가 해야 할 중요한 일들은 사례 데이터를 작성하는 것이다. 이 단계는 일견 불필요하게 보일 수도 있는 단계라고 생각할 수도 있겠지만 투자할 가치가 있는 작업이다.
데이터 모델 검증 (데이터 모델 확정)
사례 데이터 작성을 통해 작성된 모델을 시뮬레이션 하면 데이터 모델의 보완 사항이 나타나게 된다. 모델러와 정보를 제공하는 현업 사용자 간에는 커뮤니케이션 에러가 있을 수 있으며, 이 단계를 통하여 전체적인 윤곽을 다시 바라봄으로써 새로운 요구사항이 추가로 나타날 수도 있기 때문이다. 특히 현업 사용자는 이러한 시뮬레이션을 통해 지금까지 진행한 데이터 모델에 대한 자신의 이해를 향상시킬 수가 있다. 그 결과, 모델링 과정의 잘못된 결정이나 새로운 요구사항이 더 늦지 않게 도출될 수 있다. 이러한 도출된 문제점을 최대한 보완하는 일은 매우 중요한 작업이라 할 것이다.
데이터 모델 검증 (주요 속성값 정의)
상기 모든 단계가 완료되면 매우 상세한 결과가 나타날 것처럼 보이지만 사실은 아직도 미흡한 부분이 많이 있다. 해당 속성에 정의할 값들의 형태를 결정하고, 그 값들이 데이터 생성 시에 반드시 입력(mandatory)되어야 하는 지에 대한 결정도 같이 정의하는 단계이다.
|
|
|
|
|
2.1.3 실전 데이터 모델링의 영역
데이터 모델링은 시스템을 개발하는 생명주기(lifecycle)의 어느 단계에서 어떤 목적으로 사용되는 방법론인가? 여기에 대해서는 방법론에 따라 많은 차이가 있고 사람마다 생각하는 영역이 다르다. 그러나 모든 방법론들은 나름대로 많은 특징이 있지만 대부분은 다음과 같은 단계를 거치게 된다.
사용자 요구사항에 대해서 전략을 수립하고, 업무를 파악하고 개선안을 찾아 새로운 목표(to-be) 시스템의 업무형태를 확정하는 분석 단계, 이것을 정보시스템 형태로 전환하는 설계 단계, 애플리케이션을 개발하는 단계, 문서화를 수행하는 단계, 개발 시스템을 종합적으로 테스트하는 단계를 거쳐 공급(가동 및 안정화 단계)을 한다. 결국 어떤 방법론도 이러한 과정을 거치지 않을 수는 없다. 이러한 공통적으로 존재하는 기본 과정에서 데이터 모델링은 어떤 영역에서 어떤 역할을 하게 되는 것인가? 여기서 말하는 데이터 모델링의 영역은 위의 단계 중에서 전략수립과 분석단계 전체를 가리킨다.
다시 말해서 개발 시스템의 업무를 전혀 모르는 상태에서 출발하여 업무에 대한 이해와 구체적인 조사 및 파악, 그리고 앞으로는 어떻게 할 것인가에 대한 확정작업을 모두 포함하는 - 다시 말해서 인간이 결정해야 할 대부분의 사항이 취급되고 확정되어 가는 모든 과정을 포함하는 - '과정의 툴'이라는 것이다.
|
|
2.1.4 실전 데이터 모델링의 필수 무공(武功)
데이터 모델링에서도 단지 방법론을 모두 이해했다고 해서 과연 업무를 전혀 모르는 어떤 시스템에 가서 업무를 즉시 구체적이고 객관적으로 체계화할 수 있는 능력이 금방 생겨 나는 것이 아님은 물론이다. 방법의 저 편에는 보다 중요한 사고력, 분석력, 종합력, 논리력, 창의력, 설득력 등이 제대로 갖추어져 있어야 하기 때문이다. 이러한 무형적인 능력을 개발하기 위해서는 오랜 세월 동안 각고의 노력이 있어야 한다. 물론 여기서 이를 얻기 위해 세월을 뛰어 넘을 수 있는 왕도를 제시할 수는 없다. 그러나 특출한 능력을 지닌 슈퍼맨이 아닌 보통사람들이 이와 유사한 힘을 발휘할 수 있는 세 가지 무공(솔루션, 방법)들이 있다.
첫 번째 방법은 단계적으로 접근해 가는 방법이다. 20cm짜리 계단을 여러 개 놓고 하나씩 열심히 올라가는 방법이 있을 뿐이다. 다른 말로 한다면 바로 '수평적 사고'라고 할 수 있다. 두 번째 방법은 이름하여 무협지에 자주 등장하는 '흡입신공(吸入神功)'이라는 무공이다. 남(현업 사용자)의 힘을 끌어낼 수 있는 무공이 필요하다는 것을 의미한다. 세 번째 방법은 '견물생심(見物生心)'을 시키는 방법이다. 견물생심이란 말 그대로 '사물을 봄으로써 마음이 생겨난다'는 것이다. 우리가 원하는 정보를 쉽게 생각해 낼 수 있도록 무엇인가를 보여줌(견물)으로써 쉽게 생각이나 판단이 되도록 유도(생심)하는 것이다. 이처럼 보다 시의적절하고, 완전한 정보를 어떻게 획득하느냐에 대한 문제는 좋은 데이터 모델링을 할 수 있는 매우 중요한 요소 중의 한 가지임에 틀림이 없다.
여러분들이 아무리 우수한 분석력과 종합력, 판단력을 가지고 있다고 하더라도 현실의 요소들을 충분히 캐어내지 못하면 결코 좋은 데이터 모델을 만들 수 없다는 것은 너무나 당연한 상식이다. 마치 아무리 우수한 의술을 가지고 있는 의사가 있다고 하더라도 환자의 상태를 제대로 파악할 수 없다면 결코 완벽한 처방을 내릴 수 없는 것과 동일하다고 하겠다.
|
|
|
|
|
2.1.5 데이터 모델링과 프로세스 모델링
정보시스템을 개발하는 그 과정에는 두 가지의 커다란 줄기가 있다. 한 가지는 정보의 요구사항을 설계하는 데이터 모델링 부문이고, 다른 하나는 사용자의 애플리케이션 요구사항을 수렴하기 위한 프로세스 모델링이 있다.
단계적으로 보면 전략수립 단계와 분석 단계에 데이터모델링을 하여 ERD와 엔터티, 속성 정의서를 완성하고, 프로세스 모델링을 수행하면서 자료흐름도(DFD)나 기능계층도(FHD)를 완성한다. 설계 단계에서는 물리적인 데이터베이스를 설계하고, 또 애플리케이션을 설계를 하게 된다.
물론 이들은 상호검증을 통하여 보완되어야 하며, 이 과정을 거치면서 가동 가능한 데이터베이스와 프로그램 작성을 통한 가동 애플리케이션이 나온다. 정보시스템이란 결국 이 두 가지가 연결됨으로써 가동 가능한 시스템으로 태어난 것이다. 물론 이것은 당연한 것이기는 하지만 이 두 가지를 어떻게 잘 조화시켜 나갈 것인가 하는 것은 매우 중요하다.
|
|
2.1.5.1 접근 방법 I (先 프로세스 모델링)
이와 같이 프로세스 중심적으로 접근하는 이 방법은 접근성은 매우 우수하지만 미래의 변화에 대한 대응이 힘들고, 많은 추가 비용이 발생할 것이 분명하므로 결코 추천하고 싶은 접근방법이라고는 할 수 없겠다.
|
|
|
|
|
2.1.5.2 접근 방법 II (동시 진행)
전문가가 제대로 없는 상태에서 업무의 크기에 따라 여러 개발팀으로 분할해서 각 부문을 독자적으로 진행하는 방법이다.
|
|
2.1.5.3 접근 방법 III (先 데이터 모델링)
데이터 모델링을 먼저 한 다음 그 결과를 이용해 프로세스를 설계하는 방법이다. 필자는 가능하다면 반드시 이 방법을 적용해야 한다고 강력히 주장하는 사람이다. 그것은 이 방법이야 말로 가장 합리적으로 목적을 달성하는 지름길이라 믿기 때문이다.
|
|
2.1.5.4 객체지향 모델링에서 데이터 모델링 접근방법
객체지향 소프트웨어 개발 방법론에서 사용하는 클래스(class)는 지금까지 우리가 언급해 온 데이터 아키텍처의 데이터 영역이나 데이터 클래스, 엔터티, 서브타입과 매우 유사한 개념이다. 관계형 데이터베이스를 발전시켜 나감으로써 객체지향에 접근해 가는 방식은 몇 가지 이점을 지닌다. 첫째, 십 수 년간 입증된 또 확산된 - 그래서 어찌 보면 익숙한 - 관계형 데이터베이스 기술을 지렛대를 활용하듯이 이용할 수 있다는 것이다. 둘째, 현재 전 세계적으로 가장 많이 사용되는 관계형 데이터베이스 기반의 애플리케이션에 객체 기다시 말해 객체지향 애플리케이션과 기존에 사용해오던 애
것이다. 뿐만 아니라, 관계형 데이터베이스가 제공하는 신뢰성, 확장성, 보안, 질의 최적화 등이 객체 기술이 도입되더라도 그대로 보장될 가능성이 가장 크다.
건물을 세울 때 그러하듯이 먼저 골조부터 단단히 세우는 작업은 매우 중요하다. 골조는 크고 무겁지만 다행히 종류는 그리 많지 않다. 그 대신 견고하게 세워지지 않으면 매우 부실한 건물이 만들어질 것은 자명한 일이다. 기본 논리적 데이터 모델링에서는 이러한 골조를 튼튼하게 세우는 일을 한다.
|
댓글