티스토리 뷰

상주배치란?

상주 배치는 일반 배치의 일회성 특성에 스케줄 관리 기능을 포함하여 설계된 배치이다.
일반 배치는 일회성 프로그램으로서 "수행 → 실행 → 종료"의 과정을 거치는 반면
상주 배치는 "수행  → 
{실행 반복} → 종료"의 과정으로 수행한다. 다시 말해 상주 배치는 특정 주기와 간격으로 배치를  수행할
수 있도록 설계된 배치이다. 이러한 상주 배치의 요건을 구현하기 위해서 Tmax의 UCS 서버의  기능을 이용하고 있다.
(ProFrame 배치 프로그래밍 안내서 발췌)

  1. 상주배치모듈 작성전에 상주배치서버(UCS서버)를 만들어야 한다.
    UCS서버 작성 방법은 두가지가 있는데 스튜디오에서 만드는 방법과 인프라 운영자가 기존 UCS 서버를 copy해서 만드는 방법이 있다.
    대부분의 사이트에서는 시스템에 치명적 영향을 줄수있는 TCS 서버, 일반 Batch 서버, UCS 서버를 개발자가 스튜디오로 직접 생성 하는것을 허용하지 않는다.
    또한 TCS,UCS 의 경우 TMAX 서버의 설정 변경, 설정파일 컴파일, 서비스테이블 생성, TMAX 재기동 등의 작업이 병행되기 때문에
    개발자가 권한을 가지지 않는곳이 대부분이다.
    보통은 개발자가 운영자에게 필요한 서버 생성을 요청하고 운영자가 만들어주는 방식을 취한다.
    운영자는 스튜디오로 서버 생성을 하지 않고 프로젝트 진행하며 만든 서버 생성 shell 을 이용하거나 
    기존 UCS 서버 소스를 copy하여 이름을 변경하는 식으로 신규 서버를 생성한다.
    서버 생성 방식은 각 사이트 마다 다르기 때문에 여기서는 스튜디오로 직접 생성하는 방법에 대해 설명한다.

  2. 참고용으로 직접 작성한 TCS, UCS 서버 생성 shell 링크를 첨부한다.
    해당 shell 을 사용하려면 기존 TCS, UCS 서버소스와 make 파일, compile shell이 template 형태로 존재해야 하는데 이부분은 제품 보안상 블로그에 올려놓기는 힘들다.
    그냥 이런식으로 운영자가 서버를 복사해서 생성하겠구나 하고 참고용으로 보면 될것 같다.


  3. 스튜디오 프로프레임 네비게이터에서 마우스 오른쪽버튼 클릭후 [New] - [Server] 메뉴 클릭. 다음과 같이 작성한다.
    물리명은 추후에 상주배치모듈 작성시 배치코드로 사용된다.
    (상주배치서버와 상주배치모듈은 1:1 로 갯수를 가져가며
    서로 같은 물리명을 사용하되 상주배치모듈은 물리명을 소문자, 상주배치서버는 물리명을 대문자로 설정하는것이 좋다.
    서로 물리명이 아예 달라도 상관없지만 배치코드와 서버이름으로 모듈과 서버가 맵핑되기 때문에
    물리명이 다르면 어느 모듈이 어느 서버에 매칭되는지 일일히 특성창을 확인하지 않는이상 확인이 힘들다.)

  4. 서버소스를 생성하고 컴파일 하려하면 다음과 같은 오류를 만나게 된다.
    cp: cannot stat `/home/pfm5c/proframe5.0/package/tmax/svct/UFW20001_svctab.c': 그런 파일이나 디렉터리가 없습니다
    make: *** [UFW20001_svctab.o] 오류 1
    UCS 서버는 TMAX 미들웨어 위에서 구동되는 소스로, 컴파일을 위해서는 TMAX 서비스테이블에 등록을 해줘야한다.

  5. $TMAXDIR/config/tmconfig.m 파일의 Server 설정부분에 다음과 같이 UCS 서버 설정을 추가해준다.


    tmconfig.m 수정후 다음의 명령어로 컴파일, 서비스 테이블 생성을 해준다.

    cfl -i tmconfig.m
    gst



    서비스 테이블 생성후 서버소스를 컴파일하면 정상적으로 컴파일이 된다.
    서버 소스와 컴파일된 바이너리는 $PRJROOT/compile/{리소스그룹}/src/batchServer/ucs 폴더 경로에 생성된다.
    생성된 바이너리를 $TMAXDIR/appbin 폴더에 복사하여준다. 

    ex>
    cd $PRJROOT/compile/fw2/src/batchServer/ucs
    cp UFW20001 $TMAXDIR/appbin
    (만약 신규서버 생성이 아니고 서버를 재빌드한경우는 해당 서버가 TMAX 위에서 기동중일때 cp 명령어 사용이 불가능하다.
    tmdown -S 해당서버이름 명령어를 통해서 서버를 내리고 cp 명령어를 사용해야 한다.)



  6. 상주배치서버 생성 후에는 상주배치모듈을 만든다.
    먼저 배치모듈의 입출력 구조체를 만든다.
    배치모듈에 쓸 입출력 구조체의 메세지는 fixed length 방식이 아닌 Delimiter 방식으로 만든다. delimiter는 default 설정인 ; 를 그대로 쓰는것을 권장.


  7. 네비게이터에서 우측마우스 클릭 - [New] - [EMB Batch Design] 으로 배치 모듈을 생성한다.
    배치코드는 물리명을 대문자로 치환하여 쓴다. 상주배치의 배치코드는 상주배치서버명과 동일해야 한다. 
            

  1. 서비스모듈을 만들듯이 EMB에서 배치 모듈을 만들어준다.
        

  1. 특성창에서 Batch kind를 U: UCS type으로 변경하고 Schdl sec 을 상주배치 실행주기 시간에 맞게 변경한다. 예제에서는 5초마다 실행하는것으로 설정이다. Args ctnt 는 상주배치 입력구조체에 셋팅되는 인자값을 넣는 곳이다.
       



  1. 배치모듈을 컴파일&dlupdate 한다.

  1. 위에서 변경한 tmconfig.m 를 반영하기 위해 TMAX를 재기동한다.

  1. echo st -v | tmadmin -l 명령어로 UCS서버의 RDY 상태를 확인한다.


댓글