Spring Batch 아키텍처

gclee·2024년 7월 21일

Spring Batch

목록 보기
3/3

Spring Batch의 주요 구성 요소

Spring Batch는 여러 주요 구성 요소로 이루어져 있으며, 이들은 각각 특정한 역할을 수행합니다. 주요 구성 요소는 다음과 같습니다:

  • Job: 배치 처리의 단위를 나타내며, 여러 개의 Step으로 구성됩니다.
  • Step: Job을 구성하는 단위 작업으로, 실제 배치 처리 로직이 포함됩니다.
  • Tasklet: Step 내에서 단일 작업을 수행하는 구성 요소입니다.
  • Job Repository: 배치 작업의 메타데이터를 저장하고 관리하는 저장소입니다.
  • Job Launcher: 배치 작업을 실행하는 구성 요소입니다.
  • ItemReader, ItemProcessor, ItemWriter: 데이터 읽기, 처리, 쓰기 작업을 수행하는 인터페이스입니다.

Job, Step, Tasklet의 역할

Job

Job은 배치 처리의 전체 과정을 나타내는 상위 개념입니다. Job은 여러 개의 Step으로 구성될 수 있으며, 각 Step은 순차적으로 실행되거나 병렬로 실행될 수 있습니다. Job은 실행될 때마다 고유한 ID를 가지며, Job의 상태와 실행 기록은 Job Repository에 저장됩니다.

Step

Step은 Job을 구성하는 단위 작업입니다. 각 Step은 독립적으로 실행될 수 있으며, 각각의 Step은 특정한 작업을 수행합니다. Step은 다음과 같은 두 가지 방식으로 구성될 수 있습니다:

  • Tasklet 기반 Step: Tasklet은 Step 내에서 단일 작업을 수행하는 구성 요소입니다. Tasklet은 단순한 작업을 수행하는 데 적합합니다.
  • Chunk 기반 Step: Chunk는 데이터를 청크 단위로 처리하는 방식을 의미합니다. Chunk 기반 Step은 대량의 데이터를 읽고, 처리하고, 쓰는 작업에 적합합니다.

Tasklet

Tasklet은 Step 내에서 단일 작업을 수행하는 구성 요소입니다. Tasklet은 Tasklet 인터페이스를 구현하여 정의되며, execute 메서드를 통해 작업을 수행합니다. Tasklet 기반의 Step은 주로 간단한 작업을 수행할 때 사용됩니다.

@Component
public class SampleTasklet implements Tasklet {

    @Override
    public RepeatStatus execute(org.springframework.batch.core.StepContribution contribution, org.springframework.batch.core.scope.context.ChunkContext chunkContext) throws Exception {
        log.info("Run SampleTasklet");

        log.info("Wait for 5 seconds");
        Thread.sleep(5000);
        log.info("End SampleTasklet");

        return RepeatStatus.FINISHED;
    }
}

Job Repository와 Job Launcher

Job Repository

Job Repository는 배치 작업의 메타데이터를 저장하고 관리하는 역할을 합니다. Job의 실행 상태, Step의 실행 기록 등을 저장하여 배치 작업의 관리와 모니터링을 용이하게 합니다. 일반적으로 데이터베이스에 저장되며, 트랜잭션 관리와 재시도 기능을 제공합니다.

Job Launcher

Job Launcher는 배치 작업을 실행하는 구성 요소입니다. Job Launcher는 지정된 Job을 실행하고, 실행 결과를 반환합니다. Job Launcher는 배치 작업을 스케줄링하거나 수동으로 실행할 때 사용됩니다.

@Autowired
private JobLauncher jobLauncher;

@Autowired
private Job job;

public void runJob() {
    JobParameters jobParameters = new JobParametersBuilder()
            .addLong("time", System.currentTimeMillis())
            .toJobParameters();
    jobLauncher.run(job, jobParameters);
}

배치 처리 흐름 이해하기

Spring Batch의 배치 처리 흐름은 다음과 같습니다:

  1. Job 실행: Job Launcher를 통해 Job이 실행됩니다.
  2. Step 실행: Job은 정의된 순서에 따라 각 Step을 실행합니다.
  3. Tasklet/Chunk 처리: Step은 Tasklet 또는 Chunk 기반으로 작업을 수행합니다.
    • Tasklet 기반 Step: 단일 작업을 수행하고 종료합니다.
    • Chunk 기반 Step: ItemReader를 통해 데이터를 읽고, ItemProcessor를 통해 데이터를 처리한 후, ItemWriter를 통해 데이터를 씁니다. 이 과정은 청크 단위로 반복됩니다.
  4. 메타데이터 저장: 각 Step의 실행 결과와 상태는 Job Repository에 저장됩니다.
  5. Job 종료: 모든 Step이 완료되면 Job이 종료되고, 최종 상태가 Job Repository에 저장됩니다.

이와 같은 흐름을 통해 Spring Batch는 복잡한 배치 작업을 효율적으로 관리하고 실행할 수 있습니다.

0개의 댓글