프레임워크(Framework)/Spring

[Spring Batch] 스프링 배치 프로젝트 구성 및 환경 설정 - Spring boot 2.x

잇트루 2023. 6. 12. 00:31
반응형
본 내용은 온라인 강의 사이트 인프런의 정수원 님의 강의 내용이 포함되어 있습니다.
스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch
 

스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch - 인프런 | 강의

초급에서 중~고급에 이르기까지 스프링 배치의 기본 개념부터 API 사용법과 내부 아키텍처 구조를 심도있게 다룹니다. 그리고 스프링 배치 각 기능의 흐름과 원리를 학습하게 되고 이를 바탕으

www.inflearn.com

 

프로젝트 생성

Spring initializr

 

IntelliJ IDEA Ultimate

 

 

build.gradle 의존성 추가

프로젝트 생성 후 스프링 배치를 사용하기 위해 의존성을 추가한다.

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.12'
    id 'io.spring.dependency-management' version '1.1.0'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    implementation 'org.springframework.boot:spring-boot-starter-batch'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    
    runtimeOnly 'mysql:mysql-connector-java'
    runtimeOnly 'com.h2database:h2'

    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.batch:spring-batch-test'
}

tasks.named('test') {
    useJUnitPlatform()
}

Spirng initializr 또는 intelliJ Ultimate에서 프로젝트 생성 시 의존성을 추가해도 상관없다.

의존성 추가 시 프로젝트의 External Libraries에 spring batch가 추가되어 있음을 알 수 있다.

배치를 실행하기 위해서는 연동할 데이터베이스 드라이버가 필요하다.

 

 

Application.java 스프링 배치 활성화

의존성 추가 후 실제로 스프링 배치를 작동하기 위해서는 @EnableBatchProcessing 어노테이션을 추가해야 한다.

@SpringBootApplication
@EnableBatchProcessing
public class SpringBatchApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBatchApplication.class, args);
    }

}
  • 어노테이션을 추가하면 설정 클래스를 실행시키며 스프링 배치의 모든 초기화 및 실행 구성이 이루어진다.
    • 꼭 main 클래스에 해당 어노테이션을 설정할 필요는 없다.
  • 스프링 부트 배치의 자동 설정 클래스가 실행되면서 빈으로 등록된 모든 Job을 검색하여 초기화와 동시에 Job을 수행하도록 구성된다.

 

테이블 생성

스프링 배치 메타 데이터

스프링 배치의 실행 및 관리를 위한 목적으로 여러 도메인들의 정보들을 저장, 업데이트, 조회할 수 있는 스키마를 제공한다. 따라서 DB와 연동할 경우 필수적으로 메타 테이블이 생성되어야 한다.

 

DB 스키마의 위치

  • /org/springframework/batch/core/schema-*.sql
  • DB 유형별로 제공하고 있다.

 

스키마 생성 방법

수동 생성

스프링 배치에서 제공하는 스키마 중 연동할 DB 스키마의 쿼리를 복사하여 직접 실행한다. 운영 환경에서는 수동으로 스크립트를 생성 후 설정하는 것을 권장한다.

 

다음과 같이 라이브러리에 존재하는 스키마를 복사하여 연결된 DB 콘솔 창에 붙여 넣고 실행시키면 된다.

 

자동 생성

application 설정을 통해 메타 테이블을 생성하기 위한 쿼리를 자동으로 실행해 준다. 설정하지 않을 시 기본적으로 EMBEDDED로 설정되어 H2와 같은 인메모리 DB를 사용할 때 애플리케이션 실행 시 스프링 부트가가 자동으로 생성해 준다.

# application.properties
spring.batch.jdbc.initialize-schema=always

# application.yml
spring:
  batch:
    jdbc:
      initialize-schema=always
  • ALWAYS : 스크립트 항상 실행, DBMS 설정이 되어 있을 경우 내장 DB보다 우선적으로 실행한다.
  • EMBEDDED : 내장 DB일 때만 실행되며 스키마가 자동 생성된다.(기본값)
  • NEVER : 스크립트를 실행하지 않는다. 내장 DB일 경우 스크립트가 생성이 되지 않기 때문에 오류가 발생한다.

 

 

테이블 생성 결과(ERD) 및 테이블 정보

Job 관련 테이블

batch_job_instance

  • Job이 실행될 때 JobInstance 정보가 저당되며 job_name과 job_key를 키로 하여 하나의 데이터가 저장된다.
  • 동일한 job_name과 job_key로 중복 저장될 수 없다.

 

batch_job_execution

  • job의 실행정보가 저장되며 Job의 생성, 시작, 종료 시간, 실행 상태, 메시지 등을 관리한다.

 

batch_job_execution_params

  • Job과 함께 실행되는 JobParameter 정보를 저장한다.

 

batch_job_execution_context

  • Job의 실행동안 여러 가지 상태정보, 공유 데이터를 Josn 형식으로 직렬화하여 저장한다.
  • Step 간의 서로 공유가 가능하다.

 

Step 관련 테이블

batch_step_execution

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

 

batch_step_execution_context

  • Step의 실행동안 여러 가지 상태 정보, 공유 데이터를 Josn 형식으로 직렬화하여 저장한다.
  • Step 별로 저장되며 Step 간의 서로 공유할 수 없다.
반응형