내 세상

[Spring Batch] Spring batch 본문

Technical/Spring Cloud

[Spring Batch] Spring batch

sga8 2022. 12. 21. 16:16
728x90
반응형

 

Spring Batch

- 큰 단위의 작업을 일괄 처리

- 대부분 처리량이 많고 비 실시간성 처리에 사용

  - 대용량 데이터 계산, 정산, 통계, 데이터베이스, 변환 등

- 컴퓨터 자원을 최대로 활용

  - 컴퓨터 자원 사용이 낮은 시간대에 배치를 처리하거나

  - 배치만 처리하기 위해 사용자가 사용하지 않는 또 다른 컴퓨터 자원을 사용

- 사용자 상호작용으로 실행되기 보단, 스케줄러와 같은 시스템에 의해 실행되는 대상

  - 예를 들면 매일 오전 10시에 배치 실행, 매주 월요일 12시 마다 실행

  - crontab, jenkins ..

 

- 배치 처리를 하기 위한 Spring Framework 기반 기술

  - Spring 에서 지원하는 기술 적용 가능

  - DI, AOP, 서비스 추상화

- 스프링 배치의 실행 단위인 Job과 Step

- 비교적 간단한 작업(Tasklet) 단위 처리와 대량 묶음(Chunk) 단위 처리

 

 

 

Windows Intellij IDEA 무료버전의 경우, Spring Initializer가 없음.

해당 사이트를 통해서 진행해야함. https://start.spring.io/

 

 

 

Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.0.0.

-> 2.7.6 버전으로 변경해서 조치

 

 

아래는 Batch를 위한 테스트용 코드

package fastcampus.spring.batch.part1;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
//@Sl4fj
public class HelloConfiguration {
    private final JobBuilderFactory jobBuilderFactory;
    private final StepBuilderFactory stepBuilderFactory;

    public HelloConfiguration(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory) {
        this.jobBuilderFactory = jobBuilderFactory;
        this.stepBuilderFactory = stepBuilderFactory;
    }

    @Bean
    public Job helloJob() {
        return jobBuilderFactory.get("hellojob")
            .incrementer(new RunIdIncrementer())
            .start(this.helloStep())
            .build();
    }

    @Bean
    public Step helloStep() {
        return stepBuilderFactory.get("helloStep")
            .tasklet((contribution, chunkContext) -> {
                return RepeatStatus.FINISHED;
            }).build();
    }
}

 

 

실행시킬때, Program Arguments에 아래 문구 추가 해줘야함

--spring.batch.job.names=hellojob

 

application.properties를 yml로 변경함.

아래 처럼 설정해주면 job.name이 없을 때 동작하지 않음.

spring:
  batch:
    job:
      names: ${job.name:NONE}

 

위 처럼 바꾸면 Program Arguments에 문구를 변경해줘야함

--job.names=hellojob

 

 

Spring Batch의 구조

 

Job은 JobLauncher에 의해 실행, 

Job은 배치의 실행 단위를 의미

Job은 N개의 step을 실행할 수 있으며, 흐름(Flow)를 관리할 수 있다.

  - 예를 들면, A Step 실행 후 조건에 따라 B Step 또는 C Step 실행 예정

 

 

Step은 Job의 세부 실행 단위이며, N개가 등록돼 실행된다.

Step의 실행단위는 2가지로 나뉜다.

  1. Chunk 기반: 하나의 큰 덩어리를 n개씩 나눠서 실행

  2. Task 기반: 하나의 작업 기반으로 실행

Chunk 기반 Step은 ItemReader, ItemProcessor, ItemWriter가 있다. (Item은 배치 처리 대상 객체 의미)

  - ItemReader: 배치 처리 대상 객체를 읽어 ItemProcessor 또는 ItemWriter에게 전달한다.

    - 예를 들면, 파일 또는 DB에서 데이터를 읽는다.

  - ItemProcessor: input 객체를 output 객체로 filtering 또는 processing 해 ItemWriter에게 전달한다.

    - 예를 들면, ItemReader에서 읽은 데이터를 수정 또는 ItemWriter 대상인지 Filtering한다.

    - ItemProcessor는 optional하다.

    - ItemProcessor가 하는 일을 ItemReader 또는 ItemWriter가 대신할 수 있다.

  - ItemWriter: 배치 처리 대상 객체를 처리한다.

    - 예를 들면, DB Update를 하거나, 처리 대상 사용자에게 알림을 보낸다.

 

 

Spring Batch 메타데이터 정보 테이블

참고) https://jojoldu.tistory.com/326

 

3. Spring Batch 가이드 - 메타테이블엿보기

이번 시간에는 Spring Batch의 메타 테이블에 대해 좀 더 자세히 살펴보겠습니다. 작업한 모든 코드는 Github에 있으니 참고하시면 됩니다. 지난 시간에 Spring Batch의 메타 테이블을 살짝 보여드렸는데

jojoldu.tistory.com

 

 

 

 

 

728x90
반응형