#title 복잡적응계와 데이터 모델 [[TableOfContents]] ==== 글을 보기 전에.. ==== 쌩뚱맞을지 모르겠으나 이 글은 [http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788983710857&orderClick=LAG 숨겨진 질서]라는 책을 보면서 문뜩 떠오른 것을 정리한 것이다. 이 글은 보는 사람에 따라서 다소 불쾌감을 느낄 수 있다. 데이터 모델링이 쉬운 작업이라는 언급때문일 것이다. 필자도 충분히 알고 있다. 데이터 모델링은 매우 어려운 작업이라는 것을.. 하지만 마지막에도 밝혔듯이 대도시가 변화에 적응하는 매커니즘과 같은 것에 비하면 데이터 모델링이 쉽다는 것이지 데이터 모델링 자체가 쉽다는 이야기는 아니다. ==== 데이터 모델링이 어려운 이유 ==== 흔히 데이터 모델링은 매우 어려운 작업이라고 한다. 필자는 어려운 이유를 여러 문서에 장황하게 설명했었지만 명확하지 않았다. 하지만 존 홀런드의 [http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788983710857&orderClick=LAG 숨겨진 질서]라는 책에서 나온 내용으로 명확히 알아내었다. 데이터 모델링이 어려운 이유를 한 문장으로 표현하면 다음과 같이 쓸 수 있을 것이다. '''''데이터 모델링이 어려운 이유는 개체간의 상호작용(관계)때문이다.''''' 이제 이유를 알았으므로 복잡함을 단순하게 풀어가는 과정을 살펴보자.. ==== 복잡적응계(Complex Adaptative System(CAS) ==== 존 홀런드는 대도시에 식품(의식주 중에 식)의 물량은 공급이 끊긴다면 길어야 1~2주 버틸만큼 밖에 안 되는데, 어떻게 사람들이 굶지 않고 대도시가 황폐해지지 않고 잘 돌아가지는를 여러 상호작용의 결과로 시간이 지남에 따라서 변화에 적응하는 것으로 설명한다. 대도시와 뉴런같은 너무나도 복잡한 것에 데이터 모델링을 비유하는 것이 타당한가? 어쩌면 타당할 수도 있다. 어쨌든 비디오샵 데이터 모델링을 하던, 빌링 데이터 모델링을 하던지 어쨌든 우리는 그 영역을 '주제영역'이라고 부른다. DB쟁이 입장에서 보면 '복잡적응계'는 '주제영역'으로 보여질 것이다. attachment:cas01.jpg ==== 유지보수 ==== 프로세스는 자주 변한다고 한다. 그래서 프로세스 중심의 개발방법은 유지보수 비용이 많이 든다고 많은 책에서 설명한다. 그렇다고 데이터는 변하지 않는냐? 아니다. 변한다. 프로세스건 데이터건 어쨌든 변화하는 요인은 내부가 아닌 외부요인에 의한 것이다. 가장 대표적인 외부요인으로 법이 바뀌거나 추가되는 것이다. 최근[* 2008년 1분기]의 경우는 '제한적 본인 인증제도'라는 것이 생겼다. 그래서 프로세스가 변했다. 각각의 상황에 따라서는 데이터 모델도 변화 당했을 것이다. 가장 중요한 사실은 고객은 항상 변한다는 것이다. 그러므로 기업의 목적인 '고객 창출/유지'는 프로세스와 데이터의 변화를 필연적으로 가져온다. 그래서 변화에 적응하기 위해서 유지보수를 한다. 그 변화에 적응하기 위해 A기업은 1억을 썼지만 B기업은 0.5억을 썼다면 B기업의 IT인프라가 훨씬 더 적응을 잘하는 또는 기술력이 좋은 것으로 판단하면 된다. 종합적으로 다음의 그림으로 표현할 수 있다. attachment:cas02.jpg ==== 복잡한 것을 단순하게.. ==== 복잡한 것을 단순하게 만드는 것은 쉽지 않다. 필자는 복잡함을 단순하게 만드는 능력은 없다. 하지만 쪼갤 수는 있다. 아주 잘게 쪼개면 복잡하던 것도 매우 단순해 진다. 즉, '분할정복'의 방법이야말로 복잡한 것을 단순하게 만드는 최선의 방법이다. 개체는 복잡적응계에서 '행위자(agent)'로 일치시킬 수 있다. 복잡적응계는 행위자와 행위자 간의 상호작용에 의해 만들어진다. 그러므로 복잡적응계를 알려면 우선 행위자가 뭔지 알아야 한다. 그런 후 행위자 간의 '상호작용'을 알 수 있다면 나머지는 정리만 하면 된다. 데이터 모델의 세계에서 상호작용은 '관계'로 보면 된다. 복잡적응계와는 달리 데이터 모델의 세계에서의 상호작용은 비교적 단순하므로 데이터 모델링이라는 용어만으로 쫄 필요는 없다. 정리하자만 데이터 모델링은 다음과 같은 순서로 하면 된다. 1. 개체를 정의한다. 2. 개체간이 관계를 정의한다. 3. 보기 좋게 정리한다. 물론 각각의 정규화라든지 속성의 정의등 세부적인 과정은 좀 더 있다. 하지만 개체, 관계의 정의를 빼면 나머지는 책을 보면서 익힐 수 있는 단순한 스킬들의 집합으로 볼 수 있다. 유전 알고리즘이나 뉴런의 메커니즘, 대도시가 적응하는 매커니즘 등을 연구하는 것에 비하면 데이터 모델링은 새발의 피 아닌가?