# ZIP 파일 처리 배치 작업 구현 ## 개요 특정 디렉토리에 *.zip 파일이 들어오면 압축을 풀어서 특정 디렉토리로 이동시키고, 원본 *.zip 파일은 원본 디렉토리로 이동시키는 배치 작업을 구현했습니다. 이미지 파일 검증 기능과 정상/실패에 대한 로그를 테이블에 정확히 남기는 기능이 포함되어 있습니다. ## 구현된 기능 ### 1. 데이터베이스 테이블 - **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. 주요 클래스 #### 모델 클래스 - `ZipFileProcessLogVO`: ZIP 파일 처리 로그 VO - `ZipFileDetailLogVO`: ZIP 파일 처리 상세 로그 VO #### 매퍼 클래스 - `ZipFileProcessLogMapper`: ZIP 파일 처리 로그 매퍼 - `ZipFileDetailLogMapper`: ZIP 파일 처리 상세 로그 매퍼 #### 서비스 클래스 - `ZipFileProcessLogService`: ZIP 파일 처리 로그 서비스 - `ZipFileDetailLogService`: ZIP 파일 처리 상세 로그 서비스 #### 유틸리티 클래스 - `ImageValidationUtil`: 이미지 파일 검증 유틸리티 #### 배치 작업 클래스 - `ZipFileProcessBatchJob`: ZIP 파일 처리 배치 작업 메인 클래스 ## 주요 기능 ### 1. ZIP 파일 처리 흐름 1. 소스 디렉토리에서 *.zip 파일 검색 2. ZIP 파일 압축 해제 3. 개별 파일 처리 및 검증 4. 이미지 파일 손상 여부 확인 5. 처리 결과 로그 저장 6. ZIP 파일을 아카이브 디렉토리로 이동 ### 2. 이미지 파일 검증 - 확장자 기반 이미지 파일 판별 - MIME 타입 기반 이미지 파일 검증 - ImageIO를 이용한 이미지 손상 여부 확인 - 지원 이미지 형식: jpg, jpeg, png, gif, bmp, tiff, tif, webp ### 3. 로그 기능 - ZIP 파일별 처리 로그 (처리 상태, 파일 수, 성공/실패 통계) - 개별 파일별 상세 로그 (파일 정보, 이미지 여부, 손상 여부) - 배치 작업 실행 로그 (BatchJobLogUtil 활용) ## 설정 ### application.yml 설정 ```yaml batch: zip: source: directory: ${user.home}/batch/zip/source # ZIP 파일 소스 디렉토리 extract: directory: ${user.home}/batch/zip/extract # ZIP 파일 압축 해제 디렉토리 archive: directory: ${user.home}/batch/zip/archive # ZIP 파일 아카이브 디렉토리 ``` ## 디렉토리 구조 ``` ${user.home}/batch/zip/ ├── source/ # ZIP 파일이 들어오는 디렉토리 ├── extract/ # ZIP 파일 압축 해제 디렉토리 └── archive/ # 처리 완료된 ZIP 파일 보관 디렉토리 ``` ## 사용 방법 ### 1. 데이터베이스 테이블 생성 ```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_batch_zip_file_process_log.sql source DB-DDL/maria/ddl/xitframework/tb_batch_zip_file_detail_log.sql ``` ### 2. 배치 작업 등록 Quartz 스케줄러를 통해 `ZipFileProcessBatchJob` 클래스를 등록하여 주기적으로 실행 ### 3. ZIP 파일 처리 1. `${user.home}/batch/zip/source/` 디렉토리에 ZIP 파일 업로드 2. 배치 작업이 실행되면 자동으로 처리 3. 처리 결과는 데이터베이스 로그 테이블에서 확인 ## 로그 확인 ### 메인 처리 로그 조회 ```sql SELECT * FROM tb_batch_zip_file_process_log ORDER BY start_time DESC; ``` ### 상세 처리 로그 조회 ```sql SELECT * FROM tb_batch_zip_file_detail_log WHERE log_id = 'ZPFL00000001' ORDER BY process_time ASC; ``` ### 이미지 파일 처리 결과 조회 ```sql SELECT file_name, is_image, is_corrupted, process_status, error_message FROM tb_batch_zip_file_detail_log WHERE log_id = 'ZPFL00000001' AND is_image = 'Y'; ``` ## 에러 처리 - ZIP 파일 처리 중 오류 발생 시 로그 테이블에 오류 정보 저장 - 개별 파일 처리 실패 시에도 다른 파일 처리 계속 진행 - 손상된 이미지 파일 발견 시 ERROR 상태로 로그 저장 ## 주의사항 1. 디렉토리 권한 확인 필요 2. 대용량 ZIP 파일 처리 시 메모리 사용량 모니터링 필요 3. 동일한 파일명의 ZIP 파일 처리 시 타임스탬프 추가하여 중복 방지 4. 배치 작업은 `@DisallowConcurrentExecution` 어노테이션으로 동시 실행 방지