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의 메타데이터 스키마에 대해 간략히 소개를 했습니다.
이번 글에서는 각 메타 데이터의 역할이 무엇인지, 어떤 정보를 담고 있는지 정리해보겠습니다.
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에서 사용되는 파라미터 값들을 담는 테이블입니다.
이전에는 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에서 프로세스를 연관지어서 정리해보면 아래와 같습니다.
- Spring Batch를 통해 Job을 정의(e.g. SimpleJob)한다.
- Job 실행 시 JobParameter를 통해 특정 일시 또는 조건을 설정한다. (= JobParameter에 따른 JobInstance 생성)
- 특정 조건에 의해 생성된 JobInstance가 실행될 때마다 개별 실행에 따른 JobExecution 정보가 저장된다.
728x90
'Spring Batch > Spring Batch 가이드' 카테고리의 다른 글
[Kotlin] 4. Spring Batch 5 가이드 - Spring Batch Job Flow (0) | 2024.06.23 |
---|---|
[Kotlin] 2. Spring Batch 5 가이드 - Batch Job 실행해보기 (0) | 2024.06.10 |
[Kotlin] 1. Spring Batch 5 가이드 - 배치 어플리케이션이란? (0) | 2024.06.06 |
[Kotlin] 0. Spring Batch 5 가이드에 들어가기 앞서 (0) | 2024.06.06 |