배치 서비스란?
대량의 데이터를 모아서 한번에 처리하는 서비스를 말합니다. 예를 들어 우리 주변에는 다음과 같은 작업들에 배치 서비스를 적용할 수 있습니다.
- 주기적인 은행 업무
- 쇼핑몰 알림
- 세금 고지서 일괄 처리
- 성적 일괄 처리
이러한 배치 서비스는 어떠한 트리거 예를 들어, 스케쥴과 같은 이벤트에 맞춰 실행됩니다. 또한 한번 시작하면 어떻게든 종료되는 특징을 가지고 있습니다.
배치 서비스 기본 3단계
- [Read] 많은 데이터를 데이터베이스, 파일, 메세지로부터 읽는다.
- [Processing] 읽은 데이터를 로직에 의해 처리한다.
- [Write] 로직으로 처리된 데이터를 수정된 형태로 출력한다.

배치 처리를 위해 사용되는 도구들
배치 처리를 위해 사용되는 도구들은 다양합니다.
- Cron, Crontab
- Quartz
- Jenkins
- 기타 트리거를 활용한 프로그램 실행
- Spring Batch
위의 도구들은 모두 다 같은 기능을 하지는 않습니다. 예를 들어 Spring Batch는 스케쥴링 하는 기능은 제공하지 않기 때문에 Quartz 또는 Jenkins와 같은 스케쥴 기능을 포함한 도구들을 사용해서 배치 서비스를 구현하곤 합니다.
이런 다양한 도구들 중에 저는 이번에 Spring Batch에 대해 좀 더 자세히 알아보고자 합니다.
스프링 배치란?
- 일상적인 배치 처리 + 엔터프라이즈급의 시스템 처리
- 자바의 장점 + 스프링 프레임워크의 장점 = 모두 갖춘 배치 프레임 워크
- 대규모 온라인 커뮤니티
- 이미 실무에서 안정적으로 사용되고 발전해 온 이력
스프링 배치의 지원 기능
- 트랜잭션 관리
- 청크 단위의 처리
- 선언적 입출력 지원
- 병렬처리
- 시작, 중지, 재시작 지원
- 재시도 또는 건너뛰기 지원
- 웹 기반 관리 인터페이스 제공 (Spring Cloud Data Flow)
스프링 배치 아키텍처
스프링 배치는 3개의 티어로 구성된 아키텍처를 가지고 있습니다.
- 어플리케이션
- 코어와 상호작용
- 코어
- 잡, 스텝, 잡 런처, 잡 파라미터 등의 배치 도메인 요소들
- 인프라스트럭처
- 배치 처리를 위해 필요한 공통 인프라 제공

스프링 배치 - 도메인 언어
스프링 배치 어플리케이션을 작성하기 위해 코어 단계에 도메인 요소들이 존재한다고 했습니다.
이러한 도메인 요소들에 대해 자세히 알아보겠습니다.
- Job
- JobInstance
- JobExecution
- JobParameter
- JobListener
- Step
- Tasklet 기반
- Chunk 기반

Job
- 스프링 빈 구성 - 유일하다
- 외부 의존성 없이 독립성을 갖는다
- 스프링 배치에서 실행되는 단위
- 상호 작용없이 처음부터 끝까지 실행
- 스텝을 담는 컨테이너 개념
- 하나 또는 여러 개의 스텝으로 구성

JobInstance
- Job의 논리적 실행 단위
- Job이 성공적으로 완료되면 다시 실행시킬 수 없다.
- Job 이름과 Job 파라미터로 구분된다.
- 동일한 Job 이름에 동일한 파라미터를 사용하여 단 한번만 실행
JobExecution
- Job을 실행한 것을 의미
- 실패든 성공이든 시도한 것을 나타낸다
JobParameter
- 잡에 전달되는 파라미터
JobListener
- Job 실행과 관련한 이벤트를 받을 수 있는 기능을 제공
public interface JobExeutionListner {
void beforeJob(JobExecution jobExecution);
void afterJob(JobExecution jobExecution);
}
Job 처리 흐름

Step
- Job을 구성하고 있는 배치 작업의 독립적이고 순차적인 단위
- Step에서는 순서와 분기를 정할 수 있습니다.
- Tasklet 기반 Step
- 간단한 실행 처리
- execute 메서드
- 하나의 트랜잭션 단위로 동작

- Chunk 기반 Step
- 아이템 기반의 처리
- ItemReader
- 스텝에서 한 번에 한 항목씩 입력을 나타내는 추상화 인터페이스
- 스텝에서 아이템에 대한 비지니스 처리를 나타내는 추상화 인터페이스
- 입력 아이템의 타입과 결과 아이템 타입이 다를 수 있다.
- 여러번 전달되더라도 동일 결과를 갖는 멱등성을 가져야 한다.ItemProcessor
- ItemWriter
- 스텝에서 한 번에 하나의 배치 또는 묶음의 출력을 나타내는 추상화 인터페이스
- JpaPagingItemReader
- HibernateCursorItemReader
- HibernateItemWriter
- JpaItemWriter

Step 처리 흐름


이와 관련해서 ItemReader 종류와 ItemWriter의 종류는 매우 다양하니 한번 확인해보시면 좋을 것 같습니다. 물론 Reader와 Writer 둘 다 JPA를 지원하고 Hibernate, Jdbc까지 지원하고 있습니다. 예를 들어 아래와 같은 종류가 있습니다.
- JpaPagingItemReader
- HibernateCursorItemReader
- HibernateItemWriter
- JpaItemWriter
이렇게 오늘은 Spring Batch에 대해서 알아봤습니다. 여러분들에게 도움이 되었으면 좋겠고 저가 다른 개발자들의 블로그를 보면서 “아 이렇게 해야 개발자로 먹고 살 수 있구나… 나 같아도 이런 사람을 뽑겠다” 라는 생각이 들어서 되게 닮고 싶고 따라가고 싶다는 생각이 들었습니다. 그래서 더 열심히 해보려고 합니다!!
'Spring' 카테고리의 다른 글
| 카카오 로그인에 대한 리팩토링과 고찰 (0) | 2026.01.19 |
|---|---|
| ResponEntity class 내부 뜯어보기 (0) | 2026.01.18 |
| Swagger UI란? (0) | 2026.01.18 |
| QueryDSL이란? (0) | 2026.01.18 |
| feign 적용기 (0) | 2026.01.18 |