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.
136 lines
4.5 KiB
Markdown
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` 어노테이션으로 동시 실행 방지
|