You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.5 KiB
4.5 KiB
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 파일 처리 로그 VOZipFileDetailLogVO: ZIP 파일 처리 상세 로그 VO
매퍼 클래스
ZipFileProcessLogMapper: ZIP 파일 처리 로그 매퍼ZipFileDetailLogMapper: ZIP 파일 처리 상세 로그 매퍼
서비스 클래스
ZipFileProcessLogService: ZIP 파일 처리 로그 서비스ZipFileDetailLogService: ZIP 파일 처리 상세 로그 서비스
유틸리티 클래스
ImageValidationUtil: 이미지 파일 검증 유틸리티
배치 작업 클래스
ZipFileProcessBatchJob: ZIP 파일 처리 배치 작업 메인 클래스
주요 기능
1. ZIP 파일 처리 흐름
- 소스 디렉토리에서 *.zip 파일 검색
- ZIP 파일 압축 해제
- 개별 파일 처리 및 검증
- 이미지 파일 손상 여부 확인
- 처리 결과 로그 저장
- ZIP 파일을 아카이브 디렉토리로 이동
2. 이미지 파일 검증
- 확장자 기반 이미지 파일 판별
- MIME 타입 기반 이미지 파일 검증
- ImageIO를 이용한 이미지 손상 여부 확인
- 지원 이미지 형식: jpg, jpeg, png, gif, bmp, tiff, tif, webp
3. 로그 기능
- ZIP 파일별 처리 로그 (처리 상태, 파일 수, 성공/실패 통계)
- 개별 파일별 상세 로그 (파일 정보, 이미지 여부, 손상 여부)
- 배치 작업 실행 로그 (BatchJobLogUtil 활용)
설정
application.yml 설정
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. 데이터베이스 테이블 생성
-- 시퀀스 생성
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 파일 처리
${user.home}/batch/zip/source/디렉토리에 ZIP 파일 업로드- 배치 작업이 실행되면 자동으로 처리
- 처리 결과는 데이터베이스 로그 테이블에서 확인
로그 확인
메인 처리 로그 조회
SELECT * FROM tb_batch_zip_file_process_log
ORDER BY start_time DESC;
상세 처리 로그 조회
SELECT * FROM tb_batch_zip_file_detail_log
WHERE log_id = 'ZPFL00000001'
ORDER BY process_time ASC;
이미지 파일 처리 결과 조회
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 상태로 로그 저장
주의사항
- 디렉토리 권한 확인 필요
- 대용량 ZIP 파일 처리 시 메모리 사용량 모니터링 필요
- 동일한 파일명의 ZIP 파일 처리 시 타임스탬프 추가하여 중복 방지
- 배치 작업은
@DisallowConcurrentExecution어노테이션으로 동시 실행 방지