안녕하세요! 오늘은 대용량 데이터 처리의 강자, Spring Batch에 대해 알아보겠습니다.
Spring Batch가 뭔가요? 🤔
은행 입출금 명세서를 처리하는 것을 상상해보세요:
- 매일 밤 수백만 건의 거래 내역을 처리
- 실시간으로는 불가능한 대량의 데이터 처리
- 실패 시 재시작과 중단점 복구가 필요
Spring Batch는 이런 대용량 배치 처리를 위한 프레임워크입니다!
핵심 개념 💡
1. Job
@Bean
public Job importUserJob(JobBuilderFactory jobs) {
return jobs.get("importUserJob")
.start(step1())
.next(step2())
.build();
}
- 배치 처리의 가장 큰 단위
- 하나의 '업무 수행 단위'를 의미
- 여러 Step으로 구성
2. Step
@Bean
public Step step1(StepBuilderFactory stepBuilderFactory) {
return stepBuilderFactory.get("step1")
.<Person, Person>chunk(10)
.reader(reader())
.processor(processor())
.writer(writer())
.build();
}
- Job의 세부 실행 단위
- 실제 비즈니스 로직을 수행
3. Chunk 기반 처리
읽기(100개) -> 처리(100개) -> 쓰기(100개) -> 커밋
- 데이터를 일정 덩어리로 나눠서 처리
- 메모리 부하를 줄이고 성능 최적화
- 실패 시 해당 Chunk만 롤백
동작 방식 🎯
Reader: 데이터 읽기
@Bean public ItemReader<Person> reader() { return new JdbcPagingItemReaderBuilder<Person>() .name("personItemReader") .dataSource(dataSource) .selectClause("SELECT id, name, age") .fromClause("FROM person") .pageSize(100) .build(); }
Processor: 데이터 가공
@Bean public ItemProcessor<Person, Person> processor() { return person -> { person.setAge(person.getAge() + 1); return person; }; }
Writer: 결과 저장
@Bean public ItemWriter<Person> writer() { return new JdbcBatchItemWriterBuilder<Person>() .sql("INSERT INTO processed_person (id, name, age) VALUES (:id, :name, :age)") .dataSource(dataSource) .build(); }
실전 활용 예시 📱
1. 대량 메일 발송
@Configuration
public class EmailBatchConfig {
@Bean
public Job sendMailJob() {
return jobBuilderFactory.get("sendMailJob")
.start(sendMailStep())
.build();
}
@Bean
public Step sendMailStep() {
return stepBuilderFactory.get("sendMailStep")
.<UserEmail, UserEmail>chunk(100)
.reader(emailReader())
.processor(emailProcessor())
.writer(emailWriter())
.build();
}
}
2. 일일 매출 집계
@Configuration
public class SalesAggregationConfig {
@Bean
public Job aggregateSalesJob() {
return jobBuilderFactory.get("aggregateSalesJob")
.start(aggregateStep())
.build();
}
}
장점 🌟
안정성
- 자동 재시작
- 중단점 복구
- 트랜잭션 관리
확장성
- 병렬 처리 지원
- 다양한 데이터 포맷 지원
- 커스텀 구현 용이
모니터링
- 상세한 실행 이력
- 성능 메트릭스
- 에러 추적
주의사항 ⚠️
메모리 관리
- 적절한 Chunk 크기 설정
- 페이징 처리 활용
멱등성 보장
- 같은 Job 반복 실행 시 동일 결과
- 재시작 시나리오 고려
성능 최적화
- 인덱스 활용
- 병렬 처리 설정
- 적절한 커밋 주기
References 📚
Spring Batch Official Documentation
https://docs.spring.io/spring-batch/docs/current/reference/html/Spring Batch in Action (Manning Publications)
https://www.manning.com/books/spring-batch-in-actionBaeldung Spring Batch Tutorial
https://www.baeldung.com/spring-batch
728x90
'300===Dev Framework > Spring Batch' 카테고리의 다른 글
Spring Batch Step & Status 완벽 가이드 📊 (0) | 2024.11.07 |
---|---|
Spring Tasklet - 배치 작업의 작은 영웅 🦸♂️ (0) | 2024.11.07 |
Quartz Framework Settings Explained (0) | 2024.05.29 |
Spring Batch Settings Explained (0) | 2024.05.29 |
Quartz Introduced (0) | 2024.05.27 |