POD 배치

본 장에서는 POD 배치의 개념과 아키텍처의 특성을 설명하고 POD 배치를 생성하는 방법에 대해 설명한다. 또한 생성된 POD 배치를 업무에 적용하기 위해 필요한 테스트 및 디버깅 과정도 포함하여 설명한다.

1. 개요

POD 배치는 일반 배치에서 온라인 서비스와 연동할 때 발생하는 데이터베이스 트랜잭션의 정합성 문제를 해결하기 위해 Tmax의 POD 서버를 이용하여 설계된 배치이다. 항상 프로세스가 상주하는 TCS(Tmax Control Server) 온라인 서비스와는 다르게 서비스 요청이 들어온 경우에만 프로세스가 생성되며 배치 서비스를 수행한 후에는 프로세스가 종료된다.

figure3 1
일반 배치 트랜잭션 문제

일반 배치의 데이터베이스 트랜잭션의 정합성 문제는 일반 배치에서 온라인 서비스와 연동할 경우 TP-Monitor가 제공하는 XA 트랜잭션을 연결할 수 없는 원인으로부터 시작된다. 즉, 온라인 서비스의 작업된 데이터베이스 결과와 배치 내부에서 작업한 데이터베이스 결과가 "1-트랜잭션"으로 처리할 수 없는 이유로 인해 정합성 문제가 발생한다.

기본 구조

다음은 POD 배치 아키텍처의 특징과 구성요소에 대하여 설명한다.

figure3 2
POD 배치 아키텍처 구조
  • TP Client

    TP 서비스를 수행하기 위한 Tmax 클라이언트 파일이다.

  • POD 배치 서버

    Tmax의 서버로서 데이터베이스 접속, CommBuff, 로그 그리고 Global 변수 등에 대한 초기화 로직을 수행한다.

    • Flow 처리를 이용하여 커스터마이즈 영역 제공

POD 배치 아키텍처의 구성요소는 기본 구조에 기술된 일반 배치 아키텍처의 일부 내용과 동일하다. 본 절에서는 일반 배치 아키텍처와 동일한 부분을 제외한 나머지를 설명한다.

2. POD 배치 생성

POD 배치 생성은 배치 생성 절차에서 언급했듯이 크게 3단계로 나누어 진행된다. 즉, POD 배치 서버 작성, POD 배치 모듈 작성 및 POD 배치 생성 확인단계를 거쳐야 비로소 POD 배치를 생성할 수 있다.

다음은 POD 배치를 생성하는 세부 절차이다.

  1. POD 배치 서버 작성

    1. POD 배치 서버 환경설정

      만약 ProFrame이 기본적으로 제공하는 POD 배치 서버의 환경설정을 그대로 사용하는 경우 이 단계는 생략할 수 있다.

    2. POD 배치 서버 생성

  2. POD 배치 모듈 작성

    1. POD 배치 모듈 생성

  3. POD 배치 생성 확인

    1. POD 배치 모듈 테스트

    2. 디버깅

      작성된 POD 배치 모듈에 오류가 발생된 경우 오류가 제거될 때까지 POD 배치 모듈을 수정하는 과정을 반복한다.

다음 절에서는 위와 같은 절차에 따라 POD 배치를 생성하는 방법에 대해 설명한다.

2.1. POD 배치 서버 작성

POD 배치 서버 환경설정

본 절에서는 일반 배치 서버 작성에서 언급한 WebAdmin의 접속과정을 일부 생략하고 POD 배치 서버와 관련된 환경설정 정보를 확인하고 설정하는 절차만을 설명한다.

WebAdmin에 대한 상세한 내용은 ProFrame 관리자 안내서를 참고한다.

다음은 WebAdmin에서 POD 배치 서버와 관련된 환경설정 정보를 확인하고 설정하는 절차이다.

  1. WebAdmin 화면에서 [환경설정] > [기본환경설정] > [환경관리] > [기본환경관리] 메뉴를 선택한다.

  2. 기본환경관리 화면이 나타나면 '환경구성그룹'에서 'COMPILE_CONFIG’를 선택한다. 이 환경설정은 실제 업무 처리에 맞추어 커스터마이즈할 수 있다.

    figure3 2 1
    POD 배치 서버 환경설정

    다음은 위 그림의 조회 결과 항목 중에서 POD 배치 모듈과 관련된 환경설정에 대한 설명이다.

    항목 설명

    POD_BATCH_MODULE_COMPILE_BASE

    POD 배치 서버가 컴파일되는 디렉터리 경로를 설정한다.

    (예: /compile/${resourceGroup}/src/batchServer/pod/)

    POD_BATCH_SERVER_HOME

    POD 배치 서버가 생성되는 홈 디렉터리 경로를 설정한다.

    (예: /compile/${resourceGroup}/src/batchServer/pod/)

    POD_BATCH_SERVER_LIB_HOME

    POD 배치 서버의 라이브러리 경로를 설정한다.

    (예: /release)

    POD_BATCH_SERVER_MAKE_FILE

    POD 배치 서버를 Make하는 명령어를 설정한다.

    (예: make -f ${sourceFile}.mk

    POD_BATCH_SERVER_MAKE_FILE_HOME

    POD 배치 서버의 Make 파일이 생성되는 홈 디렉터리 경로를 설정한다.

    (예: /compile/${resourceGroup}/src/batchServer/pod/)

    POD_BATCH_SERVER_SHELL_FILE

    POD 배치 서버의 Shell 파일명을 설정한다.

    (예: ${sourceFile}.sh)

    POD_BATCH_SERVER_SHELL_FILE_HOME

    POD 배치 서버의 Shell 파일이 생성되는 홈 디렉터리 경로를 설정한다.

    (예: /compile/${resourceGroup}/src/batchServer/pod/)

    POD_BATCH_SERVER_SOURCE_HOME

    POD 배치 서버의 소스 파일이 생성되는 홈 디렉터리 경로를 설정한다.

    (예: /compile/${resourceGroup}/src/batchServer/pod/)

    POD_BATCH_SERVER_TEMPLATE_BASE

    POD 배치 서버의 템플릿 서버 소스 파일이 생성되는 홈 디렉터리 경로를 설정한다.

    (예: /compile/${resourceGroup}/src/batchServer/pod/)

  3. 위와 같이 조회된 결과 중에서 각 환경설정 항목의 ‘설정내용’ 값을 확인하고 변경할 값으로 수정한다.

    1. 변경할 환경설정 항목을 선택한다.

    2. 선택한 환경설정 정보를 확인한다.

    3. 변경할 환경설정의 정보('사용유무', '설정내용', '부가설명')를 수정한 후 [저장] 버튼을 클릭한다.

    4. 수정된 환경설정 항목을 다시 조회한 후 변경된 내용을 확인한다.

POD 배치 서버 생성

다음은 POD 배치 서버를 생성하는 절차에 대한 예이다.

  1. 작업영역 내비게이터에서 오른쪽 마우스 버튼을 클릭한 후 [New] > [Server] 메뉴를 선택하면 다음과 같이 새로운 서버 프로젝트 대화상자가 나타난다.

    figure3 3
    POD 배치 서버 – 새로운 서버 프로젝트 대화상자

    이 대화상자에서 모든 항목은 POD 배치 서버를 생성하는데 필수사항이다.

    항목 설명

    데이터베이스 유형

    XA MODE 또는 NON XA MODE를 선택한다.

    • XA MODE : TP 서비스의 XA 연동할 때 선택한다. pfmTxOpen() 함수로 데이터베이스를 연결한다.

    • NON XA MODE : 일반적인 데이터베이스 연결 방식이다.

    서버 유형

    POD 배치 서버를 생성하기 위해서는 “POD_BATCH”을 선택해야 한다.

    서비스 명

    TP 서비스의 이름을 입력한다. '서비스 명''서버 타입'을 POD_BATCH로 선택한 경우에만 나타난다.

    본 절에서 설명하지 않는 항목은 일반 배치 서버 작성의 일반 배치 서버 생성 부분을 참고한다.

  2. 위와 같은 필수 항목을 모두 설정한 후 [완료] 버튼을 클릭하면, POD 배치 서버를 생성한 결과물인 총 4개의 파일이 다음과 같이 나타난다.

    소스파일명 설명

    Server Source

    POD 배치 서버의 소스 파일이다.

    Make File

    POD 배치 서버의 Make 파일이다.

    Shell File

    POD 배치를 실행하기 위한 Shell 파일이다.

    POD 배치 수행 스크립트가 필요한 경우에는 이 파일을 수정한다.

    Service

    Tmax 서버에 등록할 서비스 파일이다.

    figure3 4
    POD 배치 서버 – 소스 파일 생성
  3. POD 배치 서버를 컴파일하기 앞서 Tmax 서버의 환경설정 파일에 다음과 같은 사항을 등록한다. 본 예제에서는 $TMAXDIR/config 디렉터리에 있는 sample.m 파일을 tmconfig.m 파일로 변경하고 PODBATCH01 서버 및 서비스를 추가한다.

    *SERVER
    TPFMIPPR             SVGNAME = svg1
    BONL02CN             SVGNAME = svg2
    UONL01CN             SVGNAME = svg1, SVRTYPE=UCS
    TPFMADM02            SVGNAME = svg1
    TPFMADM03            SVGNAME = svg1
    
    UCSBATCH             SVGNAME = svg1, SVRTYPE=UCS
    ### PODBATCH 서버(POD 배치 서버의 물리명)
    PODBATCH01        SVGNAME = svg2, MIN=0, MAX=1, LIFESPAN=IDLE_0
    QPSTEST              SVGNAME = svg2
    
    *SERVICE
    SPFMIPPR             SVRNAME = TPFMIPPR
    TESTSVC01            SVRNAME = BONL02CN
    TESTSVC02            SVRNAME = BONL02CN
    PFMADMSVC31          SVRNAME = TPFMADM03
    PFMADMSVC11          SVRNAME = TPFMADM02
    
    PFM_BATCH_TEST01  SVRNAME = PODBATCH01
    QPSTEST1             SVRNAME = QPSTEST
    QPSTEST2             SVRNAME = QPSTEST
  4. tmconfig.m 파일에 추가한 상주 배치 서버 및 서비스를 Tmax 서버에 적용하기 위해서는 아래와 같이 실행한다.

    [pfmtpqa@fwsol:/home2/pfmtpqa/proframe5.0/package/tmax/config]$ cfl -i tmconfig.m
    CFL is done successfully for node(tmconfig)
    [pfmtpqa@fwsol:/home2/pfmtpqa/proframe5.0/package/tmax/config]$ gst
    SVC tables are successfully generated
    GST is successfully done

    cfl, gst 이후 Tmax Down 및 Boot를 필수적으로 적용해야 한다. 자세한 설명은 "Tmax 관리자 안내서"를 참고한다.

  5. 작업영역 내비게이터에서 생성된 POD 배치 서버 리소스를 선택하고 오른쪽 마우스 버튼을 클릭한 후 [Compile Resource] 메뉴를 선택한다.

    figure3 5
    POD 배치 서버 – Compile Resource
  6. 컴파일이 완료되면 POD 배치 서버가 생성된다. 생성된 결과는 POD 배치와 관련된 소스 파일이 있는 디렉터리에서 확인할 수 있다.

    [pfmtpqa@fwsol:/home2/pfmtpqa/proframe5.0/compile/team/src/batchServer/pod]$ ls -al
    총 92
    drwxrwxrwx   2 pfmtpqa  qa     512 10월  7일  19:54 .
    drwxrwxrwx   5 pfmtpqa  qa     512 10월  7일  19:50 ..
    -rwxrwxrwx   1 pfmtpqa  qa   38664 10월  7일  19:54 PODBATCH01
    -rw-rw-rw-   1 pfmtpqa  qa    2558 10월  7일  19:52 PODBATCH01.c
    -rwxrwxrwx   1 pfmtpqa  qa    1449 10월  7일  19:52 PODBATCH01.mk
    -rwxrwxrwx   1 pfmtpqa  qa      76 10월  7일  19:52 PODBATCH01.sh
    파일명 설명

    PODBATCH01

    생성된 POD 배치 서버이다.

    PODBATCH01.c

    생성된 POD 배치 서버의 소스 파일이다.

    PODBATCH01.mk

    생성된 POD 배치 서버의 Make 파일이다.

    PODBATCH01.sh

    생성된 POD 배치의 Shell 파일이다.

    생성된 배치 서버는 Tmax의 서버를 load하는 디렉터리인 Tmax 설정 파일에 설정된 APPDIR로 복사해야 한다(Tmax 기본 설정 디렉터리는 $TMAXDIR/appbin이다).

2.2. POD 배치 모듈 작성

POD 배치 모듈 생성

POD 배치 모듈을 생성하는 과정은 일반 배치 모듈을 생성하는 과정과 동일한 절차로 이루어진다. 다만, POD 배치는 스튜디오에 내장된 EMB Designer에서 배치 모듈의 일부 속성을 변경하여 정의하면 개발자 또는 배치 관리자가 원하는 POD 배치를 정의할 수 있다. 본 절에서는 EMB Designer에서 POD 배치를 디자인하는 과정부터 설명하기로 한다.

POD 배치 모듈을 생성은 스튜디오에 내장된 EMB Designer를 이용하여 POD 배치를 디자인한다.

다음은 POD 배치 모듈을 생성은 하는 과정에 대한 예이다.

  1. 작업영역 내비게이터에서 오른쪽 마우스 버튼을 클릭한 후 [New] > [EMB Batch Design] 메뉴를 선택하면 다음과 같이 신규 배치 모듈 생성 대화상자가 나타난다.

    figure3 6
    POD 배치 모듈 – 신규 배치 모듈 생성 대화상자
  2. 신규 배치 모듈 생성 대화상자에서 POD 배치 모듈 생성을 위한 기본정보를 모두 설정한 후 [완료] 버튼을 클릭하면, POD 배치 모듈을 디자인할 수 있는 EMB Designer 화면으로 이동한다.

    figure3 7
    POD 배치 모듈 – 배치 디자인

    POD 배치 모듈을 생성하고 디자인하는 과정은 온라인 서비스의 서비스 모듈을 생성하는 방법과 동일하다. 온라인 서비스의 서비스 모듈을 생성하는 과정에 대한 상세한 내용은 ProFrame EMB 개발 안내서를 참고한다.

  3. POD 배치 모듈 작성에서도 언급했듯이 POD 배치 모듈은 POD 배치 모듈 – 배치 디자인과 같이 디자인된 배치 모듈에 대하여 'Batch Kind' 속성을 'G: Normal type’에서 'P: POD type’으로 변경하면 POD 배치 모듈이 생성된다.

    figure3 8
    POD 배치 모듈 – Batch Kind 속성 변경

POD 배치 모듈은 일반 배치 모듈과는 다르게 스튜디오에 내장된 EMB Designer[Palette] 메뉴에 있는 배치 모듈 항목의 사용 용도가 다르다. 그 이유는 일반 배치는 Tmax 클라이언트 프로그램이고 POD 배치는 Tmax 서버 프로그램이기 때문이다.

모듈 설명

일반 배치

Tmax 클라이언트 프로그램으로 XA 트랜잭션을 제어할 수는 있지만 자기 자신은 XA로 접속할 수 없다.

POD 배치

Tmax 서버 프로그램으로 XA 트랜잭션을 제어할 뿐만 아니라 자기 자신까지도 XA 트랜잭션을 묶이기 때문에 접속이 가능하다.

위 내용에 대한 상세한 내용은 “Tmax Application Development Guide”를 참고한다.

POD 배치에서 TX와 관련된 API는 POD 서버일 경우에 연동되는 다른 XA 서비스와 자기 자신의 서버의 트랜잭션을 "1-트랜잭션"으로 관리할 때 사용한다. 만약 POD 서버가 NON-XA인 경우에는 연동되는 다른 XA서비스들의 트랜잭션을 제어하기 위한 목적으로만 사용한다.

POD 배치에서 DB와 관련된 API는 POD XA 서버에서는 사용할 수 없으며, 반면에 POD NON-XA 서버는 사용이 가능하며, 자기 자신의 데이터베이스 트랜잭션만을 제어할 수 있다.

2.3. POD 배치 생성 확인

POD 배치 모듈 테스트

POD 배치 모듈은 Tmax 서비스로 작성되어 있다. 그러므로 Tmax 클라이언트로 tpcall를 수행하여 POD 배치를 수행해야 한다. POD 배치 모듈은 ProFrame에서 제공하는 pfmtcl 유틸리티를 이용하여 수행한다.

다음은 pfmtcl 유틸리티를 사용하는 방법이다.

$> pfmtcl –P [POD 배치 입력 파일]

RI/WS 반영된 ProFrame에서 WorkSpace에서 생성한 배치 모듈을 call할 때에는 Shell에 아래 문구를 추가하여 테스트한다.

### Work Space 영역에 있는 배치 모듈 Call할 때
export PFM_WS_DLCALL_YN=Y

### Release Image 영역에 있는 배치 모듈 Call할 때
export PFM_WS_DLCALL_YN=N

해당 POD 배치 프로세스는 tmboot될 때 환경을 load하고 있으므로, RI/WS CALL 옵션을 export한 후 다음의 명령으로 작업해야 한다.

tmdown -S [POD 배치 서버명]
tmboot -S [POD 배치 서버명]

다음은 배치 입력 파일을 작성하는 방법이다.

# podbatch_test.dat
# SVC_NAME={POD 배치 서비스명}
[Pfm2pcBatchHeader]
batch_code      24 = {POD 배치 코드명}
global_id       32 = {global ID}
data_type       1  = {D|F}
send_rspn_type  1  = {S|R}
err_flag        1  = 0
err_code        9  =
data_len        9  = {AP 입력 데이터의 길이}
reserved        51 =
[user data]
user_data       {AP 입력 데이터의 길이} = {AP 입력 데이터}

다음은 배치 입력 파일의 각 항목에 대한 설명이다.

항목 길이 설명

#SVC_NAME

16자 이내

POD 배치 서비스명을 지정한다.

[PfmPodBatchHeader]

제한없음

POD Batch Header명을 입력한다.

(Header를 구분하기 위한 Title)

batch_code

24

배치 수행에 필요한 배치 코드를 입력한다.

global_id

32

Global_id를 기록한다. (선택사항)

data_type

1

사용자 입력 데이터의 변환 타입을 지정한다.

  • D : Delimiter

  • F : Fixed length

send_rspn_type

1

입력 또는 출력의 구분자를 지정한다.

  • S : Send

  • R : Response

err_flag

1

출력 응답을 받았을 때 정상 또는 에러에 대한 플래그이다.

  • 0 : 정상 처리

  • 1 : 에러 처리

err_code

9

출력 응답이 에러일 때 에러 코드 값이다.

data_len

9

입력되는 사용자 데이터 길이이다.

reserved

51

임시 항목이다.

user_data

사용자 입력

AP 입력 데이터를 입력한다.

본 예제에서는 다음과 같이 배치 입력 파일을 작성한다.

#SVC_NAME=POD_BAT01
[PfmPodBatchHeader]
batch_code      24 = POD_BAT01
global_id       32 = global_id
data_type       1  = D
send_rspn_type  1  = S
err_flag        1  = 0
err_code        9  =
data_len        9  = 30
reserved        51 =
[user data]
user_data       30 = POD;10;TEST;

다음은 POD 배치가 실행되는 예이다.

[pfmtpqa@fwsol:/home2/pfmtpqa/proframe5.0/compile/team/src/batchServer/pod]$ ./PODBATCH01.sh
<<<<<<<<<<<<<     [Tmax Client 2005-12-30]     >>>>>>>>>>>>>
START......
------------------------------[2PC BATCH Header]------------------------
batch_code      = [POD_BAT01               ]
global_id       = [global_id               ]
data_type       = [D]
send_rspn_type  = [S]
err_flag        = [0]
err_code        = [         ]
data_len        = [       30]
reserved        = [         ]
-------------------------------------------------------------------------
---------------------------------[Input  Data]---------------------------
__v____1____v____2____v____3____v____4____v____5____v____6____v____7____v
____8____v____9____v____0
POD;10;TEST;
-------------------------------------------------------------------------
TP GetUser Code [0]
-------------------------------[2PC BATCH Header]------------------------
batch_code      = [POD_BAT01               ]
global_id       = [global_id               ]
data_type       = [D]
send_rspn_type  = [R]
err_flag        = [0]
err_code        = [         ]
data_len        = [        0]
reserved        = [                        ]
------------------------------------------------------------------------
--------------------------------[Output  Data]---------------------------
__v____1____v____2____v____3____v____4____v____5____v____6____v____7____v
____8____v____9____v____0
-------------------------------------------------------------------------
POD 배치 디버깅

POD 배치 모듈을 테스트한 후 디버깅이 필요한 경우에는 배치 로그 파일을 확인한다. 배치 로그 파일은 환경변수 PFM_BAT_LOG_DIR에 설정된 디렉터리에 위치하며 “[배치서버명]_bat_yyyymmdd.log”로 생성된다.