안녕하세요, Code Camp 독자 여러분!
백엔드 개발자로 일하다 보면 “배치(Batch) 돌려야 한다”는 말을 수없이 듣게 됩니다.
하지만 막상 “배치가 정확히 뭔가요?”라고 물으면 명쾌하게 대답하기 어려운 경우가 많습니다.
오늘은 Spring Batch 시리즈의 첫 번째 시간으로, Spring Batch의 핵심 개념과 왜 사용해야 하는지에 대해 아주 쉽게 정리해 드리겠습니다.
목차

1. 배치 애플리케이션이란?
웹 애플리케이션(Web Application)이 사용자의 요청(Request)을 받아 실시간으로 응답(Response)하는 것이라면, 배치 애플리케이션(Batch Application)은 일련의 작업을 정해진 규칙에 따라 일괄 처리하는 것을 말합니다.
쉽게 말해 “몰아서 처리하기”입니다.
배치의 3가지 특징
- 대용량 데이터: 수십만, 수천만 건의 데이터를 처리할 수 있어야 합니다.
- 자동화: 사용자의 개입 없이 정해진 시간에 실행되어야 합니다.
- 견고성: 잘못된 데이터가 있어도 시스템이 중단되지 않고, 어디서 실패했는지 기록해야 합니다.
2. Spring Batch의 등장 배경
Java 진영에는 오랫동안 표준화된 배치 프레임워크가 없었습니다. 많은 기업들이 자체적으로(In-house) 배치 솔루션을 만들어 썼지만, 유지보수가 어렵고 버그가 많았죠.
Spring Source(현 Pivotal)와 Accenture가 협력하여 만든 것이 바로 Spring Batch입니다.
“검증된 엔터프라이즈 배치 아키텍처”를 Spring 프레임워크 위에서 사용할 수 있게 된 것입니다.
3. Spring Batch가 제공하는 강력한 기능
Spring Batch를 쓰면 단순히 for 문을 돌려서 처리하는 것과 무엇이 다를까요?
1) 실패 처리와 재시작 (Restartability)
배치를 돌리다 5만 번째 데이터에서 DB 에러가 났습니다.
일반 프로그램은 처음부터 다시 돌려야 하지만, Spring Batch는 “5만 번째부터 다시 시작”할 수 있습니다. JobRepository가 실행 상태를 모두 기억하기 때문입니다.
2) 트랜잭션 관리 (Transaction Management)
100만 건을 한 번에 Commit하면 DB가 뻗습니다.
Spring Batch는 Chunk(덩어리) 단위로 트랜잭션을 쪼개서 처리합니다. (예: 1,000개씩 커밋)
3) 중복 실행 방지
같은 파라미터로 배치를 두 번 실행하는 것을 막아줍니다. 예를 들어 “2024년 1월 1일 정산” 배치가 이미 성공했다면, 실수로 다시 실행해도 막아줍니다.
4. 실무 사용 사례 (Use Cases)
실제 현업에서는 이런 곳에 쓰입니다.
- 일 매출 집계: 하루 동안 쌓인 주문 데이터를 모아 매출액을 계산합니다.
- 휴면 회원 처리: 1년 동안 로그인이 없는 회원을 찾아 ‘휴면’ 상태로 업데이트합니다.
- 대용량 이메일 발송: 100만 명의 구독자에게 뉴스레터를 보냅니다.
- 데이터 마이그레이션: 레거시 시스템의 데이터를 신규 시스템으로 옮깁니다.
5. 결론: 언제 써야 할까?
- 실시간 처리가 필요 없는가? (YES)
- 데이터가 대용량인가? (YES)
- 복잡한 연산과 트랜잭션 관리가 필요한가? (YES)
이 세 가지 질문에 모두 YES라면, Spring Batch가 정답입니다.
단순히 “매일 특정 시간에 실행”하는 것이 목적이라면 Spring Scheduler만으로도 충분할 수 있습니다. (이 차이는 3편에서 다룹니다!)
다음 시간에는 Spring Batch의 아키텍처 구조를 그림과 함께 살펴보겠습니다.
Code Camp와 함께 성장하는 하루 되세요!




