티스토리 뷰

최근에  프로프레임 스튜디오 사용자들이 모듈의 입출력구조체의 멤버 항목의 추가 및 삭제할 경우에도 모듈정보 재구성을 하는 것을 보았다. 그러나 사실은 이런 경우에 하는 모듈 정보 재구성은 불필요한 작업이다.

모듈정보 재구성을 해야 하는 경우

1. ARRARY처리하는 DBIO 인 경우 ARRAY 의 개수가 변경된 경우
    또는 lock query 를 사용하였다가 해제한 (반대의 경우도 마찬가지) 경우
2. 해당모듈의 프로그램의 논리명이 변경된 경우
3. 해당모듈의 프로그램의 입출력 구조체가 변경된 경우
      ( 구조체의 멤버변수가 추가/삭제된 변경이 아니라 구조체 자체가 삭제된 후 새로 만들었거나 
        다른 이름의 구조체로 재지정한 경우를 말함 )

이것은 정확히 메타정보(EMB형태의 flow를 XML형태로 저장해 놓은 정보로서 소스생성시 이 정보를 분석하여 프로그램을 생성하게 된다)를 보면 좀 더 명확히 알 수 있는데.


고객기본정보조회 모듈 연결부분의 XML 정보를 보면 다음과 같다.

                <ns1:module libraryPath="" logicalName="고객기본정보조회 PGM" module_type="BIZ_MODULE" physicalName="mcusbiz_cust_base_inq" resourceId="0bf2b7ad6f3c0116566656661f99d62b" return_type="long">
                    <ns6:input_structure logicalName="고객기본정보조회 PGM_in" physicalName="mcusbiz_cust_base_inq_in" resouceId="0bf2b6056f3c0116483848382346e807" resourcePath="" xmlns:ns6="http://www.tmaxsoft.co.kr/proframe/function"/>
                    <ns7:output_structure logicalName="고객기본정보조회 PGM_out" physicalName="mcusbiz_cust_base_inq_out" resouceId="0bf2b6d06f3c0116520a520a9b0e73bf" resourcePath="" xmlns:ns7="http://www.tmaxsoft.co.kr/proframe/function"/>
                </ns1:module>

여기서 볼 수 있듯이 EMB 그림의 xml정보에는 해당 노드( 고객기본정보조회 ) 의 입력/출력 구조체의 이름과 리소스id가 지정되어 있는 것을 볼 수 있다.  그러나 리소스id 정보만 있지 그 구조체의 개별 멤버 변수는 기술되어 있지 않다.
모듈정보 재구성을 하게 되면 기껏해야 해당 리소스id로 해당모듈의 리소스정보를 조회하여 논리명 정도를 바꿔 주는 것 밖에 하지 않으니 굳이 할 필요가 없다는 것이다.

반면 array 처리되는 dbio 에서는 상황이 다르다.


예를들어 환가료기한부가산율조회 dbio의 경우 한번에 10건씩 fetch 해 오는 persist 이다.  이것의 XML 정보를 보면 아래와 같다. maxCount 는 10 으로 확 박혀 있다.

<ns1:createdContextVariables>
                    <ns1:name>inCtxAFEE_PCSE_DTLS_PF0002</ns1:name>
                    <ns1:name>outCtxAFEE_PCSE_DTLS_PF0002Ary</ns1:name>
                    <ns1:name>outCtxAFEE_PCSE_DTLS_PF0002Bdl</ns1:name>
                </ns1:createdContextVariables>
                <ns1:dbio lock="false" logicalName="환가료기한부가산율조회" module_type="PERSIST" physicalName="AFEE_PCSE_DTLS_PF0002" resourceId="8ed55fca6f3c013d1c2e1c2efaf31d92" resourcePath="">
                    <ns1:execType>FETCH</ns1:execType>
                    <ns1:inputStructure logicalName="AFEE_PCSE_DTLS_PF0002In" physicalName="AFEE_PCSE_DTLS_PF0002In" resouceId="8ed55e646f3c013d3f7a3f7a0f96137f" resourcePath=""/>
                    <ns1:outputStructure logicalName="AFEE_PCSE_DTLS_PF0002Out" physicalName="AFEE_PCSE_DTLS_PF0002Out" resouceId="8ed55f296f3c013d45644564d0fa620a" resourcePath=""/>
                    <ns1:maxCount>10</ns1:maxCount>
                    <ns1:arrayOutputStructure logicalName="AFEE_PCSE_DTLS_PF0002BundleOut" physicalName="AFEE_PCSE_DTLS_PF0002BundleOut" resouceId="8ed55f7e6f3c013d48c448c4659273b9" resourcePath=""/>
                    <ns1:waitTime>0</ns1:waitTime>
                </ns1:dbio>

DBIO의 경우는 XML속에 저장되어 있는 정보(property)의 량이 더 많다. 예를들어 maxCount 의 경우 출력구조체의 배열개수를 의미하는데  이것은 모듈정보재구성을 할 때 DBIO의 리소스정보를 읽어와서 변경되게 된다. 

이 값은 DBIO 편집창을 열어서 Array크기를 변경하는 순간 프로프레임 스튜디오가  이 DBIO모듈을 끌어다 쓰는 모든 프로그램 뒤져서 바꿀 수는 없는 것이고 바꿔서도 안된다.  


물론 이런 array 페치의 경우라하더라도 maxCount 를 10 과 같이 숫자로 지정하지 않고 변수로 지정해 놓았을 경우에는 모듈정보재구성을 할 필요가 없어지는 것이겠지만, 스튜디오가 그 정도 기능까지 제공하기에는 상당히 기술적으로 난해하므로 앞으로도 지원되지 않을 전망이다.  결국 maxCount 는 변수로 처리할 수 없기 때문에 배열사이즈가 변경되면 불가불 모듈정보재구성을 해줘야 한다. 

반면에 특성(property)창에서 maxCount는 바꿀 수 없으나 현재 Count 값은 변수로 입력해 놓을 수 있다. Count값은 한번 fetch 할 때 가져오는 건수를 의미하며 보통의 경우 maxCount 와 동일한 값을 사용하고 있으므로 그 차이점을 구분하지 못 하는 개발자가 있으나 maxCount(배열의 총개수) 이내의 수 만큼씩 한번에 처리할 수 있는 것이다.





댓글
댓글쓰기 폼