개발놀이터
스프링 배치 키워드 정리 본문
이제까지 올렸던 키워드들을 바탕으로 정리해보는 시간을 가져보도록 하겠습니다.
스프링 배치 키워드
Job
- Job의 최상위 단위
- 여러개의 Step을 포함하는 컨테이너
- JobBuilderFactory를 이용해 생성 가능
- 여러개의 Job 구현체가 있지만 우리는 그 중 SimpleJob을 메인으로 사용
Step
- tasklet, ItemReader, ItemProcessor, ItemWriter를 포함하는 Job 하나하나의 실행 단위
- StepBuilderFactory를 이용해 생성 가능
- 여러개의 Step 구현체가 있지만 기본적으로 사용되는 것은 tasklet을 사용할 때 생성되는 TaskletStep이 있고 TaskletStep을 상속한 Chunk 지향 처리를 사용할 때 생성되는 ChunkOrientedTasklet이 있다.
JobInstance
- Job이 한번 실행 될 때 생성되고 Job에 대한 정보를 가지고 있는 도메인
- 같은 JobParameter는 같은 JobInstance를 반환, 같은 JobInstance로 두번 이상 실행 시 오류 발생
- job_name과 job_parameter를 합친 해시값으로 같은 JobInstance인지 확인할 수 있음
- BATCH_JOB_INSTANCE 메타 테이블과 매핑
JobExecution
- Job이 실행될 때마다 생성되는 Job의 실행 단위
- 기본적으로는 같은 JobInstance는 실행이 불가능 하지만 실패한 JobExecution 이력이 있는 경우는 같은 JobInstance를 사용할 수 있다.
- BATCH_JOB_EXECUTION 메타 테이블과 매핑
JobParameter
- JobInstance를 구별해주는 인자 값
- JobParameter의 값에 따라 JobInstance가 달라짐
- JobParameter에는 String, Date, Integer, Double 이 네가지 타입만 저장 가능
- BATCH_JOB_EXECUTION_PARAMS 메타테이블과 매핑
StepExecution
- Step이 실행될 때마다 생성되는 Step의 실행 단위
- Step이 실패한다면 BATCH_STEP_EXECUTION 테이블에 실패 이력이 저장 StepExecution이 FAILED가 되고 이어서 JobExecution도 FAILED가 된다. 그래서 최종적으로 Job이 실패로 저장
- BATCH_STEP_EXECUTION 메타테이블과 매핑
ExecutionContext
- 스프링 배치에서 HTTP Session과 같은 역할을 하는 객체
- JobExecution에서 꺼내는 방법 : Step간 공유 가능, Commit시 데이터가 저장되는데 그 때의 값을 꺼내오는 것
- StepExecution에서 꺼내는 방법 : Step간 공유 불가능, Job이 실행시 데이터가 저장되는데 그 때의 값을 꺼내오는 것
- 사용하는 방법이 여러가지인데 tasklet에서 JobExecution, StepExecution을 꺼내 사용하는 방법, Chunk 지향 처리에서 Super클래스를 사용하는 방법, 리스너와 SpEL을 이용해 사용하는 방법 등이 있다.
- DB에 직렬화 된 값으로 저장됨
- DB에 저장할 때 2500자의 제한이 있음
JobRepository
- Job에 대한 실행이력, 실행했을 때의 상태 값을 각종 도메인들의 DB와 매핑해주는 객체
- Job이 언제 수행되었고, 언제 끝났으며, 몇 번이 실행되었고 실행에 대한 결과 등의 배치 작업의 수행과 관련된 모든 meta data를 저장함
JobLauncher
- Job을 실행시키기 위해서만 존재하는 객체
- 구현체인 SimpleJobLauncher를 통해 Job이 run됨
- Job과 JobParameter를 인자값으로 받으며 JobExecution을 반환함
- 동기적 실행 : Job이 전부 완료 되고 JobExecution을 반환함, 스케줄러에 의한 배치 잡에 유용 (배치 처리시간이 길어도 상관 없는 경우)
- 비동기적 실행 : Job이 실행되자마자 JobExecution을 반환함, HTTP 요청에 의한 배치 잡에 유용 (배치 처리시간이 길어지면 안되는 경우)
@JobScope, @StepScope
- 빈 생성주기인 singleton, prototype, request, application 등과 같은 빈 생성과 실행에 관여하는 Scope
- @JobScope는 Step에 선언, @StepScope는 tasklet, ItemReader, ItemProcessor, ItemWriter에 선언
- @Value를 이용해 값을 바인딩
- 해당 어노테이션이 달려있는 빈은 Proxy 객체로 생성되어 @Value의 값을 Lazy Binding 해줌
Chunk
- Chunk는 트랜잭션의 원자성을 보장해주는 데이터 처리 단위
- Chunk<I>와 Chunk<O>를 이용해 값을 전달
- Chunk<I> : ItemReader를 이용해 값을 하나씩 담아놓는 공간
- Chunk<O> : ItemReader를 이용해 담아온 데이터를 ItemProcessor에 넘겨 데이터를 가공하는데에 쓰이는 공간
ChunkProvider
- ItemReader를 이용해 Chunk Size만큼 반복해 Chunk<I>에 데이터를 쌓는 작업을 하는 객체
- ChunkProvider가 호출될 때마다 새로운 Chunk가 생성됨
ChunkProcessor
- ChunkProvider가 생성한 Chunk<I>를 가지고 ItemProcessor와 ItemWriter를 이용해 데이터를 가공하고 저장하는 작업을 하는 객체
- Chunk Size만큼 반복하면서 ItemProcessor로 작업 수행
- ItemReader, ItemProcessor에서는 Chunk Size만큼 반복하며 하나씩 실행하는 반면 ItemWriter는 Chunk Size만큼 일괄 처리
'Spring > Spring Batch' 카테고리의 다른 글
Chunk 지향 처리 : ItemReader (심화) (0) | 2022.10.10 |
---|---|
Chunk 지향 처리 : ItemReader, ItemProcessor, ItemWriter 개요 (0) | 2022.10.04 |
Chunk 지향 처리 : Chunk, ChunkProvider, ChunkProcessor (0) | 2022.10.01 |
스프링 배치 @JobScope, @StepScope (0) | 2022.09.29 |
스프링 배치 도메인 이해 : JobRepository, JobLauncher (0) | 2022.09.24 |