티스토리 뷰

프로프레임에서는 구조체를 컴파일하는 독특한 작업이 있다. C 개발자라면 구조체는 structure 이고 structure 를 어떻게 , 왜 컴파일해야 하는지 의아해 한다.  이것은 당연한 질문이고 궁금해해야 하는 것이 맞다.

프로프레임에서는 스튜디오로 구조체를 하나 작성하게 되면 이 구조체에 따는 전문(메시지)가 같이 생성된다. 이 때 생성된 구조체 및 전문(메시지)의 헤더 파일은 $PMAPINCDIR 디렉토리에 있다.

[cbsdev]cd $PMAPINCDIR
[cbsdev]ls -al  *mfeecal_trsc_ptcl_reg_in*
-rw-rw-r--    1 pfm    tmax   17257  9월  1일 18:24 pfmMappermfeecal_trsc_ptcl_reg_in_sub01MsgFld.h
-rw-rw-r--    1 pfm    tmax   13389  9월  1일 18:24 pfmMappermfeecal_trsc_ptcl_reg_in_sub01.h
-rw-rw-rw-   1 pfm    tmax   3854 10월  2일 11:09 pfmMappermfeecal_trsc_ptcl_reg_inMsgFld.h
-rw-rw-rw-   1 pfm    tmax   3838 10월  2일 11:09 pfmMappermfeecal_trsc_ptcl_reg_in.h
[cbssvd01]

마찬가지로 $PMAPSRCDIR 에 전문(메시지)의 소스가 생성된다. 물론 구조체의 소스는 없다. 구조체명뒤에 ~MsgFld.c 라고 생성된 것을 볼 수 있다. 이 뒤에 붙는 MsgFld 라는 것은 해당 프로젝트에서 명명규칙으로 정하여 사용할 수 있으며 Default 값이 이 MsgFld 인 것이다.

[cbsdev]cd $PMAPSRCDIR
[cbsdev]ls -al  *mfeecal_trsc_ptcl_reg_in*.c
-rw-rw-r--    1 pfm     tmax      60421  9월  1일 18:24 pfmMappermfeecal_trsc_ptcl_reg_in_sub01MsgFld.c
-rw-rw-r--    1 pfm     tmax      10214  9월  1일 18:24 pfmMappermfeecal_trsc_ptcl_reg_in_sub01.c
-rw-rw-rw-   1 pfm     tmax     11874 10월  2일 11:09 pfmMappermfeecal_trsc_ptcl_reg_inMsgFld.c
-rw-rw-rw-   1 pfm     tmax      5981 10월  2일 11:09 pfmMappermfeecal_trsc_ptcl_reg_in.c
[cbsdev]
[cbsdev]ls -al  *mfeecal_trsc_ptcl_reg_in*.so
-rwxrwxr-x    1 pfm    tmax      90713  7월  8일 14:43 libpfmMappermfeecal_trsc_ptcl_reg_in_sub01.so
-rwxrwxr-x    1 pfm    tmax      97422  8월 12일 21:26 libpfmMappermfeecal_trsc_ptcl_reg_in.so
[cbsdev]

사실 우리가 스튜디오에서 구조체를 컴파일 하는 경우에 구조체를 컴파일 하는 것이 아니라 이 전문(메시지) 소스를 컴파일 하는 행위인 것이다.

그렇다면 공통모듈(비즈모듈) 같은 것은 전문(메시지)를 사용하지 않는데 왜 컴파일을 해야 하는 것일까? 사실 서비스모듈 같은 경우야 MCA 와 같은 client 와 전문을 주고 받기 때문에 전문을 해석/변환하는 이 ~MsgFld.c 를 컴파일해 주는 것은 필수적이지만 비즈모듈 같은 경우는 해줄 필요가 없다. 특히나 DBIO 의 입출력 구조체는 더욱 그러하다.

그러나 프레임웍에서 제공하는 단위테스트 기능을 이용하여 가라 전문을 날려서 비즈모듈을 테스트해 보고자 한다면 어쩔 수 없이 비즈모듈의 전문(메시지)를 만들어야 하고 이 메시지전문을 컴파일도 해 놔야 할 것이다.

나 같은 경우 비즈모듈의 테스트를 스튜디오에서 제공하는 단위테스트를 이용하지 않고  비즈모듈을 호출하는 가라서비스를 하나 만들어 놓고 이용한다. 이 방법이 더 현실에 가까운 환경하에서 비즈모듈을 실행시켜 보고 결과를 지켜볼 수 있는 확실한 테스트 방법이기 때문이다.

프로프레임 스튜디오에서 구조체를 작성한 다음 해당 구조체의 전문메시지를 생성하는 방법은 아래그림과 같이  Message 생성 탭에서 해당 메시지를 체크하면 된다. FixedLength, delimiter, XML 등의 방법이 제공되고 있다.
예를 들어 FixedLength 를 체크했으면 $PMAPSRCDIR 과 $PMAPINCDIR 에 해당 전문메시지의 헤더와 소스가 생성이 되었을 것이다.

편집: 부분의 콤보박스를 선택하면 해당 전문메시지를 편집할 수 있는 팝업화면이 아래와 같이 뜨게 된다.

엄연히 구조체와 전문메시지가 따로 존재함을 이해했다면 왜 구조체를 컴파일 하는 지 이해했을 것이다. 개발자들이 쉽게 접근할 수 있도록 그냥 구조체 컴파일 한다고 가이드하고 있지만 실제적으로는 구조체를 컴파일 하는 것이 아니라 구조체와 짝으로 별도 존재하는 전문메시지의 소스를 컴파일 하는 것이다.

정리하면 메시지를 생성하고 컴파일이 필요한 경우
1. 서비스모듈의 구조체 ( 단말과 전문을 주고 받는 경우 )
2. 전문변환시 사용하는 구조체( EAI 등과 같이 타 시스템으로 연계를 위하여 ProMapper API 를 이용하여 변환 )

<2008년10월2일>





댓글
  • 프로필사진 박재홍 구조체를 컴파일 하는 목적은 따로 있습니다.
    스튜디오상의 구조체 정보를 가져오기 위함 입니다.

    위 내용대로 해더만 존재 한다면 스튜디오상에서 구조체 정보를 가져오기란 여간 힘든일 일 것입니다.

    메세지의 내용은 맞지만 구조체를 컴파일 하는것이 아니라는 말은 좀 의미가 틀립니다.

    그럼 좋은글 감사하게 받겠습니다.
    2008.10.02 12:34 신고
  • 프로필사진 한주훈 구조체만 생성하게 한다면 .h 파일만이 생성 됩니다. 허나 Message 까지 같이 생성하게 된다면 Message 에 대한 .h 파일 뿐만 아니라 Marsharl/Unmarshal 을 할 수 있는 3개의 소스파일도 함께 생성이 됩니다. 이 3개의 소스 파일을 컴파일 하면 하나의 .so 파일이 생성이 되죠.
    실제 프로그램에서는 이 .so 안에 존재하는 함수들을 호출하여 전문 변환이 이루어집니다.

    최성환쒸~~ 엉아~~ 잘 지내시나요??? ㅋㅋㅋ
    2008.12.02 23:18 신고
댓글쓰기 폼