Spring Batch ‐ 스프링 배치 시작 - dnwls16071/Backend_Study_TIL GitHub Wiki

📚 스프링 배치 활성화

  • @EnableBatchProcessing : 스프링 배치가 작동하기 위해 선언해야 하는 어노테이션
@SpringBootApplication
@EnableBatchProcessing
public class ModuleBatchApplication {

	public static void main(String[] args) {
		SpringApplication.run(ModuleBatchApplication.class, args);
	}

}
  • 총 4개의 설정 클래스를 실행시키며 스프링 배치의 모든 초기화 및 실행 구성이 이루어진다.
  • 스프링 부트 배치의 자동 설정 클래스가 실행됨으로 빈으로 등록된 모든 Job을 검색해서 초기화와 동시에 Job을 수행하도록 구성된다.

📚 스프링 배치 초기화 설정 클래스

* BatchAutoConfiguration
- 스프링 배치가 초기화 될 때, 자동으로 실행되는 설정 클래스
- Job을 수행하는 JobLauncherApplicationRunner 빈을 생성

* SimpleBatchConfiguration
- JobBuilderFactory와 StepBuilderFactory 생성
- 스프링 배치의 주요 구성 요소들이 프록시 객체로 생성

* BatchConfigurerConfiguration - BasicBatchConfigurer
- BasicBatchConfigurer : SimpleBatchConfiguration에서 생성한 프록시 객체의 실제 대상 객체를 설정하는 클래스
- 빈으로 의존성 주입 받아서 주요 객체들을 참조해서 사용할 수 있다.

* BatchConfigurerConfiguration - JpaBatchConfigurer
- JPA 관련 객체를 생성하는 설정 클래스

스크린샷 2025-01-10 오후 10 37 16

❗주의사항 : Spring Batch 설정 방법 차이 존재

버전이 올라감에 따라 강의 내용에서 많이 바뀐 부분도 존재한다. 다음 레퍼런스들을 참고해서 공부하면 좋을 것 같아 남긴다.

📚 스프링 배치 관련 용어

- @Configuration 선언 : 하나의 배치 Job을 정의하고 빈을 설정한다.
- JobBuilderFactory : Job을 생성하는 빌더 팩토리
- StepBuilderFactory : Step을 생성하는 빌더 팩토리
- Job : Job 생성
- Step : Step 생성
- tasklet : Step 안에서 단일 태스크로 수행되는 로직을 구현
- Job을 구동 → Step을 실행 → Tasklet을 실행

❗주의사항 : JobBuilderFactory and StepBuilderFactory bean exposure/configuration

JobBuilderFactory & StepBuilderFactory deprecated Spring Batch v5로 업그레이드 됨에 따라 JobBuilderFactory 대신 JobBuilder, StepBuilderFactory 대신 StepBuilder를 사용한다.

스크린샷 2025-01-10 오후 11 23 20

❗주의사항 : Infrastructure beans configuration with @EnableBatchProcessing

Transaction manager bean exposure/configuration 참고 이슈 @EnableBatchProcessing 어노테이션은 Spring Boot 3.x 버전에서 사용하지 않는다.

📚 Batch DB 스키마 생성 및 이해

  • 스프링 배치 메타 데이터란?

    • 스프링 배치의 실행 및 관리를 위한 목적으로 여러 도메인들의 정보를 저장, 업데이트, 조회할 수 있는 스키마를 제공한다.
    • 과거, 현재의 실행에 대한 세세한 정보, 실행에 대한 성공과 실패 여부 등을 일목요연하게 관리함으로서 배치 운용에 있어 리스크 발생 시 빠른 대처가 가능하다.
    • DB와 연동할 경우 필수적으로 메타 테이블이 생성되어야 한다.
  • 스키마 생성 설정

    • 수동 생성
    • 자동 생성
      • ALWAYS : 스크립트 항상 실행, RDBMS 설정이 되어 있을 경우 내장 DB보다 우선적으로 실행된다.
      • EMBEDDED : 내장 DB일 때만 실행되며 스키마가 자동 생성된다.
      • NEVER : 스크립트 항상 실행 안함, 내장 DB일 경우 오류가 발생한다.

스크린샷 2025-01-11 오전 12 11 39

  • Job 관련 테이블

    • BATCH_JOB_INSTANCE : Job이 실행될 때 JobInstance 정보가 저장되며, job_name과 job_key를 키로 하여 하나의 데이터가 저장되며, 동일한 job_name과 job_key가 중복 저장될 수 없다.
    • BATCH_JOB_EXECUTION : job의 실행 정보가 저장되며 Job 생성, 시작, 종료 시간, 실행 상태, 메시지 등을 관리한다.
    • BATCH_JOB_EXECUTION_PARAMS : Job과 함께 실행되는 JobParameter 정보를 저장한다.
    • BATCH_JOB_EXECUTION_CONTEXT : Job의 실행동안 여러가지 상태 정보, 공유 데이터를 직렬화해서 저장하고 Step간 서로 공유가 가능하다.
  • Step 관련 테이블

    • BATCH_STEP_EXECUTION : Step의 실행 정보가 저장되며 생성, 시작, 종료 시간, 실행 상태, 메시지 등을 관리한다.
    • BATCH_STEP_EXECUTION_CONTEXT : Step의 실행동안 여러가지 상태 정보, 공유 데이터를 직렬화해서 저장하고 Step간 서로 공유가 불가능하다.