Spring Batch - 02. Batch 에서 사용하는 Table

출처

목차

Spring Batch 메타 데이터

  • 스프링 배치의 실행 및 관리를 위한 목적으로 여러 도메인들(Job, Step, JobParameters 등) 의 정보들을 저장, 업데이트, 조회할 수 있는 스키마 를 제공한다.
  • 과거, 현재의 실행에 대한 세세한 정보, 실행에 대한 성공과 실패 여부등을 일목요연하게 관리함으로서 배치운용에 있어 리스크 발생시 빠른 대처 가능
  • DB 와 연동할 경우 필수적으로 메타 테이블이 생성 돼야 함

스키마 생성 설정

  • 수동 생성 : 쿼리 복사 후 직접 실행
  • 자동 생성 - spring.batch.jdbc.initialize-schema 설정
    • ALWAYS
      • 스크립트 항상 실행
      • RDBMS 설정이 돼 있을 경우 내장 DB 보다 우선적으로 실행
    • EMBEDDED (기본 값)
      • 내장 DB 일 때만 실행되며 스키마가 자동 생성됨
    • NEBER
      • 스크립트가 항상 실행 안된다.
      • 내장 DB 일 경우 스크립트가 생성이 안되기 때문에 오류가 발생
      • 운영에서는 수동으로 스크립트 생성 후 설정하는 것을 권장
# ALWAYS 로 설정
spring.batch.jdbc.initialize-schema: always
# EMBEDED 로 설정
spring.batch.jdbc.initialize-schema: embedded
# NEVER 로 설정
spring.batch.jdbc.initialize-schema: never

Spring Batch Database Schema

JOB 관련 테이블

Spring Batch 에서 Job 관련 메타데이터를 저장하기 위해 BATCH_JOB_INSTANCE, BATCH_JOB_EXECUTION, BATCH_JOB_EXECUTION_PARAMS, BATCH_JOB_EXECUTION_CONTEXT 4개의 테이블이 생성됩니다.

BATCH_JOB_INSTANCE

Job 이 실행될 때 생성되는 JobInstance 관련 정보 저장하는 테이블

  • job_namejob_key 를 키로 하여 하나의 데이터가 저장된다.
  • 동일한 job_name 과 job_key 로 중복 저장될 수 없다.

BATCH_JOB_EXECUTION

Job 의 실행 상태를 관리하는 JobExecution 정보를 저장한다.

  • job 의 실행정보가 저장되며 Job 의 생성, 시작시간, 종료시간, 실행 상태, 메시지등을 저장하는 테이블
  • BATCH_JOB_INSTANCE 테이블과 BATCH_JOB_EXECUTION 테이블은 1:N 관계를 가지고 있다.
BATCH_JOB_EXECUTION 테이블 컬럼
Column 설명 특징
JOB_EXECUTION_ID BATCH_JOB_EXECUTION 의 기본 키
VERSION 업데이트 될때마다 1씩 증가
JOB_INSTANCE_ID JOB_INSTANCE 의 키 값을 저장한다.
CREATE_TIME JOB_EXECUTION 이 생성된 시간을 저장한다.
START_TIME JOB_EXECUTION 이 시작된 시간을 저장한다.
END_TIME JOB_EXECUTION 의 종료 시간을 저장 Job 실행 도중 중단 되면 값이 저장되지 않을 수 있다 (null)
STATUS JOB_EXECUTION 의 실행 상태를 저장한다. COMPLETED, FAILED, STOPPED 등
EXIT_CODE JOB_EXECUTION 의 실행 종료 코드를 저장한다 COMPLETED, FAILED 등
EXIT_MESSAGE STATUS 가 FAIL 일 경우 실패 원인 내용을 저장한다.
LAST_UPDATED 마지막 실행 시점을 TIMESTAMP 로 저장한다.

BATCH_JOB_EXECUTION_PARAMS

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

  • BATCH_JOB_EXECUTIONBATCH_JOB_EXECUTION_PARAMS 관계는 1:N 의 관계를 갖는다.
BATCH_JOB_EXECUTION_PARAMS 테이블 컬럼
Column 설명 특징
JOB_EXECUTION_ID BATCH_JOB_EXECUTION 테이블 KEY 값을 저장 1:N 관계
TYPE_CD String, Long, Double 등의 타입 정보를 저장
KEY_NAME Parameter Key 값
STRING_VAL Parameter 문자 값
DATE_VAL Parameter 날짜 값
LONG_VAL Parameter LONG 값
DOUBLE_VAL Parameter DOUBLE 값
IDENTIFYING 식별여부 (TRUE, FALSE)

BATCH_JOB_EXECUTION_CONTEXT

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

  • Step 간 서로 공유가 가능하다.
  • BATCH_JOB_EXECUTIONBATCH_JOB_EXECUTION_CONTEXT 관계는 1:N 의 관계를 갖는다.
BATCH_JOB_EXECUTION_CONTEXT 테이블 컬럼
Column 설명 특징
JOB_EXECUTION_ID BATCH_JOB_EXECUTION 테이블 KEY 값을 저장 JOB_EXECUTION 마다 생성된다.
SHORT_CONTEXT JOB 의 실행 상태 정보, 공유 데이터등의 정보를 문자열로 저장
SERIALIZED_CONTEXT 직렬화(SERIALIZED) 된 전체 Context

STEP 관련 테이블

Spring Batch 에서 Step 관련 메타데이터를 저장하기 위해 BATCH_STEP_EXECUTION, BATCH_STEP_EXECUTION_CONTEXT 2개의 테이블이 생성됩니다.

BATCH_STEP_EXECUTION

Step 의 실행정보가 저장되며 생성, 시작시간, 종료시간, 실행상태, 메시지 등을 저장하는 테이블

  • BATCH_JOB_EXECUTION 테이블과 BATCH_STEP_EXECUTION 테이블은 1:N 관계를 갖는다.
BATCH_STEP_EXECUTION 테이블 컬럼
Column 설명 특징
STEP_EXECUTION_ID Step 의 실행 정보를 고유하게 식별할 수 있는 Key
VERSION Update 될때마다 1씩 증가
STEP_NAME Step 을 구성할 때 부여하는 Step 이름
JOB_EXECUTION_ID JobExecution 기본 키 JobExecution 과는 1:N 관계
START_TIME BATCH_JOB_EXECUTION 의 시작 시간
END_TIME BATCH_JOB_EXECUTION 의 종료 시간
STATUS BATCH_JOB_EXECUTION 의 상태 정보
COMMIT_COUNT 트랜잭션 당 Commit 되는 Count
READ_COUNT 실행 시점에 READ 한 ITEM 수를 Count
FILTER_COUNT 실행 시점에 FILTER 된 ITEM 수를 Count
WRITE_COUNT 실행 시점에 저장하고 수정된 ITEM 수를 Count
READ_SKIP_COUNT 실행 도중 READ 가 SKIP 된 ITEM 수를 Count
WRITE_SKIP_COUNT 실행 도중 WRITE 가 SKIP 된 ITEM 수를 Count
PROCESS_SKIP_COUNT 실행 도중 PROCESS 가 SKIP 된 ITEM 수를 Count
ROLLBACK_COUNT 실행 도중 ROLLBACK 된 ITEM 수를 Count
EXIT_CODE 실행 종료 코드를 저장한다.
EXIT_MESSAGE STATUS 가 실패일 경우 실패 원인을 저장한다.
LAST_UPDATED 마지막 실행 시점을 TIMESTAMP 로 저장한다.

BATCH_STEP_EXECUTION_CONTEXT

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

  • BATCH_JOB_EXECUTION_CONTEXT 와는 다르게 Step 별로 저장되며 Step 간 서로 공유 할 수 없음
BATCH_STEP_EXECUTION_CONTEXT 테이블 컬럼
Column 설명 특징
STEP_EXECUTION_ID StepExecution 식별 키 STEP_EXECUTION 마다 생성
SHORT_CONTEXT Step 의 실행 상태 및 정보들을 문자열로 저장한다.
SERIALIZED_CONTEXT 직렬화(SERIALIZED) 된 전체 Context

Share