Project

General

Profile

About-batch » History » Version 15

길호 원, 12/15/2025 03:58 PM

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