기술과 산업/언어 및 프레임워크
Spring Boot 시리즈 30편 – Spring Batch: 대용량 데이터 처리 및 배치 시스템 설계 실전 가이드
B컷개발자
2025. 5. 13. 16:34
728x90
Spring Boot에서 Spring Batch를 활용해 대용량 데이터 처리 및 배치 시스템을 설계하는 방법을 소개합니다. Step, Job, Reader, Processor, Writer의 기본 개념과 실전 예시 포함.
Spring Boot 시리즈 30편 – Spring Batch: 대용량 데이터 처리 및 배치 시스템 설계 실전 가이드
많은 서비스에서는 다음과 같은 대용량 데이터 처리 요구가 발생합니다.
- 매일 회원 데이터 분석
- 거래 내역 일괄 업데이트
- 외부 시스템으로 데이터 전송
이러한 요구를 효율적이고 안정적으로 해결하는 대표적인 프레임워크가 Spring Batch입니다.
이번 글에서는 Spring Batch의 핵심 개념과 실무에서 사용하는 방법을 단계적으로 정리합니다.
1. Spring Batch의 핵심 아키텍처
[Job] → [Step] → [Reader] → [Processor] → [Writer]
구성 요소 역할
Job | 하나의 배치 작업 단위 |
Step | Job을 구성하는 작업 단계 |
Reader | 데이터 읽기 (DB, 파일, API 등) |
Processor | 데이터 가공, 검증 |
Writer | 데이터 저장 (DB, 파일, API 등) |
2. Spring Batch 의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-batch'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
- H2 Database는 예제용 (실무에서는 Oracle, MySQL 등 사용)
🛠️ 3. 기본 Job/Step 구성 예시
Job Configuration
@Configuration
@RequiredArgsConstructor
public class BatchConfig {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
@Bean
public Job sampleJob() {
return jobBuilderFactory.get("sampleJob")
.start(sampleStep())
.build();
}
@Bean
public Step sampleStep() {
return stepBuilderFactory.get("sampleStep")
.<String, String>chunk(10)
.reader(sampleReader())
.processor(sampleProcessor())
.writer(sampleWriter())
.build();
}
}
Reader, Processor, Writer 구성
@Bean
public ItemReader<String> sampleReader() {
return new ListItemReader<>(List.of("A", "B", "C", "D", "E"));
}
@Bean
public ItemProcessor<String, String> sampleProcessor() {
return item -> item.toLowerCase();
}
@Bean
public ItemWriter<String> sampleWriter() {
return items -> items.forEach(System.out::println);
}
- Reader → List 데이터 읽기
- Processor → 소문자로 변환
- Writer → 콘솔 출력
4. 실무 데이터베이스 기반 배치 예시
@Bean
public JdbcPagingItemReader<User> userReader(DataSource dataSource) {
JdbcPagingItemReader<User> reader = new JdbcPagingItemReader<>();
reader.setDataSource(dataSource);
reader.setPageSize(100);
reader.setRowMapper(new BeanPropertyRowMapper<>(User.class));
reader.setQueryProvider(queryProvider(dataSource));
return reader;
}
private PagingQueryProvider queryProvider(DataSource dataSource) {
SqlPagingQueryProviderFactoryBean factory = new SqlPagingQueryProviderFactoryBean();
factory.setDataSource(dataSource);
factory.setSelectClause("SELECT *");
factory.setFromClause("FROM users");
factory.setSortKey("id");
return factory.getObject();
}
5. Job 실행 방법
Application 실행 시 자동 실행
spring:
batch:
job:
enabled: true
CommandLineRunner로 수동 실행
@Component
@RequiredArgsConstructor
public class BatchJobRunner implements CommandLineRunner {
private final JobLauncher jobLauncher;
private final Job sampleJob;
@Override
public void run(String... args) throws Exception {
jobLauncher.run(sampleJob, new JobParameters());
}
}
실무 적용 전략
항목 전략
데이터 크기 | Chunk 기반으로 대량 데이터를 나눠 처리 |
장애 대응 | JobExecution, StepExecution을 통해 중단/재시작 가능 |
스케줄링 | Spring Scheduler 또는 외부 Scheduler 연동 |
멀티 쓰레드 처리 | TaskExecutor를 설정해 병렬 처리 가능 |
로깅 | Batch Job 별 실행 로그를 DB 또는 파일로 저장 |
마무리 요약
항목 요약
핵심 구성 | Job → Step → Reader → Processor → Writer |
장점 | 대용량 데이터 안정적 처리, 장애 복구 가능 |
실무 팁 | Chunk 사이즈 조절, 멀티 쓰레드 설정, 외부 시스템 연동 |
확장성 | Spring Scheduler, Cloud Batch 서비스와 연계 가능 |
추천 시나리오 | 정기 리포트, 데이터 마이그레이션, 파일 → DB 대량 적재 |
다음 편 예고
Spring Boot 시리즈 31편: Spring Scheduler – 정기 작업 자동화 및 서비스 운영 효율화 전략
728x90