Skip to content

Batch Core

SilberBullet edited this page Jul 6, 2026 · 3 revisions

⚙️ Batch Core Framework

Reusable Spring Batch Framework for RAIO Backend


🎯 Philosophy

Spring Batch를 사용하는 것이 목적이 아닙니다.

도메인 개발자가 비즈니스 로직에만 집중할 수 있도록 Spring Batch를 추상화하는 것이 Batch Core의 목표입니다.

RAIO Batch Core는 Spring Batch의 반복적인 Job, Step, Tasklet, Scheduler, JobLauncher 설정을 공통 Framework로 추상화하여 도메인 개발자가 UseCase와 Job 정의만으로 배치를 개발할 수 있도록 설계되었습니다.


🚀 Features

  • ⚙️ Batch Builder
  • ⏰ Batch Scheduler
  • ▶️ Batch Engine
  • 📊 Batch Dashboard Support
  • 🎯 Batch On-demand
  • 🧩 Multi Module
  • 🏛️ Hexagonal Architecture

🏗️ Architecture

                                    Batch Runner
                                         │
               ┌─────────────────────────┼─────────────────────────┐
               │                         │                         │
       Batch Scheduler          Batch On-demand            Batch Dashboard
               │                         │                         │
               └───────────────┬─────────┴───────────────┬─────────┘
                               │
                         BatchJobRunner
                               │
                               ▼
                        Spring Batch Job
                               │
                               ▼
                        Application UseCase
                               │
               ┌───────────────┴────────────────┐
               │                                │
          Driven RDB                     Driven Client

📦 Core Modules

batch-api

공통 API 및 설정 객체를 제공합니다.

  • BatchProperties
  • JobProperties
  • BatchJobRunner

batch-builder

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-engine

Batch 실행 엔진입니다.

역할

  • JobRegistry 조회
  • JobLauncher 실행
  • JobParameters 생성
  • JobExecution 반환

batch-scheduler

YML 기반 Cron Scheduler입니다.

app:
  batch:
    jobs:
      paymentRecoveryJob:
        cron: "0 */5 * * * *"

Scheduler는 BatchJobRunner를 호출하여 Job을 실행합니다.


batch-dashboard-support

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

batch-ondemand

관리자 API 기반 Batch 실행을 제공합니다.

Admin API
    │
BatchOndemandExecutor
    │
BatchJobRunner
    │
Spring Batch Job

Scheduler와 동일한 Runner를 사용합니다.


⚙️ Batch 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 담당

💳 Payment Batch Example

@Bean
public Job paymentRecoveryJob(BatchJobs batch) {
    return batch.job("paymentRecoveryJob")
            .taskletStep("paymentRecoveryStep", () -> {
                paymentRecoveryUseCase.recover();
                return RepeatStatus.FINISHED;
            })
            .build();
}

도메인 개발자는 Spring Batch API보다 Application UseCase 호출에 집중합니다.


📖 Development Convention

  1. Application UseCase 작성
  2. Driving Batch Adapter 등록
  3. app.batch.jobs 설정
  4. Local Cron 테스트
  5. 운영 Cron 적용

컨벤션

  • Batch는 Driving Adapter이다.
  • Batch는 UseCase만 호출한다.
  • Repository를 직접 호출하지 않는다.
  • Scheduler와 On-demand는 BatchJobRunner를 공유한다.
  • Job 이름과 YML Key는 동일해야 한다.
  • Spring Batch보다 Batch Core를 우선 사용한다.

✅ Checklist

  • UseCase 작성
  • Job 등록
  • YML 등록
  • Local 실행 확인
  • 운영 Cron 적용
  • Metadata 생성 확인

❤️ Summary

Batch Core는 단순한 Wrapper가 아니라, 도메인 개발자가 Spring Batch의 복잡성을 몰라도 비즈니스 로직만 작성하여 Batch를 개발할 수 있도록 만든 Framework입니다.

🚀 RAIO Backend

Home


📖 Getting Started

🏛️ Architecture

🧱 Core Modules

💳 Domains

📚 Guides

Clone this wiki locally