우당탕탕
Spring Batch 처음 써보면서 겪은 시행착오와 해결 과정을 공유합니다 본문
저도 Spring Batch를 처음 접했을 때, 생각보다 복잡해서 어디서부터 손을 대야 할지 막막했어요. 특히 대용량 데이터 처리에 맞춰 배치 잡을 만들면서 여러 번 에러가 났고, 그때마다 삽질을 많이 했거든요.
이 글에서는 제가 Spring Batch를 처음 사용하면서 겪었던 대표적인 시행착오와 그 해결 과정들을 차근차근 풀어볼게요. 덕분에 기본 개념부터 실제 코드 작성, 그리고 에러 해결까지 한 번에 정리하실 수 있을 거예요.
Spring Batch 처음 써보면서 겪은 시행착오 관련 정보
저는 이렇게 개발 환경을 맞췄어요
처음 해볼 때는 Java 17과 Spring Boot 3.2 기반 프로젝트였어요. Spring Batch 4.3.5를 의존성에 추가했고, H2 데이터베이스를 임베디드용으로 사용했습니다.
처음 배치 잡 만들 때 이렇게 했어요
사실 이 부분이 제일 막막했는데, Spring Batch에서 가장 기본인 Job과 Step 개념부터 잘 이해하는 게 중요했어요. 저는 여기서 엉덩이를 붙이고 아래처럼 코드를 짰어요.
@Configuration
@EnableBatchProcessing
public class BatchConfig {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
public BatchConfig(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory) {
this.jobBuilderFactory = jobBuilderFactory;
this.stepBuilderFactory = stepBuilderFactory;
}
@Bean
public Job sampleJob() {
return jobBuilderFactory.get("sampleJob")
.start(sampleStep())
.build();
}
@Bean
public Step sampleStep() {
return stepBuilderFactory.get("sampleStep")
.<String, String>chunk(5)
.reader(() -> "Hello Spring Batch")
.processor(item -> item.toUpperCase())
.writer(items -> items.forEach(System.out::println))
.build();
}
}
위 코드가 핵심인데, ‘chunk(5)’ 설정으로 데이터를 5개씩 읽고 처리하는 구조라는 점이 중요해요. 저는 처음에 여기서 chunk 사이즈를 잘못 설정해서 데이터가 중복 처리되는 문제도 있었거든요.
Spring Batch 처음 써보면서 겪은 시행착오 관련 정보
여기서 많이 삽질했어요
가장 오래 걸렸던 에러는 org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type이었어요. 이게 왜 나왔냐면, @EnableBatchProcessing 어노테이션을 붙였는데도 Batch 관련 빈 설정이 제대로 안 돼서였거든요.
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.batch.core.launch.JobLauncher'
해결 방법은 BatchConfig 클래스가 컴포넌트 스캔 대상에 들어오게 하거나, 별도 배치 설정을 추가하는 것이었어요. 또 한 가지는 데이터 소스 설정이 빠지면 이런 문제가 자주 발생하더라고요.
심화: 배치 잡 재실행과 상태 관리도 신경 써야 해요
많이들 헷갈려하는 게, 성공한 Job을 재실행했을 때 아무 처리도 안 되는 경우였어요. Spring Batch는 기본적으로 JobInstance 단위로 실행 상태를 관리해서, 같은 파라미터로 다시 실행하면 재처리를 안 해버려요.
이럴 때는 JobParameters를 꼭 바꿔줘야 하고, 혹은 JobRepository를 통해 상태를 초기화하는 방법을 썼어요. 이렇게 하지 않으면 배치가 의도한 대로 동작하지 않더라고요.
자주 물어보시는 질문들
Q. Spring Batch를 왜 써야 할까요? 그냥 스케줄러랑 다른 점은요?
A. 스케줄러는 단순 실행 주기 관리고, Spring Batch는 데이터 처리 단위(Chunk), 상태 관리, 실패 복구, 트랜잭션 등 배치 처리에 최적화된 기능이 많아요. 대용량 데이터 처리라면 꼭 Spring Batch를 추천해요.
Q. 배치 잡에서 트랜잭션 처리는 어떻게 하나요?
A. 보통 Step 단위로 트랜잭션이 관리되고, chunk 단위로 커밋돼요. 그래서 chunk 사이즈를 너무 크게 하면 메모리 문제, 너무 작게 하면 성능 문제가 생길 수 있으니 적절한 튜닝이 필요해요.
Spring Batch 처음 써보면서 겪은 시행착오 관련 정보
정리하자면, Spring Batch 처음 하실 때는 Job과 Step, Chunk 개념부터 확실히 잡으시고, 설정 문제 때문에 발생하는 에러는 하나씩 해결해 나가면 돼요. 그리고 배치 재실행 정책과 트랜잭션 관리에도 반드시 신경 쓰셔야 합니다. 이 글에서 다룬 내용만 참고하시면 배치 초보도 어렵지 않게 진행할 수 있을 거예요.
'Tech > Spring' 카테고리의 다른 글
| Spring Batch 처음 써보면서 겪은 시행착오와 해결 과정 공유합니다 (0) | 2026.05.20 |
|---|---|
| Spring Boot JWT 로그인 구현하다 막힌 부분과 해결한 경험담 (0) | 2026.05.18 |
| JPA N+1 문제 실제 발생 상황과 제가 해결한 방법 경험담 (0) | 2026.05.12 |
| [Spring] Spring Boot 가상 스레드(Virtual Threads) 적용하기 2편 -@Async + JMeter 고급 벤치마킹 (0) | 2025.12.31 |
| [Spring] Spring Boot 가상 스레드(Virtual Threads) 적용하기 1편 (0) | 2025.12.31 |
