Spring Batch Introduction
by HeshAlgo1. 스프링 배치?
스프링 배치는 일괄처리를 위한 오픈 소스 프레임워크입니다. 즉, 비즈니스 운영을 수행하기 위해 대용량 처리가 필요한 경우 스프링 배치를 이용할 수 있습니다. 이런 대용량 처리에는 다양한 예시가 있습니다.
- 월말 계산과 같은 시간 기반 이벤트
- 하루 100만 개의 통계를 내어야 하는 작업
- 매일 1000개의 데이터를 DB에 Insert 해야 하는 작업 등
위의 세 가지 예시뿐만 아니라 그 외에도 다양하게 대용량 처리가 필요할 경우 스프링 배치를 이용할 수 있습니다.
2. 스프링 배치 아키텍처
스프링 배치는 이 세 가지의 구성 요소 아키텍처를 가지고 있습니다.
1) Application
-> 개발자가 만든 모든 배치 Job과 사용자 정의 코드가 포함되어 있습니다.
-> 개발자는 비즈니스 로직 구현에만 집중하고 공통적인 기반 기술은 프레임워크가 담당합니다.
2) Batch Core
-> 배치 작업을 시작하고 제어하는데 필요한 핵심 런타임 클래스가 포함됩니다. (JobLauncher, Job, Step 등..)
3) Batch Infrastructure
-> Application, Batch Core 모두 Infrastructure Layer에서 빌드됩니다.
-> Job의 흐름과 처리를 위한 틀을 제공하며 Reader, Processor, Writer 등이 속합니다.
3. 스프링 배치 어노테이션
1) 스프링 배치 초기화 설정 클래스
- BatchAutoConfiguration
스프링 배치가 초기화될 때 자동으로 실행되는 설정 클래스
Job을 수행하는 JobLauncherApplicationRunner 빈을 생성
스프링 부트가 해당 JobLauncherApplicationRunner클래스가 Job을 수행시켜 준다.
- SimpleBatchConfiguration
JobBuilderFactory와 StepBuildFactory 생성
스프링 배치의 주요 구성 요소가 생성되는데 해당 구성 요소는 프락시 객체로 생성
- BatchConfigurerConfiguration
- BasicBatchConfigurer
- SimpleBatchConfiguration에서 생성한 프록시 객체의 실제 대상 객체를 생성하는 설정 클래스
- 빈으로 의존성 주입받아서 주요 객체들을 참조해서 사용할 수 있다.
- JpaBatchConfigurer
- JPA 관련 객체를 생성하는 설정 클래스
이 해당 클래스가 실행되는 순서를 간략하게 나타내면
@EnableBatchProcessing -> SimpleBatchConfiguration -> BatchConfigurerConfiguration -> BatchAutoConfiguration
이렇게 순서가 진행되데 실제 @EnableBatchProcessing 내부를 들여다보거나 디버깅 시에 해당 순서로 실행되는 모습을 볼 수 있습니다.
4. 스프링 배치 의존성 추가
Spring Batch의 의존성을 추가함으로써 Spring Batch를 사용할 수 있습니다.
저 같은 경우 Gradle을 이용해 추가하였고 프로젝트를 첫 생성 시 Spring Batch Dependency를 추가하게 되면 spring-boot-starter-batch 의존성이 추가되는 것을 확인해 볼 수 있습니다.
주의할 점!
현재 Spring Boot 3 버전으로 사용 시 Spring Batch 버전이 5 버전으로 의존성이 다운로드될 것입니다.
아직은 Spring Batch5로 버전업 되면서 어떤 것들이 변화가 있는지 확인을 하지 못하여 Spring Boot 사용 시 2 버전으로 사용하는 것을 추천드립니다.
dependencies {
implementation("org.springframework.boot:spring-boot-starter-batch")
implementation("org.jetbrains.kotlin:kotlin-reflect")
runtimeOnly("com.mysql:mysql-connector-j")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("org.springframework.batch:spring-batch-test")
}
여기서 spring-boot-starter-batch와 spring-batch-core의 차이점이 궁금하신 분들이 계실 거 같은데 해당 설명은 해당 게시글의 아랫부분에 설명하도록 하겠습니다.
5. spring-boot-starter-batch와 spring-batch-core의 차이
spring-boot-stater-batch는 스프링 부트 기반 애플리케이션에서 스프링 배치를 사용하기 위한 스타터 의존성입니다.
해당 의존성을 추가하면 스프링 부트가 자동으로 필요한 설정을 처리하고 스프링 배치를 사용할 수 있게 해 줍니다.
spring-batch-core는 스프링 배치의 핵심 라이브러리로서, 배치처리 작업을 위한 핵심 기능과 클래스를 제공해 줍니다. 예를 들어 Job, Step, ItemReader, ItemWriter 등이 이 라이브러리에 포함됩니다.
우리는 spring-boot-stater-batch만 추가함으로써 스프링 부트는 스프링 배치에 필요한 의존성들을 포함하여 spring-batch-core도 가져오게 됩니다.
그런데 저 같은 경우 spring-boot-stater-batch와 spring-batch-core의 의존성을 전부 명시해 주었습니다.
그 이유는 spring-boot-stater-batch의 버전을 낮게 수정해 줬는데도 불구하고 spring-batch-core버전이 5 버전으로 명시가 되더군요...ㅠㅠ 해당 원인은 아직 파악하지 못한 관계로 해당 core의 버전도 명시하게 되었습니다.
해당 원인을 발견하게 되면 해당 포스트글을 수정하거나 새로 게시글을 작성하도록 하겠습니다!
참고 문헌 😶
'Spring Batch' 카테고리의 다른 글
Spring Batch Step (0) | 2023.05.22 |
---|---|
Spring Batch Job (0) | 2023.05.22 |
스프링 배치 DB 스키마 (0) | 2022.02.01 |
블로그의 정보
꾸준히 공부하는 개발 노트
HeshAlgo