2. Spring Batch Guide - Meta Table(1)

JungHwan Oh·2025년 6월 22일

Spring Batch Guide

목록 보기
2/5

이번에는 Meta Table 에 대해서 좀더 살펴보겠습니다.

아래 그림 Meta Table ERD 입니다. 지금부터 해당 테이블이 어떤 역할인지 어떠한 데이터가 적제 되는지 보겠습니다.

2.1 BATCH_JOB_INSTANCE


우선 BATCH_JOB_INSTANCE 테이블을 보도록 하겠습니다. 우선 해당 테이블을 조회해 보면 아래와 같습니다.

이전 시간에 실행했던 simpleJob이 있는 것을 볼 수 있습니다.
BATCH_JOB_INSTANCE 테이블은 Job Parameter에 따라 생성되는 데이터 입니다.

Job Parameter 란, 간략하게 설명하면 Spring Batch 가 실행 될 때 외부에서 받을 수 있는 파라미터 이다.

예를 들어, 특정 날짜를 Job Parameter로 넘기면 Spring Batch에서는 해당 날짜 데이터로 조회/가공/입력 등의 작업을 할 수 있습니다.

동일한 Job 이라도 Job Parameter가 다르면, BATCH_JOB_INSTANCE에는 기록되며, Job Parameter가 같다면 기록되지 않습니다.

우선 동일한 Job을 실행 시켜 보면 동일 한 1개의 row 만 보이고 다른 row 는 추가 되지 않았습니다. 왜냐하면 우리가 이전에 작성한 코드는 Job Paramter를 넘기지 않았기 때문에(동일한 Job Paramter 로 실행) 입니다. 자 이제 소스를 조금 수정해서 동일한 날짜를 넣어서 Job 을 실행 시켜 보겠습니다.

    // Job 생성
    @Bean
    public Job sampleJob(JobRepository jobRepository, Step sampleStep) {
        return new JobBuilder("sampleJob", jobRepository)
                .start(sampleStep)
                .build();
    }

    // Step 생성
    @Bean
    @JobScope
    public Step simpleStep1(JobRepository jobRepository,
                            PlatformTransactionManager platformTransactionManager,
                            @Value("#{jobParameters[requestDate]}") String requestDate) {
        return new StepBuilder("simpleStep1", jobRepository)
                .tasklet((contribution, chunkContext) -> {
                    log.info(">>>>>>> sample step");
                    log.info(">>>>> requestDate = {}", requestDate);
                    return RepeatStatus.FINISHED;
                }, platformTransactionManager)
                .build();
    }

변경 된 코드를 조금 설명해 보자면, 기존 코드에서 Job Paramter 만 추가로 받는 로직과 해당 파라미터를 출력하는 로그만 출력하는 로직만 추가했습니다. 자 이제 Job을 실행 해 볼까요? 여기서 Job을 실행할라면 intelliJ 실행환경해서 아래와 같이 Program arguments에 requestDate=20250622 를 입력하시면 됩니다.

이제 실행을 해보면 아래와 같이 로그가 나옵니다.

이제 BATCH_JOB_INSTANCE 테이블을 보면,

이렇게 1개의 row 가 추가 된 것을 볼 수 있습니다. 그렇다는 말은 Job Parameter 가 달라서 Job Instance 가 추가 되었다는 말인데요? 동일한 Job Paramter 로 다시 한번 Job을 구동해 보겠습니다.

JobInstanceAlreadyCompleteException 라는 Exception과 함께 에러 메세지를 출력하고 있습니다.

Caused by: org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException: A job instance already exists and is complete for identifying parameters={'requestDate':'{value=20250622, type=class java.lang.String, identifying=true}'}.  If you want to run this job again, change the parameters.

같은 파라미터로는 Job을 실행시킬수 없다고 합니다. 그럼 이제 다른 파라미터를 통해서 실행 시켜보겠습니다.
requestDate=20250623 로 바꿔서 실행하면, Job이 정상적으로 실행되어야 하는데 한번 볼까요?

Job이 정상적으로 실행 되는 것을 볼 수 있습니다.

또한 Job Instance 도 제대로 데이터가 들어가 있습니다.
이를 통해서 저희는 동일한 Job이 Job Parameter가 달라지면 그때마다 BATCH_JOB_INSTANCE에 생성되며, 동일한 Job Parameter는 여러개 존재할 수 없습니다 라는 것을 알 수 있었습니다.

다음에는 BATCH_JOB_EXECUTION 에 대해서 공부해 보겠습니다.

Reference
https://jojoldu.tistory.com/325
https://docs.spring.io/spring-batch/reference/job/configuring.html

Source
https://github.com/trustonlyyou/batch-guide

profile
BACK_END DEVELOPER

0개의 댓글