본문 바로가기
Study/Spring

Spring Batch 5.x ~ 사용해보기 - 1. 시작하기

by 오늘만 사는 여자 2024. 6. 26.
728x90
반응형

개요

대용량 데이터의 처리와 통계 데이터 활용을 위해 활용되는 Spring Batch, 알아보자. 알아볼 내용은 대부분 출처의 내용을 기반으로 공부했으며, SpringBoot 3.x 이상, Spring Batch 5 이상 버전에서 위 출처의 내용이 어떻게 적용될 수 있을지 따라가본다.

1. Spring Batch?

대용량의 데이터를 단발성으로 처리하기 위해서 만들어졌다.

  • 예를 들어 상품의 주문량 파악, 결산 금액 파악, ERP 데이터 활용 등
  • 하루 주문량을 Spring Batch를 이용해 저장하고, 저장된 데이터를 사용자가 요청할 때만 다시 볼 수 있도록 하는 식

이미지 출처 및 참고

위처럼 Spring Batch는 정해주는 시간에 따라 돌아가고, 사용자가 요청 할 때만 그 데이터를 전달하면 됨.

배치 어플리케이션의 조건

  1. 대용량 데이터
  • 배치 어플리케이션은 대량의 데이터를 가져오거나, 전달하거나, 계산하는 등의 처리를 할 수 있어야 합니다.
  1. 자동화
  • 배치 어플리케이션은 심각한 문제 해결을 제외하고는 사용자 개입 없이 실행되어야 합니다.
  1. 견고성
  • 배치 어플리케이션은 잘못된 데이터를 충돌/중단 없이 처리할 수 있어야 합니다.
  1. 신뢰성
  • 배치 어플리케이션은 무엇이 잘못되었는지를 추적할 수 있어야 합니다. (로깅, 알림)
  1. 성능
  • 배치 어플리케이션은 지정한 시간 안에 처리를 완료하거나 동시에 실행되는 다른 어플리케이션을 방해하지 않도록 수행되어야합니다.

2. 실제로 시작해보자!

테스트를 해 볼 환경은

SpringBoot 3.0.5 (아마 최신) + Gradle
Java 17

모든 코드는 : https://github.com/ca1af/Play_ground

2 - 1. build.gradle

dependencies {
    // Spring Batch
    implementation 'org.springframework.boot:spring-boot-starter-batch'
    // Spring Data JPA
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    // h2 DB
    implementation 'com.h2database:h2'
    // 스프링 웹
    implementation 'org.springframework.boot:spring-boot-starter-web'
    // 롬복
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

2 - 2. application.properties

# Spring Batch Job enable
spring.batch.job.enabled=true

# H2 DATABASE Setting
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:db;MODE=MYSQL;
spring.datasource.username=sa
spring.datasource.password=

# Hibernate
spring.jpa.hibernate.ddl-auto = create
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true

2 - 3 시작하기

버전에 따라 달라진다.

  1. SpringBoot 2.~ 버전 링크JobBuilderFactory 의존 주입 후 사용 (선생님 방식)

먼저 SpringBootApplication 에 @EnableBatchProcessing 어노테이션을 통해서 Spring Batch 기능을 활성화한다

@Slf4j // log 사용을 위한 lombok 어노테이션
@RequiredArgsConstructor // 생성자 DI를 위한 lombok 어노테이션
@Configuration
public class SimpleJobConfiguration {
    private final JobBuilderFactory jobBuilderFactory; // 생성자 DI 받음
    private final StepBuilderFactory stepBuilderFactory; // 생성자 DI 받음

    @Bean
    public Job simpleJob() {
        return jobBuilderFactory.get("simpleJob")
                .start(simpleStep1())
                .build();
    }

    @Bean
    public Step simpleStep1() {
        return stepBuilderFactory.get("simpleStep1")
                .tasklet((contribution, chunkContext) -> {
                    log.info(">>>>> This is Step1");
                    return RepeatStatus.FINISHED;
                })
                .build();
    }
}

위 참고 블로그는 2018년 기준이라, JobBuilderFactory 를 사용하지만(4.x 버전까지는) 새로운 버전은 JobBuilder 객체를 사용하기를 권장한다

Builder에서 JobRepository가 생성되고 설정된다는 사실은 문서를 참고하기 전까지는 알 수 없다. 따라서 5.x 버전 이후로는 JobBuilder 객체를 직접 사용하여 아래와 같이 설정하는 것이 권장된다


2, SpringBoot 3.0.0 이상 버전의 방식

중요!!! SpringBoot 3.0 이상은

@EnableBatchProcessing 사용하지 않는다!

스프링 3.0 마이그레이션 가이드를 살펴보면, @EnableBatchProcessing 사용 시 Spring Batch 기본 설정이 백오프된다고 설명된다.

꺼주자.

아래는 위의 예제 코드를 SpringBoot 3.~ 버전으로 만들어 본 결과이다.

@Slf4j
@Configuration
public class SimpleJobConfiguration {
    @Bean
    public Job simpleJob1(JobRepository jobRepository, Step simpleStep1) {
        return new JobBuilder("simpleJob", jobRepository)
                .start(simpleStep1)
                .build();
    }
    @Bean
    public Step simpleStep1(JobRepository jobRepository, Tasklet testTasklet, PlatformTransactionManager platformTransactionManager){
        return new StepBuilder("simpleStep1", jobRepository)
                .tasklet(testTasklet, platformTransactionManager).build();
    }
    @Bean
    public Tasklet testTasklet(){
        return ((contribution, chunkContext) -> {
            log.info(">>>>> This is Step1");
            return RepeatStatus.FINISHED;
        });
    }
}

 

출처 : https://velog.io/@calaf/Spring-Batch-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B4%EA%B8%B0-1.-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0

 

Spring Batch 5.x ~ 사용해보기 - 1. 시작하기

Spring Batch 시작하기!

velog.io

 

728x90
반응형

댓글