728x90
📌 들어가기 앞서

본 글은 향로 선생님의 3. Spring Batch 가이드 - 메타테이블엿보기 의 내용을 바탕으로 작성되었습니다.
내용을 효과적으로 읽기 위해서는 위 글을 우선적으로 읽어보시는 것을 권장드립니다.


본 글은 아래의 내용을 포함하고 있습니다.
• Spring Batch 메타데이터 스키마 설명


원본 글에 대한 인용 및 요약은 음영 처리된 형태로 표시됩니다.
글의 작성 방향은 이 글을 참고해주시면 감사하겠습니다.

관련 시리즈

1. Spring Batch 5 가이드 - 배치 어플리케이션이란?
2. Spring Batch 5 가이드 - Batch Job 실행해보기
3. Spring Batch 5 가이드 - 메타테이블엿보기
4. Spring Batch 5 가이드 - Spring Batch Job Flow
5. Spring Batch 5 가이드 - Spring Batch Scope & Job Parameter
6. Spring Batch 5 가이드 - Chunk 지향 처리
7. Spring Batch 5 가이드 - ItemReader
8. Spring Batch 5 가이드 - ItemWriter
9. Spring Batch 5 가이드 - ItemProcessor 

 

지난 글(2. Spring Batch 5 가이드 - Batch Job 실행해보기)의 말미에 Spring Batch의 메타데이터 스키마에 대해 간략히 소개를 했습니다.

 

이번 글에서는 각 메타 데이터의 역할이 무엇인지, 어떤 정보를 담고 있는지 정리해보겠습니다.

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

TL;DR

Spring Batch meta-data schema : https://docs.spring.io/spring-batch/reference/schema-appendix.html
  • BATCH_JOB_INSTANCE
    • 배치 Job의 생성 정보를 담는 테이블
  • BATCH_JOB_EXECUTION
    • 배치 Job의 개별 실행 정보(성공, 실패 등)를 담는 테이블
    • Job Instance(BATCH_JOB_INSTANCE) 하나에 여러 개의 Job Execution(BATCH_JOB_EXECUTION)이 생성
  • BATCH_JOB_EXECUTION_PARAM
    • 배치 Job에서 사용되는 파라미터 값들을 담는 테이블
    • 과거에는 타입 별로 파라미터를 담을 수 있는 컬럼이 존재했지만, 현재는 파라미터의 타입과 값을 지정하여 정보를 저장
  • BATCH_JOB_EXECUTION_CONTEXT
    • 배치 Job 실행 중에 사용된 정보에 대한 Context를 저장하기 위한 테이블
    • Job Execution 하나당 하나씩의 Job Execution Context를 갖고, 해당 Context 정보를 통해 동일한 Job Scope 내에서 데이터를 공유 할 수 있음
    • Context 데이터를 통해 오류가 발생한 이후 중단된 부분부터 시작할 수 있음
  • BATCH_STEP_EXECUTION
    • 배치 Step의 개별 실행 정보를 담는 테이블
  • BATCH_STEP_EXECUTIOIN_CONTEXT
    • 배치 Step 실행 중에 사용된 정보에 대한 Context를 저장하기 위한 테이블

 

 

3.1. BATCH_JOB_INSTANCE

3.1.1. BATCH_JOB_INSTANCE 테이블

BATCH_JOB_INSTANCE 테이블은 Job Parameter에 따라 생성되는 테이블입니다.

이 Job Parameter가 생소할텐데요. 간단하게 말씀드리면, Spring Batch가 실행될때 외부에서 받을 수 있는 파라미터입니다.

예를 들어, 특정 날짜를 Job Parameter로 넘기면 Spring Batch에서는 해당 날짜 데이터로 조회/가공/입력 등의 작업을 할 수 있습니다.

같은 Batch Job 이라도 Job Parameter가 다르면 Batch_JOB_INSTANCE에는 기록되며, Job Parameter가 같다면 기록되지 않습니다.

 

BATCH_JOB_INSTANCE 테이블은 배치 Job의 생성 정보를 담는 테이블입니다.

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 Job 고유 ID
VERSION 버전 정보 (update 될 때마다 1씩 증가)
JOB_NAME Job 빌드 시 생성하는 이름
JOB_KEY 동일한 Job의 개별 인스턴스를 구분하기 위한 고유 값

동일한 JOB_NAEM을 갖는 Job Instance는 서로 다른 Job Parameters에 의해 고유한 JOB_KEY를 갖음

 

 

3.2. BATCH_JOB_EXECUTION

3.2.1. BATCH_JOB_EXECUTION 테이블

BATCH_JOB_EXECUTION 테이블은 배치 Job의 개별 실행 정보를 담는 테이블입니다.

JOB_EXECUTION와 JOB_INSTANCE는 부모-자식 관계입니다.
JOB_EXECUTION은 자신의 부모 JOB_INSTACNE가 성공/실패했던 모든 내역을 갖고 있습니다. 
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 Job 실행의 고유 ID
VERSION 버전 정보 (update 될 때마다 1씩 증가)
JOB_INSTANCE_ID Job 고유 ID
CREATE_TIME Job 실행 생성 일시
START_TIME Job 실행 생성 일시
END_TIME Job 실행 종료 일시
STATUS 실행 상태 (BatchStatus)
EXIT_CODE 종료 코드
EXIT_MESSAGE Job 수행 종료(실패) 시 메세지
LAST_UPDATED 최종 업데이트 일시

 

 

3.2.2. BATCH_JOB_EXECUTION_PARAM 테이블

BATCH_JOB_EXECUTION_PARAM 테이블은 배치 Job에서 사용되는 파라미터 값들을 담는 테이블입니다.

BATCH_JOB_EXECUTION_PARAM 3.x.x vs 5.1.2

이전에는 String, Date, Long, Double 네가지 타입의 값만 사용이 가능했고, 해당 컬럼에 값을 저장했다면,
현재는 파라미터의 타입과 값을 지정하여 정보를 저장합니다. 

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 Job 실행의 고유 ID
PARAMETER_NAME 파라미터명
PARAETER_TYPE 파라미터 타입
PARAMETER_VALUE 파라미터 값
IDENTIFYING Job Parameter가 Job Instance 생성 시 관여했는지 여부를 나타내는 플래그

 

 

3.2.3. BATCH_JOB_EXECUTION_CONTEXT 테이블

BATCH_JOB_EXECUTION_CONTEXT 테이블은 배치 Job 실행 중에 사용된 정보에 대한 Context를 저장하기 위한 테이블입니다.

  • Job Execution 하나당 하나씩의 Job Execution Context를 갖고, 해당 Context 정보를 통해 동일한 Job Scope 내에서 데이터를 공유 할 수 있습니다.
  • Context 데이터를 통해 오류가 발생한 이후 중단된 부분부터 시작할 수 있습니다.
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 Job 실행의 고유 ID
SHORT_CONTEXT String 형태의 Context
SERIALIZED_CONTEXT Serializied 된 전체 Context

 

 

3.3. BATCH_STEP_EXECUTION

3.3.1. BATCH_STEP_EXECUTION 테이블

BATCH_STEP_EXECUTION 테이블은 배치 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 실행의 고유 ID
VERSION 버전 정보 (update 될 때마다 1씩 증가)
STEP_NAME Step 이름
JOB_EXECUTION_ID Job 실행의 고유 ID
CREATE_TIME Step 실행 생성 일시
START_TIME Step 실행 생성 일시
END_TIME Step 실행 종료 일시
STATUS 실행 상태 (BatchStatus)
COMMIT_COUNT 트랜잭션당 커밋 수
READ_COUNT 조회한 item 수
FILTER_COUNT 필터링된 item 수
WRITE_COUNT 저장된 item 수
READ_SKIP_COUNT 조회 skip한 item 수
WRITE_SKIP_COUNT 저장 skip한 item 수
PROCESS_SKIP_COUNT 가공(Process) skip된 item 수
ROLLBACK_COUNT 롤백 발생 횟수
EXIT_CODE 종료 코드
EXIT_MESSAGE Step 수행 종료(실패) 시 메세지
LAST_UPDATED 최종 업데이트 일시

 

 

3.3.2. BATCH_STEP_EXECUTION_CONTEXT 테이블

BATCH_STEP_EXECUTIOIN_CONTEXT 테이블은 배치 Step 실행 중에 사용된 정보에 대한 Context를 저장하기 위한 테이블입니다.

  • BATCH_JOB_EXECUTION_CONTEXT의 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 Step 실행의 고유 ID
SHORT_CONTEXT String 형태의 Context
SERIALIZED_CONTEXT Serializied 된 전체 Context

 

 

3.4. JOB, JOB_INSTANCE, JOB_EXECUTION

위의 메타데이터 스키마와 Spring Batch에서 프로세스를 연관지어서 정리해보면 아래와 같습니다.

  1. Spring Batch를 통해 Job을 정의(e.g. SimpleJob)한다.
  2. Job 실행 시 JobParameter를 통해 특정 일시 또는 조건을 설정한다. (= JobParameter에 따른 JobInstance 생성)
  3. 특정 조건에 의해 생성된 JobInstance가 실행될 때마다 개별 실행에 따른 JobExecution 정보가 저장된다.
728x90

+ Recent posts