Spring Batch에서 작업 속도를 향상시키기 위해 Tasklet 기반 순차 처리, Chunk 기반 순차 처리, 멀티스레드를 활용한 Chunk 기반 병렬 처리 방식을 단계적으로 적용하여 그 결과를 정리하였습니다.

데이터 세트

table row
streams 5,000,000
ad_views 40,000,000

1. Tasklet 기반 순차 처리

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) 소요


2. Chunk 기반 순차 처리