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 |
댓글