PSD( Private-Self-Development )

Spring Batch 란? 본문

Backend/Spring Batch

Spring Batch 란?

chjysm 2023. 1. 17. 17:09

Spring Batch 란?

Spring Batch는 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 리소스 관리와 같이 대용량 레코드 처리에 필수적인 서버이다.

주로 Quartz, Scheduler, Jenkins 등의 스케줄러와 같이 사용하여 특정 시간에 동작 가능한 Job 을 구현한다.

 

배치 핵심 패턴

  • Read : DB, 파일, 큐 에서 다량의 데이터 조회
  • Process : 특정 방법으로 데이터 가공
  • Write : 데이터를 다시 저장

 

배치 시나리오

  • 배치 프로세스 주기적 커밋 전략 제공
  • 동시 다발적인 Job(서로 독립적) 의 배치 처리, 대용량 병렬 처리
  • 실패 후 수동 또는 스케줄링에 의한 재시작 
  • 의존관계가 있는 step 여러 개를 순차적으로 처리
  • 조건적 Flow 구성을 통한 체계적이고 유연한 배치 모델 구성 
  • 반복, 재시도, Skip 처리

 

배치 아키텍처 

  • Application 
    • 스프링 배치 프레임워크를 통해 개발자가 구현한 모든 배치 job 과 커스텀 코드
    • 개발자는 업무 로직의 구현에만 집중할 수 있고 
      기반 기술은 프레임웍이 담당한다.
  • Batch Core
    • job을 실행, 모니터링, 관리하는 API
    • JobLauncher, Job, Step, Flow 등
  • Batch Infrastructure
    • Application, Core 모두 공통 Infrastructure 위에서 빌드한다.
    • job 실행의 흐름과 처리를 위한 틀 제공
    • Reader, Processor Writer, Skip, Retry 등

 

배치 시작 

@EnableBatchProcessing

@SpringBootApplication
@EnableBatchProcessing
public class SpringBatchLectureApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBatchLectureApplication.class, args);
    }
}
  • 4개의 설정 클래스를 실행시킨다. 스프링 배치의 모든 초기화 및 실행 구성이 이루어진다.
  • 스프링 부트 배치의 자동 설정 클래스가 실행, 빈으로 등록된 모든 Job 을 검색해서 초기화 및 Job 을 수행 가능하도록 한다.

 

4개의 설정 클래스

  1. BatchAutoConfiguration
    1.  스프링 배치가 초기화 할때, 자동 실행 되는 설정 클래스
    2. Job 을 수행하는 JobLauncherApplicationRunner 빈을 생성 ( JobLauncherApplicationRunner : ApplicationRunner 인터페이스를 구현한 구현체를  를 구동 => 해당 구현체가 Job 을 구동 )
  2. SimpleBatchConfiguration
    1. JobBuilderFactory 와 StepBuilderFactory 생성
    2. 스프링 배치의 주요 구성 요소 생성 - 프록시 객체로 생성한다
  3. BatchConfigurerConfiguration
    1. BasicBatchConfigurer
      1. SimpleBatchConfiguration 에서 생성한 프록시 객체의 실제 대상 객체를 생성하는 설정 클래스
      2. 빈으로 의존성 주입 받아서 주요 객체들을 참조해서 사용할 수 있다
    2. JpaBatchConfigurer
      1. JPA 관련 객체를 생성하는 설정 클래스
      2. BasicBatchConfigurer 상속

2 -> 3 -> 1 순서로 초기화 진행

 

배치 Job 구현

@Configuration 선언

하나의 배치 Job 을 정의하고 빈 설정

 

Job 정의 구성 요소

  • JobBuilderFactory : Job 을 생성하는 빌더 팩토리
  • StepBuilderFactory : Step 을 생성하는 빌더 팩토리
  • Job : 일 
  • Step : 일의 항목, 단계
  • tasklet : 작업 내용

Job 구동 -> Step 을 실행 -> Taskelt 을 실행

@Configuration
@RequiredArgsConstructor
public class HelloJobConfiguration {
    private final JobBuilderFactory jobBuilderFactory;    
    private final StepBuilderFactory stepBuilderFactory;

    /**
     * Job 정의
    */
    @Bean
    public Job helloJob(){
        return jobBuilderFactory.get("helloJob")
                .start(helloStep1())
                .next(helloStep2())
                .build();
    }

    /**
     * Step1 정의
    */
    @Bean
    public Step helloStep2() {
        return stepBuilderFactory.get("helloStep2")
        .tasklet(new Tasklet() {
            @Override
            public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
                System.out.println("helloStep2");
                return RepeatStatus.FINISHED;
            }
        })
        .build();
    }
    
    /**
     * Step2 정의
    */
    @Bean
    public Step helloStep1() {
        return stepBuilderFactory.get("helloStep1")
                .tasklet(new Tasklet() {
                    @Override
                    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
                        System.out.println("helloStep1");
                        return RepeatStatus.FINISHED;
                    }
                })
                .build();
    }
}

참조 : 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B0%B0%EC%B9%98

 

스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch - 인프런 | 강의

초급에서 중~고급에 이르기까지 스프링 배치의 기본 개념부터 API 사용법과 내부 아키텍처 구조를 심도있게 다룹니다. 그리고 스프링 배치 각 기능의 흐름과 원리를 학습하게 되고 이를 바탕으

www.inflearn.com