Spring Batch에서 작업 속도를 향상시키기 위해 Tasklet 기반 순차 처리, Chunk 기반 순차 처리, 멀티스레드를 활용한 Chunk 기반 병렬 처리 방식을 단계적으로 적용하여 그 결과를 정리하였습니다.
| table | row |
|---|---|
| streams | 5,000,000 |
| ad_views | 40,000,000 |
SpringBatch를 처음 접한 상황에서 Tasklet이 구현이 간단하고 직관적이어서 적용하였습니다.
@Bean
public Tasklet statVideoTasklet() {
return (contribution, chunkContext) -> {
batchStatisticService.updateDailyViewVideo(LocalDate.now());
return RepeatStatus.FINISHED;
};
}
public void performDailyJob() throws Exception {
jobLauncher.run(statVideoJob, new JobParametersBuilder().addLong("time", System.currentTimeMillis()).toJobParameters());
jobLauncher.run(statAdJob, new JobParametersBuilder().addLong("time", System.currentTimeMillis() + 1).toJobParameters());
// ...job들
}
| Job | 소요 시간 |
|---|---|
| statVideoJob | 19초 72밀리초 (19072ms) |
| statAdJob | 2분 7초 129밀리초 (127129ms) |
| paymentVideoJob | 273밀리초 (273ms) |
| paymentAdJob | 838밀리초 (838ms) |
⌛총 실행 시간 : 2분 8초 848밀리초 (128848ms) 소요