배치 Job Information
본 장에서는 배치 Job Information의 개념과 아키텍처의 특성을 설명하고 배치 Job Information를 생성하는 방법과 확인하는 과정을 설명한다.
1. 개요
배치 Job Information은 배치 작업을 수행 중에 실시간으로 배치의 상태를 확인하기 위한 배치 프레임워크의 일부분이다. 배치 업무의 특성상 배치 업무의 시작 및 종료 또는 정상 및 에러에 대한 내용을 확인하려면 일반적으로 반환 값에 의존할 수 밖에 없다. 그러나 ProFrame는 이러한 한계를 극복하기 위해 배치 Job Information를 지원한다.
배치 Job Information은 배치의 수행 상태 및 종료 상태 그리고 에러가 발생했을 때 에러가 발생된 위치 등의 정보를 개발자 또는 배치 관리자에게 제공한다.
기본 구조
배치 Job Information 아키텍처는 배치 수행에 따른 데이터베이스 트랜잭션을 분리하기 위해 데이터베이스 처리를 위한 TP 서비스를 제공한다. 또한 TP 서비스를 이용하여 배치가 수행되는 상태 정보를 데이터베이스에 저장할 수 있다.
2. 배치 Job Information 생성
배치 Job Information 정보는 개발자가 배치 모듈의 수행 상태 정보를 남겨주지 않아도 기본적으로 ProFrame의 배치 프레임워크에서 제공하는 배치 Job Information 데이터베이스 테이블에 기록한다. 이때 기록되는 정보는 배치 시작정보와 배치 종료정보이다.
개발자는 이와 같이 ProFrame에서 기본적으로 제공하는 정보 외에 배치 Job Information에서 제공하는 API를 이용하여 현재 수행 중인 배치 모듈의 상태 정보를 추가적으로 기록할 수 있다.
2.1. 배치 Job Information API
pfmBatchSuccessJobInf
pfmBatchSuccessJobInfo는 배치 수행에 대한 성공 정보를 업데이트하는 API이다.
pfmBatchSuccessJobInfo ( PfmBatchSuccessJobTable * );
다음은 pfmBatchSuccessJobInfo API 작성 예이다.
context->Count = 0; /* 처리 건수 변수 초기화 */
PFM_TRYNJ( pfmDbioAmend() ) /* DBIO 모듈 Call */
if( rc != RC_NRM )
{
return rc; /* 에러 처리 */
}
context->Count = PDB_RECNUM; /* 처리 건수 세팅 */
PfmBatchSuccessJobTable batchJobTable;
bzero( &batchJobTable, sizeof(PfmBatchSuccessJobTable) )
strncpy( batchJobTable.job_last_key, "DB 데이터 처리", LEN_TABLE_PFM_BATCH_JOB_LAST_KEY );
chJobTable. job_nrm_cnt = context->Count ;
strncpy( batchJobTable.job_nrm_ctnt, "정상처리", LEN_TABLE_PFM_BATCH_JOB_JOB_NRM_CTNT);
pfmBatchCreateJobInfo( &batchJobTable ); /* 성공 정보 Update */
PFM_TRY( pfmBatchDBCommit() ); /* DB Transaction Commit */
pfmBatchErrorJobInfo
pfmBatchErrorJobInfo는 배치 수행에 대한 에러 정보를 업데이트하는 API이다.
pfmBatchErrorJobInfo ( PfmBatchSuccessJobTable * );
다음은 pfmBatchErrorJobInfo API 작성 예이다.
PFM_TRYNJ( pfmDbioAmendArray() ) /* DBIO 모듈 Call */
if( rc != RC_NRM )
{
context->JobErrCode = pfmDbioGetErrorNo(); /* 에러 코드 설정 */
STRCPY(context->ErrMsg, pfmDbioGetErrorString()); /* 에러 메시지 설정 */
return rc;
}
…...
/* 에러 처리 함수 */
char JobErrCode[32 + 1];
/* 에러코드 String 변수 초기화 */
bzero(lsvJobErrCode, sizeof(JobErrCode));
/* 에러코드 String으로 변환 */
pfmStringGetFromLongN(JobErrCode, context->JobErrCode, 8);
PfmBatchErrorJobTable batchJobTable;
bzero( &batchJobTable, sizeof(PfmBatchErrorJobTable) )
strncpy( batchJobTable.job_last_key, "DB 데이터 처리", LEN_TABLE_PFM_BATCH_JOB_LAST_KEY );
strncpy( batchJobTable.job_err_code, JobErrCode, LEN_TABLE_PFM_BATCH_JOB_JOB_ERR_CODE);
batchJobTable.job_err_cnt= context-> JobErrCode;
strncpy( batchJobTable.job_err_ctnt, context->ErrMsg, LEN_TABLE_PFM_BATCH_JOB_JOB_ERR_CTNT );
pfmBatchErrorJobInfo( &batchJobTable ); /* 에러 정보 Update */
PFM_TRY(pfmBatchDBRollback()); /* DB Transaction Rollback */
2.2. API를 이용한 배치 Job Information 생성
배치 모듈 내부에서 배치 Job Information이 제공하는 API를 이용하여 배치 Job Information를 생성한다.
다음은 EMB Designer에서 배치 Job Information를 생성하는 예이다.
위 그림을 기준으로 일반 배치 모듈의 입력 값에 따라 정상 또는 에러 처리를 수행할 수 있도록 API를 이용하여 배치 Job Information을 생성한다.
-
배치 Job Information 테스트를 위한 Inner Module 코딩 예
if(context->input->batch01==01) { /************************************** * KIND : Intermediary Module Function Call * NODE ID : 2 * NAME : Inner Module0 * DESCRIPTION : * *************************************/ PFM_TRY(innerModule2(context)); } else { … } -
정상 Virtual Module 코딩 예
PfmBatchSuccessJobTable pfmBatchSuccessJobTable; strcpy( pfmBatchSuccessJobTable.job_last_key, "100" ); pfmBatchSuccessJobTable.job_nrm_cnt = 30; strcpy( pfmBatchSuccessJobTable.job_nrm_ctnt, "정상 처리하였습니다. " ); PFM_TRYNJ(pfmBatchSuccessJobInfo( &pfmBatchSuccessJobTable ) );
-
에러 Virtual Module 코딩 예
PfmBatchErrorJobTable pfmBatchErrorJobTable; strcpy( pfmBatchErrorJobTable.job_last_key, "100" ); strcpy( pfmBatchErrorJobTable.job_err_code, "ERRR01" ); pfmBatchErrorJobTable.job_err_cnt = 70; strcpy( pfmBatchErrorJobTable.job_err_ctnt, "에러 처리하였습니다. " ); PFM_TRYNJ(pfmBatchErrorJobInfo( &pfmBatchErrorJobTable ));
다음은 위와 같은 예를 통해 생성된 배치 Job Information를 이용하여 일반 배치 모듈을 실행하는 예이다.
[pfmtpqa@fwsol:/home2/pfmtpqa/proframe5.0]$ ./GENBATCH01 -c 'GEN_BAT01' -d 'GEN;01;TEST;' [pfmtpqa@fwsol:/home2/pfmtpqa/proframe5.0]$ ./GENBATCH01 -c 'GEN_BAT01' -d 'GEN;02;TEST;'
다음은 배치 실행결과를 확인하는 예이다.
Select BAT_CODE, JOB_NRM_CNT, JOB_ERR_CNT, JOB_ERR_CODE, JOB_NRM_CTNT, JOB_ERR_CTNT From PFM_BATCH_JOB

2.3. 배치 Job Information 생성 확인
생성된 배치 Job Information을 확인하기 위해서는 데이터베이스의 특정 테이블을 조회하면 된다. 즉, PFM_BATCH_JOB 테이블을 조회하여 정상적으로 배치 수행상태 정보가 기록되었는지 확인한다.
만약 정상적으로 기록되지 않았다면 다음 2가지 정보를 확인한다.
-
배치 Job Information 정보를 데이터베이스 테이블에 삽입하는 서버가 정상적으로 동작하는지 확인한다.
설명 서버명
TPFMADM03
서비스명
PFMADMSVC31
-
배치 파라미터 테이블에 “JOB_INFO_FLAG”의 값이 “1”로 설정되어 있는지 확인한다. 배치 파라미터로 배치 Job Information 동작 여부를 확인할 수 있으며, 만약 동작하지 않도록 설정되어 있다면 배치 파라미터의 값을 변경하여 테스트할 수 있다.