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

136 lines
4.5 KiB
Markdown

5 months ago
# 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` 어노테이션으로 동시 실행 방지