본문 바로가기
백엔드/Spring

[Spring] Spring Batch 의 Meta-Data Schema 정보

by 작은소행성 2023. 10. 5.

Meta-Data Schema 

스프링 배치의 실행, 관리를 위한 목적으로 도메인의 정보를 정할 수 있는 스키마를 제공한다. 

스프링 배치 라이브러리에서 DB 스키마를 제공한다. 

해당 스키마는 모니터링 용도로만 사용되는 것이 아닌 실제 배치 작업이 실행되는 동안 사용되는 데이터들이 저장되는 장소이기 때문에 각 테이블에 어떤 데이터가 적재되는지 알고 사용하면 좋다. 

 

https://docs.spring.io/spring-batch/docs/current/reference/html/schema-appendix.html

 

 

DDL script 는 org.springframework.batch.core 라이브러리에 schema-*.sql 데이터베이스별로 있다. 

 

 

적재되는 순서는 다음과 같다. 

  • BATCH_JOB_INSTANCE 
  • BATCH_JOB_EXECUTION
  • BATCH_JOB_EXECUTION_PARAMS
  • BATCH_JOB_EXECUTION_CONTEXT
  • BATCH_STEP_EXECUTION
  • BATCH_STEP_EXECUTION_CONTEXT

 

Job 관련 테이블

BATCH_JOB_INSTANCE 

: Job이 실행될 때 JobInstance(실행되는 Job의 Name, Key에 대한 정보) 저장됨 

CREATE TABLE BATCH_JOB_INSTANCE  (
  JOB_INSTANCE_ID BIGINT  PRIMARY KEY ,
  VERSION BIGINT,
  JOB_NAME VARCHAR(100) NOT NULL ,
  JOB_KEY VARCHAR(32) NOT NULL
);

  • JOB_INSTANCE_ID : 고유하게 식별할 수 있는 기본 키
  • VERSION : 업데이트 될 때마다 1씩 증가
  • JOB_NAME : Job을 구성할 때 부여하는 Job 이름
  • JOB_KEY : JOB_NAME과 JOB_PARAMETER 를 합쳐 해싱한 값

 

 

BATCH_JOB_EXECUTION

 : Job이 실행 정보가 저장되며 Job의 생성, 시작, 종료 시각, 실행 상태, 메시지 등을 관리 

CREATE TABLE BATCH_JOB_EXECUTION  (
  JOB_EXECUTION_ID BIGINT  PRIMARY KEY ,
  VERSION BIGINT,
  JOB_INSTANCE_ID BIGINT NOT NULL,
  CREATE_TIME TIMESTAMP NOT NULL,
  START_TIME TIMESTAMP DEFAULT NULL,
  END_TIME TIMESTAMP DEFAULT NULL,
  STATUS VARCHAR(10),
  EXIT_CODE VARCHAR(20),
  EXIT_MESSAGE VARCHAR(2500),
  LAST_UPDATED TIMESTAMP,
  constraint JOB_INSTANCE_EXECUTION_FK foreign key (JOB_INSTANCE_ID)
  references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID)
) ;

  • JOB_EXECUTION_ID : JobExecution을 고유하게 식별할 수 있는 기본키로 JOB_INSTANCE와 일대다 관계
  • VERSION : 업데이트 될 때마다 1씩 증가
  • JOB_INSTANCE_ID : BATCH_JOB_INSTANCE의 키
  • CREATE_TIME : Excution이 생성된 시점
  • START_TIME : Excution이 시작된 시점
  • END_TIME : Excution이 종료된 시점
  • STATUS : 실행 상태 [COMPLETED, FAILED, ...]
  • EXIT_CODE : 실행 종료 코드  [COMPLETED, FAILED, ...]
  • EXIT_MESSAGE : STATUS가 실패인 경우 실패 원인을 저장
  • LAST_UPDATED : 마지막 Excution 시점 기록

 

 

BATCH_JOB_EXECUTION_PARAMS

 : Job과 함께 실행되는 JobParameters 정보 저장

 

공식문서에는 아래의 sql문이 작성되어 있지만

CREATE TABLE BATCH_JOB_EXECUTION_PARAMS  (
	JOB_EXECUTION_ID BIGINT NOT NULL ,
	PARAMETER_NAME VARCHAR(100) NOT NULL ,
	PARAMETER_TYPE VARCHAR(100) NOT NULL ,
	PARAMETER_VALUE VARCHAR(2500) ,
	IDENTIFYING CHAR(1) NOT NULL ,
	constraint JOB_EXEC_PARAMS_FK foreign key (JOB_EXECUTION_ID)
	references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID)
);
  • JOB_EXECUTION_ID : JobExecution 식별키 값, JOB_EXCUTION 과 일대다 관계
  • PARAMETER_NAME : 파라미터 이름
  • PARAMETER_TYPE : 파라미터 타입
  • PARAMETER_VALUE : 파라미터 값
  • IDENTIFYING : 식별여부 (true/false)

 

sql문에 작성된 것은 아래 내용이고 DB에도 다음 내용으로 생성되었다. 

CREATE TABLE BATCH_JOB_EXECUTION_PARAMS  (
    JOB_EXECUTION_ID BIGINT NOT NULL ,
    TYPE_CD VARCHAR(6) NOT NULL ,
    KEY_NAME VARCHAR(100) NOT NULL ,
    STRING_VAL VARCHAR(250) ,
    DATE_VAL DATETIME(6) DEFAULT NULL ,
    LONG_VAL BIGINT ,
    DOUBLE_VAL DOUBLE PRECISION ,
    IDENTIFYING CHAR(1) NOT NULL ,
    constraint JOB_EXEC_PARAMS_FK foreign key (JOB_EXECUTION_ID)
    references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID)
)

  • JOB_EXECUTION_ID : JobExecution 식별키 값, JOB_EXCUTION 과 일대다 관계
  • TYPE_CD : String, Long, Date, Double 등의 타입 정보
  • KEY_NAME : 파라미터 키 값
  • STRING_VAL : 파라미터 문자 값
  • DATE_VAL :  파라미터 Date 값
  • LONG_VAL :  파라미터 Long 값
  • DOUBLE_VAL :  파라미터 Double 값
  • IDENTIFYING : 식별여부 (true/false)

 

BATCH_JOB_EXECUTION_CONTEXT

 : Job의 실행되는 동안 상태 정보, 공유 데이터를 직렬화(JSON)해서 저장

 : Step 간의 데이터 공유가 가능함

CREATE TABLE BATCH_JOB_EXECUTION_CONTEXT  (
  JOB_EXECUTION_ID BIGINT PRIMARY KEY,
  SHORT_CONTEXT VARCHAR(2500) NOT NULL,
  SERIALIZED_CONTEXT CLOB,
  constraint JOB_EXEC_CTX_FK foreign key (JOB_EXECUTION_ID)
  references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID)
) ;
  • JOB_EXECUTION_ID : JobExecution 식별키 값, JOB_EXCUTION 마다 생성
  • SHORT_CONTEXT : Job 의 실행 상태 정보, 공유 데이터 등의 정보를 문자열로 저장
  • SERIALIZED_CONTEXT : 직렬화된 전체 컨텍스트

 

 

STEP 관련 테이블

BATCH_STEP_EXECUTION

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

CREATE TABLE BATCH_STEP_EXECUTION  (
  STEP_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY ,
  VERSION BIGINT NOT NULL,
  STEP_NAME VARCHAR(100) NOT NULL,
  JOB_EXECUTION_ID BIGINT NOT NULL,
  CREATE_TIME TIMESTAMP NOT NULL,
  START_TIME TIMESTAMP DEFAULT NULL ,
  END_TIME TIMESTAMP DEFAULT NULL,
  STATUS VARCHAR(10),
  COMMIT_COUNT BIGINT ,
  READ_COUNT BIGINT ,
  FILTER_COUNT BIGINT ,
  WRITE_COUNT BIGINT ,
  READ_SKIP_COUNT BIGINT ,
  WRITE_SKIP_COUNT BIGINT ,
  PROCESS_SKIP_COUNT BIGINT ,
  ROLLBACK_COUNT BIGINT ,
  EXIT_CODE VARCHAR(20) ,
  EXIT_MESSAGE VARCHAR(2500) ,
  LAST_UPDATED TIMESTAMP,
  constraint JOB_EXECUTION_STEP_FK foreign key (JOB_EXECUTION_ID)
  references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID)
) ;

  • STEP_EXECUTION_ID : Step의 실행 정보를 고유하게 식별할 수 있는 기본키
  • VERSION : 업데이트 될 때마다 1씩 증가
  • STEP_NAME : Step 을 구성할 때 부여하는 이름
  • JOB_EXECUTION_ID : JobExecution 기본키, JOB_EXCUTION 과 일대다 관계
  • CREATE_TIME : Excution이 생성된 시점
  • START_TIME : Excution이 시작된 시점
  • END_TIME : Excution이 종료된 시점
  • STATUS : 실행 상태 [COMPLETED, FAILED, ...]
  • COMMIT_COUNT : 트랜잭션당 커밋되는 수를 기록
  • READ_COUNT : 실행 시점에 Read한 아이템수를 기록
  • FILTER_COUNT : 실행 도중 필터링된 아이템수를 기록
  • WRITE_COUNT : 실행 도중 저장되고 커밋된 아이템 수를 기록
  • READ_SKIP_COUNT : 실행 도중 Read가 스킵된 아이템 수를 기록
  • WRITE_SKIP_COUNT : 실행 도중 Write가 스킵된 아이템 수를 기록
  • PROCESS_SKIP_COUNT : 실행 도중 Process가 스킵된 아이템 수를 기록
  • ROLLBACK_COUNT : 실행 도중 Rollback이 일어난 수를 기록
  • EXIT_CODE : 실행 종료 코드를 저장
  • EXIT_MESSAGE : Status가 실패일 경우 실패 원인등의 내용 저장
  • LAST_UPDATED : 마지막 실행 시점 기록

 

 

BATCH_STEP_EXECUTION_CONTEXT

 : Step이 실행되는 동안 상태 정보, 공유 데이터를 직렬화(JSON)해서 저장

 : Step 별로 저장되며 Step 간의 데이터 공유 불가능

CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT  (
  STEP_EXECUTION_ID BIGINT PRIMARY KEY,
  SHORT_CONTEXT VARCHAR(2500) NOT NULL,
  SERIALIZED_CONTEXT CLOB,
  constraint STEP_EXEC_CTX_FK foreign key (STEP_EXECUTION_ID)
  references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID)
) ;
  • STEP_EXECUTION_ID : StepExcution 식별키 값, Step_execution마다 생성
  • SHORT_CONTEXT : Step의 실행 상태 정보, 공유 데이터 등의 정보를 문자열로 저장
  • SERIALIZED_CONTEXT : 직렬화된 전체 컨텍스트

 

 

 

 

 

 

공식 문서 

https://docs.spring.io/spring-batch/docs/current/reference/html/schema-appendix.html

반응형