Spring/Spring Batch

[Spring Batch] 스프링 배치 주요 기능 및 스키마 생성

빅콜팝 2023. 2. 5. 17:49
728x90
반응형

Spring Batch 소개


- 운영에 필수적인 강력한 배치 애플리케이션을 개발할 수 있도록 설계된 가렵고 포관적인 배치 프레임워크

- 로깅 및 추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기 및 리소스 관리를 포함하여 대량의 레코드를 처리하는 데 필수적인 재사용 가능한 기능을 제공 한다.

 

배치 핵심 패턴


Read - 데이터베이스, 파일, 큐에서 대량의 데이터를 조회

Process - 특정 방법으로 데이터를 가공

Write - 데이터를 수정된 양식으로 다시 저장

 

 

배치 주요 기능


- 배치 프로세스를 주기적으로 커밋

- 동시 다발적인 Job의 배치 처리, 대용량 병렬 처리

- 실패 후 수동 또는 스케쥴링에 의한 재시작

- 의존관계가 있는 step 여러 개를 순차적으로 처리

- 조건적 Flow 구성을 통한 체계적이고 유연한 배치 모델 구성

- 반복, 재시도, Skip 처리

 

 

스프링 배치 아키텍처


Applicateion

- 스프링 배치 프레임워크를 통해 개발자가 만든 모든 배치 Job 커스텀 코드를 포함

- 개발자는 업무로직의 구현에만 집중하고 공통적인 기반기술은 프레임웍이 담당

 

Batch Core (Job 명세서)

- Job 실행, 모니터링, 관리하는 API 구성

- JobLauncher, Job, Step, Flow 등이 속함

 

Batch Infrastructure (Batch Core에 따른 데이터 실제적인 처리)

- Application, Core 모두 공통 Infrastructure 위에서 빌드

- Job 실행의 흐름과 처리를 위한 틀을 제공

- Reader, Processor Writer, Skip, Retry 등이 속함

 

 

Spring Batch VS Quertz


Quertz는 오픈소스로 실시간 스케줄링을 제공한다.

Spring Batch는 스케줄링 프레임워크가 아니며, 스케줄러를 대체하는 것이 아닌 스케줄러와 함께 동작되도록 설계되어있다.

 

Spring Batct는 job을 관리하지만 job을 구동시키지는 않기 때문에 @Schedule 또는 Quertz 등의 스케줄러를 사용하여 자동으로 실행되도록 설계한다.

 

 

Spring Batch 시작하기


@Configuration 선언

- 하나의 배치 Job을 설정하고 빈 설정

 

JobBuilderFactory

- Job을 생성하는 빌더 팩토리

 

StepBuilderFactory

- Step을 생성하는 빌더 팩토리

 

tasklet

- Step 안에서 단일 태스크로 수행되는 구직 구현

 

실행 순서

Job 구동 -> Step 실행 -> Tesklet 실행

(Job 일, 일감 / Step 일의 항목, 단계 / Testlet 작업 내용)

 

 

DB 스키마 생성


스프링 배치 메타 데이터

- 스프링 배치의 실행 및 관리를 위한 목적으로 여러 도메인들(Job, Step, JobParameters..)의 정보들을 저장, 업데이트, 조회할 수 있는 스키마 제공

- 과거, 현재의 실행에 대한 세세한 정보, 실행에 대한 성공과 실패 여부 등을 일목요연하게 관리함으로서 배치 운용에 있어 리스크 발생시 빠른 대처 가능

- DB와 연동할 경우 필수적으로 메타 테이블이 생성되어야 함

 

스키마 생성 설정

- 수동 생성 : 쿼리 복사 후 직접 실행

- 자동 생성 : batch.jdbc.initialize-schema 설정

ALWAYS - 스크립트 항상 실행
- RDBMS 설정이 되어 있을 경우 내장 DB보다 우선적으로 실행
EMBEDDED - 내장 DB(ex. h2)일 때만 실행되며 스키마가 자동 생성됨 (기본값)
NEVER - 스크립트 항상 실행 안함
- 내장 DB일 경우 스크립트가 생성이 안되기 때문에 오류 발생
- 운영에서 수동으로 스크립트 생성 후 설정하는 것을 권장

 

수동 생성

1. 아래 경로에 쿼리 복사 

 

2. 스키마 콘솔에 붙여넣고 실행

 

자동 생성

application.yml 설정 파일에 batch.jdbc.initialize-schema 설정

spring:
  profiles:
    active: local

---
spring:
  config:
    activate:
      on-profile: local
  datasource:
    hikari:
      jdbc-url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
      username: sa
      password:
      driver-class-name: org.h2.Driver
  batch:
    jdbc:
      initialize-schema: embedded

---
spring:
  config:
    activate:
      on-profile: mysql
  datasource:
    hikari:
      jdbc-url: jdbc:mysql://localhost:3307/springbatch?useUnicode=true&characterEncoding=utf8
      username: root
      password: 1234
      driver-class-name: com.mysql.jdbc.Driver
  batch:
    jdbc:
      initialize-schema: always

 

 

DB 스키마 테이블 정보


Job 관련 테이블

BATCH_JOB_INSTANCE

- Job이 실행될 때 JobInstance 정보가 저장되며 job_name과 job_key를 키로 하여 하나의 데이터가 저장

- 동일한 job_name 과 job_key로 중복 저장될 수 없다.

 

BATHC_JOB_EXECUTION

- job의 실행정보가 저장되며 Job 생송, 시작, 종료 시간, 실행상태, 메시지 등을 관리

 

BATCH_JOB_EXECUTION_PARAM

- Job과 함께 실행되는 JobParamter 정보를 저장

 

BATCH_JOB_EXECUTION_CONTEXT

- Job의 실행동안 여러가지 상태정보, 공유 데이터를 직렬화(Json 형식)해서 저장

- Step 간 서로 공유 가능함

 

STEP 관련 테이블

BATCH_STEP_EXECUTION

- Step의 실행정보가 저장되며 생성, 시작, 종료 시간, 실행 상태, 메시지 등을 관리 

 

BATCH_STEP_EXECUTION_CONTEXT

- Step의 실행동안 여러가지 상태정보, 공유 데이터를 직렬화(Json 형식)해서 저장

- Step 별로 저장되며 Step간 서로 공유할 수 없음

 

 

Reference

https://docs.spring.io/spring-batch/docs/3.0.0.RELEASE/reference

https://docs.spring.io/spring-batch/docs/current/reference/html/index-single.html

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B0%B0%EC%B9%98/unit/91282

728x90
반응형