#title 프로세스 모델링과 CRUD 매트릭스 [[TableOfContents]] ==== 기능, 프로세스, 프로시저 ==== 어떤 조직이든지 업무활동이 존재한다. 이러한 업무활동은 계층구조를 가지고 있다. 즉, 어떠한 하나의 업무 기능이 여러 개의 또 다른 하위 기능으로 나뉘어 지고, 마침내는 하나의 단위 프로세스로 나뉘게 된다. attachment:process_modeling01.jpg ==== 프로세스 모델링의 법칙 ==== 프로세스 모델링의 대표적인 것이 DFD(Data Flow Diagram)다. 이 프로세스 모델링에는 6가지 작성 규칙이 있는데, 꼭 DFD만에 적용될 수 있는 것은 아니다. 어차피 DFD의 중심이 프로세스에 있기 때문에 프로세스의 입출력에 관련된 법칙을 적용할 수 있다. 프로세스는 다음과 같이 입력이 반드시 있고 그에 따른 출력이 반드시 있다. attachment:process_modeling02.jpg ==== 데이터 보존의 법칙(Conservation Rule) ==== 데이터 보존의 법칙은 입력된 데이터로부터 어떤 처리과정을 거쳐도 그 데이터의 본질은 그대로 남아 있어야 한다는 뜻이다. 다음의 그림을 살펴보면 더욱 명확해지는 법칙이다. attachment:process_modeling03.jpg 그림에서와 같이 정수기에 입력으로 “물”을 집어 넣었으면 당연히 “정수된 물” 이 나와야 한다. 그러나 엉뚱하게도 “불” 이 나온다면 이것은 데이터가 없어진 것이 되는 것이다. 즉, 존재하지도 않는 데이터가 새롭게 생성된 것이다. ==== 최소 절약(Parsimony)의 법칙 ==== 최소 절약의 법칙은 하나의 프로세스가 출력을 내는데 있어서 필요한 최소의 데이터만을 입력 받아야 한다는 것이다. 이것은 당연하다. 불필요한 데이터와 필요한 데이터를 함께 받아서 처리하여 ‘A’라는 출력을 내는 것이나, 꼭 필요한 데이터만을 입력 받아 ‘A’라는 출력을 내는 것을 생각해보면 당연한 것이다. 제가 본 거의 대부분의 책에서는 다음과 같은 예로서 최소 절약의 법칙을 설명하고 있다. “실급여액 계산” 프로세스가 필요로 하는 데이터는 총급여액 뿐이지 근무시간은 포함되지 않는다는 것이다. attachment:process_modeling04.jpg ==== 지속성(Persistence) 의 법칙 ==== 지속성의 법칙은 프로세스가 입력과 출력의 정의가 바뀌지 않는 이상은 입력이 들어오면 항상 수행할 준비가 되어 있다는 뜻이다. 여러분이 메모장을 열었을 당시 메모장에는 커서가 깜빡이고 있을 것이다. 이것은 메모장을 사용하기 위해서 메모장을 실행시킨 사람이 키보드로부터 글자를 입력 받는 것을 기다리는 것을 말한다. 지속성의 법칙도 이와 같음 맥락이다. 예를 들면 주문서를 통해 상품에 대해서 몇 개의 주문을 했는지 입력을 하면 부가가치세를 포함한 가격이 출력되는 프로세스를 생각해 보자. 프로세스의 입력으로 주문수량을 입력하면 해당 상품의 단가를 읽어와서 부가가치세를 포함한 가격을 출력하게 된다. attachment:process_modeling05.jpg ==== CRUD 매트릭스 ==== CRUD 상관 모델링은 데이터 모델과 프로세스 모델과의 상관관계를 정의함으로써 정확한 데이터 모델이 도출되었는가를 검증하는 것이다. 상식적으로 생각해보아도 쓰지 않는 데이터가 저장되어 있다는 것은 잘못된 데이터 모델링을 하는 것이다. CRUD의 의미는 Create, Update, Read, Delete를 의미한다. SQL을 다루어 보셨으면 알겠지만 응용프로그램에서 쓰는 SQL의 키워드는 거의 대부분이 SELECT, UPDATE, INSERT, DELETE 다. SELECT는 “R”에 해당되고, UPDATE는 당연히 “U”에 해당된다. INSERT는 “C”에 해당되고, DELETE는 “D”에 해당된다. 메트릭스는 두개의 집합이 다:다의 관계일 때 만들어 진다. 즉, 프로세스와 데이터의 관계는 다음 그림과 같이 다:다의 관계를 가지고 있다. attachment:crud01.jpg 그림에서 보듯이 각각의 데이터는 반드시 하나 이상의 프로세스에 사용되고, 각각의 프로세스는 반드시 하나 이상의 데이터를 사용한다. 즉, 프로세스와 데이터는 어떤 상관관계를 가지고 현실을 표현하는 것이다. 각각의 관련된 데이터와 프로세스의 집합을 “업무영역”이라고 한다. 이러한 업무 영역 분석에서 가장 주된 일은 프로세스 모델링과 데이터 모델링이다. 만약 업무영역 분석이 제대로 되었다면 당연히 프로세스 모델링과 데이터 모델링이 잘 되었다고 할 수 있다. 그럼 잘 되었다는 기준은 어떻게 마련해야 할까? 바로 앞에서 이야기한 CURD 메트릭스를 작성해보면 알 수 있다. 이제 하나의 업무영역을 두고서 CRUD 매트릭스를 작성해보도록 하겠다. attachment:crud02.jpg 다음은 도서관리에 대한 기능분해도와 CRUD 매트릭다. attachment:crud03.jpg attachment:crud04.jpg 이제 데이터 모델과 프로세스 모델의 상호 보완적인 관계를 나타낸 CRUD 매트릭스를 가지고 두 모델의 어디가 잘못되었는가를 판단할 수 있을까? 이런 식으로 질문을 한다면 분명히 잘못된 곳을 찾을 수 있으리라는 생각을 가질 것이다. 그러나 CRUD 매트릭스는 잘못된 곳을 정확히 지적해주지는 못한다. 이것은 인간이 판단할 일이다. 단지 CRUD 매트릭스는 데이터 모델과 프로세스 모델 중 어느 한 부분이 틀렸다는 것은 단서를 제공해줄 뿐이다. 만약 위의 CRUD 매트릭스가 다음과 같은 CRUD 매트릭스였다는 가정을 해보자. attachment:crud05.jpg 이 CURD 매트릭스는 회원정보 입력, 수정, 삭제가 빠진 것이다. 즉, 컴동회원의 입력이 없다는 뜻이 된다. 입력한 데이터가 없는데 그 데이터를 읽는다는 것은 하나의 프로세스가 빠졌다는 것이거나 아니면 또 다른 엔티티가 존재할 수 있음을 암시하는 것이다. 만약 컴동 회원 가입을 학생정보를 입력할 때 받는다면 위의 CRUD 매트릭스에 엔티티가 빠졌음을 의미하고, 그렇지 않을 경우는 필요한 프로세스가 빠졌다는 것을 의미한다. 데이터를 읽는 것과 데이터를 삽입하는 것은 밀접한 관련이 있다. 당연히 앞에서 설명한 것처럼 입력한 데이터가 있어야 읽을 데이터도 있는 것이고, 입력한 데이터를 읽지 않는다면 이 데이터를 쓸모가 없는 데이터인 것이다. 또한 업무에 필요한 데이터가 있다면 Create, Update, Read, Delete중에 하나의 표시는 있어야 한다. 만약 이런 엔티티 집합이 있다면 이것은 업무에 필요 없는 데이터가 있다는 뜻이다. 즉, 데이터 모델을 다시 검토해 봐야 한다. 프로세스 측면에서 살펴본다면 당연히 하나 이상의 엔티티 집합에 대해서 C, U, R, D 중 하나가 적어도 한번은 표시되어야 업무기능을 나타내는 프로세스라고 볼 수 있다. 만약 표시된 것이 없다면 프로세스가 업무기능을 제대로 표현하고 있는 것인지, 아니면 프로세스에 관련된 엔티티 집합이 있는 것인지를 검토해 봐야 하는 것이다. 이를 정리하자면 다음과 같은 4가지 의문 사항을 만들 수 있다. ==== 데이터 모델과 프로세스 모델이 잘못되었다는 단서 찾기 ==== * Create가 존재하지 않는 엔티티 집합이 있는가? * Read가 존재하지 않는 엔티티 집합이 있는가? * 매트릭스에 C, R, U, D 가 하나도 표시되지 않은 엔티티 집합이 있는가? * 매트릭스에 C, R, U, D 가 하나도 표시되지 않은 프로세스가 있는가? CURD 메트릭스는 물리적 데이터 설계에도 많은 도움이 된다. ---- 퍼갈께요~ -- 나약함 2015-04-05 22:42:46 ---- 존나 이해 잘 된다 -- 코딩고수되고퐝 2019-07-08 22:44:14 ---- 거의 20년 전에 싸질러논 글에 씨발 존나 극찬이다. 고맙다. -- 이재학 2019-07-10 09:27:32 ---- 20년 전 이라니 대단쓰. 찬사와 답사의 티카타카가 아주 아름다움 -- ㅇㅈㅎ 2019-07-11 09:54:00