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.
clean-parking/README_ZIP_BATCH.md

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 파일 처리 로그 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 설정

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 파일 처리

  1. ${user.home}/batch/zip/source/ 디렉토리에 ZIP 파일 업로드
  2. 배치 작업이 실행되면 자동으로 처리
  3. 처리 결과는 데이터베이스 로그 테이블에서 확인

로그 확인

메인 처리 로그 조회

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 상태로 로그 저장

주의사항

  1. 디렉토리 권한 확인 필요
  2. 대용량 ZIP 파일 처리 시 메모리 사용량 모니터링 필요
  3. 동일한 파일명의 ZIP 파일 처리 시 타임스탬프 추가하여 중복 방지
  4. 배치 작업은 @DisallowConcurrentExecution 어노테이션으로 동시 실행 방지