About-batch » History » Version 8
길호 원, 12/15/2025 03:31 PM
| 1 | 1 | 길호 원 | # ESI NextGen Batch 시스템 인수인계 문서 |
|---|---|---|---|
| 2 | |||
| 3 | ## 1. 프로젝트 개요 |
||
| 4 | |||
| 5 | ### 1.1 프로젝트 정보 |
||
| 6 | - **프로젝트명**: ESI NextGen Batch |
||
| 7 | - **버전**: 0.0.1-SNAPSHOT |
||
| 8 | - **프로젝트 타입**: Spring Batch 기반 배치 처리 시스템 |
||
| 9 | - **주요 목적**: ESI(전자상거래 결제 시스템)의 다양한 배치 작업 자동화 처리 |
||
| 10 | |||
| 11 | ### 1.2 주요 기능 |
||
| 12 | - 채권 발행 및 취소 처리 배치 |
||
| 13 | - 장려금/수수료 정산 배치 |
||
| 14 | - 원장 대사 파일 처리 배치 |
||
| 15 | - 전문 재거래 처리 배치 |
||
| 16 | - 알림톡 발송 배치 |
||
| 17 | - 오류 알림 배치 |
||
| 18 | |||
| 19 | --- |
||
| 20 | |||
| 21 | ## 2. 기술 스택 |
||
| 22 | |||
| 23 | ### 2.1 개발 환경 |
||
| 24 | - **Java**: 21 |
||
| 25 | - **Build Tool**: Gradle |
||
| 26 | - **Spring Boot**: 3.4.4 |
||
| 27 | - **Spring Batch**: 5.x (Spring Boot Starter 포함) |
||
| 28 | - **Database**: MySQL 8.0.33 |
||
| 29 | - **ORM**: MyBatis 3.0.4 |
||
| 30 | |||
| 31 | ### 2.2 주요 의존성 |
||
| 32 | ```gradle |
||
| 33 | - Spring Boot Starter Batch |
||
| 34 | - Spring Boot Starter Web |
||
| 35 | - Spring Boot Starter WebFlux (WebClient) |
||
| 36 | - Spring Boot Starter Actuator (모니터링) |
||
| 37 | - Spring Boot Starter JDBC |
||
| 38 | - Spring Boot Starter Validation |
||
| 39 | - MyBatis Spring Boot Starter (3.0.4) |
||
| 40 | - MySQL Connector (8.0.33) |
||
| 41 | - Lombok |
||
| 42 | - Apache Commons Lang3 (3.12.0) |
||
| 43 | - Apache HttpClient5 (5.4.1) |
||
| 44 | - JSON (20190722) |
||
| 45 | - Micrometer Core (모니터링) |
||
| 46 | - Micrometer Observation (모니터링) |
||
| 47 | ``` |
||
| 48 | |||
| 49 | ### 2.3 개발 도구 |
||
| 50 | - **IDE**: IntelliJ IDEA / Eclipse |
||
| 51 | - **Version Control**: Git |
||
| 52 | 2 | 길호 원 | - **Repository** |
| 53 | - Git (http://192.168.245.41:9090/next-esi/batch) |
||
| 54 | - **Jenkins**: http://192.168.245.41:8083 |
||
| 55 | 1 | 길호 원 | --- |
| 56 | |||
| 57 | ## 3. 프로젝트 구조 |
||
| 58 | |||
| 59 | ### 3.1 디렉토리 구조 |
||
| 60 | ``` |
||
| 61 | src/main/java/com/esi/nextgen/batch/ |
||
| 62 | ├── BatchApplication.java # 메인 애플리케이션 클래스 |
||
| 63 | ├── bizcom/ # 비즈니스 공통 모듈 |
||
| 64 | │ ├── constants/ # 상수 정의 |
||
| 65 | │ ├── mapper/ # MyBatis Mapper 인터페이스 |
||
| 66 | │ ├── model/ # 도메인 모델 |
||
| 67 | │ ├── service/ # 비즈니스 서비스 |
||
| 68 | │ ├── util/ # 유틸리티 |
||
| 69 | │ └── vo/ # Value Object |
||
| 70 | ├── common/ # 공통 모듈 |
||
| 71 | │ ├── annotation/ # 커스텀 어노테이션 |
||
| 72 | │ ├── config/ # 공통 설정 |
||
| 73 | │ ├── constants/ # 공통 상수 |
||
| 74 | │ ├── listener/ # 배치 리스너 |
||
| 75 | │ ├── surem/ # 알림톡/SMS 메시지 관련 |
||
| 76 | │ └── util/ # 공통 유틸리티 |
||
| 77 | ├── comp/ # 원장 대사 관련 |
||
| 78 | │ ├── config/ # 대사 배치 설정 |
||
| 79 | │ ├── controller/ # 대사 컨트롤러 |
||
| 80 | │ ├── mapper/ # 대사 Mapper |
||
| 81 | │ ├── model/ # 대사 모델 |
||
| 82 | │ ├── scheduler/ # 대사 스케줄러 |
||
| 83 | │ ├── service/ # 대사 서비스 |
||
| 84 | │ └── vo/ # 대사 VO |
||
| 85 | ├── config/ # 배치 설정 클래스 |
||
| 86 | │ ├── BatchCronConfig.java # Cron 표현식 설정 |
||
| 87 | │ ├── BatchFnstProperties.java # 금융기관 코드 설정 |
||
| 88 | │ ├── DBBatchConfig.java # DB 배치 설정 |
||
| 89 | │ └── [각 배치별 Config 클래스들] |
||
| 90 | ├── constants/ # 상수 정의 |
||
| 91 | │ ├── BatchFileInfo.java # 배치 파일 정보 |
||
| 92 | │ ├── CompChckArtc.java # 대사 체크 아티클 |
||
| 93 | │ └── PrcAppConstants.java # 프로세스 앱 상수 |
||
| 94 | ├── controller/ # REST API 컨트롤러 |
||
| 95 | ├── dbio/ # DB I/O 모듈 |
||
| 96 | │ ├── mapper/ # DB Mapper 인터페이스 |
||
| 97 | │ └── model/ # DB 모델 (DTO) |
||
| 98 | ├── mapper/ # 비즈니스 Mapper |
||
| 99 | ├── model/ # 비즈니스 모델 |
||
| 100 | ├── scheduler/ # 스케줄러 클래스 |
||
| 101 | ├── service/ # 서비스 클래스 |
||
| 102 | └── vo/ # Value Object |
||
| 103 | ``` |
||
| 104 | |||
| 105 | ### 3.2 리소스 구조 |
||
| 106 | ``` |
||
| 107 | src/main/resources/ |
||
| 108 | ├── application.yml # 기본 설정 파일 |
||
| 109 | ├── application-local.yml # 로컬 환경 설정 |
||
| 110 | ├── application-F218.yml # F218 환경 설정 |
||
| 111 | ├── logback-spring.xml # 로깅 설정 |
||
| 112 | └── mapper/ # MyBatis XML Mapper |
||
| 113 | ├── bizcom/ # 비즈니스 공통 |
||
| 114 | ├── bond/ # 채권 관련 |
||
| 115 | ├── clcln/ # 정산 관련 |
||
| 116 | ├── comp/ # 대사 관련 |
||
| 117 | ├── dbio/ # DB I/O |
||
| 118 | ├── info/ # 정보 관련 |
||
| 119 | ├── mp/ # MP 관련 |
||
| 120 | ├── noti/ # 알림 관련 |
||
| 121 | └── test/ # 테스트 |
||
| 122 | ``` |
||
| 123 | |||
| 124 | --- |
||
| 125 | |||
| 126 | ## 4. 주요 배치 작업 목록 |
||
| 127 | |||
| 128 | ### 4.1 전문 거래 내역 배치 |
||
| 129 | | 배치명 | Job 이름 | 설명 | 실행 주기 | |
||
| 130 | |--------|---------|------|----------| |
||
| 131 | | 전문 재거래 | telgmReDlngJob | 실패한 전문 재전송 처리 | 매 2분마다 8시~23시 (F218) / 매월 1일 0시 (로컬) | |
||
| 132 | |||
| 133 | ### 4.2 채권 발행 배치 |
||
| 134 | | 배치명 | Job 이름 | 설명 | 실행 주기 | |
||
| 135 | |--------|---------|------|----------| |
||
| 136 | | 외상매출채권발행처리 | osbndPblcnRprcsScheduler01Job | 외상매출채권 발행 처리 | 월~금 8시~21시 매 1분 (F218) / 매월 1일 0시 (로컬) | |
||
| 137 | | 외상매출채권선결제처리 | osbndAdvpayScheduler01Job | 외상매출채권 선결제 처리 | 월~금 8시~18시 매 1분 (F218) / 매월 1일 0시 (로컬) | |
||
| 138 | | 외매채 즉시취소 | prcOsbndRtrcnDlngSe01Job | 외상매출채권 즉시 취소 | 월~금 8시~20시 매 1분 30초 (F218) / 매월 1일 0시 (로컬) | |
||
| 139 | | 외매채 취소요청 | prcOsbndRtrcnDlngSe02Job | 외상매출채권 취소 요청 처리 | 월~금 8시~20시 매 1분 30초 (F218) / 매월 1일 0시 (로컬) | |
||
| 140 | | 상매채 즉시취소 | wwSlsBndRtrcnDlngSe01Job | 상생매출채권 즉시 취소 | 월~금 8시~20시 매 1분 30초 (F218) / 매월 1일 0시 (로컬) | |
||
| 141 | | 상매채 취소요청 | wwSlsBndRtrcnDlngSe02Job | 상생매출채권 취소 요청 처리 | 월~금 8시~20시 매 1분 30초 (F218) / 매월 1일 0시 (로컬) | |
||
| 142 | | 채권 수취 후 예약 발행 | addrBfPblcnRsvtJob | 채권 수취 후 예약 발행 처리 | 매일 8시~21시 매 정시 (F218) / 매월 1일 0시 (로컬) | |
||
| 143 | | 수취채권 예약 발행 | addrBndRsvtPblcnJob | 수취채권 예약 발행 | 매일 8시~20시 59분 매 1분 (F218) / 매월 1일 0시 (로컬) | |
||
| 144 | | 수취채권 즉시 발행 | addrBndNowPblcnJob | 수취채권 즉시 발행 | 매일 8시~20시 59분 매 1분 (F218) / 매월 1일 0시 (로컬) | |
||
| 145 | | 수취채권 발행 전 결재선 내역 승인기한 체크 | addrBfPblcnAplnJob | 발행 전 결재선 승인기한 체크 | 매일 20시 (F218) / 매월 1일 0시 (로컬) | |
||
| 146 | | 채권 수취전 발행 요청일 만료 처리 | dmndExpryAddrBfPblcnRsvtJob | 만료된 발행 신청 원장 처리 | 매일 22시 (F218) / 매월 1일 0시 (로컬) | |
||
| 147 | |||
| 148 | ### 4.3 정산 배치 |
||
| 149 | | 배치명 | Job 이름 | 설명 | 실행 주기 | |
||
| 150 | |--------|---------|------|----------| |
||
| 151 | | 장려금배분 | aprtSubsdJob | 장려금 배분 처리 | 매 5분마다 (F218) / 매월 1일 0시 (로컬) | |
||
| 152 | | 장려금정산이체처리 | prcsSubsdClclnTrJob | 장려금 정산 이체 처리 | 매 2분마다 (F218) / 매일 8시 (로컬) | |
||
| 153 | | 운영수수료정산 | operFeeClclnJob | 운영 수수료 정산 | 매월 1일 20시 (F218) / 매월 1일 0시 (로컬) | |
||
| 154 | | MP수수료정산 | mpFeeClclnJob | MP 수수료 정산 | 매월 1일 20시 (F218) / 매월 1일 0시 (로컬) | |
||
| 155 | |||
| 156 | ### 4.4 원장 대사 배치 |
||
| 157 | | 배치명 | Job 이름 | 설명 | 실행 주기 | |
||
| 158 | |--------|---------|------|----------| |
||
| 159 | | 원장대사 전문거래내역관리 | dlngCompFileAllRegJob | 원장 대사 전문거래내역 관리 | 매일 1시 30분 (F218) / 매월 1일 0시 (로컬) | |
||
| 160 | | 예치금잔액대사 | dlngCompFile00Job | 예치금 잔액 대사 | 매일 2시 (F218) / 매분 14초 (로컬) | |
||
| 161 | | 구매기업원장_원장대사 | dlngCompFile01Job | 구매기업 원장 대사 | 매일 2시 (F218) / 매분 29초 (로컬) | |
||
| 162 | | 구매기업지사정보_원장대사 | dlngCompFile02Job | 구매기업 지사정보 대사 | 매일 2시 (F218) / 매분 29초 (로컬) | |
||
| 163 | | 협력기업원장_원장대사 | dlngCompFile11Job | 협력기업 원장 대사 | 매일 2시 (F218) / 매분 29초 (로컬) | |
||
| 164 | | 거래선원장_원장대사 | dlngCompFile12Job | 거래선 원장 대사 | 매일 2시 (F218) / 매분 29초 (로컬) | |
||
| 165 | | 외상매출채권원장_원장대사 | dlngCompFile21Job | 외상매출채권 원장 대사 | 매일 2시 (F218) / 매분 29초 (로컬) | |
||
| 166 | | 상생매출채권원장_원장대사 | dlngCompFile22Job | 상생매출채권 원장 대사 | 매일 2시 (F218) / 매분 29초 (로컬) | |
||
| 167 | | 대출약정원장_원장대사 | dlngCompFile31Job | 대출약정 원장 대사 | 매일 2시 (F218) / 매분 29초 (로컬) | |
||
| 168 | | 대출실행원장_원장대사 | dlngCompFile32Job | 대출실행 원장 대사 | 매일 2시 (F218) / 매분 29초 (로컬) | |
||
| 169 | | 거래원장대사 | dlngCompInsdGnlgrJob | 거래 원장 대사 | 매일 2시 (F218) / 매분 29초 (로컬) | |
||
| 170 | |||
| 171 | ### 4.5 기타 배치 |
||
| 172 | | 배치명 | Job 이름 | 설명 | 실행 주기 | |
||
| 173 | |--------|---------|------|----------| |
||
| 174 | | 만기결제집계정보 | mtryStlmTotInfoJob | 만기결제 집계 정보 처리 | 월~금 7시 (F218) / 매월 1일 0시 (로컬) | |
||
| 175 | | (구매기업)결재기한 만료 처리 | aprvnTermExpSchedulerJob01 | 결재기한 만료 처리 | 매일 21시 30분 (F218) / 매월 1일 0시 (로컬) | |
||
| 176 | | 관리자MP관리 | adminMpMngScheduler01Job | 관리자 MP 관리 처리 | 매 정시 (F218) / 매월 1일 0시 (로컬) | |
||
| 177 | | 대출연장안내 | loanPrlgGdJob | 대출연장 안내 알림톡 발송 | 월~금 9시 (F218) / 매월 1일 0시 (로컬) | |
||
| 178 | | 고객확인재등록안내 | custIdntyRrgGdJob | 고객확인재등록 안내 알림톡 발송 | 월~금 9시 (F218) / 매월 1일 0시 (로컬) | |
||
| 179 | | 오류알림 | errorNotificationJob | 전문/대사 오류 알림 발송 | 평일 08~22시 매 5분 | |
||
| 180 | |||
| 181 | --- |
||
| 182 | |||
| 183 | ## 5. 설정 파일 설명 |
||
| 184 | |||
| 185 | ### 5.1 application.yml |
||
| 186 | 주요 설정 항목: |
||
| 187 | - **데이터베이스 연결 정보**: MySQL 연결 설정 |
||
| 188 | - **HikariCP 커넥션 풀**: 최대 60개 연결, 최소 5개 유휴 연결 |
||
| 189 | - **서버 포트**: 8090 |
||
| 190 | - **Context Path**: /batch |
||
| 191 | - **MyBatis 설정**: Mapper 위치, Type Handler 패키지 |
||
| 192 | - **클라이언트 서비스 URL**: 각 마이크로서비스 엔드포인트 |
||
| 193 | - **대사파일 경로**: `/data1/adapter/files/` |
||
| 194 | - **백업 설정**: 날짜별 폴더 사용 |
||
| 195 | |||
| 196 | ### 5.2 application-local.yml |
||
| 197 | 로컬 개발 환경 설정: |
||
| 198 | - **배치 금융기관 코드**: 218 |
||
| 199 | - **대사파일 경로**: `D:/Documents/ESI/batch/` |
||
| 200 | - **배치 Cron 표현식**: 각 배치별 실행 주기 설정 |
||
| 201 | |||
| 202 | ### 5.3 배치 Cron 설정 위치 |
||
| 203 | 모든 배치의 Cron 표현식은 `application-local.yml` 또는 환경별 설정 파일(`application-F218.yml` 등)의 `batch.cron` 섹션에 정의되어 있습니다. |
||
| 204 | |||
| 205 | **주의사항:** |
||
| 206 | - 로컬 환경과 운영 환경(F218)의 Cron 설정이 다를 수 있습니다. |
||
| 207 | - 로컬 환경은 개발/테스트를 위해 더 자주 실행되도록 설정되어 있습니다. |
||
| 208 | - 실제 운영 환경의 실행 주기는 `application-F218.yml`을 참조하세요. |
||
| 209 | |||
| 210 | --- |
||
| 211 | |||
| 212 | ## 6. 실행 방법 |
||
| 213 | |||
| 214 | ### 6.1 로컬 개발 환경 실행 |
||
| 215 | ```bash |
||
| 216 | # Gradle Wrapper를 사용한 실행 |
||
| 217 | ./gradlew bootRun |
||
| 218 | |||
| 219 | # 또는 특정 프로파일 지정 |
||
| 220 | ./gradlew bootRun --args='--spring.profiles.active=local' |
||
| 221 | |||
| 222 | # 특정 배치 작업 실행 |
||
| 223 | java -jar build/libs/batch-0.0.1-SNAPSHOT.jar --job.name=218_telgmReDlngJob |
||
| 224 | ``` |
||
| 225 | |||
| 226 | ### 6.2 빌드 |
||
| 227 | ```bash |
||
| 228 | # JAR 파일 빌드 |
||
| 229 | ./gradlew build |
||
| 230 | |||
| 231 | # 빌드된 JAR 파일 위치 |
||
| 232 | build/libs/batch-0.0.1-SNAPSHOT.jar |
||
| 233 | ``` |
||
| 234 | |||
| 235 | ### 6.3 프로덕션 실행 |
||
| 236 | ```bash |
||
| 237 | # 프로파일 지정하여 실행 |
||
| 238 | java -jar batch-0.0.1-SNAPSHOT.jar --spring.profiles.active=F218 |
||
| 239 | |||
| 240 | # 특정 배치 작업 실행 |
||
| 241 | java -jar batch-0.0.1-SNAPSHOT.jar --spring.profiles.active=F218 --job.name=218_telgmReDlngJob |
||
| 242 | 3 | 길호 원 | |
| 243 | ``` |
||
| 244 | |||
| 245 | ### 6.4 IDE에서 특정 Job 실행 |
||
| 246 | * TestJobRunner |
||
| 247 | - profile 설정 필요 |
||
| 248 | - 환경변수: `SPRING_PROFILES_ACTIVE=local` |
||
| 249 | - Job name 설정 후 실행 |
||
| 250 | ```java |
||
| 251 | @Qualifier("dlngCompFile00Job") Job runJob |
||
| 252 | 1 | 길호 원 | ``` |
| 253 | |||
| 254 | ### 6.4 REST API를 통한 배치 실행 |
||
| 255 | 각 배치 작업은 REST API를 통해 수동 실행 가능합니다. |
||
| 256 | - 컨트롤러 위치: `src/main/java/com/esi/nextgen/batch/controller/` |
||
| 257 | - 예시: `POST /batch/api/subsd-clcln/execute` |
||
| 258 | |||
| 259 | --- |
||
| 260 | |||
| 261 | ## 7. 주요 기능 상세 설명 |
||
| 262 | |||
| 263 | ### 7.1 배치 작업 구조 |
||
| 264 | 각 배치 작업은 다음 구조로 구성됩니다: |
||
| 265 | 1. **Scheduler**: Cron 스케줄러로 배치 실행 트리거 |
||
| 266 | 2. **Config**: Spring Batch Job/Step 설정 |
||
| 267 | 3. **Service**: 실제 비즈니스 로직 처리 |
||
| 268 | 4. **Mapper**: 데이터베이스 쿼리 실행 |
||
| 269 | |||
| 270 | ### 7.2 금융기관 코드 관리 |
||
| 271 | - 각 배치 작업은 금융기관 코드를 포함한 고유한 Job 이름을 가집니다. |
||
| 272 | - 예: `218_telgmReDlngJob` (218은 금융기관 코드) |
||
| 273 | - `BatchJobNameUtil`을 통해 Job 이름 생성 및 관리 |
||
| 274 | |||
| 275 | ### 7.3 원장 대사 파일 처리 |
||
| 276 | - 대사 파일은 `base_path + 금융기관코드` 경로에서 읽습니다. |
||
| 277 | - 처리 완료된 파일은 백업 폴더로 이동됩니다. |
||
| 278 | - 대사 파일 레이아웃은 `BatchFileLayout`에 정의되어 있습니다. |
||
| 279 | |||
| 280 | ### 7.4 전문 재거래 처리 |
||
| 281 | - 실패한 전문은 `telgm.re-dlng-codes`에 정의된 전문 코드만 재처리됩니다. |
||
| 282 | - 재처리 대상 전문 코드는 `application.yml`에서 설정 가능합니다. |
||
| 283 | |||
| 284 | ### 7.5 오류 알림 |
||
| 285 | - `ErrorNotificationService`가 전문 오류를 감지하여 운영자에게 알림을 발송합니다. |
||
| 286 | - 대사 오류는 대사 배치에서 진행합니다. |
||
| 287 | - 알림톡 발송은 Surem API를 통해 처리됩니다. |
||
| 288 | |||
| 289 | --- |
||
| 290 | |||
| 291 | ## 8. 데이터베이스 |
||
| 292 | |||
| 293 | ### 8.1 데이터베이스 정보 |
||
| 294 | - **데이터베이스**: MySQL 8.0.33 |
||
| 295 | - **연결 정보**: `application.yml` 참조 |
||
| 296 | - **스키마**: `nextesi` |
||
| 297 | |||
| 298 | ### 8.2 Spring Batch 메타데이터 |
||
| 299 | Spring Batch는 자동으로 메타데이터 테이블을 생성합니다 (`spring.batch.jdbc.initialize-schema: always` 설정). |
||
| 300 | |||
| 301 | | 테이블명 | 역할 | 주요 컬럼 | 설명 | |
||
| 302 | |---------|------|----------|------| |
||
| 303 | | `BATCH_JOB_INSTANCE` | Job 인스턴스 정보 저장 | JOB_INSTANCE_ID, JOB_NAME, JOB_KEY, VERSION | Job의 논리적 실행 단위를 나타냄. 동일한 Job 이름과 파라미터 조합은 하나의 인스턴스로 관리 | |
||
| 304 | | `BATCH_JOB_EXECUTION` | Job 실행 정보 저장 | JOB_EXECUTION_ID, JOB_INSTANCE_ID, START_TIME, END_TIME, STATUS, EXIT_CODE, EXIT_MESSAGE | Job의 실제 실행 이력을 저장. 시작/종료 시간, 상태, 종료 코드 등 기록 | |
||
| 305 | | `BATCH_JOB_EXECUTION_PARAMS` | Job 실행 파라미터 저장 | JOB_EXECUTION_ID, TYPE_CD, KEY_NAME, STRING_VAL, DATE_VAL, LONG_VAL, DOUBLE_VAL, IDENTIFYING | Job 실행 시 전달된 파라미터 정보 저장 | |
||
| 306 | | `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의 실행 이력 저장. 읽기/쓰기 건수, 스킵 건수, 롤백 건수 등 상세 정보 기록 | |
||
| 307 | | `BATCH_STEP_EXECUTION_CONTEXT` | Step 실행 컨텍스트 저장 | STEP_EXECUTION_ID, SHORT_CONTEXT, SERIALIZED_CONTEXT | Step 실행 중 사용되는 컨텍스트 데이터 저장 (상태 정보, 중간 데이터 등) | |
||
| 308 | | `BATCH_JOB_EXECUTION_CONTEXT` | Job 실행 컨텍스트 저장 | JOB_EXECUTION_ID, SHORT_CONTEXT, SERIALIZED_CONTEXT | Job 실행 중 사용되는 컨텍스트 데이터 저장 (Step 간 공유 데이터 등) | |
||
| 309 | | `BATCH_JOB_SEQ` | Job 인스턴스 시퀀스 | ID | Job 인스턴스 ID 생성용 시퀀스 | |
||
| 310 | | `BATCH_JOB_EXECUTION_SEQ` | Job 실행 시퀀스 | ID | Job 실행 ID 생성용 시퀀스 | |
||
| 311 | | `BATCH_STEP_EXECUTION_SEQ` | Step 실행 시퀀스 | ID | Step 실행 ID 생성용 시퀀스 | |
||
| 312 | |||
| 313 | **참고사항:** |
||
| 314 | - 모든 메타데이터 테이블은 Spring Batch가 자동으로 생성 및 관리합니다. |
||
| 315 | - Job 재실행 시 동일한 Job 인스턴스는 재사용되며, 새로운 Job Execution이 생성됩니다. |
||
| 316 | - 컨텍스트 테이블은 직렬화된 객체를 저장하므로 대용량 데이터 저장 시 주의가 필요합니다. |
||
| 317 | |||
| 318 | ### 8.3 배치 Job별 관련 테이블 및 CRUD 작업 |
||
| 319 | |||
| 320 | #### 8.3.1 전문 거래 내역 배치 |
||
| 321 | |||
| 322 | **전문 재거래 (telgmReDlngJob)** |
||
| 323 | |||
| 324 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 325 | |---------|--------|--------|--------|--------|--------| |
||
| 326 | | `TB_COM_TELGM_DLNG_DTL_BC` | 전문거래내역 | ✅ | - | - | - | |
||
| 327 | |||
| 328 | #### 8.3.2 채권 발행 배치 |
||
| 329 | |||
| 330 | **외상매출채권발행처리 (osbndPblcnRprcsScheduler01Job)** |
||
| 331 | |||
| 332 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 333 | |---------|--------|--------|--------|--------|--------| |
||
| 334 | | `TB_PRC_OSBND_PBAPLY_GL_BC` | 외상매출채권발행신청원장 | ✅ | - | ✅ | - | |
||
| 335 | | `TB_PRC_OSBND_PBAPLY_DTL_TR` | 외상매출채권발행신청내역 | ✅ | - | ✅ | - | |
||
| 336 | | `TB_COM_HLDY_INFO_BC` | 휴일정보 | ✅ | - | - | - | |
||
| 337 | |||
| 338 | **외상매출채권선결제처리 (osbndAdvpayScheduler01Job)** |
||
| 339 | |||
| 340 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 341 | |---------|--------|--------|--------|--------|--------| |
||
| 342 | | `TB_PRC_MTRY_STLM_TOT_SM` | 만기결제집계정보 | ✅ | - | ✅ | - | |
||
| 343 | | `TB_PRC_OSBND_STLM_DTL_TR` | 외상매출채권결제내역 | ✅ | - | ✅ | - | |
||
| 344 | |||
| 345 | **외매채 즉시취소 (prcOsbndRtrcnDlngSe01Job)** |
||
| 346 | |||
| 347 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 348 | |---------|--------|--------|--------|--------|--------| |
||
| 349 | | `TB_PRC_OSBND_RCNAPLY_GL_BC` | 외상매출채권발행취소신청원장 | ✅ | - | ✅ | - | |
||
| 350 | | `TB_PRC_OSBND_RCNAPLY_DTL_TR` | 외상매출채권발행취소신청내역 | ✅ | - | ✅ | - | |
||
| 351 | | `TB_PRC_OSBND_GL_BC` | 외상매출채권원장 | ✅ | - | ✅ | - | |
||
| 352 | |||
| 353 | **외매채 취소요청 (prcOsbndRtrcnDlngSe02Job)** |
||
| 354 | |||
| 355 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 356 | |---------|--------|--------|--------|--------|--------| |
||
| 357 | | `TB_PRC_OSBND_RCNAPLY_GL_BC` | 외상매출채권발행취소신청원장 | ✅ | - | ✅ | - | |
||
| 358 | | `TB_PRC_OSBND_RCNAPLY_DTL_TR` | 외상매출채권발행취소신청내역 | ✅ | - | ✅ | - | |
||
| 359 | | `TB_PRC_OSBND_GL_BC` | 외상매출채권원장 | ✅ | - | ✅ | - | |
||
| 360 | |||
| 361 | **상매채 즉시취소 (wwSlsBndRtrcnDlngSe01Job)** |
||
| 362 | |||
| 363 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 364 | |---------|--------|--------|--------|--------|--------| |
||
| 365 | | `TB_CLB_WSBND_RCNAPLY_GL_BC` | 상생매출채권발행취소신청원장 | ✅ | - | ✅ | - | |
||
| 366 | | `TB_CLB_WSBND_RCNAPLY_DTL_TR` | 상생매출채권발행취소신청내역 | ✅ | - | ✅ | - | |
||
| 367 | | `TB_CLB_WW_SLS_BND_GL_BC` | 상생매출채권원장 | ✅ | - | ✅ | - | |
||
| 368 | |||
| 369 | **상매채 취소요청 (wwSlsBndRtrcnDlngSe02Job)** |
||
| 370 | |||
| 371 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 372 | |---------|--------|--------|--------|--------|--------| |
||
| 373 | | `TB_CLB_WSBND_RCNAPLY_GL_BC` | 상생매출채권발행취소신청원장 | ✅ | - | ✅ | - | |
||
| 374 | | `TB_CLB_WSBND_RCNAPLY_DTL_TR` | 상생매출채권발행취소신청내역 | ✅ | - | ✅ | - | |
||
| 375 | | `TB_CLB_WW_SLS_BND_GL_BC` | 상생매출채권원장 | ✅ | - | ✅ | - | |
||
| 376 | |||
| 377 | **채권 수취 후 예약 발행 (addrBfPblcnRsvtJob)** |
||
| 378 | |||
| 379 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 380 | |---------|--------|--------|--------|--------|--------| |
||
| 381 | | `TB_CLB_WSBND_PBAPLY_GL_BC` | 상생매출채권발행신청원장 | ✅ | - | ✅ | - | |
||
| 382 | | `TB_CLB_WSBND_PBAPLY_DTL_TR` | 상생매출채권발행신청내역 | ✅ | - | ✅ | - | |
||
| 383 | | `TB_PRC_OSBND_GL_BC` | 외상매출채권원장 | ✅ | - | - | - | |
||
| 384 | |||
| 385 | **수취채권 예약 발행 (addrBndRsvtPblcnJob)** |
||
| 386 | |||
| 387 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 388 | |---------|--------|--------|--------|--------|--------| |
||
| 389 | | `TB_CLB_WSBND_PBAPLY_GL_BC` | 상생매출채권발행신청원장 | ✅ | - | ✅ | - | |
||
| 390 | | `TB_CLB_WSBND_PBAPLY_DTL_TR` | 상생매출채권발행신청내역 | ✅ | - | ✅ | - | |
||
| 391 | | `TB_COM_HLDY_INFO_BC` | 휴일정보 | ✅ | - | - | - | |
||
| 392 | |||
| 393 | **수취채권 즉시 발행 (addrBndNowPblcnJob)** |
||
| 394 | |||
| 395 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 396 | |---------|--------|--------|--------|--------|--------| |
||
| 397 | | `TB_CLB_WSBND_PBAPLY_GL_BC` | 상생매출채권발행신청원장 | ✅ | - | ✅ | - | |
||
| 398 | | `TB_CLB_WSBND_PBAPLY_DTL_TR` | 상생매출채권발행신청내역 | ✅ | - | ✅ | - | |
||
| 399 | | `TB_PRC_OSBND_GL_BC` | 외상매출채권원장 | ✅ | - | - | - | |
||
| 400 | | `TB_CLB_WW_SLS_BND_GL_BC` | 상생매출채권원장 | ✅ | - | - | - | |
||
| 401 | | `TB_CLB_NTSL_ENT_GL_BC` | 협력기업원장 | ✅ | - | - | - | |
||
| 402 | | `TB_CLB_NTSL_ENT_BROF_BC` | 협력기업지사정보 | ✅ | - | - | - | |
||
| 403 | | `TB_COM_TASK_CTRL_INFO_BC` | 업무제어정보 | ✅ | - | - | - | |
||
| 404 | | `TB_PRC_PRCHS_ENT_GL_BC` | 구매기업원장 | ✅ | - | - | - | |
||
| 405 | | `TB_CLB_CUST_GL_BC` | 고객원장 | ✅ | - | - | - | |
||
| 406 | |||
| 407 | **수취채권 발행 전 결재선 내역 승인기한 체크 (addrBfPblcnAplnJob)** |
||
| 408 | |||
| 409 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 410 | |---------|--------|--------|--------|--------|--------| |
||
| 411 | | `TB_CLB_WSBND_PBAPLY_GL_BC` | 상생매출채권발행신청원장 | ✅ | - | ✅ | - | |
||
| 412 | | `TB_CLB_WSBND_PBAPLY_DTL_TR` | 상생매출채권발행신청내역 | ✅ | - | ✅ | - | |
||
| 413 | | `TB_COM_MP_APLN_LIST_BC` | MP결재선목록 | ✅ | - | - | - | |
||
| 414 | |||
| 415 | **채권 수취전 발행 요청일 만료 처리 (dmndExpryAddrBfPblcnRsvtJob)** |
||
| 416 | |||
| 417 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 418 | |---------|--------|--------|--------|--------|--------| |
||
| 419 | | `TB_CLB_WSBND_PBAPLY_GL_BC` | 상생매출채권발행신청원장 | ✅ | - | ✅ | - | |
||
| 420 | | `TB_CLB_WSBND_PBAPLY_DTL_TR` | 상생매출채권발행신청내역 | ✅ | - | ✅ | - | |
||
| 421 | |||
| 422 | **(구매기업)결재기한 만료 처리 (aprvnTermExpSchedulerJob01)** |
||
| 423 | |||
| 424 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 425 | |---------|--------|--------|--------|--------|--------| |
||
| 426 | | `TB_PRC_OSBND_PBAPLY_GL_BC` | 외상매출채권발행신청원장 | ✅ | - | ✅ | - | |
||
| 427 | | `TB_PRC_OSBND_PBAPLY_DTL_TR` | 외상매출채권발행신청내역 | ✅ | - | - | - | |
||
| 428 | | `TB_COM_MP_APLN_LIST_BC` | MP결재선목록 | ✅ | - | ✅ | - | |
||
| 429 | |||
| 430 | #### 8.3.3 정산 배치 |
||
| 431 | |||
| 432 | **장려금배분 (aprtSubsdJob)** |
||
| 433 | |||
| 434 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 435 | |---------|--------|--------|--------|--------|--------| |
||
| 436 | | `TB_MNG_SUBSD_DEDTL_TR` | 장려금세부내역 | ✅ | ✅ | ✅ | - | |
||
| 437 | | `TB_MNG_CLCLN_GL_BC` | 정산원장 | ✅ | - | - | - | |
||
| 438 | | `TB_CLB_WW_SLS_BND_GL_BC` | 상생매출채권원장 | ✅ | - | - | - | |
||
| 439 | | `TB_CLB_WW_SLS_BND_PBLCN_TRGT` | 상생매출채권발행장려금대상 | ✅ | - | - | - | |
||
| 440 | | `TB_CLB_WW_SLS_BND_DSCNT_TRGT` | 상생매출채권할인장려금대상 | ✅ | - | - | - | |
||
| 441 | | `TB_CLB_WW_SLS_BND_SLCTN_MTN_TRGT` | 상생매출채권선정산장려금대상 | ✅ | - | - | - | |
||
| 442 | | `TB_CLB_LOAN_EXCN_GL_BC` | 대출실행원장 | ✅ | - | - | - | |
||
| 443 | | `TB_CLB_PCALL_DLNG_DTL_TR` | 선정산거래내역 | ✅ | - | - | - | |
||
| 444 | | `TB_CLB_LOAN_DLNG_DTL_TR` | 대출거래내역 | ✅ | - | - | - | |
||
| 445 | | `TB_CLB_NTSL_ENT_GL_BC` | 협력기업원장 | ✅ | - | - | - | |
||
| 446 | | `TB_PRC_OSBND_GL_BC` | 외상매출채권원장 | ✅ | - | - | - | |
||
| 447 | | `TB_MNG_CLCLN_DTL_TR` | 정산내역 | ✅ | - | - | - | |
||
| 448 | | `TB_COM_HLDY_INFO_BC` | 휴일정보 | ✅ | - | - | - | |
||
| 449 | |||
| 450 | **장려금정산이체처리 (prcsSubsdClclnTrJob)** |
||
| 451 | |||
| 452 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 453 | |---------|--------|--------|--------|--------|--------| |
||
| 454 | | `TB_MNG_CLCLN_GL_BC` | 정산원장 | ✅ | - | ✅ | - | |
||
| 455 | | `TB_MNG_CLCLN_DTL_TR` | 정산내역 | ✅ | - | ✅ | - | |
||
| 456 | | `TB_COM_BACNT_INFO_BC` | 금융기관용도별계좌정보 | ✅ | - | - | - | |
||
| 457 | |||
| 458 | **운영수수료정산 (operFeeClclnJob)** |
||
| 459 | |||
| 460 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 461 | |---------|--------|--------|--------|--------|--------| |
||
| 462 | | `TB_MNG_CLCLN_GL_BC` | 정산원장 | ✅ | - | ✅ | - | |
||
| 463 | | `TB_MNG_CLCLN_DTL_TR` | 정산내역 | ✅ | ✅ | ✅ | - | |
||
| 464 | | `TB_COM_FEE_INFO_BC` | 수수료정보 | ✅ | - | - | - | |
||
| 465 | |||
| 466 | **MP수수료정산 (mpFeeClclnJob)** |
||
| 467 | |||
| 468 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 469 | |---------|--------|--------|--------|--------|--------| |
||
| 470 | | `TB_MNG_CLCLN_GL_BC` | 정산원장 | ✅ | - | ✅ | - | |
||
| 471 | | `TB_MNG_CLCLN_DTL_TR` | 정산내역 | ✅ | ✅ | ✅ | - | |
||
| 472 | | `TB_COM_FEE_INFO_BC` | 수수료정보 | ✅ | - | - | - | |
||
| 473 | |||
| 474 | #### 8.3.4 원장 대사 배치 |
||
| 475 | |||
| 476 | **원장대사 전문거래내역관리 (dlngCompFileAllRegJob)** |
||
| 477 | |||
| 478 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 479 | |---------|--------|--------|--------|--------|--------| |
||
| 480 | | `TB_COM_TELGM_DLNG_DTL_BC` | 전문거래내역 | ✅ | - | - | ✅ | |
||
| 481 | |||
| 482 | **예치금잔액대사 (dlngCompFile00Job)** |
||
| 483 | |||
| 484 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 485 | |---------|--------|--------|--------|--------|--------| |
||
| 486 | | `TB_COM_COMP_DSCTN_TR` | 대사내역 | ✅ | ✅ | ✅ | ✅ | |
||
| 487 | | `TB_COM_COMP_GNLGR_BC` | 대사원장 | ✅ | ✅ | ✅ | - | |
||
| 488 | | `TB_PRC_PRCHS_ENT_STLM_ACT_BC` | 구매기업결제계좌 | ✅ | - | - | - | |
||
| 489 | |||
| 490 | **구매기업원장_원장대사 (dlngCompFile01Job)** |
||
| 491 | |||
| 492 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 493 | |---------|--------|--------|--------|--------|--------| |
||
| 494 | | `TB_COM_COMP_DSCTN_TR` | 대사내역 | ✅ | ✅ | ✅ | ✅ | |
||
| 495 | | `TB_COM_COMP_GNLGR_BC` | 대사원장 | ✅ | ✅ | ✅ | - | |
||
| 496 | | `TB_PRC_PRCHS_ENT_GL_BC` | 구매기업원장 | ✅ | - | - | - | |
||
| 497 | |||
| 498 | **구매기업지사정보_원장대사 (dlngCompFile02Job)** |
||
| 499 | |||
| 500 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 501 | |---------|--------|--------|--------|--------|--------| |
||
| 502 | | `TB_COM_COMP_DSCTN_TR` | 대사내역 | ✅ | ✅ | ✅ | ✅ | |
||
| 503 | | `TB_COM_COMP_GNLGR_BC` | 대사원장 | ✅ | ✅ | ✅ | - | |
||
| 504 | | `TB_PRC_PRCHS_ENT_BROF_BC` | 구매기업지사정보 | ✅ | - | - | - | |
||
| 505 | |||
| 506 | **협력기업원장_원장대사 (dlngCompFile11Job)** |
||
| 507 | |||
| 508 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 509 | |---------|--------|--------|--------|--------|--------| |
||
| 510 | | `TB_COM_COMP_DSCTN_TR` | 대사내역 | ✅ | ✅ | ✅ | ✅ | |
||
| 511 | | `TB_COM_COMP_GNLGR_BC` | 대사원장 | ✅ | ✅ | ✅ | - | |
||
| 512 | | `TB_CLB_NTSL_ENT_GL_BC` | 협력기업원장 | ✅ | - | - | - | |
||
| 513 | |||
| 514 | **거래선원장_원장대사 (dlngCompFile12Job)** |
||
| 515 | |||
| 516 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 517 | |---------|--------|--------|--------|--------|--------| |
||
| 518 | | `TB_COM_COMP_DSCTN_TR` | 대사내역 | ✅ | ✅ | ✅ | ✅ | |
||
| 519 | | `TB_COM_COMP_GNLGR_BC` | 대사원장 | ✅ | ✅ | ✅ | - | |
||
| 520 | | `TB_CLB_NTSL_ENT_GL_BC` | 협력기업원장 | ✅ | - | - | - | |
||
| 521 | |||
| 522 | **외상매출채권원장_원장대사 (dlngCompFile21Job)** |
||
| 523 | |||
| 524 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 525 | |---------|--------|--------|--------|--------|--------| |
||
| 526 | | `TB_COM_COMP_DSCTN_TR` | 대사내역 | ✅ | ✅ | ✅ | ✅ | |
||
| 527 | | `TB_COM_COMP_GNLGR_BC` | 대사원장 | ✅ | ✅ | ✅ | - | |
||
| 528 | | `TB_PRC_OSBND_GL_BC` | 외상매출채권원장 | ✅ | - | - | - | |
||
| 529 | |||
| 530 | **상생매출채권원장_원장대사 (dlngCompFile22Job)** |
||
| 531 | |||
| 532 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 533 | |---------|--------|--------|--------|--------|--------| |
||
| 534 | | `TB_COM_COMP_DSCTN_TR` | 대사내역 | ✅ | ✅ | ✅ | ✅ | |
||
| 535 | | `TB_COM_COMP_GNLGR_BC` | 대사원장 | ✅ | ✅ | ✅ | - | |
||
| 536 | | `TB_CLB_WW_SLS_BND_GL_BC` | 상생매출채권원장 | ✅ | - | - | - | |
||
| 537 | |||
| 538 | **대출약정원장_원장대사 (dlngCompFile31Job)** |
||
| 539 | |||
| 540 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 541 | |---------|--------|--------|--------|--------|--------| |
||
| 542 | | `TB_COM_COMP_DSCTN_TR` | 대사내역 | ✅ | ✅ | ✅ | ✅ | |
||
| 543 | | `TB_COM_COMP_GNLGR_BC` | 대사원장 | ✅ | ✅ | ✅ | - | |
||
| 544 | | `TB_CLB_LOAN_STPL_GL_BC` | 대출약정원장 | ✅ | - | - | - | |
||
| 545 | |||
| 546 | **대출실행원장_원장대사 (dlngCompFile32Job)** |
||
| 547 | |||
| 548 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 549 | |---------|--------|--------|--------|--------|--------| |
||
| 550 | | `TB_COM_COMP_DSCTN_TR` | 대사내역 | ✅ | ✅ | ✅ | ✅ | |
||
| 551 | | `TB_COM_COMP_GNLGR_BC` | 대사원장 | ✅ | ✅ | ✅ | - | |
||
| 552 | | `TB_CLB_LOAN_EXCN_GL_BC` | 대출실행원장 | ✅ | - | - | - | |
||
| 553 | |||
| 554 | **거래원장대사 (dlngCompInsdGnlgrJob)** |
||
| 555 | |||
| 556 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 557 | |---------|--------|--------|--------|--------|--------| |
||
| 558 | | `TB_COM_COMP_DSCTN_TR` | 대사내역 | ✅ | ✅ | ✅ | - | |
||
| 559 | | `TB_PRC_PRCHS_ENT_GL_BC` | 구매기업원장 | ✅ | - | - | - | |
||
| 560 | | `TB_PRC_OSBND_GL_BC` | 외상매출채권원장 | ✅ | - | - | - | |
||
| 561 | | `TB_CLB_WW_SLS_BND_GL_BC` | 상생매출채권원장 | ✅ | - | - | - | |
||
| 562 | | `TB_CLB_LOAN_STPL_GL_BC` | 대출약정원장 | ✅ | - | - | - | |
||
| 563 | | `TB_CLB_LOAN_EXCN_GL_BC` | 대출실행원장 | ✅ | - | - | - | |
||
| 564 | | `TB_CLB_NTSL_ENT_GL_BC` | 협력기업원장 | ✅ | - | - | - | |
||
| 565 | | `TB_PRC_PRCHS_ENT_BROF_BC` | 구매기업지사정보 | ✅ | - | - | - | |
||
| 566 | | `TB_PRC_PRCHS_ENT_STLM_ACT_BC` | 구매기업결제계좌 | ✅ | - | - | - | |
||
| 567 | | `TB_CLB_TXIV_APRT_DTL_TR` | 세금계산서배분내역 | ✅ | - | - | - | |
||
| 568 | | `TB_CLB_PCALL_DLNG_DTL_TR` | 선정산거래내역 | ✅ | - | - | - | |
||
| 569 | | `TB_CLB_LOAN_DLNG_DTL_TR` | 대출거래내역 | ✅ | - | - | - | |
||
| 570 | | `base_calendar` | 기준일력 | ✅ | - | - | - | |
||
| 571 | |||
| 572 | #### 8.3.5 기타 배치 |
||
| 573 | |||
| 574 | **만기결제집계정보 (mtryStlmTotInfoJob)** |
||
| 575 | |||
| 576 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 577 | |---------|--------|--------|--------|--------|--------| |
||
| 578 | | `TB_PRC_MTRY_STLM_TOT_SM` | 만기결제집계정보 | ✅ | ✅ | ✅ | - | |
||
| 579 | | `TB_PRC_OSBND_STLM_DTL_TR` | 외상매출채권결제내역 | ✅ | - | ✅ | - | |
||
| 580 | | `TB_PRC_OSBND_GL_BC` | 외상매출채권원장 | ✅ | - | - | - | |
||
| 581 | | `TB_COM_HLDY_INFO_BC` | 휴일정보 | ✅ | - | - | - | |
||
| 582 | | `TB_CLB_LOAN_EXCN_GL_BC` | 대출실행원장 | ✅ | - | - | - | |
||
| 583 | | `TB_CLB_WW_SLS_BND_GL_BC` | 상생매출채권원장 | ✅ | - | - | - | |
||
| 584 | |||
| 585 | **관리자MP관리 (adminMpMngScheduler01Job)** |
||
| 586 | |||
| 587 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 588 | |---------|--------|--------|--------|--------|--------| |
||
| 589 | | `TB_COM_MP_NTC_TR` | MP공지사항 | ✅ | - | ✅ | - | |
||
| 590 | | `TB_COM_MP_POPUP_MNG` | MP팝업관리 | ✅ | - | ✅ | - | |
||
| 591 | | `TB_COM_UTZTN_TRMS_INFO_BC` | 이용약관정보 | ✅ | - | ✅ | - | |
||
| 592 | | `TB_COM_PRVC_TRMS_INFO_BC` | 개인정보처리방침정보 | ✅ | - | ✅ | - | |
||
| 593 | | `TB_COM_MKT_TRMS_INFO_BC` | 마케팅정보수신동의정보 | ✅ | - | ✅ | - | |
||
| 594 | | `TB_COM_STPLDOC_BC` | 약정서 | ✅ | - | ✅ | - | |
||
| 595 | |||
| 596 | **대출연장안내 (loanPrlgGdJob)** |
||
| 597 | |||
| 598 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 599 | |---------|--------|--------|--------|--------|--------| |
||
| 600 | | `TB_CLB_LOAN_STPL_GL_BC` | 대출약정원장 | ✅ | - | - | - | |
||
| 601 | | `TB_CLB_LOAN_EXCN_GL_BC` | 대출실행원장 | ✅ | - | - | - | |
||
| 602 | | `TB_CLB_NTSL_ENT_GL_BC` | 협력기업원장 | ✅ | - | - | - | |
||
| 603 | | `TB_COM_MP_MBR_BC` | MP회원 | ✅ | - | - | - | |
||
| 604 | | `TB_COM_FNST_CD_BC` | 금융기관코드 | ✅ | - | - | - | |
||
| 605 | | `TB_COM_HLDY_INFO_BC` | 휴일정보 | ✅ | - | - | - | |
||
| 606 | |||
| 607 | **고객확인재등록안내 (custIdntyRrgGdJob)** |
||
| 608 | |||
| 609 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 610 | |---------|--------|--------|--------|--------|--------| |
||
| 611 | | `TB_CLB_NTSL_ENT_GL_BC` | 협력기업원장 | ✅ | - | - | - | |
||
| 612 | | `TB_COM_MP_MBR_BC` | MP회원 | ✅ | - | - | - | |
||
| 613 | | `TB_COM_HLDY_INFO_BC` | 휴일정보 | ✅ | - | - | - | |
||
| 614 | |||
| 615 | **오류알림 (errorNotificationJob)** |
||
| 616 | |||
| 617 | | 테이블명 | 논리명 | SELECT | INSERT | UPDATE | DELETE | |
||
| 618 | |---------|--------|--------|--------|--------|--------| |
||
| 619 | | `TB_COM_TELGM_DLNG_DTL_BC` | 전문거래내역 | ✅ | - | - | - | |
||
| 620 | | `TB_COM_COMP_GNLGR_BC` | 대사원장 | ✅ | - | - | - | |
||
| 621 | | `TB_COM_OPER_AVTSMT_INFO` | 운영자 통지 정보 | ✅ | - | - | - | |
||
| 622 | | `TB_COM_USER_INFO_BC` | 사용자정보 | ✅ | - | - | - | |
||
| 623 | | `TB_COM_CD_DSCTN_BC` | 코드상세 | ✅ | - | - | - | |
||
| 624 | |||
| 625 | --- |
||
| 626 | |||
| 627 | ## 9. Logging & Monitoring |
||
| 628 | |||
| 629 | ### 9.1 로그 설정 |
||
| 630 | |||
| 631 | **로그 파일 위치:** |
||
| 632 | - **기본 경로**: `/usr/local/tomcat-batch/logs` (또는 `logging.file.dir` 설정값) |
||
| 633 | - **로그 파일명**: `esisync-batch.log` (또는 `logging.file.name-base` 설정값) |
||
| 634 | - **롤링 파일**: `esisync-batch-{yyyy-MM-dd}.{i}.log` 형식으로 날짜별/크기별 롤링 |
||
| 635 | - **로컬 환경**: 파일 로그 없이 콘솔만 사용 (`springProfile="local"`) |
||
| 636 | - **기타 환경**: 콘솔 + 파일 로그 모두 사용 |
||
| 637 | |||
| 638 | **로그 설정 파일**: `logback-spring.xml` |
||
| 639 | |||
| 640 | **로그 파일 설정:** |
||
| 641 | - 최대 파일 크기: 100MB |
||
| 642 | - 최대 보관 기간: 30일 |
||
| 643 | - 전체 로그 크기 제한: 10GB |
||
| 644 | - 롤링 정책: 크기 + 시간 기반 (SizeAndTimeBasedRollingPolicy) |
||
| 645 | |||
| 646 | **로그 확인 방법:** |
||
| 647 | ```bash |
||
| 648 | # 실시간 로그 확인 |
||
| 649 | tail -f /usr/local/tomcat-batch/logs/esisync-batch.log |
||
| 650 | |||
| 651 | # 에러 로그만 확인 |
||
| 652 | grep ERROR /usr/local/tomcat-batch/logs/esisync-batch.log |
||
| 653 | |||
| 654 | # 특정 배치 Job 로그 확인 |
||
| 655 | grep "osbndPblcnRprcsScheduler01Job" /usr/local/tomcat-batch/logs/esisync-batch.log |
||
| 656 | |||
| 657 | # 최근 100줄 확인 |
||
| 658 | tail -n 100 /usr/local/tomcat-batch/logs/esisync-batch.log |
||
| 659 | ``` |
||
| 660 | |||
| 661 | ### 9.2 로그 레벨 |
||
| 662 | |||
| 663 | **기본 로그 레벨:** |
||
| 664 | - **Root 로그 레벨**: `logging.level.root` 설정값 (기본값: INFO) |
||
| 665 | - **애플리케이션 로그**: `com.esi.nextgen.batch` 패키지 |
||
| 666 | - **MyBatis 로그**: `org.mybatis`, `org.apache.ibatis` 패키지 |
||
| 667 | |||
| 668 | **MyBatis SQL 로그:** |
||
| 669 | - `application.yml`에서 `mybatis.configuration.log-impl` 설정 |
||
| 670 | - 기본값: `org.apache.ibatis.logging.stdout.StdOutImpl` (콘솔 출력) |
||
| 671 | |||
| 672 | **로컬 환경 특수 설정:** |
||
| 673 | - 상세 로그 레벨: `com.esi.nextgen.batch` 패키지 DEBUG 레벨 |
||
| 674 | - 간단한 콘솔 패턴 사용 (날짜, thread, traceId 제거) |
||
| 675 | - 파일 로그 없음 (콘솔만) |
||
| 676 | |||
| 677 | ### 9.3 모니터링 |
||
| 678 | |||
| 679 | #### 9.3.1 Spring Boot Actuator |
||
| 680 | |||
| 681 | **의존성:** |
||
| 682 | - `spring-boot-starter-actuator` (build.gradle에 포함) |
||
| 683 | - `micrometer-core`, `micrometer-observation` (메트릭 수집용) |
||
| 684 | |||
| 685 | **기본 Actuator 엔드포인트 URL:** |
||
| 686 | - **Base URL**: `http://localhost:8090/batch/actuator` |
||
| 687 | - **Health Check**: `http://localhost:8090/batch/actuator/health` |
||
| 688 | - **Info**: `http://localhost:8090/batch/actuator/info` |
||
| 689 | - **Metrics**: `http://localhost:8090/batch/actuator/metrics` |
||
| 690 | - **특정 메트릭 조회**: `http://localhost:8090/batch/actuator/metrics/{metricName}` |
||
| 691 | - 예: `http://localhost:8090/batch/actuator/metrics/jvm.memory.used` |
||
| 692 | - **Prometheus** (설정 시): `http://localhost:8090/batch/actuator/prometheus` |
||
| 693 | |||
| 694 | **주요 메트릭:** |
||
| 695 | - JVM 메모리: `jvm.memory.used`, `jvm.memory.max` |
||
| 696 | - JVM GC: `jvm.gc.pause` |
||
| 697 | - HTTP 요청: `http.server.requests` |
||
| 698 | - 데이터베이스 연결 풀: `hikari.connections.*` |
||
| 699 | - Spring Batch: `spring.batch.*` |
||
| 700 | |||
| 701 | #### 9.3.2 Spring Batch Job 실행 모니터링 |
||
| 702 | |||
| 703 | **메타데이터 테이블을 통한 조회:** |
||
| 704 | ```sql |
||
| 705 | -- 최근 실행된 Job 목록 |
||
| 706 | SELECT |
||
| 707 | JOB_EXECUTION_ID, |
||
| 708 | JOB_NAME, |
||
| 709 | STATUS, |
||
| 710 | START_TIME, |
||
| 711 | END_TIME, |
||
| 712 | EXIT_CODE, |
||
| 713 | EXIT_MESSAGE |
||
| 714 | FROM BATCH_JOB_EXECUTION |
||
| 715 | ORDER BY START_TIME DESC |
||
| 716 | LIMIT 10; |
||
| 717 | |||
| 718 | -- 특정 Job의 실행 이력 |
||
| 719 | SELECT |
||
| 720 | JOB_EXECUTION_ID, |
||
| 721 | STATUS, |
||
| 722 | START_TIME, |
||
| 723 | END_TIME, |
||
| 724 | EXIT_CODE |
||
| 725 | FROM BATCH_JOB_EXECUTION |
||
| 726 | WHERE JOB_NAME = '218_telgmReDlngJob' |
||
| 727 | ORDER BY START_TIME DESC; |
||
| 728 | ``` |
||
| 729 | |||
| 730 | #### 9.3.3 데이터베이스 연결 풀 모니터링 |
||
| 731 | |||
| 732 | **HikariCP 설정:** |
||
| 733 | - 최대 연결 수: 60 |
||
| 734 | - 최소 유휴 연결: 5 |
||
| 735 | - 연결 타임아웃: 60초 |
||
| 736 | - 유휴 연결 타임아웃: 10분 |
||
| 737 | - 연결 최대 수명: 30분 |
||
| 738 | - 메모리 누수 감지: 60초 |
||
| 739 | |||
| 740 | **모니터링 방법:** |
||
| 741 | - Actuator 메트릭: `hikari.connections.active`, `hikari.connections.idle` |
||
| 742 | - 로그: HikariCP DEBUG 레벨 로그 확인 |
||
| 743 | |||
| 744 | #### 9.3.4 외부 모니터링 도구 |
||
| 745 | - [Dev] http://192.168.245.41:9000/ |
||
| 746 | |||
| 747 | --- |
||
| 748 | |||
| 749 | ## 10. 외부 연동 |
||
| 750 | |||
| 751 | ### 10.1 마이크로서비스 연동 |
||
| 752 | 다음 서비스들과 HTTP 통신: |
||
| 753 | - **adapter**: 어댑터 서비스 (전문 송신용) |
||
| 754 | |||
| 755 | ### 10.2 배치별 외부 연동 현황 |
||
| 756 | |||
| 757 | #### 10.2.1 Adapter 서비스 연동 (전문 송신) |
||
| 758 | |||
| 759 | | 배치명 | Job 이름 | 연동 서비스 | 연동 경로 | 전문 코드 | 비고 | |
||
| 760 | |--------|---------|------------|----------|----------|------| |
||
| 761 | | **전문 재거래** | telgmReDlngJob | adapter | `/api/sendMsg` | 재처리 대상 전문 코드 | 실패한 전문 재전송 (GatewayApiCall 사용) | |
||
| 762 | | **외상매출채권발행처리** | osbndPblcnRprcsScheduler01Job | adapter | `/api/sendMsg` | 6010 | 외상매출채권발행 전문 (MessageHelper 사용) | |
||
| 763 | | **외상매출채권선결제처리** | osbndAdvpayScheduler01Job | adapter | `/api/sendMsg` | 6030 | 외상매출채권선결제신청 전문 (MessageHelper 사용) | |
||
| 764 | | **외매채 즉시취소** | prcOsbndRtrcnDlngSe01Job | adapter | `/api/sendMsg` | 6011 | 외상매출채권발행취소 전문 (GatewayApiCall 사용) | |
||
| 765 | | **외매채 취소요청** | prcOsbndRtrcnDlngSe02Job | adapter | `/api/sendMsg` | 6011 | 외상매출채권발행취소 전문 (GatewayApiCall 사용) | |
||
| 766 | | **상매채 즉시취소** | wwSlsBndRtrcnDlngSe01Job | adapter | `/api/sendMsg` | 6021 | 상생매출채권발행취소 전문 (GatewayApiCall 사용) | |
||
| 767 | | **상매채 취소요청** | wwSlsBndRtrcnDlngSe02Job | adapter | `/api/sendMsg` | 6021 | 상생매출채권발행취소 전문 (GatewayApiCall 사용) | |
||
| 768 | | **수취채권 예약 발행** | addrBndRsvtPblcnJob | adapter | `/api/sendMsg` | 6020 | 상생매출채권발행 전문 (GatewayApiCall 사용) | |
||
| 769 | | **수취채권 즉시 발행** | addrBndNowPblcnJob | adapter | `/api/sendMsg` | 6020 | 상생매출채권발행 전문 (GatewayApiCall 사용) | |
||
| 770 | | **장려금정산이체처리** | prcsSubsdClclnTrJob | adapter | `/api/sendMsg` | 7020 | 자금이체 전문 (GatewayApiCall 사용) | |
||
| 771 | |||
| 772 | **참고사항:** |
||
| 773 | - Adapter 서비스는 금융기관과의 전문 송수신을 담당합니다. |
||
| 774 | - GatewayApiCall 유틸리티를 통해 호출됩니다. |
||
| 775 | - 전문 코드는 `PrcAppConstants.TELGM_CD`에 정의되어 있습니다. |
||
| 776 | |||
| 777 | #### 10.2.2 Surem API 연동 (알림톡/SMS 발송) |
||
| 778 | |||
| 779 | | 배치명 | Job 이름 | 연동 유형 | 템플릿 코드 | 비고 | |
||
| 780 | |--------|---------|----------|-----------|------| |
||
| 781 | | **대출연장안내** | loanPrlgGdJob | 알림톡 | ESI_SYNC_018 | 대출 만기 30일 전 안내 | |
||
| 782 | | **고객확인재등록안내** | custIdntyRrgGdJob | 알림톡 | ESI_SYNC_019 | 고객확인 만기 30일 전 안내 | |
||
| 783 | | **(구매기업)결재기한 만료 처리** | aprvnTermExpSchedulerJob01 | 알림톡 | ESI_SYNC_003, ESI_SYNC_006 | 결재기한 만료 시 결재권자(003), 요청자(006)에게 알림톡 발송 | |
||
| 784 | | **수취채권 발행 전 결재선 내역 승인기한 체크** | addrBfPblcnAplnJob | 알림톡 | ESI_SYNC_003, ESI_SYNC_006 | 승인기한 지난 결재미완료건에 대해 결재권자(003), 요청자(006)에게 알림톡 발송 | |
||
| 785 | | **오류알림** | errorNotificationJob | SMS | - | 전문 오류 발생 시 운영자에게 SMS 발송 | |
||
| 786 | | **대내원장대사 오류알림** | (대사 배치 내부 호출) | SMS | - | 대내원장대사 불일치 발생 시 운영자에게 SMS 발송 | |
||
| 787 | | **대외원장대사 오류알림** | (대사 배치 내부 호출) | SMS | - | 대외원장대사 불일치 발생 시 운영자에게 SMS 발송 | |
||
| 788 | |||
| 789 | |||
| 790 | **참고사항:** |
||
| 791 | - 알림톡 발송은 `batchAlimtalk` 설정이 `true`일 때만 동작합니다. |
||
| 792 | - 설정: `application.yml`의 `surem` 섹션 |
||
| 793 | - 서비스: `com.esi.nextgen.batch.common.surem.service.SuremServiceImpl` |
||
| 794 | - SMS 발송은 `suremMMSSetting` 메서드를 통해 처리됩니다. |
||
| 795 | - Surem API는 수렴(Surem) 서비스를 통해 알림톡/SMS를 발송합니다. |
||
| 796 | - 주요 설정 항목: |
||
| 797 | - `surem.usercode`: 사용자 코드 |
||
| 798 | - `surem.deptcode`: 부서 코드 |
||
| 799 | - `surem.yellowidkey`: 카카오톡 비즈니스 채널 키 (알림톡용) |
||
| 800 | - `surem.reqphone`: 발신 전화번호 (SMS용) |
||
| 801 | |||
| 802 | --- |
||
| 803 | |||
| 804 | ## 11. 트러블슈팅 |
||
| 805 | |||
| 806 | ### 11.1 배치 작업이 실행되지 않는 경우 |
||
| 807 | 4 | 길호 원 | 1. profile 설정 확인 |
| 808 | 2. Cron 표현식 확인 (`application-local.yml` 또는 환경별 설정) |
||
| 809 | 3. 데이터베이스 연결 확인 |
||
| 810 | 4. 로그 파일 확인 |
||
| 811 | 5. 비정상 종료 Job 존재 확인 |
||
| 812 | 1 | 길호 원 | |
| 813 | #### 11.1.1 비정상 종료로 인한 Job 실행 중 상태 확인 및 처리 |
||
| 814 | |||
| 815 | **문제 상황:** |
||
| 816 | - 애플리케이션이 강제 종료되거나 비정상 종료되어 Job이 `STARTED` 상태로 남아있음 |
||
| 817 | - 다음 스케줄 실행 시 "JobExecutionAlreadyRunningException" 발생하거나 실행되지 않음 |
||
| 818 | |||
| 819 | **확인 방법:** |
||
| 820 | |||
| 821 | 1. **SQL을 통한 확인** |
||
| 822 | ```sql |
||
| 823 | -- 실행 중인 Job 목록 확인 |
||
| 824 | SELECT |
||
| 825 | JOB_EXECUTION_ID, |
||
| 826 | JOB_INSTANCE_ID, |
||
| 827 | JOB_NAME, |
||
| 828 | STATUS, |
||
| 829 | START_TIME, |
||
| 830 | LAST_UPDATED, |
||
| 831 | EXIT_CODE, |
||
| 832 | EXIT_MESSAGE |
||
| 833 | FROM BATCH_JOB_EXECUTION |
||
| 834 | WHERE STATUS = 'STARTED' |
||
| 835 | ORDER BY START_TIME DESC; |
||
| 836 | |||
| 837 | -- 특정 Job의 실행 중 상태 확인 |
||
| 838 | SELECT |
||
| 839 | JOB_EXECUTION_ID, |
||
| 840 | JOB_NAME, |
||
| 841 | STATUS, |
||
| 842 | START_TIME, |
||
| 843 | LAST_UPDATED |
||
| 844 | FROM BATCH_JOB_EXECUTION |
||
| 845 | WHERE JOB_NAME = '218_osbndPblcnRprcsScheduler01Job' |
||
| 846 | AND STATUS = 'STARTED' |
||
| 847 | ORDER BY START_TIME DESC; |
||
| 848 | |||
| 849 | -- 실행 중인 Step 확인 |
||
| 850 | SELECT |
||
| 851 | STEP_EXECUTION_ID, |
||
| 852 | STEP_NAME, |
||
| 853 | JOB_EXECUTION_ID, |
||
| 854 | STATUS, |
||
| 855 | START_TIME, |
||
| 856 | LAST_UPDATED |
||
| 857 | FROM BATCH_STEP_EXECUTION |
||
| 858 | WHERE STATUS = 'STARTED' |
||
| 859 | ORDER BY START_TIME DESC; |
||
| 860 | ``` |
||
| 861 | |||
| 862 | **처리 방법:** |
||
| 863 | |||
| 864 | 1. **SQL을 통한 수동 처리** |
||
| 865 | ```sql |
||
| 866 | -- 실행 중인 Job을 FAILED 상태로 변경 |
||
| 867 | UPDATE BATCH_JOB_EXECUTION |
||
| 868 | SET STATUS = 'FAILED', |
||
| 869 | EXIT_CODE = 'FAILED', |
||
| 870 | EXIT_MESSAGE = '애플리케이션 비정상 종료로 인한 수동 처리', |
||
| 871 | END_TIME = NOW(), |
||
| 872 | LAST_UPDATED = NOW() |
||
| 873 | WHERE STATUS = 'STARTED' |
||
| 874 | AND JOB_NAME = '218_osbndPblcnRprcsScheduler01Job' |
||
| 875 | AND START_TIME < DATE_SUB(NOW(), INTERVAL 1 HOUR); -- 1시간 이상 실행 중인 경우만 |
||
| 876 | |||
| 877 | -- 실행 중인 Step도 함께 처리 |
||
| 878 | UPDATE BATCH_STEP_EXECUTION |
||
| 879 | SET STATUS = 'FAILED', |
||
| 880 | EXIT_CODE = 'FAILED', |
||
| 881 | END_TIME = NOW(), |
||
| 882 | LAST_UPDATED = NOW() |
||
| 883 | WHERE STATUS = 'STARTED' |
||
| 884 | AND JOB_EXECUTION_ID IN ( |
||
| 885 | SELECT JOB_EXECUTION_ID |
||
| 886 | FROM BATCH_JOB_EXECUTION |
||
| 887 | WHERE STATUS = 'FAILED' |
||
| 888 | AND JOB_NAME = '218_osbndPblcnRprcsScheduler01Job' |
||
| 889 | ); |
||
| 890 | ``` |
||
| 891 | |||
| 892 | 3. **예방 방법** |
||
| 893 | - 일부 Scheduler에서는 이미 `isRunning()` 체크를 통해 실행 중인 Job이 있으면 스킵하는 로직이 구현되어 있음 |
||
| 894 | - 예시: `AddrBndPblcnScheduler`, `PrcOsbndRtrcnScheduler`, `MtryStlmTotInfoScheduler` 등 |
||
| 895 | |||
| 896 | **주의사항:** |
||
| 897 | - Job 상태를 변경하기 전에 해당 Job이 실제로 실행 중이 아닌지 확인 필요 |
||
| 898 | - `LAST_UPDATED` 시간을 확인하여 오래된 실행 중 상태만 처리하는 것을 권장 |
||
| 899 | - 상태 변경 후 다음 스케줄 실행 시 정상적으로 실행되는지 확인 필요 |
||
| 900 | |||
| 901 | ### 11.2 대사 파일 처리 오류 |
||
| 902 | 1. 대사 파일 경로 확인 (`base_path` 설정) |
||
| 903 | 2. 파일 권한 확인 |
||
| 904 | 3. 파일 형식 및 레이아웃 확인 |
||
| 905 | 4. 로그에서 구체적인 오류 메시지 확인 |
||
| 906 | |||
| 907 | ### 11.3 데이터베이스 연결 오류 |
||
| 908 | 1. HikariCP 연결 풀 설정 확인 |
||
| 909 | 2. 데이터베이스 서버 상태 확인 |
||
| 910 | 3. 네트워크 연결 확인 |
||
| 911 | 4. 연결 타임아웃 설정 확인 |
||
| 912 | |||
| 913 | ### 11.4 전문 재거래 실패 |
||
| 914 | 1. 재처리 대상 전문 코드 확인 (`telgm.re-dlng-codes`) |
||
| 915 | 2. 어댑터 서비스 상태 확인 |
||
| 916 | 3. 네트워크 연결 확인 |
||
| 917 | 4. 전문 형식 확인 |
||
| 918 | |||
| 919 | --- |
||
| 920 | |||
| 921 | ## 12. 주요 상수 및 코드 |
||
| 922 | |||
| 923 | ### 12.1 금융기관 코드 |
||
| 924 | - `ESI`: 결제전산원 |
||
| 925 | - `218` (KBSEC): KB증권 |
||
| 926 | |||
| 927 | ### 12.2 채권 상태 코드 |
||
| 928 | - `01`: 정상 |
||
| 929 | - `02`: 완제 |
||
| 930 | - `03`: 취소요청 |
||
| 931 | - `09`: 취소 |
||
| 932 | |||
| 933 | ### 12.3 발행 구분 코드 |
||
| 934 | - `1`: 즉시발행 |
||
| 935 | - `2`: 예약발행 |
||
| 936 | |||
| 937 | ### 12.4 대사 원장 구분 코드 |
||
| 938 | - `00`: 예치금잔액대사 |
||
| 939 | - `01`: 구매기업원장_원장대사 |
||
| 940 | - `02`: 구매기업지사정보_원장대사 |
||
| 941 | - `11`: 협력기업원장_원장대사 |
||
| 942 | - `12`: 거래선원장_원장대사 |
||
| 943 | - `21`: 외상매출채권원장_원장대사 |
||
| 944 | - `22`: 상생매출채권원장_원장대사 |
||
| 945 | - `31`: 대출약정원장_원장대사 |
||
| 946 | - `32`: 대출실행원장_원장대사 |
||
| 947 | - `99`: 대내 대사 |
||
| 948 | |||
| 949 | 상세한 상수는 `PrcAppConstants.java` 참조 |
||
| 950 | |||
| 951 | --- |
||
| 952 | |||
| 953 | ## 13. 개발 가이드 |
||
| 954 | |||
| 955 | ### 13.1 새로운 배치 작업 추가 방법 |
||
| 956 | 1. **Service 클래스 생성**: `service/` 패키지에 비즈니스 로직 구현 |
||
| 957 | - 필요 시 **Mapper 인터페이스 생성**: `mapper/` 패키지에 Mapper 인터페이스 생성 |
||
| 958 | - 필요 시 **Mapper XML 생성**: `resources/mapper/`에 XML 파일 생성 |
||
| 959 | 2. **Config 클래스 생성**: `config/` 패키지에 `*BatchConfig.java` 생성 |
||
| 960 | - Job, Step 설정 |
||
| 961 | - Tasklet 정의 |
||
| 962 | 3. **Scheduler 클래스 생성**: `scheduler/` 패키지에 `@Scheduled` 메서드 추가 |
||
| 963 | - 또는 기존 Scheduler 클래스에 메서드 추가 |
||
| 964 | 4. **Cron 설정 추가**: `application-local.yml` 또는 환경별 설정 파일에 Cron 표현식 추가 |
||
| 965 | - 형식: `batch.cron.{배치명}: 'cron 표현식'` |
||
| 966 | 5. **BatchCronConfig에 Bean 추가**: Cron Bean 등록 |
||
| 967 | - `@Bean("{배치명}Cron")` 메서드 추가 |
||
| 968 | - `@Value("${batch.cron.{배치명}}")` 사용 |
||
| 969 | 6. **BatchJobNameMapper에 매핑 추가**: Job 이름 한글명 매핑 (선택사항) |
||
| 970 | |||
| 971 | ### 13.2 Job 실행 흐름 |
||
| 972 | |||
| 973 | Spring Batch Job이 실행되는 전체 흐름은 다음과 같습니다: |
||
| 974 | |||
| 975 | ``` |
||
| 976 | 1. application.yml (또는 application-local.yml) |
||
| 977 | └─ batch.cron.osbndPblcnRprcs: '0 0 0 1 * *' |
||
| 978 | ↓ |
||
| 979 | 2. BatchCronConfig (@Configuration) |
||
| 980 | └─ @Bean("osbndPblcnRprcsCron") |
||
| 981 | └─ @Value("${batch.cron.osbndPblcnRprcs}") String cron |
||
| 982 | └─ Bean으로 등록: "osbndPblcnRprcsCron" |
||
| 983 | ↓ |
||
| 984 | 3. Scheduler 클래스 (@Component) |
||
| 985 | └─ @Scheduled(cron = "#{@osbndPblcnRprcsCron}") |
||
| 986 | └─ Spring의 스케줄러가 cron 표현식에 따라 메서드 실행 |
||
| 987 | ↓ |
||
| 988 | 4. Scheduler.runOsbndPblcnRprcsScheduler01Job() |
||
| 989 | └─ JobParameters 생성 (timestamp 등) |
||
| 990 | └─ jobLauncher.run(osbndPblcnRprcsScheduler01Job, jobParameters) |
||
| 991 | ↓ |
||
| 992 | 5. JobLauncher (Spring Batch) |
||
| 993 | └─ Job 실행 시작 |
||
| 994 | └─ JobRepository에 실행 정보 저장 |
||
| 995 | ↓ |
||
| 996 | 6. Job Config (예: OsbndPblcnRprcsBatchConfig) |
||
| 997 | └─ @Bean osbndPblcnRprcsScheduler01Job() |
||
| 998 | └─ JobBuilder로 Job 생성 |
||
| 999 | └─ Step 연결 |
||
| 1000 | ↓ |
||
| 1001 | 7. Step (예: osbndPblcnRprcsScheduler01Step) |
||
| 1002 | └─ StepBuilder로 Step 생성 |
||
| 1003 | └─ Tasklet 연결 |
||
| 1004 | ↓ |
||
| 1005 | 8. Tasklet (예: osbndPblcnRprcsSe01Tasklet) |
||
| 1006 | └─ execute() 메서드 실행 |
||
| 1007 | └─ 실제 비즈니스 로직 호출 |
||
| 1008 | ↓ |
||
| 1009 | 9. Service (예: OsbndPblcnService) |
||
| 1010 | └─ prcsOsbndPblcn() 메서드 실행 |
||
| 1011 | └─ 비즈니스 로직 처리 |
||
| 1012 | ``` |
||
| 1013 | |||
| 1014 | **주요 구성 요소:** |
||
| 1015 | |||
| 1016 | 1. **Cron 설정 파일** (`application.yml` 또는 `application-local.yml`) |
||
| 1017 | - `batch.cron.{배치명}` 형식으로 cron 표현식 정의 |
||
| 1018 | - 예: `batch.cron.osbndPblcnRprcs: '0 0 0 1 * *'` |
||
| 1019 | |||
| 1020 | 2. **BatchCronConfig** (`@Configuration`) |
||
| 1021 | - `@Value("${batch.cron.{배치명}}")`로 cron 값 읽기 |
||
| 1022 | - `@Bean("{배치명}Cron")`으로 Bean 등록 |
||
| 1023 | - Spring Expression Language(SpEL)에서 참조 가능하도록 함 |
||
| 1024 | |||
| 1025 | 3. **Scheduler 클래스** (`@Component`) |
||
| 1026 | - `@Scheduled(cron = "#{@{배치명}Cron}")`로 Bean 참조 |
||
| 1027 | - Spring의 `@EnableScheduling` 활성화 필요 |
||
| 1028 | - cron 표현식에 따라 메서드 자동 실행 |
||
| 1029 | |||
| 1030 | 4. **JobLauncher** |
||
| 1031 | - Spring Batch의 Job 실행 인터페이스 |
||
| 1032 | - Job과 JobParameters를 받아 실행 |
||
| 1033 | - JobRepository에 실행 이력 저장 |
||
| 1034 | |||
| 1035 | 5. **Job Config** (`@Configuration`) |
||
| 1036 | - `@Bean`으로 Job 정의 |
||
| 1037 | - `JobBuilder`로 Job 생성 |
||
| 1038 | - Step 연결 및 Listener 설정 |
||
| 1039 | |||
| 1040 | 6. **Step** |
||
| 1041 | - Job의 실행 단위 |
||
| 1042 | - `StepBuilder`로 Step 생성 |
||
| 1043 | - Tasklet 또는 Chunk 방식 선택 |
||
| 1044 | |||
| 1045 | 7. **Tasklet** |
||
| 1046 | - Step의 실행 로직 |
||
| 1047 | - `execute()` 메서드에서 실제 비즈니스 로직 호출 |
||
| 1048 | |||
| 1049 | 8. **Service** |
||
| 1050 | - 실제 비즈니스 로직 처리 |
||
| 1051 | - 데이터 조회, 가공, 저장 등 수행 |
||
| 1052 | |||
| 1053 | **예시 코드 흐름:** |
||
| 1054 | |||
| 1055 | ```java |
||
| 1056 | // 1. application-local.yml |
||
| 1057 | batch: |
||
| 1058 | cron: |
||
| 1059 | osbndPblcnRprcs: '0 0 0 1 * *' |
||
| 1060 | |||
| 1061 | // 2. BatchCronConfig.java |
||
| 1062 | @Bean("osbndPblcnRprcsCron") |
||
| 1063 | public String osbndPblcnRprcsCron(@Value("${batch.cron.osbndPblcnRprcs}") String cron) { |
||
| 1064 | return cron; |
||
| 1065 | } |
||
| 1066 | |||
| 1067 | // 3. OsbndPblcnRprcsScheduler.java |
||
| 1068 | @Scheduled(cron = "#{@osbndPblcnRprcsCron}") |
||
| 1069 | public void runOsbndPblcnRprcsScheduler01Job() { |
||
| 1070 | jobLauncher.run(osbndPblcnRprcsScheduler01Job, jobParameters); |
||
| 1071 | } |
||
| 1072 | |||
| 1073 | // 4. OsbndPblcnRprcsBatchConfig.java |
||
| 1074 | @Bean |
||
| 1075 | public Job osbndPblcnRprcsScheduler01Job(...) { |
||
| 1076 | return new JobBuilder(...) |
||
| 1077 | .start(osbndPblcnRprcsScheduler01Step(...)) |
||
| 1078 | .build(); |
||
| 1079 | } |
||
| 1080 | |||
| 1081 | // 5. Tasklet |
||
| 1082 | public Tasklet osbndPblcnRprcsSe01Tasklet() { |
||
| 1083 | return (contribution, chunkContext) -> { |
||
| 1084 | osbndPblcnService.prcsOsbndPblcn(); // Service 호출 |
||
| 1085 | return RepeatStatus.FINISHED; |
||
| 1086 | }; |
||
| 1087 | } |
||
| 1088 | ``` |
||
| 1089 | |||
| 1090 | ### 13.3 코딩 컨벤션 |
||
| 1091 | - **의존성 주입**: Lombok의 `@RequiredArgsConstructor` 사용 |
||
| 1092 | - **함수 구현**: 정적 메서드로 구현 (가능한 경우) |
||
| 1093 | - **로깅**: SLF4J 사용 (`@Slf4j`) |
||
| 1094 | |||
| 1095 | ### 13.4 테스트 |
||
| 1096 | - 테스트 코드 위치: `src/test/java/` |
||
| 1097 | - Spring Batch 테스트: `spring-batch-test` 의존성 사용 |
||
| 1098 | 5 | 길호 원 | - TestJobRunner |
| 1099 | - profile 설정 필요 |
||
| 1100 | - 환경변수: `SPRING_PROFILES_ACTIVE=local` |
||
| 1101 | - Job name 설정 후 실행 |
||
| 1102 | ```java |
||
| 1103 | @Qualifier("dlngCompFile00Job") Job runJob |
||
| 1104 | ``` |
||
| 1105 | 1 | 길호 원 | |
| 1106 | 5 | 길호 원 | ### 13.5 Batch project 실행 |
| 1107 | - Gradle bootRun 실행 |
||
| 1108 | - profile 설정 필요 |
||
| 1109 | - 환경변수: `SPRING_PROFILES_ACTIVE=local` |
||
| 1110 | |||
| 1111 | - BatchApplication |
||
| 1112 | - Active profiles 지정 |
||
| 1113 | |||
| 1114 | 1 | 길호 원 | --- |
| 1115 | |||
| 1116 | ## 14. 배포 및 운영 |
||
| 1117 | |||
| 1118 | ### 14.1 배포 환경 |
||
| 1119 | - **로컬**: `application-local.yml` |
||
| 1120 | - **F218**: `application-F218.yml` |
||
| 1121 | - 금융기관 추가 시 금융기관별 profile 추가 필요 |
||
| 1122 | - **(주의)** 현재 개발/운영 profile 분리되어 있지 않음!! |
||
| 1123 | - 프로파일은 `spring.profiles.active`로 지정 |
||
| 1124 | |||
| 1125 | ### 14.2 모니터링 |
||
| 1126 | 자세한 모니터링 설정 및 방법은 **9.3 모니터링** 섹션을 참조하세요. |
||
| 1127 | |||
| 1128 | ### 14.3 백업 |
||
| 1129 | - 대사 파일 백업: `backup` 폴더에 날짜별로 저장 |
||
| 1130 | - 데이터베이스 백업: 별도 정책에 따라 수행 |
||
| 1131 | |||
| 1132 | --- |
||
| 1133 | |||
| 1134 | ## 15. 참고 자료 |
||
| 1135 | |||
| 1136 | ### 15.1 주요 클래스 참조 |
||
| 1137 | - **메인 애플리케이션**: `BatchApplication.java` |
||
| 1138 | - **배치 작업 매퍼**: `BatchJobNameMapper.java` |
||
| 1139 | - **상수 정의**: `PrcAppConstants.java` |
||
| 1140 | - **배치 Cron 설정**: `BatchCronConfig.java` |
||
| 1141 | |||
| 1142 | ### 15.2 MessageHelper |
||
| 1143 | |||
| 1144 | **클래스 위치**: `com.esi.nextgen.batch.common.util.MessageHelper` |
||
| 1145 | |||
| 1146 | **주요 기능:** |
||
| 1147 | - **전문(Telegram) 생성 및 송신**: `FieldSpec` 어노테이션 기반으로 전문 자동 생성 및 변환 |
||
| 1148 | - **전문 파싱**: 고정 길이 전문을 VO 객체로 파싱 |
||
| 1149 | - **필드 자동 처리**: 길이, 패딩, 정렬 자동 처리 (EUC-KR 바이트 길이 기준) |
||
| 1150 | - **검증**: Bean Validation + FieldSpec 길이 검증 |
||
| 1151 | - **대사 파일 읽기**: H/D/T 레코드 타입 파일 파싱 |
||
| 1152 | |||
| 1153 | **주요 메서드:** |
||
| 1154 | - `createTelegram()`: 전문 생성 (공통부 포함, Supplier 패턴 지원) |
||
| 1155 | - `sendMessage()`: 전문 송신 및 전문거래내역 테이블 자동 등록 |
||
| 1156 | - `parseMessage()`: 전문 문자열을 VO 객체로 파싱 |
||
| 1157 | - `readFile()`: 대사 파일 읽기 및 파싱 |
||
| 1158 | - `validateAll()`: Bean Validation + FieldSpec 검증 |
||
| 1159 | |||
| 1160 | **사용 배치:** |
||
| 1161 | - 외상매출채권발행처리 (`OsBondIssueService`) |
||
| 1162 | - 외상매출채권선결제처리 (`OsbndAdvpayService`) |
||
| 1163 | - 원장 대사 파일 처리 (`DlngCompFileRegService`) |
||
| 1164 | |||
| 1165 | **특징:** |
||
| 1166 | - `@FieldSpec` 어노테이션으로 필드 메타데이터 정의 |
||
| 1167 | - EUC-KR 인코딩 기준 바이트 길이 처리 (한글 2바이트) |
||
| 1168 | - 전문 공통부 자동 생성 및 전문거래내역 자동 로깅 |
||
| 1169 | - GatewayApiCall을 통한 Adapter 서비스 연동 (`/api/sendMsg`) |
||
| 1170 | |||
| 1171 | ### 15.3 GatewayApiCall |
||
| 1172 | |||
| 1173 | **클래스 위치**: `com.esi.nextgen.batch.common.util.GatewayApiCall` |
||
| 1174 | |||
| 1175 | **주요 기능:** |
||
| 1176 | - **게이트웨이 전문 호출**: Adapter 서비스로 전문(Telegram) 송신 |
||
| 1177 | - **Flat 전문 변환**: VO 객체를 Flat 전문 형식으로 자동 변환 |
||
| 1178 | - **동기식 호출**: `GenericWebClient`를 통한 HTTP 통신 |
||
| 1179 | |||
| 1180 | **주요 메서드:** |
||
| 1181 | - `callGatewayTelgm()`: 게이트웨이 전문 호출 (Flat 전문 송신) |
||
| 1182 | - 파라미터: `serviceName` (서비스명), `uri` (호출 경로), `requestVo` (전문 요청 객체) |
||
| 1183 | - 반환값: `true` (성공), `false` (실패) |
||
| 1184 | |||
| 1185 | **사용 배치:** |
||
| 1186 | - 전문 재거래 (`TelgmReDlngSingleService`) |
||
| 1187 | - 외매채 즉시취소/취소요청 (`PrcOsbndRtrcnProcessService`) |
||
| 1188 | - 상매채 즉시취소/취소요청 (`ClbWwSlsBndRtrcnProcessService`) |
||
| 1189 | - 수취채권 예약/즉시 발행 (`ApiClbWwSlsBndPblcnService`) |
||
| 1190 | - 장려금정산이체처리 (`PrcsSubsdClclnTrService`) |
||
| 1191 | |||
| 1192 | **특징:** |
||
| 1193 | - `FlatMessageConverter`를 통한 VO → Flat 전문 변환 |
||
| 1194 | - `application.yml`의 `api.gateway.send-message-url` 설정 사용 (기본값: `/api/sendMsg`) |
||
| 1195 | - Form Data 형식으로 전송 (`msg` 키에 Flat 전문 포함) |
||
| 1196 | - `GenericWebClient`를 통한 마이크로서비스 간 통신 |
||
| 1197 | |||
| 1198 | **MessageHelper와의 차이점:** |
||
| 1199 | - **GatewayApiCall**: 직접적인 전문 송신 (Flat 전문 변환 후 전송) |
||
| 1200 | - **MessageHelper**: 전문 생성, 검증, 로깅 등 추가 기능 포함 (내부적으로 GatewayApiCall 사용) |
||
| 1201 | |||
| 1202 | ### 15.4 문서화 |
||
| 1203 | - 각 클래스에는 JavaDoc 주석이 포함되어 있습니다. |
||
| 1204 | - 주요 메서드에는 설명이 포함되어 있습니다. |
||
| 1205 | |||
| 1206 | --- |
||
| 1207 | |||
| 1208 | ## 16. 주의사항 |
||
| 1209 | |||
| 1210 | ### 16.1 중요 사항 |
||
| 1211 | 1. **금융기관 코드**: 각 환경별로 올바른 금융기관 코드 설정 필요 |
||
| 1212 | 2. **대사 파일 경로**: 운영 환경과 개발 환경의 경로가 다를 수 있음 |
||
| 1213 | 3. **데이터베이스 연결**: 프로덕션 환경의 연결 정보는 별도 관리 필요 |
||
| 1214 | 4. **Cron 표현식**: 배치 실행 시간은 비즈니스 요구사항에 맞게 조정 필요 |
||
| 1215 | 5. **파일 권한**: 대사 파일 읽기/쓰기 권한 확인 필요 |
||
| 1216 | |||
| 1217 | ### 16.2 보안 |
||
| 1218 | - 데이터베이스 비밀번호는 환경 변수나 별도 설정 파일로 관리 권장 |
||
| 1219 | |||
| 1220 | --- |
||
| 1221 | |||
| 1222 | ## 부록 A: 배치 작업 실행 명령어 예시 |
||
| 1223 | |||
| 1224 | ```bash |
||
| 1225 | # 전문 재거래 배치 실행 |
||
| 1226 | java -jar batch-0.0.1-SNAPSHOT.jar --spring.profiles.active=F218 --job.name=218_telgmReDlngJob |
||
| 1227 | |||
| 1228 | # 원장 대사 파일 처리 배치 실행 |
||
| 1229 | java -jar batch-0.0.1-SNAPSHOT.jar --spring.profiles.active=F218 --job.name=218_dlngCompFile00Job |
||
| 1230 | |||
| 1231 | # 장려금 배분 배치 실행 |
||
| 1232 | java -jar batch-0.0.1-SNAPSHOT.jar --spring.profiles.active=F218 --job.name=218_aprtSubsdJob |
||
| 1233 | ``` |
||
| 1234 | |||
| 1235 | --- |
||
| 1236 | |||
| 1237 | ## 부록 B: Cron 표현식 참고 |
||
| 1238 | 6 | 길호 원 | ┌─ 초 (0–59) |
| 1239 | │ ┌─ 분 (0–59) |
||
| 1240 | │ │ ┌─ 시 (0–23) |
||
| 1241 | │ │ │ ┌─ 일 (1–31) |
||
| 1242 | │ │ │ │ ┌─ 월 (1–12) |
||
| 1243 | │ │ │ │ │ ┌─ 요일 (0–7, 0·7=일요일) |
||
| 1244 | │ │ │ │ │ │ |
||
| 1245 | 7 | 길호 원 | `* * * * * *` |
| 1246 | 6 | 길호 원 | |
| 1247 | | 필드 | 의미 | 값 범위 | |
||
| 1248 | | -- | ------------ | --------------- | |
||
| 1249 | | 초 | Seconds | 0–59 | |
||
| 1250 | | 분 | Minutes | 0–59 | |
||
| 1251 | | 시 | Hours | 0–23 | |
||
| 1252 | | 일 | Day of Month | 1–31 | |
||
| 1253 | | 월 | Month | 1–12 | |
||
| 1254 | | 요일 | Day of Week | 0–7 (0,7 = SUN) | |
||
| 1255 | |||
| 1256 | |||
| 1257 | 1 | 길호 원 | |
| 1258 | | 표현식 | 의미 | |
||
| 1259 | |--------|------| |
||
| 1260 | | `0 0 0 1 * *` | 매월 1일 0시 0분 0초 | |
||
| 1261 | 8 | 길호 원 | | `0 30 * * * *` | 매일 매시 30분 0초 | |
| 1262 | | `0 */5 8-22 * * MON-FRI` | 평일 08~22시 매 5분(0, 5, 10 ...) | |
||
| 1263 | 1 | 길호 원 | | `0 0 10 * * MON-FRI` | 평일 10시 | |
| 1264 | 8 | 길호 원 | | `0 * 8-21 * * *` | 매일 08~21시 매 1분(매분 0초) | |
| 1265 | | `0 */2 * * * *` | 매 2분마다(매분 0초) | |
||
| 1266 | | `30 * 8-20 * * MON-FRI` | 평일 08~20시 매분 30초에 실행 | |
||
| 1267 | 5 | 길호 원 | | `0 0 2 * * ?` | 매일 02:00 | |
| 1268 | | `0 0 9 * * MON-FRI` | 평일 09:00 | |
||
| 1269 | | `0 0 20 1 * ?` | 매월 1일 20:00 | |
||
| 1270 | |||
| 1271 | **참고:** Spring의 cron 표현식은 `초 분 시 일 월 요일`(6필드) 형식이며, `?`는 “특정 값 없음”을 의미합니다. 운영/로컬 프로필마다 값이 다를 수 있으니 실제 주기는 `application-F218.yml`, `application-local.yml`의 `batch.cron`을 확인하세요. |
||
| 1272 | 1 | 길호 원 | |
| 1273 | --- |
||
| 1274 | |||
| 1275 | **문서 작성일**: 2025-12-09 |
||
| 1276 | **문서 버전**: 1.0 |
||
| 1277 | **작성자**: 시스템 |