diff --git a/DB-DDL/maria/ddl/xitframework/seq_zip_file_process_log_id.sql b/DB-DDL/maria/ddl/xitframework/seq_batch_zip_file_detail_log_id.sql
similarity index 55%
rename from DB-DDL/maria/ddl/xitframework/seq_zip_file_process_log_id.sql
rename to DB-DDL/maria/ddl/xitframework/seq_batch_zip_file_detail_log_id.sql
index 3118184..ecf2c0a 100644
--- a/DB-DDL/maria/ddl/xitframework/seq_zip_file_process_log_id.sql
+++ b/DB-DDL/maria/ddl/xitframework/seq_batch_zip_file_detail_log_id.sql
@@ -1,4 +1,4 @@
-CREATE SEQUENCE seq_zip_file_process_log_id
+CREATE SEQUENCE seq_batch_zip_file_detail_log_id
START WITH 1
INCREMENT BY 1
MINVALUE 1
diff --git a/DB-DDL/maria/ddl/xitframework/seq_batch_zip_file_process_log_id.sql b/DB-DDL/maria/ddl/xitframework/seq_batch_zip_file_process_log_id.sql
new file mode 100644
index 0000000..fd45ebb
--- /dev/null
+++ b/DB-DDL/maria/ddl/xitframework/seq_batch_zip_file_process_log_id.sql
@@ -0,0 +1,6 @@
+CREATE SEQUENCE seq_batch_zip_file_process_log_id
+ START WITH 1
+ INCREMENT BY 1
+ MINVALUE 1
+ MAXVALUE 99999999
+ CYCLE;
\ No newline at end of file
diff --git a/DB-DDL/maria/ddl/xitframework/tb_zip_file_detail_log.sql b/DB-DDL/maria/ddl/xitframework/tb_batch_zip_file_detail_log.sql
similarity index 80%
rename from DB-DDL/maria/ddl/xitframework/tb_zip_file_detail_log.sql
rename to DB-DDL/maria/ddl/xitframework/tb_batch_zip_file_detail_log.sql
index 10ae905..3b27c6b 100644
--- a/DB-DDL/maria/ddl/xitframework/tb_zip_file_detail_log.sql
+++ b/DB-DDL/maria/ddl/xitframework/tb_batch_zip_file_detail_log.sql
@@ -1,4 +1,4 @@
-create table tb_zip_file_detail_log
+create table tb_batch_zip_file_detail_log
(
detail_log_id varchar(12) not null comment '상세로그ID'
primary key,
@@ -14,20 +14,20 @@ create table tb_zip_file_detail_log
process_time datetime default current_timestamp() null comment '처리시간',
reg_date datetime default current_timestamp() null comment '등록일시',
reg_user_id varchar(20) default 'BATCH_SYSTEM' null comment '등록자ID',
- constraint fk_zip_detail_log_id
- foreign key (log_id) references tb_zip_file_process_log (log_id)
+ constraint fk_batch_zip_detail_log_id
+ foreign key (log_id) references tb_batch_zip_file_process_log (log_id)
on delete cascade
)
comment 'ZIP파일처리상세로그' collate = utf8mb4_unicode_ci;
create index idx_log_id
- on tb_zip_file_detail_log (log_id);
+ on tb_batch_zip_file_detail_log (log_id);
create index idx_file_name
- on tb_zip_file_detail_log (file_name);
+ on tb_batch_zip_file_detail_log (file_name);
create index idx_process_status
- on tb_zip_file_detail_log (process_status);
+ on tb_batch_zip_file_detail_log (process_status);
create index idx_is_image
- on tb_zip_file_detail_log (is_image);
\ No newline at end of file
+ on tb_batch_zip_file_detail_log (is_image);
\ No newline at end of file
diff --git a/DB-DDL/maria/ddl/xitframework/tb_zip_file_process_log.sql b/DB-DDL/maria/ddl/xitframework/tb_batch_zip_file_process_log.sql
similarity index 90%
rename from DB-DDL/maria/ddl/xitframework/tb_zip_file_process_log.sql
rename to DB-DDL/maria/ddl/xitframework/tb_batch_zip_file_process_log.sql
index 7ede15d..00a2f24 100644
--- a/DB-DDL/maria/ddl/xitframework/tb_zip_file_process_log.sql
+++ b/DB-DDL/maria/ddl/xitframework/tb_batch_zip_file_process_log.sql
@@ -1,4 +1,4 @@
-create table tb_zip_file_process_log
+create table tb_batch_zip_file_process_log
(
log_id varchar(12) not null comment '로그ID'
primary key,
@@ -24,10 +24,10 @@ create table tb_zip_file_process_log
comment 'ZIP파일처리로그' collate = utf8mb4_unicode_ci;
create index idx_zip_file_name
- on tb_zip_file_process_log (zip_file_name);
+ on tb_batch_zip_file_process_log (zip_file_name);
create index idx_process_status
- on tb_zip_file_process_log (process_status);
+ on tb_batch_zip_file_process_log (process_status);
create index idx_start_time
- on tb_zip_file_process_log (start_time);
\ No newline at end of file
+ on tb_batch_zip_file_process_log (start_time);
\ No newline at end of file
diff --git a/README_ZIP_BATCH.md b/README_ZIP_BATCH.md
index dbdcd2a..5b56ed2 100644
--- a/README_ZIP_BATCH.md
+++ b/README_ZIP_BATCH.md
@@ -6,10 +6,10 @@
## 구현된 기능
### 1. 데이터베이스 테이블
-- **tb_zip_file_process_log**: ZIP 파일 처리 메인 로그 테이블
-- **tb_zip_file_detail_log**: ZIP 파일 내 개별 파일 처리 상세 로그 테이블
-- **seq_zip_file_process_log_id**: 메인 로그 ID 시퀀스
-- **seq_zip_file_detail_log_id**: 상세 로그 ID 시퀀스
+- **tb_batch_zip_file_process_log**: ZIP 파일 처리 메인 로그 테이블
+- **tb_batch_zip_file_detail_log**: ZIP 파일 내 개별 파일 처리 상세 로그 테이블
+- **seq_batch_zip_file_process_log_id**: 메인 로그 ID 시퀀스
+- **seq_batch_zip_file_detail_log_id**: 상세 로그 ID 시퀀스
### 2. 주요 클래스
@@ -79,12 +79,12 @@ ${user.home}/batch/zip/
### 1. 데이터베이스 테이블 생성
```sql
-- 시퀀스 생성
-source DB-DDL/maria/ddl/xitframework/seq_zip_file_process_log_id.sql
-source DB-DDL/maria/ddl/xitframework/seq_zip_file_detail_log_id.sql
+source DB-DDL/maria/ddl/xitframework/seq_batch_zip_file_process_log_id.sql
+source DB-DDL/maria/ddl/xitframework/seq_batch_zip_file_detail_log_id.sql
-- 테이블 생성
-source DB-DDL/maria/ddl/xitframework/tb_zip_file_process_log.sql
-source DB-DDL/maria/ddl/xitframework/tb_zip_file_detail_log.sql
+source DB-DDL/maria/ddl/xitframework/tb_batch_zip_file_process_log.sql
+source DB-DDL/maria/ddl/xitframework/tb_batch_zip_file_detail_log.sql
```
### 2. 배치 작업 등록
@@ -99,13 +99,13 @@ Quartz 스케줄러를 통해 `ZipFileProcessBatchJob` 클래스를 등록하여
### 메인 처리 로그 조회
```sql
-SELECT * FROM tb_zip_file_process_log
+SELECT * FROM tb_batch_zip_file_process_log
ORDER BY start_time DESC;
```
### 상세 처리 로그 조회
```sql
-SELECT * FROM tb_zip_file_detail_log
+SELECT * FROM tb_batch_zip_file_detail_log
WHERE log_id = 'ZPFL00000001'
ORDER BY process_time ASC;
```
@@ -118,7 +118,7 @@ SELECT
is_corrupted,
process_status,
error_message
-FROM tb_zip_file_detail_log
+FROM tb_batch_zip_file_detail_log
WHERE log_id = 'ZPFL00000001'
AND is_image = 'Y';
```
@@ -132,4 +132,4 @@ WHERE log_id = 'ZPFL00000001'
1. 디렉토리 권한 확인 필요
2. 대용량 ZIP 파일 처리 시 메모리 사용량 모니터링 필요
3. 동일한 파일명의 ZIP 파일 처리 시 타임스탬프 추가하여 중복 방지
-4. 배치 작업은 `@DisallowConcurrentExecution` 어노테이션으로 동시 실행 방지
\ No newline at end of file
+4. 배치 작업은 `@DisallowConcurrentExecution` 어노테이션으로 동시 실행 방지
diff --git a/src/main/java/go/kr/project/batch/job/ZipFileProcessBatchJob.java b/src/main/java/go/kr/project/batch/job/ZipFileProcessBatchJob.java
index 0194de7..446be0e 100644
--- a/src/main/java/go/kr/project/batch/job/ZipFileProcessBatchJob.java
+++ b/src/main/java/go/kr/project/batch/job/ZipFileProcessBatchJob.java
@@ -65,6 +65,9 @@ public class ZipFileProcessBatchJob implements Job {
@Value("${batch.zip.create-date-subdir:false}")
private boolean createDateSubdir;
+ @Value("${batch.zip.create-zip-name-subdir:false}")
+ private boolean createZipNameSubdir;
+
// ===========================================================
// 의존성 주입
// ===========================================================
@@ -355,6 +358,14 @@ public class ZipFileProcessBatchJob implements Job {
extractPath = extractPath.resolve(dateStr);
}
+ // ZIP 파일명으로 하위 디렉토리 생성
+ if (createZipNameSubdir) {
+ String zipFileName = zipFile.getFileName().toString();
+ // 확장자 제거 (.zip)
+ String zipNameWithoutExt = zipFileName.substring(0, zipFileName.lastIndexOf('.'));
+ extractPath = extractPath.resolve(zipNameWithoutExt);
+ }
+
// 추출 디렉토리 생성
if (!Files.exists(extractPath)) {
Files.createDirectories(extractPath);
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index dbf811c..27aafc5 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -90,3 +90,4 @@ batch:
extract-dir: /data/xit-framework/batch/zip/extract # ZIP 파일 압축 해제 디렉토리
archive-dir: /data/xit-framework/batch/zip/archive # ZIP 파일 아카이브 디렉토리
create-date-subdir: true # yyyymmdd 하위 디렉토리 생성 여부
+ create-zip-name-subdir: true # ZIP 파일명으로 하위 디렉토리 생성 여부
diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml
index 3121aec..a9663af 100644
--- a/src/main/resources/application-local.yml
+++ b/src/main/resources/application-local.yml
@@ -95,3 +95,4 @@ batch:
extract-dir: d:/data/xit-framework/batch/zip/extract # ZIP 파일 압축 해제 디렉토리
archive-dir: d:/data/xit-framework/batch/zip/archive # ZIP 파일 아카이브 디렉토리
create-date-subdir: true # yyyymmdd 하위 디렉토리 생성 여부
+ create-zip-name-subdir: true # ZIP 파일명으로 하위 디렉토리 생성 여부
diff --git a/src/main/resources/application-prd.yml b/src/main/resources/application-prd.yml
index 577be04..28bc977 100644
--- a/src/main/resources/application-prd.yml
+++ b/src/main/resources/application-prd.yml
@@ -90,3 +90,4 @@ batch:
extract-dir: /data/xit-framework/batch/zip/extract # ZIP 파일 압축 해제 디렉토리
archive-dir: /data/xit-framework/batch/zip/archive # ZIP 파일 아카이브 디렉토리
create-date-subdir: true # yyyymmdd 하위 디렉토리 생성 여부
+ create-zip-name-subdir: true # ZIP 파일명으로 하위 디렉토리 생성 여부
diff --git a/src/main/resources/mybatis/mapper/batch/ZipFileDetailLogMapper_maria.xml b/src/main/resources/mybatis/mapper/batch/ZipFileDetailLogMapper_maria.xml
index db68512..dc08372 100644
--- a/src/main/resources/mybatis/mapper/batch/ZipFileDetailLogMapper_maria.xml
+++ b/src/main/resources/mybatis/mapper/batch/ZipFileDetailLogMapper_maria.xml
@@ -5,15 +5,15 @@
- SELECT CONCAT('ZFDL', LPAD(NEXTVAL(seq_zip_file_detail_log_id), 8, '0'))
+ SELECT CONCAT('ZFDL', LPAD(NEXTVAL(seq_batch_zip_file_detail_log_id), 8, '0'))
- INSERT INTO tb_zip_file_detail_log (
+ INSERT INTO tb_batch_zip_file_detail_log (
detail_log_id,
log_id,
file_name,
@@ -46,7 +46,7 @@
- INSERT INTO tb_zip_file_detail_log (
+ INSERT INTO tb_batch_zip_file_detail_log (
detail_log_id,
log_id,
file_name,
@@ -63,7 +63,7 @@
) VALUES
(
- CONCAT('ZFDL', LPAD(NEXTVAL(seq_zip_file_detail_log_id), 8, '0')),
+ CONCAT('ZFDL', LPAD(NEXTVAL(seq_batch_zip_file_detail_log_id), 8, '0')),
#{item.logId},
#{item.fileName},
#{item.filePath},
@@ -82,13 +82,13 @@
- DELETE FROM tb_zip_file_detail_log
+ DELETE FROM tb_batch_zip_file_detail_log
WHERE detail_log_id = #{detailLogId}
- DELETE FROM tb_zip_file_detail_log
+ DELETE FROM tb_batch_zip_file_detail_log
WHERE log_id = #{logId}
@@ -108,7 +108,7 @@
process_time AS processTime,
reg_date AS regDate,
reg_user_id AS regUserId
- FROM tb_zip_file_detail_log
+ FROM tb_batch_zip_file_detail_log
WHERE detail_log_id = #{detailLogId}
@@ -128,7 +128,7 @@
process_time AS processTime,
reg_date AS regDate,
reg_user_id AS regUserId
- FROM tb_zip_file_detail_log
+ FROM tb_batch_zip_file_detail_log
WHERE log_id = #{logId}
ORDER BY process_time ASC
@@ -136,7 +136,7 @@
-
\ No newline at end of file
+
diff --git a/src/main/resources/mybatis/mapper/batch/ZipFileProcessLogMapper_maria.xml b/src/main/resources/mybatis/mapper/batch/ZipFileProcessLogMapper_maria.xml
index 0e1b77d..e8437d5 100644
--- a/src/main/resources/mybatis/mapper/batch/ZipFileProcessLogMapper_maria.xml
+++ b/src/main/resources/mybatis/mapper/batch/ZipFileProcessLogMapper_maria.xml
@@ -5,12 +5,12 @@
- INSERT INTO tb_zip_file_process_log (
+ INSERT INTO tb_batch_zip_file_process_log (
log_id,
zip_file_name,
zip_file_path,
@@ -55,7 +55,7 @@
- UPDATE tb_zip_file_process_log
+ UPDATE tb_batch_zip_file_process_log
SET
extract_path = #{extractPath},
archive_path = #{archivePath},
@@ -75,7 +75,7 @@
- DELETE FROM tb_zip_file_process_log
+ DELETE FROM tb_batch_zip_file_process_log
WHERE log_id = #{logId}
@@ -101,14 +101,14 @@
reg_user_id AS regUserId,
mod_date AS modDate,
mod_user_id AS modUserId
- FROM tb_zip_file_process_log
+ FROM tb_batch_zip_file_process_log
WHERE log_id = #{logId}
-
\ No newline at end of file
+