주니봉
  • Spring Batch의 세 가지 핵심 처리 방식: Quartz, Chunk, Tasklet 비교
    2025년 09월 06일 08시 25분 31초에 업로드 된 글입니다.
    작성자: 봉주니

    Spring Batch는 대용량 데이터 처리와 배치 작업 스케줄링에 특화된 프레임워크입니다. 이 글에서는 Spring Batch에서 자주 사용되는 세 가지 방식인 Quartz, Chunk, Tasklet을 설명하고, 각각의 특징과 차이점을 비교해보겠습니다.


    1️⃣ Quartz: 배치 작업의 스케줄링 담당

    Quartz는 배치 작업을 언제 실행할지를 제어하는 스케줄링 라이브러리입니다. Spring Batch와 통합하면, 특정 시간에 Job을 자동으로 실행하거나 복잡한 실행 조건을 설정할 수 있습니다.

    ✔️ 특징

    • Cron 표현식 기반의 정교한 스케줄링
    • Job 실행 이력 관리 가능
    • Spring과 쉽게 통합 가능

    ✔️ 사용 예시

     
    @Scheduled(cron = "0 0 2 * * ?") // 매일 새벽 2시 실행
    public void runBatchJob() {
        jobLauncher.run(myJob, new JobParameters());
    }

     

    2️⃣ Chunk 방식: 대용량 데이터 처리에 최적화

    Chunk 방식은 데이터를 일정한 크기로 나누어 반복적으로 처리하는 방식입니다. ItemReader, ItemProcessor, ItemWriter를 통해 데이터 흐름을 구성하며, 트랜잭션 단위로 안정적인 처리가 가능합니다.

    ✔️ 특징

    • 대용량 데이터 처리에 적합
    • Chunk 단위로 트랜잭션 커밋
    • 예외 발생 시 rollback 가능

    ✔️ 사용 예시

    stepBuilderFactory.get("chunkStep")
        .<InputType, OutputType>chunk(100)
        .reader(itemReader())
        .processor(itemProcessor())
        .writer(itemWriter())

     

    3️⃣ Tasklet 방식: 단일 작업 처리에 적합

    Tasklet 방식은 Step 내에서 하나의 작업을 수행하는 방식입니다. 반복적인 데이터 처리보다는 단순한 작업(예: 파일 삭제, 로그 출력 등)에 적합하며, 자유롭게 로직을 작성할 수 있습니다.

    ✔️ 특징

    • 단순한 작업 처리에 적합
    • Step 전체가 하나의 트랜잭션
    • 코드 작성이 자유롭고 직관적

    ✔️ 사용 예시

    stepBuilderFactory.get("taskletStep")
        .tasklet((contribution, chunkContext) -> {
            System.out.println("작업 수행 중...");
            return RepeatStatus.FINISHED;
        })
        .build();
     

    🔍 세 가지 방식 비교

    항목QuartzChunk 방식Tasklet 방식
    역할 Job 실행 시점 제어 반복적 데이터 처리 단일 작업 수행
    트랜잭션 처리 없음 (Spring Batch와 통합 시 가능) Chunk 단위 커밋 Step 전체 커밋
    적합한 작업 스케줄링, 이벤트 기반 실행 대용량 데이터 처리 파일 작업, 초기화 등
    구성 요소 JobLauncher, Scheduler Reader, Processor, Writer Tasklet 인터페이스
    복잡도 스케줄링 로직 복잡 가능 데이터 흐름 설계 복잡 가능 로직 단순, 유연성 높음

    ✅ 함께 사용하는 구조 예시

    실제 배치 시스템에서는 이 세 가지를 조합하여 사용하는 경우가 많습니다.

    예시:

    1. Quartz로 Job을 매일 새벽 2시에 실행
    2. Job 내부에서 Tasklet으로 로그 초기화
    3. 이후 Chunk 방식으로 DB 데이터를 읽고 처리

    📝 마무리

    Spring Batch를 설계할 때는 다음을 고려하세요:

    • Quartz: "언제 실행할 것인가?"
    • Chunk: "어떻게 데이터를 반복적으로 처리할 것인가?"
    • Tasklet: "단일 작업을 어떻게 수행할 것인가?"

    이 세 가지 방식은 서로 대체하는 것이 아니라, 상호 보완적으로 사용되어야 합니다. 목적에 따라 적절한 방식을 선택하면, 유지보수성과 확장성이 뛰어난 배치 시스템을 구축할 수 있습니다.

    반응형
    댓글