역할
- 서버 업로드 tmp 폴더에 있는 오래된 파일 자동 삭제
- 일정 시간(
ttlHours) 지난 임시 파일 정리
- 업로드 이미지/첨부 파일의 디스크 공간 관리
1. 구조
@Component
public class ImageUploadCleanupScheduler {
private final Path root; // 업로드 루트 디렉토리
private final long ttlHours; // 파일 보존 시간(시 단위)
private static final List<String> MODULES = List.of("tasks");
public ImageUploadCleanupScheduler(
@Value("${app.upload-dir}") String uploadDir,
@Value("${app.upload-tmp-ttl-hours:24}") long ttlHours
) {
this.root = Paths.get(uploadDir).normalize();
this.ttlHours = ttlHours;
}
// 10분마다 실행
@Scheduled(fixedDelayString = "PT10M")
public void cleanupOldTmpFiles() { ... }
}
2. 설명
- 루트 경로 & 보존 시간
uploadDir → 업로드 폴더 루트
ttlHours → 임시 파일 최대 보존 시간 (기본 24시간)
- 청소 대상
- MODULES → tmp 폴더를 갖는 모듈 리스트 (
tasks 등)
- 필요 시 다른 모듈 추가 가능 (
profile, editor 등)
- 동작
- 현재 시각 기준으로 TTL 지난 파일만 삭제
- 디렉토리 존재 여부 확인 후 파일 리스트 순회
- 개별 파일 삭제 실패 시 무시 → 안정성 확보
- 스케줄링
@Scheduled(fixedDelayString = "PT10M") → 10분마다 실행
3. 포인트
- 자동 청소 → 서버 tmp 폴더 과도한 파일 누적 방지
- 안정성 → 삭제 실패/접근 실패시 무시, 스케줄러 중단 방지
- 모듈 확장 용이 → MODULES 리스트에 추가만 하면 다른 tmp 폴더도 관리 가능
- TTL 기반 삭제 → 업로드 시간 기준 파일만 제거, 최신 파일 안전