Project

General

Profile

Actions

About-batch » History » Revision 5

« Previous | Revision 5/15 (diff) | Next »
길호 원, 12/15/2025 03:22 PM


ESI NextGen Batch 시스템 인수인계 문서

1. 프로젝트 개요

1.1 프로젝트 정보

  • 프로젝트명: ESI NextGen Batch
  • 버전: 0.0.1-SNAPSHOT
  • 프로젝트 타입: Spring Batch 기반 배치 처리 시스템
  • 주요 목적: ESI(전자상거래 결제 시스템)의 다양한 배치 작업 자동화 처리

1.2 주요 기능

  • 채권 발행 및 취소 처리 배치
  • 장려금/수수료 정산 배치
  • 원장 대사 파일 처리 배치
  • 전문 재거래 처리 배치
  • 알림톡 발송 배치
  • 오류 알림 배치

2. 기술 스택

2.1 개발 환경

  • Java: 21
  • Build Tool: Gradle
  • Spring Boot: 3.4.4
  • Spring Batch: 5.x (Spring Boot Starter 포함)
  • Database: MySQL 8.0.33
  • ORM: MyBatis 3.0.4

2.2 주요 의존성

- Spring Boot Starter Batch
- Spring Boot Starter Web
- Spring Boot Starter WebFlux (WebClient)
- Spring Boot Starter Actuator (모니터링)
- Spring Boot Starter JDBC
- Spring Boot Starter Validation
- MyBatis Spring Boot Starter (3.0.4)
- MySQL Connector (8.0.33)
- Lombok
- Apache Commons Lang3 (3.12.0)
- Apache HttpClient5 (5.4.1)
- JSON (20190722)
- Micrometer Core (모니터링)
- Micrometer Observation (모니터링)

2.3 개발 도구


3. 프로젝트 구조

3.1 디렉토리 구조

src/main/java/com/esi/nextgen/batch/
├── BatchApplication.java          # 메인 애플리케이션 클래스
├── bizcom/                         # 비즈니스 공통 모듈
│   ├── constants/                  # 상수 정의
│   ├── mapper/                     # MyBatis Mapper 인터페이스
│   ├── model/                     # 도메인 모델
│   ├── service/                   # 비즈니스 서비스
│   ├── util/                      # 유틸리티
│   └── vo/                        # Value Object
├── common/                         # 공통 모듈
│   ├── annotation/                # 커스텀 어노테이션
│   ├── config/                     # 공통 설정
│   ├── constants/                  # 공통 상수
│   ├── listener/                   # 배치 리스너
│   ├── surem/                      # 알림톡/SMS 메시지 관련
│   └── util/                      # 공통 유틸리티
├── comp/                           # 원장 대사 관련
│   ├── config/                     # 대사 배치 설정
│   ├── controller/                 # 대사 컨트롤러
│   ├── mapper/                     # 대사 Mapper
│   ├── model/                      # 대사 모델
│   ├── scheduler/                  # 대사 스케줄러
│   ├── service/                    # 대사 서비스
│   └── vo/                         # 대사 VO
├── config/                         # 배치 설정 클래스
│   ├── BatchCronConfig.java        # Cron 표현식 설정
│   ├── BatchFnstProperties.java    # 금융기관 코드 설정
│   ├── DBBatchConfig.java          # DB 배치 설정
│   └── [각 배치별 Config 클래스들]
├── constants/                      # 상수 정의
│   ├── BatchFileInfo.java          # 배치 파일 정보
│   ├── BatchFileLayout.java        # 배치 파일 레이아웃
│   ├── CompChckArtc.java           # 대사 체크 아티클
│   └── PrcAppConstants.java        # 프로세스 앱 상수
├── controller/                     # REST API 컨트롤러
├── dbio/                           # DB I/O 모듈
│   ├── mapper/                     # DB Mapper 인터페이스
│   └── model/                      # DB 모델 (DTO)
├── mapper/                         # 비즈니스 Mapper
├── model/                          # 비즈니스 모델
├── scheduler/                      # 스케줄러 클래스
├── service/                        # 서비스 클래스
└── vo/                             # Value Object

3.2 리소스 구조

src/main/resources/
├── application.yml                 # 기본 설정 파일
├── application-local.yml           # 로컬 환경 설정
├── application-F218.yml            # F218 환경 설정
├── logback-spring.xml              # 로깅 설정
└── mapper/                         # MyBatis XML Mapper
    ├── bizcom/                     # 비즈니스 공통
    ├── bond/                       # 채권 관련
    ├── clcln/                      # 정산 관련
    ├── comp/                       # 대사 관련
    ├── dbio/                       # DB I/O
    ├── info/                       # 정보 관련
    ├── mp/                         # MP 관련
    ├── noti/                       # 알림 관련
    └── test/                       # 테스트

4. 주요 배치 작업 목록

4.1 전문 거래 내역 배치

배치명 Job 이름 설명 실행 주기
전문 재거래 telgmReDlngJob 실패한 전문 재전송 처리 매 2분마다 8시~23시 (F218) / 매월 1일 0시 (로컬)

4.2 채권 발행 배치

배치명 Job 이름 설명 실행 주기
외상매출채권발행처리 osbndPblcnRprcsScheduler01Job 외상매출채권 발행 처리 금 8시21시 매 1분 (F218) / 매월 1일 0시 (로컬)
외상매출채권선결제처리 osbndAdvpayScheduler01Job 외상매출채권 선결제 처리 금 8시18시 매 1분 (F218) / 매월 1일 0시 (로컬)
외매채 즉시취소 prcOsbndRtrcnDlngSe01Job 외상매출채권 즉시 취소 금 8시20시 매 1분 30초 (F218) / 매월 1일 0시 (로컬)
외매채 취소요청 prcOsbndRtrcnDlngSe02Job 외상매출채권 취소 요청 처리 금 8시20시 매 1분 30초 (F218) / 매월 1일 0시 (로컬)
상매채 즉시취소 wwSlsBndRtrcnDlngSe01Job 상생매출채권 즉시 취소 금 8시20시 매 1분 30초 (F218) / 매월 1일 0시 (로컬)
상매채 취소요청 wwSlsBndRtrcnDlngSe02Job 상생매출채권 취소 요청 처리 금 8시20시 매 1분 30초 (F218) / 매월 1일 0시 (로컬)
채권 수취 후 예약 발행 addrBfPblcnRsvtJob 채권 수취 후 예약 발행 처리 매일 8시~21시 매 정시 (F218) / 매월 1일 0시 (로컬)
수취채권 예약 발행 addrBndRsvtPblcnJob 수취채권 예약 발행 매일 8시~20시 59분 매 1분 (F218) / 매월 1일 0시 (로컬)
수취채권 즉시 발행 addrBndNowPblcnJob 수취채권 즉시 발행 매일 8시~20시 59분 매 1분 (F218) / 매월 1일 0시 (로컬)
수취채권 발행 전 결재선 내역 승인기한 체크 addrBfPblcnAplnJob 발행 전 결재선 승인기한 체크 매일 20시 (F218) / 매월 1일 0시 (로컬)
채권 수취전 발행 요청일 만료 처리 dmndExpryAddrBfPblcnRsvtJob 만료된 발행 신청 원장 처리 매일 22시 (F218) / 매월 1일 0시 (로컬)

4.3 정산 배치

배치명 Job 이름 설명 실행 주기
장려금배분 aprtSubsdJob 장려금 배분 처리 매 5분마다 (F218) / 매월 1일 0시 (로컬)
장려금정산이체처리 prcsSubsdClclnTrJob 장려금 정산 이체 처리 매 2분마다 (F218) / 매일 8시 (로컬)
운영수수료정산 operFeeClclnJob 운영 수수료 정산 매월 1일 20시 (F218) / 매월 1일 0시 (로컬)
MP수수료정산 mpFeeClclnJob MP 수수료 정산 매월 1일 20시 (F218) / 매월 1일 0시 (로컬)

4.4 원장 대사 배치

배치명 Job 이름 설명 실행 주기
원장대사 전문거래내역관리 dlngCompFileAllRegJob 원장 대사 전문거래내역 관리 매일 1시 30분 (F218) / 매월 1일 0시 (로컬)
예치금잔액대사 dlngCompFile00Job 예치금 잔액 대사 매일 2시 (F218) / 매분 14초 (로컬)
구매기업원장_원장대사 dlngCompFile01Job 구매기업 원장 대사 매일 2시 (F218) / 매분 29초 (로컬)
구매기업지사정보_원장대사 dlngCompFile02Job 구매기업 지사정보 대사 매일 2시 (F218) / 매분 29초 (로컬)
협력기업원장_원장대사 dlngCompFile11Job 협력기업 원장 대사 매일 2시 (F218) / 매분 29초 (로컬)
거래선원장_원장대사 dlngCompFile12Job 거래선 원장 대사 매일 2시 (F218) / 매분 29초 (로컬)
외상매출채권원장_원장대사 dlngCompFile21Job 외상매출채권 원장 대사 매일 2시 (F218) / 매분 29초 (로컬)
상생매출채권원장_원장대사 dlngCompFile22Job 상생매출채권 원장 대사 매일 2시 (F218) / 매분 29초 (로컬)
대출약정원장_원장대사 dlngCompFile31Job 대출약정 원장 대사 매일 2시 (F218) / 매분 29초 (로컬)
대출실행원장_원장대사 dlngCompFile32Job 대출실행 원장 대사 매일 2시 (F218) / 매분 29초 (로컬)
거래원장대사 dlngCompInsdGnlgrJob 거래 원장 대사 매일 2시 (F218) / 매분 29초 (로컬)

4.5 기타 배치

배치명 Job 이름 설명 실행 주기
만기결제집계정보 mtryStlmTotInfoJob 만기결제 집계 정보 처리 월~금 7시 (F218) / 매월 1일 0시 (로컬)
(구매기업)결재기한 만료 처리 aprvnTermExpSchedulerJob01 결재기한 만료 처리 매일 21시 30분 (F218) / 매월 1일 0시 (로컬)
관리자MP관리 adminMpMngScheduler01Job 관리자 MP 관리 처리 매 정시 (F218) / 매월 1일 0시 (로컬)
대출연장안내 loanPrlgGdJob 대출연장 안내 알림톡 발송 월~금 9시 (F218) / 매월 1일 0시 (로컬)
고객확인재등록안내 custIdntyRrgGdJob 고객확인재등록 안내 알림톡 발송 월~금 9시 (F218) / 매월 1일 0시 (로컬)
오류알림 errorNotificationJob 전문/대사 오류 알림 발송 평일 08~22시 매 5분

5. 설정 파일 설명

5.1 application.yml

주요 설정 항목:

  • 데이터베이스 연결 정보: MySQL 연결 설정
  • HikariCP 커넥션 풀: 최대 60개 연결, 최소 5개 유휴 연결
  • 서버 포트: 8090
  • Context Path: /batch
  • MyBatis 설정: Mapper 위치, Type Handler 패키지
  • 클라이언트 서비스 URL: 각 마이크로서비스 엔드포인트
  • 대사파일 경로: /data1/adapter/files/
  • 백업 설정: 날짜별 폴더 사용

5.2 application-local.yml

로컬 개발 환경 설정:

  • 배치 금융기관 코드: 218
  • 대사파일 경로: D:/Documents/ESI/batch/
  • 배치 Cron 표현식: 각 배치별 실행 주기 설정

5.3 배치 Cron 설정 위치

모든 배치의 Cron 표현식은 application-local.yml 또는 환경별 설정 파일(application-F218.yml 등)의 batch.cron 섹션에 정의되어 있습니다.

주의사항:

  • 로컬 환경과 운영 환경(F218)의 Cron 설정이 다를 수 있습니다.
  • 로컬 환경은 개발/테스트를 위해 더 자주 실행되도록 설정되어 있습니다.
  • 실제 운영 환경의 실행 주기는 application-F218.yml을 참조하세요.

6. 실행 방법

6.1 로컬 개발 환경 실행

# Gradle Wrapper를 사용한 실행
./gradlew bootRun

# 또는 특정 프로파일 지정
./gradlew bootRun --args='--spring.profiles.active=local'

# 특정 배치 작업 실행
java -jar build/libs/batch-0.0.1-SNAPSHOT.jar --job.name=218_telgmReDlngJob

6.2 빌드

# JAR 파일 빌드
./gradlew build

# 빌드된 JAR 파일 위치
build/libs/batch-0.0.1-SNAPSHOT.jar

6.3 프로덕션 실행

# 프로파일 지정하여 실행
java -jar batch-0.0.1-SNAPSHOT.jar --spring.profiles.active=F218

# 특정 배치 작업 실행
java -jar batch-0.0.1-SNAPSHOT.jar --spring.profiles.active=F218 --job.name=218_telgmReDlngJob

6.4 IDE에서 특정 Job 실행

  • TestJobRunner
    • profile 설정 필요
      • 환경변수: SPRING_PROFILES_ACTIVE=local
    • Job name 설정 후 실행
  @Qualifier("dlngCompFile00Job") Job runJob

6.4 REST API를 통한 배치 실행

각 배치 작업은 REST API를 통해 수동 실행 가능합니다.

  • 컨트롤러 위치: src/main/java/com/esi/nextgen/batch/controller/
  • 예시: POST /batch/api/subsd-clcln/execute

7. 주요 기능 상세 설명

7.1 배치 작업 구조

각 배치 작업은 다음 구조로 구성됩니다:

  1. Scheduler: Cron 스케줄러로 배치 실행 트리거
  2. Config: Spring Batch Job/Step 설정
  3. Service: 실제 비즈니스 로직 처리
  4. Mapper: 데이터베이스 쿼리 실행

7.2 금융기관 코드 관리

  • 각 배치 작업은 금융기관 코드를 포함한 고유한 Job 이름을 가집니다.
  • 예: 218_telgmReDlngJob (218은 금융기관 코드)
  • BatchJobNameUtil을 통해 Job 이름 생성 및 관리

7.3 원장 대사 파일 처리

  • 대사 파일은 base_path + 금융기관코드 경로에서 읽습니다.
  • 처리 완료된 파일은 백업 폴더로 이동됩니다.
  • 대사 파일 레이아웃은 BatchFileLayout에 정의되어 있습니다.

7.4 전문 재거래 처리

  • 실패한 전문은 telgm.re-dlng-codes에 정의된 전문 코드만 재처리됩니다.
  • 재처리 대상 전문 코드는 application.yml에서 설정 가능합니다.

7.5 오류 알림

  • ErrorNotificationService가 전문 오류를 감지하여 운영자에게 알림을 발송합니다.
  • 대사 오류는 대사 배치에서 진행합니다.
  • 알림톡 발송은 Surem API를 통해 처리됩니다.

8. 데이터베이스

8.1 데이터베이스 정보

  • 데이터베이스: MySQL 8.0.33
  • 연결 정보: application.yml 참조
  • 스키마: nextesi

8.2 Spring Batch 메타데이터

Spring Batch는 자동으로 메타데이터 테이블을 생성합니다 (spring.batch.jdbc.initialize-schema: always 설정).

테이블명 역할 주요 컬럼 설명
BATCH_JOB_INSTANCE Job 인스턴스 정보 저장 JOB_INSTANCE_ID, JOB_NAME, JOB_KEY, VERSION Job의 논리적 실행 단위를 나타냄. 동일한 Job 이름과 파라미터 조합은 하나의 인스턴스로 관리
BATCH_JOB_EXECUTION Job 실행 정보 저장 JOB_EXECUTION_ID, JOB_INSTANCE_ID, START_TIME, END_TIME, STATUS, EXIT_CODE, EXIT_MESSAGE Job의 실제 실행 이력을 저장. 시작/종료 시간, 상태, 종료 코드 등 기록
BATCH_JOB_EXECUTION_PARAMS Job 실행 파라미터 저장 JOB_EXECUTION_ID, TYPE_CD, KEY_NAME, STRING_VAL, DATE_VAL, LONG_VAL, DOUBLE_VAL, IDENTIFYING Job 실행 시 전달된 파라미터 정보 저장
BATCH_STEP_EXECUTION Step 실행 정보 저장 STEP_EXECUTION_ID, VERSION, STEP_NAME, JOB_EXECUTION_ID, START_TIME, END_TIME, STATUS, COMMIT_COUNT, READ_COUNT, FILTER_COUNT, WRITE_COUNT, READ_SKIP_COUNT, WRITE_SKIP_COUNT, PROCESS_SKIP_COUNT, ROLLBACK_COUNT, EXIT_CODE, EXIT_MESSAGE, LAST_UPDATED Step의 실행 이력 저장. 읽기/쓰기 건수, 스킵 건수, 롤백 건수 등 상세 정보 기록
BATCH_STEP_EXECUTION_CONTEXT Step 실행 컨텍스트 저장 STEP_EXECUTION_ID, SHORT_CONTEXT, SERIALIZED_CONTEXT Step 실행 중 사용되는 컨텍스트 데이터 저장 (상태 정보, 중간 데이터 등)
BATCH_JOB_EXECUTION_CONTEXT Job 실행 컨텍스트 저장 JOB_EXECUTION_ID, SHORT_CONTEXT, SERIALIZED_CONTEXT Job 실행 중 사용되는 컨텍스트 데이터 저장 (Step 간 공유 데이터 등)
BATCH_JOB_SEQ Job 인스턴스 시퀀스 ID Job 인스턴스 ID 생성용 시퀀스
BATCH_JOB_EXECUTION_SEQ Job 실행 시퀀스 ID Job 실행 ID 생성용 시퀀스
BATCH_STEP_EXECUTION_SEQ Step 실행 시퀀스 ID Step 실행 ID 생성용 시퀀스

참고사항:

  • 모든 메타데이터 테이블은 Spring Batch가 자동으로 생성 및 관리합니다.
  • Job 재실행 시 동일한 Job 인스턴스는 재사용되며, 새로운 Job Execution이 생성됩니다.
  • 컨텍스트 테이블은 직렬화된 객체를 저장하므로 대용량 데이터 저장 시 주의가 필요합니다.

8.3 배치 Job별 관련 테이블 및 CRUD 작업

8.3.1 전문 거래 내역 배치

전문 재거래 (telgmReDlngJob)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_COM_TELGM_DLNG_DTL_BC 전문거래내역 - - -

8.3.2 채권 발행 배치

외상매출채권발행처리 (osbndPblcnRprcsScheduler01Job)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_PRC_OSBND_PBAPLY_GL_BC 외상매출채권발행신청원장 - -
TB_PRC_OSBND_PBAPLY_DTL_TR 외상매출채권발행신청내역 - -
TB_COM_HLDY_INFO_BC 휴일정보 - - -

외상매출채권선결제처리 (osbndAdvpayScheduler01Job)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_PRC_MTRY_STLM_TOT_SM 만기결제집계정보 - -
TB_PRC_OSBND_STLM_DTL_TR 외상매출채권결제내역 - -

외매채 즉시취소 (prcOsbndRtrcnDlngSe01Job)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_PRC_OSBND_RCNAPLY_GL_BC 외상매출채권발행취소신청원장 - -
TB_PRC_OSBND_RCNAPLY_DTL_TR 외상매출채권발행취소신청내역 - -
TB_PRC_OSBND_GL_BC 외상매출채권원장 - -

외매채 취소요청 (prcOsbndRtrcnDlngSe02Job)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_PRC_OSBND_RCNAPLY_GL_BC 외상매출채권발행취소신청원장 - -
TB_PRC_OSBND_RCNAPLY_DTL_TR 외상매출채권발행취소신청내역 - -
TB_PRC_OSBND_GL_BC 외상매출채권원장 - -

상매채 즉시취소 (wwSlsBndRtrcnDlngSe01Job)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_CLB_WSBND_RCNAPLY_GL_BC 상생매출채권발행취소신청원장 - -
TB_CLB_WSBND_RCNAPLY_DTL_TR 상생매출채권발행취소신청내역 - -
TB_CLB_WW_SLS_BND_GL_BC 상생매출채권원장 - -

상매채 취소요청 (wwSlsBndRtrcnDlngSe02Job)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_CLB_WSBND_RCNAPLY_GL_BC 상생매출채권발행취소신청원장 - -
TB_CLB_WSBND_RCNAPLY_DTL_TR 상생매출채권발행취소신청내역 - -
TB_CLB_WW_SLS_BND_GL_BC 상생매출채권원장 - -

채권 수취 후 예약 발행 (addrBfPblcnRsvtJob)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_CLB_WSBND_PBAPLY_GL_BC 상생매출채권발행신청원장 - -
TB_CLB_WSBND_PBAPLY_DTL_TR 상생매출채권발행신청내역 - -
TB_PRC_OSBND_GL_BC 외상매출채권원장 - - -

수취채권 예약 발행 (addrBndRsvtPblcnJob)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_CLB_WSBND_PBAPLY_GL_BC 상생매출채권발행신청원장 - -
TB_CLB_WSBND_PBAPLY_DTL_TR 상생매출채권발행신청내역 - -
TB_COM_HLDY_INFO_BC 휴일정보 - - -

수취채권 즉시 발행 (addrBndNowPblcnJob)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_CLB_WSBND_PBAPLY_GL_BC 상생매출채권발행신청원장 - -
TB_CLB_WSBND_PBAPLY_DTL_TR 상생매출채권발행신청내역 - -
TB_PRC_OSBND_GL_BC 외상매출채권원장 - - -
TB_CLB_WW_SLS_BND_GL_BC 상생매출채권원장 - - -
TB_CLB_NTSL_ENT_GL_BC 협력기업원장 - - -
TB_CLB_NTSL_ENT_BROF_BC 협력기업지사정보 - - -
TB_COM_TASK_CTRL_INFO_BC 업무제어정보 - - -
TB_PRC_PRCHS_ENT_GL_BC 구매기업원장 - - -
TB_CLB_CUST_GL_BC 고객원장 - - -

수취채권 발행 전 결재선 내역 승인기한 체크 (addrBfPblcnAplnJob)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_CLB_WSBND_PBAPLY_GL_BC 상생매출채권발행신청원장 - -
TB_CLB_WSBND_PBAPLY_DTL_TR 상생매출채권발행신청내역 - -
TB_COM_MP_APLN_LIST_BC MP결재선목록 - - -

채권 수취전 발행 요청일 만료 처리 (dmndExpryAddrBfPblcnRsvtJob)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_CLB_WSBND_PBAPLY_GL_BC 상생매출채권발행신청원장 - -
TB_CLB_WSBND_PBAPLY_DTL_TR 상생매출채권발행신청내역 - -

(구매기업)결재기한 만료 처리 (aprvnTermExpSchedulerJob01)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_PRC_OSBND_PBAPLY_GL_BC 외상매출채권발행신청원장 - -
TB_PRC_OSBND_PBAPLY_DTL_TR 외상매출채권발행신청내역 - - -
TB_COM_MP_APLN_LIST_BC MP결재선목록 - -

8.3.3 정산 배치

장려금배분 (aprtSubsdJob)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_MNG_SUBSD_DEDTL_TR 장려금세부내역 -
TB_MNG_CLCLN_GL_BC 정산원장 - - -
TB_CLB_WW_SLS_BND_GL_BC 상생매출채권원장 - - -
TB_CLB_WW_SLS_BND_PBLCN_TRGT 상생매출채권발행장려금대상 - - -
TB_CLB_WW_SLS_BND_DSCNT_TRGT 상생매출채권할인장려금대상 - - -
TB_CLB_WW_SLS_BND_SLCTN_MTN_TRGT 상생매출채권선정산장려금대상 - - -
TB_CLB_LOAN_EXCN_GL_BC 대출실행원장 - - -
TB_CLB_PCALL_DLNG_DTL_TR 선정산거래내역 - - -
TB_CLB_LOAN_DLNG_DTL_TR 대출거래내역 - - -
TB_CLB_NTSL_ENT_GL_BC 협력기업원장 - - -
TB_PRC_OSBND_GL_BC 외상매출채권원장 - - -
TB_MNG_CLCLN_DTL_TR 정산내역 - - -
TB_COM_HLDY_INFO_BC 휴일정보 - - -

장려금정산이체처리 (prcsSubsdClclnTrJob)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_MNG_CLCLN_GL_BC 정산원장 - -
TB_MNG_CLCLN_DTL_TR 정산내역 - -
TB_COM_BACNT_INFO_BC 금융기관용도별계좌정보 - - -

운영수수료정산 (operFeeClclnJob)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_MNG_CLCLN_GL_BC 정산원장 - -
TB_MNG_CLCLN_DTL_TR 정산내역 -
TB_COM_FEE_INFO_BC 수수료정보 - - -

MP수수료정산 (mpFeeClclnJob)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_MNG_CLCLN_GL_BC 정산원장 - -
TB_MNG_CLCLN_DTL_TR 정산내역 -
TB_COM_FEE_INFO_BC 수수료정보 - - -

8.3.4 원장 대사 배치

원장대사 전문거래내역관리 (dlngCompFileAllRegJob)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_COM_TELGM_DLNG_DTL_BC 전문거래내역 - -

예치금잔액대사 (dlngCompFile00Job)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_COM_COMP_DSCTN_TR 대사내역
TB_COM_COMP_GNLGR_BC 대사원장 -
TB_PRC_PRCHS_ENT_STLM_ACT_BC 구매기업결제계좌 - - -

구매기업원장_원장대사 (dlngCompFile01Job)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_COM_COMP_DSCTN_TR 대사내역
TB_COM_COMP_GNLGR_BC 대사원장 -
TB_PRC_PRCHS_ENT_GL_BC 구매기업원장 - - -

구매기업지사정보_원장대사 (dlngCompFile02Job)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_COM_COMP_DSCTN_TR 대사내역
TB_COM_COMP_GNLGR_BC 대사원장 -
TB_PRC_PRCHS_ENT_BROF_BC 구매기업지사정보 - - -

협력기업원장_원장대사 (dlngCompFile11Job)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_COM_COMP_DSCTN_TR 대사내역
TB_COM_COMP_GNLGR_BC 대사원장 -
TB_CLB_NTSL_ENT_GL_BC 협력기업원장 - - -

거래선원장_원장대사 (dlngCompFile12Job)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_COM_COMP_DSCTN_TR 대사내역
TB_COM_COMP_GNLGR_BC 대사원장 -
TB_CLB_NTSL_ENT_GL_BC 협력기업원장 - - -

외상매출채권원장_원장대사 (dlngCompFile21Job)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_COM_COMP_DSCTN_TR 대사내역
TB_COM_COMP_GNLGR_BC 대사원장 -
TB_PRC_OSBND_GL_BC 외상매출채권원장 - - -

상생매출채권원장_원장대사 (dlngCompFile22Job)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_COM_COMP_DSCTN_TR 대사내역
TB_COM_COMP_GNLGR_BC 대사원장 -
TB_CLB_WW_SLS_BND_GL_BC 상생매출채권원장 - - -

대출약정원장_원장대사 (dlngCompFile31Job)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_COM_COMP_DSCTN_TR 대사내역
TB_COM_COMP_GNLGR_BC 대사원장 -
TB_CLB_LOAN_STPL_GL_BC 대출약정원장 - - -

대출실행원장_원장대사 (dlngCompFile32Job)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_COM_COMP_DSCTN_TR 대사내역
TB_COM_COMP_GNLGR_BC 대사원장 -
TB_CLB_LOAN_EXCN_GL_BC 대출실행원장 - - -

거래원장대사 (dlngCompInsdGnlgrJob)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_COM_COMP_DSCTN_TR 대사내역 -
TB_PRC_PRCHS_ENT_GL_BC 구매기업원장 - - -
TB_PRC_OSBND_GL_BC 외상매출채권원장 - - -
TB_CLB_WW_SLS_BND_GL_BC 상생매출채권원장 - - -
TB_CLB_LOAN_STPL_GL_BC 대출약정원장 - - -
TB_CLB_LOAN_EXCN_GL_BC 대출실행원장 - - -
TB_CLB_NTSL_ENT_GL_BC 협력기업원장 - - -
TB_PRC_PRCHS_ENT_BROF_BC 구매기업지사정보 - - -
TB_PRC_PRCHS_ENT_STLM_ACT_BC 구매기업결제계좌 - - -
TB_CLB_TXIV_APRT_DTL_TR 세금계산서배분내역 - - -
TB_CLB_PCALL_DLNG_DTL_TR 선정산거래내역 - - -
TB_CLB_LOAN_DLNG_DTL_TR 대출거래내역 - - -
base_calendar 기준일력 - - -

8.3.5 기타 배치

만기결제집계정보 (mtryStlmTotInfoJob)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_PRC_MTRY_STLM_TOT_SM 만기결제집계정보 -
TB_PRC_OSBND_STLM_DTL_TR 외상매출채권결제내역 - -
TB_PRC_OSBND_GL_BC 외상매출채권원장 - - -
TB_COM_HLDY_INFO_BC 휴일정보 - - -
TB_CLB_LOAN_EXCN_GL_BC 대출실행원장 - - -
TB_CLB_WW_SLS_BND_GL_BC 상생매출채권원장 - - -

관리자MP관리 (adminMpMngScheduler01Job)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_COM_MP_NTC_TR MP공지사항 - -
TB_COM_MP_POPUP_MNG MP팝업관리 - -
TB_COM_UTZTN_TRMS_INFO_BC 이용약관정보 - -
TB_COM_PRVC_TRMS_INFO_BC 개인정보처리방침정보 - -
TB_COM_MKT_TRMS_INFO_BC 마케팅정보수신동의정보 - -
TB_COM_STPLDOC_BC 약정서 - -

대출연장안내 (loanPrlgGdJob)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_CLB_LOAN_STPL_GL_BC 대출약정원장 - - -
TB_CLB_LOAN_EXCN_GL_BC 대출실행원장 - - -
TB_CLB_NTSL_ENT_GL_BC 협력기업원장 - - -
TB_COM_MP_MBR_BC MP회원 - - -
TB_COM_FNST_CD_BC 금융기관코드 - - -
TB_COM_HLDY_INFO_BC 휴일정보 - - -

고객확인재등록안내 (custIdntyRrgGdJob)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_CLB_NTSL_ENT_GL_BC 협력기업원장 - - -
TB_COM_MP_MBR_BC MP회원 - - -
TB_COM_HLDY_INFO_BC 휴일정보 - - -

오류알림 (errorNotificationJob)

테이블명 논리명 SELECT INSERT UPDATE DELETE
TB_COM_TELGM_DLNG_DTL_BC 전문거래내역 - - -
TB_COM_COMP_GNLGR_BC 대사원장 - - -
TB_COM_OPER_AVTSMT_INFO 운영자 통지 정보 - - -
TB_COM_USER_INFO_BC 사용자정보 - - -
TB_COM_CD_DSCTN_BC 코드상세 - - -

9. Logging & Monitoring

9.1 로그 설정

로그 파일 위치:

  • 기본 경로: /usr/local/tomcat-batch/logs (또는 logging.file.dir 설정값)
  • 로그 파일명: esisync-batch.log (또는 logging.file.name-base 설정값)
  • 롤링 파일: esisync-batch-{yyyy-MM-dd}.{i}.log 형식으로 날짜별/크기별 롤링
  • 로컬 환경: 파일 로그 없이 콘솔만 사용 (springProfile="local")
  • 기타 환경: 콘솔 + 파일 로그 모두 사용

로그 설정 파일: logback-spring.xml

로그 파일 설정:

  • 최대 파일 크기: 100MB
  • 최대 보관 기간: 30일
  • 전체 로그 크기 제한: 10GB
  • 롤링 정책: 크기 + 시간 기반 (SizeAndTimeBasedRollingPolicy)

로그 확인 방법:

# 실시간 로그 확인
tail -f /usr/local/tomcat-batch/logs/esisync-batch.log

# 에러 로그만 확인
grep ERROR /usr/local/tomcat-batch/logs/esisync-batch.log

# 특정 배치 Job 로그 확인
grep "osbndPblcnRprcsScheduler01Job" /usr/local/tomcat-batch/logs/esisync-batch.log

# 최근 100줄 확인
tail -n 100 /usr/local/tomcat-batch/logs/esisync-batch.log

9.2 로그 레벨

기본 로그 레벨:

  • Root 로그 레벨: logging.level.root 설정값 (기본값: INFO)
  • 애플리케이션 로그: com.esi.nextgen.batch 패키지
  • MyBatis 로그: org.mybatis, org.apache.ibatis 패키지

MyBatis SQL 로그:

  • application.yml에서 mybatis.configuration.log-impl 설정
  • 기본값: org.apache.ibatis.logging.stdout.StdOutImpl (콘솔 출력)

로컬 환경 특수 설정:

  • 상세 로그 레벨: com.esi.nextgen.batch 패키지 DEBUG 레벨
  • 간단한 콘솔 패턴 사용 (날짜, thread, traceId 제거)
  • 파일 로그 없음 (콘솔만)

9.3 모니터링

9.3.1 Spring Boot Actuator

의존성:

  • spring-boot-starter-actuator (build.gradle에 포함)
  • micrometer-core, micrometer-observation (메트릭 수집용)

기본 Actuator 엔드포인트 URL:

  • Base URL: http://localhost:8090/batch/actuator
  • Health Check: http://localhost:8090/batch/actuator/health
  • Info: http://localhost:8090/batch/actuator/info
  • Metrics: http://localhost:8090/batch/actuator/metrics
  • 특정 메트릭 조회: http://localhost:8090/batch/actuator/metrics/{metricName}
    • 예: http://localhost:8090/batch/actuator/metrics/jvm.memory.used
  • Prometheus (설정 시): http://localhost:8090/batch/actuator/prometheus

주요 메트릭:

  • JVM 메모리: jvm.memory.used, jvm.memory.max
  • JVM GC: jvm.gc.pause
  • HTTP 요청: http.server.requests
  • 데이터베이스 연결 풀: hikari.connections.*
  • Spring Batch: spring.batch.*

9.3.2 Spring Batch Job 실행 모니터링

메타데이터 테이블을 통한 조회:

-- 최근 실행된 Job 목록
SELECT 
    JOB_EXECUTION_ID,
    JOB_NAME,
    STATUS,
    START_TIME,
    END_TIME,
    EXIT_CODE,
    EXIT_MESSAGE
FROM BATCH_JOB_EXECUTION
ORDER BY START_TIME DESC
LIMIT 10;

-- 특정 Job의 실행 이력
SELECT 
    JOB_EXECUTION_ID,
    STATUS,
    START_TIME,
    END_TIME,
    EXIT_CODE
FROM BATCH_JOB_EXECUTION
WHERE JOB_NAME = '218_telgmReDlngJob'
ORDER BY START_TIME DESC;

9.3.3 데이터베이스 연결 풀 모니터링

HikariCP 설정:

  • 최대 연결 수: 60
  • 최소 유휴 연결: 5
  • 연결 타임아웃: 60초
  • 유휴 연결 타임아웃: 10분
  • 연결 최대 수명: 30분
  • 메모리 누수 감지: 60초

모니터링 방법:

  • Actuator 메트릭: hikari.connections.active, hikari.connections.idle
  • 로그: HikariCP DEBUG 레벨 로그 확인

9.3.4 외부 모니터링 도구


10. 외부 연동

10.1 마이크로서비스 연동

다음 서비스들과 HTTP 통신:

  • adapter: 어댑터 서비스 (전문 송신용)

10.2 배치별 외부 연동 현황

10.2.1 Adapter 서비스 연동 (전문 송신)

배치명 Job 이름 연동 서비스 연동 경로 전문 코드 비고
전문 재거래 telgmReDlngJob adapter /api/sendMsg 재처리 대상 전문 코드 실패한 전문 재전송 (GatewayApiCall 사용)
외상매출채권발행처리 osbndPblcnRprcsScheduler01Job adapter /api/sendMsg 6010 외상매출채권발행 전문 (MessageHelper 사용)
외상매출채권선결제처리 osbndAdvpayScheduler01Job adapter /api/sendMsg 6030 외상매출채권선결제신청 전문 (MessageHelper 사용)
외매채 즉시취소 prcOsbndRtrcnDlngSe01Job adapter /api/sendMsg 6011 외상매출채권발행취소 전문 (GatewayApiCall 사용)
외매채 취소요청 prcOsbndRtrcnDlngSe02Job adapter /api/sendMsg 6011 외상매출채권발행취소 전문 (GatewayApiCall 사용)
상매채 즉시취소 wwSlsBndRtrcnDlngSe01Job adapter /api/sendMsg 6021 상생매출채권발행취소 전문 (GatewayApiCall 사용)
상매채 취소요청 wwSlsBndRtrcnDlngSe02Job adapter /api/sendMsg 6021 상생매출채권발행취소 전문 (GatewayApiCall 사용)
수취채권 예약 발행 addrBndRsvtPblcnJob adapter /api/sendMsg 6020 상생매출채권발행 전문 (GatewayApiCall 사용)
수취채권 즉시 발행 addrBndNowPblcnJob adapter /api/sendMsg 6020 상생매출채권발행 전문 (GatewayApiCall 사용)
장려금정산이체처리 prcsSubsdClclnTrJob adapter /api/sendMsg 7020 자금이체 전문 (GatewayApiCall 사용)

참고사항:

  • Adapter 서비스는 금융기관과의 전문 송수신을 담당합니다.
  • GatewayApiCall 유틸리티를 통해 호출됩니다.
  • 전문 코드는 PrcAppConstants.TELGM_CD에 정의되어 있습니다.

10.2.2 Surem API 연동 (알림톡/SMS 발송)

배치명 Job 이름 연동 유형 템플릿 코드 비고
대출연장안내 loanPrlgGdJob 알림톡 ESI_SYNC_018 대출 만기 30일 전 안내
고객확인재등록안내 custIdntyRrgGdJob 알림톡 ESI_SYNC_019 고객확인 만기 30일 전 안내
(구매기업)결재기한 만료 처리 aprvnTermExpSchedulerJob01 알림톡 ESI_SYNC_003, ESI_SYNC_006 결재기한 만료 시 결재권자(003), 요청자(006)에게 알림톡 발송
수취채권 발행 전 결재선 내역 승인기한 체크 addrBfPblcnAplnJob 알림톡 ESI_SYNC_003, ESI_SYNC_006 승인기한 지난 결재미완료건에 대해 결재권자(003), 요청자(006)에게 알림톡 발송
오류알림 errorNotificationJob SMS - 전문 오류 발생 시 운영자에게 SMS 발송
대내원장대사 오류알림 (대사 배치 내부 호출) SMS - 대내원장대사 불일치 발생 시 운영자에게 SMS 발송
대외원장대사 오류알림 (대사 배치 내부 호출) SMS - 대외원장대사 불일치 발생 시 운영자에게 SMS 발송

참고사항:

  • 알림톡 발송은 batchAlimtalk 설정이 true일 때만 동작합니다.
  • 설정: application.ymlsurem 섹션
  • 서비스: com.esi.nextgen.batch.common.surem.service.SuremServiceImpl
  • SMS 발송은 suremMMSSetting 메서드를 통해 처리됩니다.
  • Surem API는 수렴(Surem) 서비스를 통해 알림톡/SMS를 발송합니다.
  • 주요 설정 항목:
    • surem.usercode: 사용자 코드
    • surem.deptcode: 부서 코드
    • surem.yellowidkey: 카카오톡 비즈니스 채널 키 (알림톡용)
    • surem.reqphone: 발신 전화번호 (SMS용)

11. 트러블슈팅

11.1 배치 작업이 실행되지 않는 경우

  1. profile 설정 확인
  2. Cron 표현식 확인 (application-local.yml 또는 환경별 설정)
  3. 데이터베이스 연결 확인
  4. 로그 파일 확인
  5. 비정상 종료 Job 존재 확인

11.1.1 비정상 종료로 인한 Job 실행 중 상태 확인 및 처리

문제 상황:

  • 애플리케이션이 강제 종료되거나 비정상 종료되어 Job이 STARTED 상태로 남아있음
  • 다음 스케줄 실행 시 "JobExecutionAlreadyRunningException" 발생하거나 실행되지 않음

확인 방법:

  1. SQL을 통한 확인
-- 실행 중인 Job 목록 확인
SELECT 
    JOB_EXECUTION_ID,
    JOB_INSTANCE_ID,
    JOB_NAME,
    STATUS,
    START_TIME,
    LAST_UPDATED,
    EXIT_CODE,
    EXIT_MESSAGE
FROM BATCH_JOB_EXECUTION
WHERE STATUS = 'STARTED'
ORDER BY START_TIME DESC;

-- 특정 Job의 실행 중 상태 확인
SELECT 
    JOB_EXECUTION_ID,
    JOB_NAME,
    STATUS,
    START_TIME,
    LAST_UPDATED
FROM BATCH_JOB_EXECUTION
WHERE JOB_NAME = '218_osbndPblcnRprcsScheduler01Job'
  AND STATUS = 'STARTED'
ORDER BY START_TIME DESC;

-- 실행 중인 Step 확인
SELECT 
    STEP_EXECUTION_ID,
    STEP_NAME,
    JOB_EXECUTION_ID,
    STATUS,
    START_TIME,
    LAST_UPDATED
FROM BATCH_STEP_EXECUTION
WHERE STATUS = 'STARTED'
ORDER BY START_TIME DESC;

처리 방법:

  1. SQL을 통한 수동 처리
-- 실행 중인 Job을 FAILED 상태로 변경
UPDATE BATCH_JOB_EXECUTION
SET STATUS = 'FAILED',
    EXIT_CODE = 'FAILED',
    EXIT_MESSAGE = '애플리케이션 비정상 종료로 인한 수동 처리',
    END_TIME = NOW(),
    LAST_UPDATED = NOW()
WHERE STATUS = 'STARTED'
  AND JOB_NAME = '218_osbndPblcnRprcsScheduler01Job'
  AND START_TIME < DATE_SUB(NOW(), INTERVAL 1 HOUR);  -- 1시간 이상 실행 중인 경우만

-- 실행 중인 Step도 함께 처리
UPDATE BATCH_STEP_EXECUTION
SET STATUS = 'FAILED',
    EXIT_CODE = 'FAILED',
    END_TIME = NOW(),
    LAST_UPDATED = NOW()
WHERE STATUS = 'STARTED'
  AND JOB_EXECUTION_ID IN (
      SELECT JOB_EXECUTION_ID 
      FROM BATCH_JOB_EXECUTION 
      WHERE STATUS = 'FAILED' 
        AND JOB_NAME = '218_osbndPblcnRprcsScheduler01Job'
  );
  1. 예방 방법
  • 일부 Scheduler에서는 이미 isRunning() 체크를 통해 실행 중인 Job이 있으면 스킵하는 로직이 구현되어 있음
  • 예시: AddrBndPblcnScheduler, PrcOsbndRtrcnScheduler, MtryStlmTotInfoScheduler

주의사항:

  • Job 상태를 변경하기 전에 해당 Job이 실제로 실행 중이 아닌지 확인 필요
  • LAST_UPDATED 시간을 확인하여 오래된 실행 중 상태만 처리하는 것을 권장
  • 상태 변경 후 다음 스케줄 실행 시 정상적으로 실행되는지 확인 필요

11.2 대사 파일 처리 오류

  1. 대사 파일 경로 확인 (base_path 설정)
  2. 파일 권한 확인
  3. 파일 형식 및 레이아웃 확인
  4. 로그에서 구체적인 오류 메시지 확인

11.3 데이터베이스 연결 오류

  1. HikariCP 연결 풀 설정 확인
  2. 데이터베이스 서버 상태 확인
  3. 네트워크 연결 확인
  4. 연결 타임아웃 설정 확인

11.4 전문 재거래 실패

  1. 재처리 대상 전문 코드 확인 (telgm.re-dlng-codes)
  2. 어댑터 서비스 상태 확인
  3. 네트워크 연결 확인
  4. 전문 형식 확인

12. 주요 상수 및 코드

12.1 금융기관 코드

  • ESI: 결제전산원
  • 218 (KBSEC): KB증권

12.2 채권 상태 코드

  • 01: 정상
  • 02: 완제
  • 03: 취소요청
  • 09: 취소

12.3 발행 구분 코드

  • 1: 즉시발행
  • 2: 예약발행

12.4 대사 원장 구분 코드

  • 00: 예치금잔액대사
  • 01: 구매기업원장_원장대사
  • 02: 구매기업지사정보_원장대사
  • 11: 협력기업원장_원장대사
  • 12: 거래선원장_원장대사
  • 21: 외상매출채권원장_원장대사
  • 22: 상생매출채권원장_원장대사
  • 31: 대출약정원장_원장대사
  • 32: 대출실행원장_원장대사
  • 99: 대내 대사

상세한 상수는 PrcAppConstants.java 참조


13. 개발 가이드

13.1 새로운 배치 작업 추가 방법

  1. Service 클래스 생성: service/ 패키지에 비즈니스 로직 구현
    • 필요 시 Mapper 인터페이스 생성: mapper/ 패키지에 Mapper 인터페이스 생성
    • 필요 시 Mapper XML 생성: resources/mapper/에 XML 파일 생성
  2. Config 클래스 생성: config/ 패키지에 *BatchConfig.java 생성
    • Job, Step 설정
    • Tasklet 정의
  3. Scheduler 클래스 생성: scheduler/ 패키지에 @Scheduled 메서드 추가
    • 또는 기존 Scheduler 클래스에 메서드 추가
  4. Cron 설정 추가: application-local.yml 또는 환경별 설정 파일에 Cron 표현식 추가
    • 형식: batch.cron.{배치명}: 'cron 표현식'
  5. BatchCronConfig에 Bean 추가: Cron Bean 등록
    • @Bean("{배치명}Cron") 메서드 추가
    • @Value("${batch.cron.{배치명}}") 사용
  6. BatchJobNameMapper에 매핑 추가: Job 이름 한글명 매핑 (선택사항)

13.2 Job 실행 흐름

Spring Batch Job이 실행되는 전체 흐름은 다음과 같습니다:

1. application.yml (또는 application-local.yml)
   └─ batch.cron.osbndPblcnRprcs: '0 0 0 1 * *'
      ↓
2. BatchCronConfig (@Configuration)
   └─ @Bean("osbndPblcnRprcsCron")
      └─ @Value("${batch.cron.osbndPblcnRprcs}") String cron
      └─ Bean으로 등록: "osbndPblcnRprcsCron"
      ↓
3. Scheduler 클래스 (@Component)
   └─ @Scheduled(cron = "#{@osbndPblcnRprcsCron}")
   └─ Spring의 스케줄러가 cron 표현식에 따라 메서드 실행
      ↓
4. Scheduler.runOsbndPblcnRprcsScheduler01Job()
   └─ JobParameters 생성 (timestamp 등)
   └─ jobLauncher.run(osbndPblcnRprcsScheduler01Job, jobParameters)
      ↓
5. JobLauncher (Spring Batch)
   └─ Job 실행 시작
   └─ JobRepository에 실행 정보 저장
      ↓
6. Job Config (예: OsbndPblcnRprcsBatchConfig)
   └─ @Bean osbndPblcnRprcsScheduler01Job()
   └─ JobBuilder로 Job 생성
   └─ Step 연결
      ↓
7. Step (예: osbndPblcnRprcsScheduler01Step)
   └─ StepBuilder로 Step 생성
   └─ Tasklet 연결
      ↓
8. Tasklet (예: osbndPblcnRprcsSe01Tasklet)
   └─ execute() 메서드 실행
   └─ 실제 비즈니스 로직 호출
      ↓
9. Service (예: OsbndPblcnService)
   └─ prcsOsbndPblcn() 메서드 실행
   └─ 비즈니스 로직 처리

주요 구성 요소:

  1. Cron 설정 파일 (application.yml 또는 application-local.yml)

    • batch.cron.{배치명} 형식으로 cron 표현식 정의
    • 예: batch.cron.osbndPblcnRprcs: '0 0 0 1 * *'
  2. BatchCronConfig (@Configuration)

    • @Value("${batch.cron.{배치명}}")로 cron 값 읽기
    • @Bean("{배치명}Cron")으로 Bean 등록
    • Spring Expression Language(SpEL)에서 참조 가능하도록 함
  3. Scheduler 클래스 (@Component)

    • @Scheduled(cron = "#{@{배치명}Cron}")로 Bean 참조
    • Spring의 @EnableScheduling 활성화 필요
    • cron 표현식에 따라 메서드 자동 실행
  4. JobLauncher

    • Spring Batch의 Job 실행 인터페이스
    • Job과 JobParameters를 받아 실행
    • JobRepository에 실행 이력 저장
  5. Job Config (@Configuration)

    • @Bean으로 Job 정의
    • JobBuilder로 Job 생성
    • Step 연결 및 Listener 설정
  6. Step

    • Job의 실행 단위
    • StepBuilder로 Step 생성
    • Tasklet 또는 Chunk 방식 선택
  7. Tasklet

    • Step의 실행 로직
    • execute() 메서드에서 실제 비즈니스 로직 호출
  8. Service

    • 실제 비즈니스 로직 처리
    • 데이터 조회, 가공, 저장 등 수행

예시 코드 흐름:

// 1. application-local.yml
batch:
  cron:
    osbndPblcnRprcs: '0 0 0 1 * *'

// 2. BatchCronConfig.java
@Bean("osbndPblcnRprcsCron")
public String osbndPblcnRprcsCron(@Value("${batch.cron.osbndPblcnRprcs}") String cron) {
    return cron;
}

// 3. OsbndPblcnRprcsScheduler.java
@Scheduled(cron = "#{@osbndPblcnRprcsCron}")
public void runOsbndPblcnRprcsScheduler01Job() {
    jobLauncher.run(osbndPblcnRprcsScheduler01Job, jobParameters);
}

// 4. OsbndPblcnRprcsBatchConfig.java
@Bean
public Job osbndPblcnRprcsScheduler01Job(...) {
    return new JobBuilder(...)
        .start(osbndPblcnRprcsScheduler01Step(...))
        .build();
}

// 5. Tasklet
public Tasklet osbndPblcnRprcsSe01Tasklet() {
    return (contribution, chunkContext) -> {
        osbndPblcnService.prcsOsbndPblcn(); // Service 호출
        return RepeatStatus.FINISHED;
    };
}

13.3 코딩 컨벤션

  • 의존성 주입: Lombok의 @RequiredArgsConstructor 사용
  • 함수 구현: 정적 메서드로 구현 (가능한 경우)
  • 로깅: SLF4J 사용 (@Slf4j)

13.4 테스트

  • 테스트 코드 위치: src/test/java/
  • Spring Batch 테스트: spring-batch-test 의존성 사용
  • TestJobRunner
    • profile 설정 필요
      • 환경변수: SPRING_PROFILES_ACTIVE=local
    • Job name 설정 후 실행
  @Qualifier("dlngCompFile00Job") Job runJob

13.5 Batch project 실행

  • Gradle bootRun 실행

    • profile 설정 필요
      • 환경변수: SPRING_PROFILES_ACTIVE=local
  • BatchApplication

    • Active profiles 지정

14. 배포 및 운영

14.1 배포 환경

  • 로컬: application-local.yml
  • F218: application-F218.yml
    • 금융기관 추가 시 금융기관별 profile 추가 필요
    • (주의) 현재 개발/운영 profile 분리되어 있지 않음!!
  • 프로파일은 spring.profiles.active로 지정

14.2 모니터링

자세한 모니터링 설정 및 방법은 9.3 모니터링 섹션을 참조하세요.

14.3 백업

  • 대사 파일 백업: backup 폴더에 날짜별로 저장
  • 데이터베이스 백업: 별도 정책에 따라 수행

15. 참고 자료

15.1 주요 클래스 참조

  • 메인 애플리케이션: BatchApplication.java
  • 배치 작업 매퍼: BatchJobNameMapper.java
  • 상수 정의: PrcAppConstants.java
  • 배치 Cron 설정: BatchCronConfig.java

15.2 MessageHelper

클래스 위치: com.esi.nextgen.batch.common.util.MessageHelper

주요 기능:

  • 전문(Telegram) 생성 및 송신: FieldSpec 어노테이션 기반으로 전문 자동 생성 및 변환
  • 전문 파싱: 고정 길이 전문을 VO 객체로 파싱
  • 필드 자동 처리: 길이, 패딩, 정렬 자동 처리 (EUC-KR 바이트 길이 기준)
  • 검증: Bean Validation + FieldSpec 길이 검증
  • 대사 파일 읽기: H/D/T 레코드 타입 파일 파싱

주요 메서드:

  • createTelegram(): 전문 생성 (공통부 포함, Supplier 패턴 지원)
  • sendMessage(): 전문 송신 및 전문거래내역 테이블 자동 등록
  • parseMessage(): 전문 문자열을 VO 객체로 파싱
  • readFile(): 대사 파일 읽기 및 파싱
  • validateAll(): Bean Validation + FieldSpec 검증

사용 배치:

  • 외상매출채권발행처리 (OsBondIssueService)
  • 외상매출채권선결제처리 (OsbndAdvpayService)
  • 원장 대사 파일 처리 (DlngCompFileRegService)

특징:

  • @FieldSpec 어노테이션으로 필드 메타데이터 정의
  • EUC-KR 인코딩 기준 바이트 길이 처리 (한글 2바이트)
  • 전문 공통부 자동 생성 및 전문거래내역 자동 로깅
  • GatewayApiCall을 통한 Adapter 서비스 연동 (/api/sendMsg)

15.3 GatewayApiCall

클래스 위치: com.esi.nextgen.batch.common.util.GatewayApiCall

주요 기능:

  • 게이트웨이 전문 호출: Adapter 서비스로 전문(Telegram) 송신
  • Flat 전문 변환: VO 객체를 Flat 전문 형식으로 자동 변환
  • 동기식 호출: GenericWebClient를 통한 HTTP 통신

주요 메서드:

  • callGatewayTelgm(): 게이트웨이 전문 호출 (Flat 전문 송신)
    • 파라미터: serviceName (서비스명), uri (호출 경로), requestVo (전문 요청 객체)
    • 반환값: true (성공), false (실패)

사용 배치:

  • 전문 재거래 (TelgmReDlngSingleService)
  • 외매채 즉시취소/취소요청 (PrcOsbndRtrcnProcessService)
  • 상매채 즉시취소/취소요청 (ClbWwSlsBndRtrcnProcessService)
  • 수취채권 예약/즉시 발행 (ApiClbWwSlsBndPblcnService)
  • 장려금정산이체처리 (PrcsSubsdClclnTrService)

특징:

  • FlatMessageConverter를 통한 VO → Flat 전문 변환
  • application.ymlapi.gateway.send-message-url 설정 사용 (기본값: /api/sendMsg)
  • Form Data 형식으로 전송 (msg 키에 Flat 전문 포함)
  • GenericWebClient를 통한 마이크로서비스 간 통신

MessageHelper와의 차이점:

  • GatewayApiCall: 직접적인 전문 송신 (Flat 전문 변환 후 전송)
  • MessageHelper: 전문 생성, 검증, 로깅 등 추가 기능 포함 (내부적으로 GatewayApiCall 사용)

15.4 문서화

  • 각 클래스에는 JavaDoc 주석이 포함되어 있습니다.
  • 주요 메서드에는 설명이 포함되어 있습니다.

16. 주의사항

16.1 중요 사항

  1. 금융기관 코드: 각 환경별로 올바른 금융기관 코드 설정 필요
  2. 대사 파일 경로: 운영 환경과 개발 환경의 경로가 다를 수 있음
  3. 데이터베이스 연결: 프로덕션 환경의 연결 정보는 별도 관리 필요
  4. Cron 표현식: 배치 실행 시간은 비즈니스 요구사항에 맞게 조정 필요
  5. 파일 권한: 대사 파일 읽기/쓰기 권한 확인 필요

16.2 보안

  • 데이터베이스 비밀번호는 환경 변수나 별도 설정 파일로 관리 권장

부록 A: 배치 작업 실행 명령어 예시

# 전문 재거래 배치 실행
java -jar batch-0.0.1-SNAPSHOT.jar --spring.profiles.active=F218 --job.name=218_telgmReDlngJob

# 원장 대사 파일 처리 배치 실행
java -jar batch-0.0.1-SNAPSHOT.jar --spring.profiles.active=F218 --job.name=218_dlngCompFile00Job

# 장려금 배분 배치 실행
java -jar batch-0.0.1-SNAPSHOT.jar --spring.profiles.active=F218 --job.name=218_aprtSubsdJob

부록 B: Cron 표현식 참고

표현식 의미
0 0 0 1 * * 매월 1일 0시 0분 0초
0 29 * * * * 매분 29초
0 */5 8-22 * * MON-FRI 평일 08~22시 매 5분
0 0 10 * * MON-FRI 평일 10시
0 * 8-21 * * * 매일 08~21시 매 1분
0 */2 * * * * 매 2분마다
30 * 8-20 * * MON-FRI 평일 08~20시 매 1분 30초(초=30)
0 0 2 * * ? 매일 02:00
0 0 9 * * MON-FRI 평일 09:00
0 0 20 1 * ? 매월 1일 20:00

참고: Spring의 cron 표현식은 초 분 시 일 월 요일(6필드) 형식이며, ?는 “특정 값 없음”을 의미합니다. 운영/로컬 프로필마다 값이 다를 수 있으니 실제 주기는 application-F218.yml, application-local.ymlbatch.cron을 확인하세요.


문서 작성일: 2025-12-09
문서 버전: 1.0
작성자: 시스템

Updated by 길호 원 9 months ago · 15 revisions