POD 배치
본 장에서는 POD 배치의 개념과 아키텍처의 특성을 설명하고 POD 배치를 생성하는 방법에 대해 설명한다. 또한 생성된 POD 배치를 업무에 적용하기 위해 필요한 테스트 및 디버깅 과정도 포함하여 설명한다.
1. 개요
POD 배치는 일반 배치에서 온라인 서비스와 연동할 때 발생하는 데이터베이스 트랜잭션의 정합성 문제를 해결하기 위해 Tmax의 POD 서버를 이용하여 설계된 배치이다. 항상 프로세스가 상주하는 TCS(Tmax Control Server) 온라인 서비스와는 다르게 서비스 요청이 들어온 경우에만 프로세스가 생성되며 배치 서비스를 수행한 후에는 프로세스가 종료된다.
일반 배치의 데이터베이스 트랜잭션의 정합성 문제는 일반 배치에서 온라인 서비스와 연동할 경우 TP-Monitor가 제공하는 XA 트랜잭션을 연결할 수 없는 원인으로부터 시작된다. 즉, 온라인 서비스의 작업된 데이터베이스 결과와 배치 내부에서 작업한 데이터베이스 결과가 "1-트랜잭션"으로 처리할 수 없는 이유로 인해 정합성 문제가 발생한다.
기본 구조
다음은 POD 배치 아키텍처의 특징과 구성요소에 대하여 설명한다.
-
TP Client
TP 서비스를 수행하기 위한 Tmax 클라이언트 파일이다.
-
POD 배치 서버
Tmax의 서버로서 데이터베이스 접속, CommBuff, 로그 그리고 Global 변수 등에 대한 초기화 로직을 수행한다.
-
Flow 처리를 이용하여 커스터마이즈 영역 제공
-
|
POD 배치 아키텍처의 구성요소는 기본 구조에 기술된 일반 배치 아키텍처의 일부 내용과 동일하다. 본 절에서는 일반 배치 아키텍처와 동일한 부분을 제외한 나머지를 설명한다. |
2. POD 배치 생성
POD 배치 생성은 배치 생성 절차에서 언급했듯이 크게 3단계로 나누어 진행된다. 즉, POD 배치 서버 작성, POD 배치 모듈 작성 및 POD 배치 생성 확인단계를 거쳐야 비로소 POD 배치를 생성할 수 있다.
다음은 POD 배치를 생성하는 세부 절차이다.
-
POD 배치 서버 작성
-
POD 배치 서버 환경설정
만약 ProFrame이 기본적으로 제공하는 POD 배치 서버의 환경설정을 그대로 사용하는 경우 이 단계는 생략할 수 있다.
-
POD 배치 서버 생성
-
-
POD 배치 모듈 작성
-
POD 배치 모듈 생성
-
-
POD 배치 생성 확인
-
POD 배치 모듈 테스트
-
디버깅
작성된 POD 배치 모듈에 오류가 발생된 경우 오류가 제거될 때까지 POD 배치 모듈을 수정하는 과정을 반복한다.
-
다음 절에서는 위와 같은 절차에 따라 POD 배치를 생성하는 방법에 대해 설명한다.
2.1. POD 배치 서버 작성
POD 배치 서버 환경설정
본 절에서는 일반 배치 서버 작성에서 언급한 WebAdmin의 접속과정을 일부 생략하고 POD 배치 서버와 관련된 환경설정 정보를 확인하고 설정하는 절차만을 설명한다.
|
WebAdmin에 대한 상세한 내용은 ProFrame 관리자 안내서를 참고한다. |
다음은 WebAdmin에서 POD 배치 서버와 관련된 환경설정 정보를 확인하고 설정하는 절차이다.
-
WebAdmin 화면에서 [환경설정] > [기본환경설정] > [환경관리] > [기본환경관리] 메뉴를 선택한다.
-
기본환경관리 화면이 나타나면 '환경구성그룹'에서 'COMPILE_CONFIG’를 선택한다. 이 환경설정은 실제 업무 처리에 맞추어 커스터마이즈할 수 있다.
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/)
-
위와 같이 조회된 결과 중에서 각 환경설정 항목의 ‘설정내용’ 값을 확인하고 변경할 값으로 수정한다.
-
변경할 환경설정 항목을 선택한다.
-
선택한 환경설정 정보를 확인한다.
-
변경할 환경설정의 정보('사용유무', '설정내용', '부가설명')를 수정한 후 [저장] 버튼을 클릭한다.
-
수정된 환경설정 항목을 다시 조회한 후 변경된 내용을 확인한다.
-
POD 배치 서버 생성
다음은 POD 배치 서버를 생성하는 절차에 대한 예이다.
-
작업영역 내비게이터에서 오른쪽 마우스 버튼을 클릭한 후 [New] > [Server] 메뉴를 선택하면 다음과 같이 새로운 서버 프로젝트 대화상자가 나타난다.
POD 배치 서버 – 새로운 서버 프로젝트 대화상자이 대화상자에서 모든 항목은 POD 배치 서버를 생성하는데 필수사항이다.
항목 설명 데이터베이스 유형
XA MODE 또는 NON XA MODE를 선택한다.
-
XA MODE : TP 서비스의 XA 연동할 때 선택한다. pfmTxOpen() 함수로 데이터베이스를 연결한다.
-
NON XA MODE : 일반적인 데이터베이스 연결 방식이다.
서버 유형
POD 배치 서버를 생성하기 위해서는 “POD_BATCH”을 선택해야 한다.
서비스 명
TP 서비스의 이름을 입력한다. '서비스 명'은 '서버 타입'을 POD_BATCH로 선택한 경우에만 나타난다.
본 절에서 설명하지 않는 항목은 일반 배치 서버 작성의 일반 배치 서버 생성 부분을 참고한다.
-
-
위와 같은 필수 항목을 모두 설정한 후 [완료] 버튼을 클릭하면, POD 배치 서버를 생성한 결과물인 총 4개의 파일이 다음과 같이 나타난다.
소스파일명 설명 Server Source
POD 배치 서버의 소스 파일이다.
Make File
POD 배치 서버의 Make 파일이다.
Shell File
POD 배치를 실행하기 위한 Shell 파일이다.
POD 배치 수행 스크립트가 필요한 경우에는 이 파일을 수정한다.
Service
Tmax 서버에 등록할 서비스 파일이다.
POD 배치 서버 – 소스 파일 생성 -
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
-
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 관리자 안내서"를 참고한다.
-
작업영역 내비게이터에서 생성된 POD 배치 서버 리소스를 선택하고 오른쪽 마우스 버튼을 클릭한 후 [Compile Resource] 메뉴를 선택한다.
POD 배치 서버 – Compile Resource -
컴파일이 완료되면 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 배치 모듈을 생성은 하는 과정에 대한 예이다.
-
작업영역 내비게이터에서 오른쪽 마우스 버튼을 클릭한 후 [New] > [EMB Batch Design] 메뉴를 선택하면 다음과 같이 신규 배치 모듈 생성 대화상자가 나타난다.
POD 배치 모듈 – 신규 배치 모듈 생성 대화상자 -
신규 배치 모듈 생성 대화상자에서 POD 배치 모듈 생성을 위한 기본정보를 모두 설정한 후 [완료] 버튼을 클릭하면, POD 배치 모듈을 디자인할 수 있는 EMB Designer 화면으로 이동한다.
POD 배치 모듈 – 배치 디자인POD 배치 모듈을 생성하고 디자인하는 과정은 온라인 서비스의 서비스 모듈을 생성하는 방법과 동일하다. 온라인 서비스의 서비스 모듈을 생성하는 과정에 대한 상세한 내용은 ProFrame EMB 개발 안내서를 참고한다.
-
POD 배치 모듈 작성에서도 언급했듯이 POD 배치 모듈은 POD 배치 모듈 – 배치 디자인과 같이 디자인된 배치 모듈에 대하여 'Batch Kind' 속성을 'G: Normal type’에서 'P: POD type’으로 변경하면 POD 배치 모듈이 생성된다.
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 |
사용자 입력 데이터의 변환 타입을 지정한다.
|
send_rspn_type |
1 |
입력 또는 출력의 구분자를 지정한다.
|
err_flag |
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”로 생성된다.