본문 바로가기
Spring

Spring Batch란?

by gudwnsgur 2022. 3. 22.
728x90

배치(Batch)란?

  • 데이터를 실시간으로 처리하는게 아닌, 일괄적으로 모아 처리하는 작업을 의미한다.
  • 실시간으로 처리하여 사용자에게 빠른 응답을 해주어야 하는 서비스가 아닌 경우에 적용이 가능하다.
  • ex) 서비스에 접속한지 1년이 이상이 지난 회원의 휴면 전환 작업

Batch Processing

  • 일괄 처리, 일괄적으로 한꺼번에 대량의 프로세스를 처리하는 방식
  • 대량의 데이터 처리 & 특정 시간에 프로그램 실행 & 일괄 처리

Spring Batch 란?

  • 로깅/추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기, 리소스 관리 등 대용량 레코드 처리에 필수적인 기능 제공
  • 최적화 및 파티셔닝 기술을 통해 대용량 및 고성능 배치 작업을 가능하게 하는 고급 기술 서비스 및 기능 제공
  • Read & Processing & Write
    • Read : 원하는 조건에 데이터 레코드를 DB에서 읽어온다.
    • Processing : 읽어온 데이터를 비즈니스로직에 따라 처리한다.
    • Write : 처리된 데이터를 DB에 업데이트

  • ItemReader : DB & File & XML 등 다양한 타입에서 batch data를 읽어온다.
  • ItemProcessor : 읽어온 데이터를 토대로 비즈니스 로직 처리
  • ItemWriter : 처리한 데이터를 DB(또는 파일)에 저장
    @Bean
    @StepScope
    public ListItemReader<Member> myReader() {
        List<Member> oldMember = memberRepository.findByStatusNot(MemberStatus.INACTIVE);
        return new ListItemReader<>(oldMember);
    }

    public ItemProcessor<Member, Member> myProcessor() {
        return Member::setInactive;
    }

    public ItemWriter<Member> myWriter() {
        return ((List<? extends Member> memberList) ->
                memberRepository.saveAll(memberList));
    }

Spring Batch 용어

Job

  • 배치 처리 과정을 하나의 단위로 묶은 객체.
  • 배치 처리 과정에 있어 전체 계층 최상단에 위치
@Bean
public Job myJob(JobBuilderFactory jobBuilderFactory) {
    return jobBuilderFactory.get("myJob").start(mystep).build();
}
  • Job 객체는 JobBuilderFactory 클래스에서 Job을 생성할 수 있다.
  • JobBuilderFactory에서 생성된 JobBuilder를 통해 Job을 생성 가능

JobBuilderFactory

public class JobBuilderFactory {

    private JobRepository jobRepository;
    public JobBuilderFactory(JobRepository jobRepository) {
        this.jobRepository = jobRepository;
    }

    public JobBuilder get(String name) {
        JobBuilder builder = new JobBuilder(name).repository(jobRepository);
        return builder;
    }
}
  • JobBuilderFactory 생성 시점에 JobBuilder에서 사용할 Repository로 설정
  • JobBuilder는 모두 동일한 JobRepository를 사용하게 된다.
  • JobBuilderFactory에서 get메소드를 호출하게 되면 새로운 JobBuilder가 생성

JobRepository

  • 모든 배치 처리 정보를 담고있는 매커니즘
  • Job이 실행되게 되면 JobRepository에 JobExecution과 StepExecution을 생성,
    JobRepository에서 Execution 정보들을 저장하고 조회하며 사용하게 된다.

JobInstance

  • Job의 실행단위
  • Job을 실행시키면 하나의 JobInstance가 생성된다.

JobParameter

  • JobInstance를 구별하는 역할
  • JobInstance에 전달되는 매개변수 역할

JobParameter

  • Job의 실행단위
  • Job을 실행시키면 하나의 JobInstance가 생성된다|

JobExecution

  • JobInstance에 대한 실행 시도에 대한 객체
  • JobInstance가 실패하여 재실행하여도 동일한 JobInstance가 실행되지만, JobExecution은 개별로 생긴다.

Step

  • Job의 배치처리를 정의하고 단계를 캡슐화
  • Job은 최소 1개의 Step을 가진다.
  • Job의 실제 일괄처리를 제어하는 정보가 존재
@Bean
public Step mystep(StepBuilderFactory stepBuilderFactory) {
    return stepBuilderFactory.get("mystep")
        .<MemberIn, MemberOut> chunk(100)
        .reader(myrReader())
        .processor(myProcessor())
        .writer(myWriter())
        .build();
}

JobLauncher

  • Job과 JobParameters를 사용하여 Job을 실행하는 객체
public interface JobLauncher {
    public JobExecution run(Job job, JobParameters jobParameters) 
        throws JobExecutionAlreadyRunningException, JobRestartException, 
                JobInstanceAlreadyCompleteException, JobParametersInvalidException;
}
728x90

'Spring' 카테고리의 다른 글

[Spring] Spring의 Event 처리 과정  (0) 2022.03.15
Spring 면접 질문 모음  (0) 2021.11.21
스프링 핵심 원리  (0) 2021.11.11

댓글