-
Notifications
You must be signed in to change notification settings - Fork 0
Batch Core
SilberBullet edited this page Jul 6, 2026
·
3 revisions
Reusable Spring Batch Framework for RAIO Backend
Spring Batch를 사용하는 것이 목적이 아닙니다.
도메인 개발자가 비즈니스 로직에만 집중할 수 있도록 Spring Batch를 추상화하는 것이 Batch Core의 목표입니다.
RAIO Batch Core는 Spring Batch의 반복적인 Job, Step, Tasklet, Scheduler, JobLauncher 설정을 공통 Framework로 추상화하여 도메인 개발자가 UseCase와 Job 정의만으로 배치를 개발할 수 있도록 설계되었습니다.
- ⚙️ Batch Builder
- ⏰ Batch Scheduler
▶️ Batch Engine- 📊 Batch Dashboard Support
- 🎯 Batch On-demand
- 🧩 Multi Module
- 🏛️ Hexagonal Architecture
Batch Runner
│
┌─────────────────────────┼─────────────────────────┐
│ │ │
Batch Scheduler Batch On-demand Batch Dashboard
│ │ │
└───────────────┬─────────┴───────────────┬─────────┘
│
BatchJobRunner
│
▼
Spring Batch Job
│
▼
Application UseCase
│
┌───────────────┴────────────────┐
│ │
Driven RDB Driven Client
공통 API 및 설정 객체를 제공합니다.
- BatchProperties
- JobProperties
- BatchJobRunner
Spring Batch 보일러플레이트를 제거합니다.
기존
JobBuilder
StepBuilder
Tasklet↓
@Bean
public Job paymentRecoveryJob(BatchJobs batch) {
return batch.job("paymentRecoveryJob")
.taskletStep("paymentRecoveryStep", () -> {
paymentRecoveryUseCase.recover();
return RepeatStatus.FINISHED;
})
.build();
}- Tasklet 클래스 제거
- Builder DSL 제공
- Job 정의 단순화
Batch 실행 엔진입니다.
역할
- JobRegistry 조회
- JobLauncher 실행
- JobParameters 생성
- JobExecution 반환
YML 기반 Cron Scheduler입니다.
app:
batch:
jobs:
paymentRecoveryJob:
cron: "0 */5 * * * *"Scheduler는 BatchJobRunner를 호출하여 Job을 실행합니다.
Spring Batch Metadata를 자동 생성합니다.
지원
- PostgreSQL
- MySQL
- MariaDB
- Oracle
- SQL Server
- H2
생성 대상
- BATCH_JOB_INSTANCE
- BATCH_JOB_EXECUTION
- BATCH_STEP_EXECUTION
- BATCH_JOB_EXECUTION_CONTEXT
- BATCH_STEP_EXECUTION_CONTEXT
관리자 API 기반 Batch 실행을 제공합니다.
Admin API
│
BatchOndemandExecutor
│
BatchJobRunner
│
Spring Batch Job
Scheduler와 동일한 Runner를 사용합니다.
spring:
batch:
job:
enabled: false
jdbc:
initialize-schema: never-
job.enabled=false- Spring Boot 시작 시 자동 실행 방지
- Scheduler 또는 On-demand가 실행 담당
-
initialize-schema=never- Metadata 생성은 batch-dashboard-support 담당
@Bean
public Job paymentRecoveryJob(BatchJobs batch) {
return batch.job("paymentRecoveryJob")
.taskletStep("paymentRecoveryStep", () -> {
paymentRecoveryUseCase.recover();
return RepeatStatus.FINISHED;
})
.build();
}도메인 개발자는 Spring Batch API보다 Application UseCase 호출에 집중합니다.
- Application UseCase 작성
- Driving Batch Adapter 등록
- app.batch.jobs 설정
- Local Cron 테스트
- 운영 Cron 적용
- Batch는 Driving Adapter이다.
- Batch는 UseCase만 호출한다.
- Repository를 직접 호출하지 않는다.
- Scheduler와 On-demand는 BatchJobRunner를 공유한다.
- Job 이름과 YML Key는 동일해야 한다.
- Spring Batch보다 Batch Core를 우선 사용한다.
- UseCase 작성
- Job 등록
- YML 등록
- Local 실행 확인
- 운영 Cron 적용
- Metadata 생성 확인
Batch Core는 단순한 Wrapper가 아니라, 도메인 개발자가 Spring Batch의 복잡성을 몰라도 비즈니스 로직만 작성하여 Batch를 개발할 수 있도록 만든 Framework입니다.
- 🏗️ Hexagonal Architecture
- 🧩 Multi Module
- 🔄 CQRS
- 🌐 gRPC
- ⚙️ Batch Architecture
- ⚙️ Batch Core
- 📡 gRPC Core
- 🗄️ JPA Core
- 🌍 Common
- 🚨 Exception