- Q. 스케줄러에서 실행하는 이 메서드가 어느 스레드에서 실행되는지?
배치를 이용하는 곳
서비스에 접속하지 않은지 1년 이상이 지난 회원의 상태는 휴면으로 전환
보통 데이터를 집계하는 경우 집계 작업은 하루에 한번만 수행하게 된다.
이를 위해 API를 구성하는 것은 낭비일 수 있다.
단발성 대용량 데이터를 처리하는 애플리케이션을 배치 어플리케이션이라고 한다.
결제 승인 이후에 승인내역을 특정 VAN 사로 전송해줘야 하는 경우
배치 vs 스케줄러
- batch : 여러 job을 순차적으로 처리
- quartz & scheduler : 특정 job을 특정 시간에 처리
스케줄러
@EnableScheduling @SpringBootApplication public class EggPracticeApplication { public static void main(String[] args) { SpringApplication.run(EggPracticeApplication.class, args); } }
@Component public class Schedule { @Scheduled(cron = "*/5 * * * * *") public void test2() { System.out.println("delay 5000"); } }

@Scheduled
규칙- void 타입
- 매개변수 사용 x
이러한 배치를 주기적으로 동작하게 해주는 Scheduler는 대표적으로 2가지가 존재
- Quartz 스케줄러
- 스프링 스케줄러
스프링부트 배치
스프링 부트가 제공하는 스프링부트 배치(SpringBootBatch)는 다음과 같은
강점
을 가지고 있음자동화 : 매번 단순반복작업을 쉽고 빠르게 자동화시켜줌대용량 처리 : 대용량이라 할지라도 가장 최적화된 성능을 보장견고성 : 예측하지 못한 상황이나 동작에 대한 예외처리도 정의할 수 있음재사용성 : 공통적인 작업을 단위별로 재사용할 수 있음
스프링 배치란?
배치를 처리할 수 있는 방법
- 크게 2가지가 있음
Tasklet
- 단순 배치 처리에 쉽게 사용 가능
- 분할처리 귀찮음
Chunk
- 분할처리(10000개 → 1000개 x 10) 할때 유용함
- 큰 대용량 처리시 유용
- ItemReader, ItemProcessor, ItemWriter 관계 이해 필요
스프링 배치 템플릿 코드 (Chunk 기반)

@Slf4j @Configuration @EnableBatchProcessing @RequiredArgsConstructor public class TemplateConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @Bean public Job job(){ return this.jobBuilderFactory.get("") .incrementer(new RunIdIncrementer()) .start(this.step()) .next(...) .build(); } @Bean public Step step(){ return this.stepBuilderFactory.get("") .chunk() .reader() .processor() .writer() .build(); } }

Name : SpringBatchClass




File name :
Class
namejob name : job
method
namestep name : step
method
name스프링 배치 용어 정의
Spring Batch Meta Table
Spring Batch에는 6개의 Meta Table과 3개의 Sequence Table 존재
BATCH_JOB_INSTANCE
- JobInstance에 관련된 모든 정보가 포함되어 있음
- 전체 계층 구조의 최상위 역할
BATCH_JOB_EXECUTION_PARAMS
- Job을 실행 시킬 때 사용했던 parameters에 대한 정보를 저장
BATCH_JOB_EXECUTION
- JobExcution에 관련된 모든 정보를 저장
- JobExcution은 JobInstance가 실행 될 때마다 시작시간, 종료시간, 종료코드 등 다양한 정보를 가지고 있음
BATCH_JOB_EXECUTION_CONTEXT
- JobExecution의ExecutionContext 정보가 들어있음
- 일반적으로 JobInstance가 실패 시 중단된 위치에서 다시 시작할 수 있는 정보를 저장
BATCH_STEP_EXECUTION
- StepExecution에 대한 정보를 저장
- step이 실행되는 동안 필요한 데이터 또는 실행된 결과 저장
BATCH_STEP_EXECUTION_CONTEXT
- StepExecution의 ExecutionContext 정보가 들어있음
- Step이 실행되며 공유해야 할 데이터를 직렬화 해 저장
- 일반적으로 JobInstance가 실패 시 중단된 위치에서 다시 시작할 수 있는 정보를 저장
Job ↔ Step 사이 데이터 공유
한 Job 내에서 공유할 수 있는 Batch_job_execution_context
한 step 내에서 공유 할 수 있는 batch_step_execution_context
Job Instance vs Job Execution
1개의 JobInstance는 여러 번의 실행을 가질 수 있습니다.
그리고 그 여러 번의 실행 단위를 JobExcution이라 하죠.
배치랑 스케줄링을 같이 쓰는 듯
ㅠㅜㅠ