Spring Quartz, Spring Batch, @Scheduled 의 차이점
Spring에서 작업 스케줄링과 배치 처리를 관리하는 세 가지 주요 방법은
Spring Quartz, Spring Batch, 그리고 @Scheduled 어노테이션입니다.
이들 각각의 차이점을 이해하면, 각 방법이 적합한 상황을 명확히 알 수 있습니다.
Spring Quartz
Spring Quartz는 Quartz Scheduler 프레임워크를 Spring과 통합한 것으로,
정교하고 강력한 작업 스케줄링 기능을 제공합니다.
- 기능:
- 복잡한 스케줄링을 지원 (예: 크론 표현식, 반복 인터벌 등)
- 다양한 작업 트리거 (시간 기반, 이벤트 기반 등)
- 작업의 상태 유지 (persistent jobs)
- 클러스터링 지원 (분산 환경에서 작업을 수행)
- 작업의 관리와 모니터링 (작업 일시 중지, 재개, 삭제 등)
- 사용 사례:
- 정교하고 복잡한 스케줄링이 필요한 경우
- 작업의 상태를 관리해야 하는 경우
- 분산 환경에서의 작업 관리가 필요한 경우
- 예시
// QuartzJob.java
public class QuartzJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("Quartz Job 실행");
}
}
// Quartz Configuration
@Configuration
public class QuartzConfig {
@Bean
public JobDetail jobDetail() {
return JobBuilder.newJob(QuartzJob.class).withIdentity("quartzJob").storeDurably().build();
}
@Bean
public Trigger trigger(JobDetail jobDetail) {
return TriggerBuilder.newTrigger()
.forJob(jobDetail)
.withIdentity("quartzTrigger")
.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
.build();
}
}
Spring Batch
Spring Batch는 대규모 데이터 처리를 위한 배치 애플리케이션을 개발하기 위한 프레임워크입니다.
- 기능:
- 대용량 데이터 처리를 위한 설정
- 다양한 데이터 소스 지원 (데이터베이스, 파일, 큐 등)
- 반복, 분할, 병렬 처리를 지원
- 작업의 상태 저장 및 복구 (체크포인트, 재시도 등)
- 트랜잭션 관리
- 사용 사례:
- 대용량 데이터 처리 (예: 데이터 마이그레이션, ETL 작업)
- 복잡한 배치 작업 흐름이 필요한 경우
- 트랜잭션 관리와 상태 복구가 필요한 경우
- 예시
// Batch Configuration
@Configuration
@EnableBatchProcessing
public class BatchConfig {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Bean
public Job sampleJob(Step step) {
return jobBuilderFactory.get("sampleJob")
.incrementer(new RunIdIncrementer())
.flow(step)
.end()
.build();
}
@Bean
public Step step(ItemReader<String> reader, ItemProcessor<String, String> processor, ItemWriter<String> writer) {
return stepBuilderFactory.get("step")
.<String, String>chunk(10)
.reader(reader)
.processor(processor)
.writer(writer)
.build();
}
}
@Component
public class SampleTasklet implements Tasklet {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
System.out.println("Executing Batch Tasklet");
return RepeatStatus.FINISHED;
}
}
@Scheduled
@Scheduled 어노테이션은 Spring에서 제공하는 간단한 작업 스케줄링 방법입니다.
- 기능:
- 간단한 스케줄링을 지원 (크론 표현식, 고정 딜레이 등)
- Spring에서 제공하는 경량의 스케줄링 방법
- 별도의 설정 파일이 필요 없음
- 사용 사례:
- 간단한 스케줄링 작업 (예: 주기적인 데이터 정리 작업)
- 복잡한 스케줄링이 필요 없는 경우
- 예시
@Component
public class ScheduledTasks {
@Scheduled(cron = "0 0 * * * ?")
public void cronJob() {
System.out.println("Executing cron job every hour");
}
@Scheduled(fixedRate = 5000)
public void fixedRateJob() {
System.out.println("Executing fixed rate job every 5 seconds");
}
}
차이점 요약...
특성 | Spring Quartz | Spring Batch | @Scheduled |
주 사용 사례 | 복잡한 스케줄링 | 대규모 데이터 처리 | 간단한 스케줄링 |
상태 관리 | 지원 | 지원 | 미지원 |
분산 환경 지원 | 지원 | 미지원 | 미지원 |
사용의 복잡도 | 높음 | 높음 | 낮음 |
설정의 유연성 | 높음 | 높음 | 중간 |
위 3가지 개념에 대해서 살펴본다면 ,
Spring Batch는 배치 처리 작업을 구성하고 관리하는 데 특화된 프레임워크로, 데이터 처리를 효율적으로 관리하는 데
중점을 둡니다. 그러나 Spring Batch 자체는 스케줄링 기능을 내장하고 있지 않습니다.
대신 Spring Batch 작업을 스케줄링하기 위해 Quartz 또는 @Scheduled와 같은 스케줄링 도구를 사용할 수 있습니다.
따라서
Spring Batch는 Quartz와 @Scheduled를 포함하는 개념이 아니며, 이들과 조합하여 배치 작업을 스케줄링하는
방식으로 사용됩니다.
'Spring' 카테고리의 다른 글
JWT 인증 필터를 왜 @Component로 등록하면 안 되는가? (0) | 2024.11.13 |
---|---|
[Spring] 스프링 @Schduled 사용법, 개념 및 구현해보자 (0) | 2024.06.14 |
[Spring] 스프링에서 네트워크 Ping 테스트 (0) | 2024.06.14 |
[Spring] WebFlux란 ?? (0) | 2024.03.21 |
[Spring] dependencyManagement 와 dependencies의 차이점 (0) | 2024.02.27 |