Search
Duplicate

4. 스프링 배치 DB Schema 살펴보기

목차

1. 개요

/org/springframework/batch/core/schema-*.sql
스프링 배치에선 실행 및 관리 목적으로 Job, Step, JobParameters등 여러 도메인들의 정보를 관리(CRUD)할 수 있는 스키마를 제공한다. inMemory가 아닌 DB와 연동할 겨우 메타 테이블이 생성되어야 하는데, 이러한 메타테이블에 대한 DB 스키마는 스프링 배치 라이브러리에 존재하며 DB유형별로 제공되니 사용하는 DB에는 적절한 sql을 확인하면 된다.
물론, 직접 sql 쿼리를 가져다가 수동으로 생성을 해도 되고, 자동으로 생성할 수도 있다.

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

자동 생성 - 프로퍼티 에 자동 생성 속성 지정

spring: batch: jdbc: initialize-schema: always(or EMBEDDED, NEVER)
YAML
복사
여기서 속성은 ALWAYS, EMBEDDED, NEVER 세 가지를 선택할 수 있는데 각각 다음과 같은 속성을 가진다.
ALWAYS: 스크립트는 항상 실행되고 RDBMS설정이 되어 있을 경우 내장 DB보다 우선 실행한다.
EMBEDDED: 내장 DB일 때만 실행되며 스키마가 자동생성된다, (DEFAULT)
NVER: 스크립트 항상 실행안하고 내장 DB일 경우 스크립트 생성이 되지 않아 오류가 발생한다. 운영에서는 수동으로 스크립트 생성 후 설정하는 것이 권장된다.

Job 관련 테이블

BATCH_JOB_INSTANCE
: Job이 실행될 때 JobInstnace 정보가 저장되며 Job_name과 job_key로 하여 하나의 데이터가 저장된다.
BATCH_JOB_EXECUTION
: Job의 실행정보가 저장되며 Job 생성, 시작, 종료 시간, 실행 상태, 메세지 등을 관리한다.
BATCH_JOB_EXECUTION_PARAMS
: Job과 함께 실행되는 JobParameter 정보를 저장한다.
ATCH_JOB_EXECUTION_CONTEXT
: Job의 실행 동안 여러가지 상태정보나 공유 데이터를 JSON형태로 직렬화 해서저장한다.
(중요) Step간 서로 공유가 가능하다.

Step 관련 테이블

BATCH_STEP_EXECUTION
: Step의 실행정보가 저장되며 생성,시작,종료시간, 실행상태, 메시지 등을 관리한다.
BATCH_STEP_EXECUTION_CONTEXT
: Step의 실행동안 여러가지 상태정보와 공유 데이터를 JSON형태로 직렬화 하여 저장한다.
Step별로 저장되며 Step간에 서로 공유할 수 없다.

메타 테이블 더 자세히 살펴보기

mysql 을 기준으로 설명한다.

1. BATCH_JOB_INSTANCE

CREATE TABLE BATCH_JOB_INSTANCE ( JOB_INSTANCE_ID BIGINT NOT NULL PRIMARY KEY , VERSION BIGINT , JOB_NAME VARCHAR(100) NOT NULL, JOB_KEY VARCHAR(32) NOT NULL, constraint JOB_INST_UN unique (JOB_NAME, JOB_KEY) ) ENGINE=InnoDB;
SQL
복사
JOB_INSTANCE_ID : 고유하게 식별할 수 있는 기본 키
VERSION: 업데이트 될 때마다 1씩 증가하는 필드
JOB_NAME: Job을 구성할 때 부여하는 Job의 이름
JOB_KEY: job_name과 jobParameter를 합쳐 해싱한 해시코드를 저장하는 필드

2. BATCH_JOB_EXECUTION

CREATE TABLE BATCH_JOB_EXECUTION ( JOB_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY , VERSION BIGINT , JOB_INSTANCE_ID BIGINT NOT NULL, CREATE_TIME DATETIME(6) NOT NULL, START_TIME DATETIME(6) DEFAULT NULL , END_TIME DATETIME(6) DEFAULT NULL , STATUS VARCHAR(10) , EXIT_CODE VARCHAR(2500) , EXIT_MESSAGE VARCHAR(2500) , LAST_UPDATED DATETIME(6), JOB_CONFIGURATION_LOCATION VARCHAR(2500) NULL, constraint JOB_INST_EXEC_FK foreign key (JOB_INSTANCE_ID) references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) ) ENGINE=InnoDB;
SQL
복사
JOB_EXECUTION_ID : jobExecution을 고유하게 식별할 수 있는 기본 키로 JOB_INSTANCE와 1:N
VERSION : 업데이트 될 때마다 1씩 증가하는 필드
JOB_INSTANCE_ID: JOB_INSTANCE의 키
CREATE_TIME: 실행(Execution)이 생성된 시점
START_TIME: 실행(Execution)이 시작된 시점
END_TIME : 실행(Execution)이 종료된 시점 ( job실행 도중 오류가 발생해 중단되면 값이 저장되지 않을 수도 있다.
STATUS: 실행 상태(BatchStatus)를 저장한다.(ex: COMPLETED, FAILED, STOPPED, STARTED, …)
EXIT_CODE: 실행 종료 코드(ExitStatus)를 저장한다.(ex. COMPLETED, FAILED, UNKNOWN, …)
EXIT_MESSAGE: Status가 실패일 경우 실패 원인을 저장한다.
LAST_UPDATED: 마지막 실행(Execution) 시점

3. BATCH_JOB_EXECUTION_PARAMS

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) ) ENGINE=InnoDB;
SQL
복사
JOB_EXECUTION_ID: JobExecution 식별 키로 JOB_EXECUTION과 1:N 관계
TYPE_CD: String, Long, Date, Double 타입 정보
KEY_NAME: 파라미터 키 값
STRING_VAL: 파라미터 문자 값
DATE_VAL: 파라미터 날짜 값
LONG_VAL: 파라미터 Long 값
DOUBLE_VAL: 파라미터 Double 값
IDENTIFYING: 식별 여부(true, false)

4. BATCH_JOB_EXECUTION_CONTEXT

CREATE TABLE BATCH_JOB_EXECUTION_CONTEXT ( JOB_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY, SHORT_CONTEXT VARCHAR(2500) NOT NULL, SERIALIZED_CONTEXT TEXT , constraint JOB_EXEC_CTX_FK foreign key (JOB_EXECUTION_ID) references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) ) ENGINE=InnoDB;
SQL
복사
JOB_EXECUTION_ID: JobExecution 식별키로 JOB_EXECUTION마다 각 생성된다.
SHORT_CONTEXT: JOB의 실행 상태 정보로 공유 데이터 등의 정보를 문자열로 저장한다.
SERIALIZED_CONTEXT: 직렬화(Serialized) 된 전체 컨텍스트를 저장한다.

5. BATCH_STEP_EXECUTION

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, START_TIME DATETIME(6) NOT NULL , END_TIME DATETIME(6) 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(2500) , EXIT_MESSAGE VARCHAR(2500) , LAST_UPDATED DATETIME(6), constraint JOB_EXEC_STEP_FK foreign key (JOB_EXECUTION_ID) references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) ) ENGINE=InnoDB;
SQL
복사
STEP_EXECUTION_ID: Step의 실행 정보 기본 키
VERSION: 업데이트 될 때마다 1씩 증가
STEP_NAME: Step을 구성할 때 부여하는 Step 이름
JOB_EXECUTION_ID: JobExecution 기본키로 JobExecution과 1:N관계
START_TIME: 실행(Execution)이 시작된 시점
END_TIME: 실행(Execution)이 종료된 시점으로 Job 실행 도중 오류로 인해 중단된 경우 값이 저장되지 않을 수 있다.
STATUS: 실행 상태(BatchStatus)를 저장한다.(ex: COMPLETED, FAILED, STOPPED, STARTED, …)
COMMIT_COUNT: 트랜잭션 당 커밋되는 수
READ_COUNT: 실행시점에 Read한 Item count
FILTER_COUNT: 실행도중 필터링 된 item수
WRITE_COUNT: 실행도중 저장되고 커밋된 Item 수
READ_SKIP_COUNT: 실행도중 Read가 건너뛰어진(Skip) Item 수
WRITE_SKIP_COUNT: 실행도중 Write가 건너뛰어진(Skip) Item 수
PROCESS_SKIP_COUNT: 실행도중 Process가 건너뛰어진(Skip)된 Item 수
ROLLBACK_COUNT: 실행도중 Rollback이 일어난 수
EXIT_CODE: 실행 종료 코드(ExitStatus)를 저장한다.
EXIT_MESSAGE: Status가 실패일 경우 실패 원인 내용을 저장한다.
LAST_UPDATED: 마지막 실행(Execution)시점

6. BATCH_STEP_EXECUTION

CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT ( STEP_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY, SHORT_CONTEXT VARCHAR(2500) NOT NULL, SERIALIZED_CONTEXT TEXT , constraint STEP_EXEC_CTX_FK foreign key (STEP_EXECUTION_ID) references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID) ) ENGINE=InnoDB;
SQL
복사
STEP_EXECUTION_ID: StepExecution 식별 키, STEP_EXECUTION 마다 각 생성된다.
SHORT_CONTEXT: STEP의 실행 상태 정보, 공유 데이터 등의 정보를 문자열로 저장한다.
SERIALIZED_CONTEXT: 직렬화(Serialized)된 전체 컨텍스트

다음 글

이전 글