-
Spring Boot 시리즈 30편 – Spring Batch: 대용량 데이터 처리 및 배치 시스템 설계 실전 가이드기술과 산업/언어 및 프레임워크 2025. 5. 13. 16:34728x90
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'기술과 산업 > 언어 및 프레임워크' 카테고리의 다른 글
NestJS 마스터 시리즈 14화. CRUD 실습 – 사용자(User) API를 완성해보자 (0) 2025.05.15 FastAPI 시리즈 10화 - 파일 업로드 및 다운로드 기능 구현하기 (0) 2025.05.13 전자정부 표준프레임워크 시리즈 8화 – 로그인 인증 흐름 분석: Session, Interceptor, Spring Security 적용까지 (0) 2025.05.13 Java JSON 처리 실전 시리즈 3화 – 객체를 JSON으로 변환하기: Jackson과 주요 어노테이션 활용법 (0) 2025.05.13 JHipster 시리즈 5화 - React 프론트엔드 커스터마이징 실전 가이드 (0) 2025.05.12