2. 배치 메타 데이터 분석

2023. 2. 6. 18:52BackEnd(Java)/Spring Batch

✅ 아래 내용들에 대해서 알아보자

- 배치 메타 데이터란
- Job 관련 메타 테이블 
- Step 관련 메타 테이블

 

배치 메타 데이터란?

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

 

스프링 배치는 DB별 스키마를 제공한다.(Drop, Create DDL 제공)

위치는 인테리제이 기준으로 External Library > org/springframwork.batch.core에 포함되어 있다(아래 그림 참고!)

 

스키마 제공

 

 

스키마를 수동/자동으로 생성하는 설정도 있다.(우측 그림 참조)

 

수동 생성 방식

 : 쿼리 복사 후 직접 실행

자동 생성 방식

: spring.batch.jdbc.initialize-schema 설정

 

옵션값

 > ALWAYS 

    - 스크립트 항상 실행

    - RDBMS 설정이 되어 있을 경우 내장 DB 보다 우선적 실행

 

 > EMBEDDED : 내장 DB일 떄만 실행된다, default

 

 > NEVER 

    - 스크립트 항상 실행 안함

    - 운영에서는 수동으로 스크립트 생성 후 설정하는 것 권장

 

 

 

전체적인 스프링 배치 메타 테이블은 아래 그림과 같다.

내가 생각했을 때 배치에서 가장 핵심적인 내용이라고 생각한다. 왜냐하면, 전체 스키마를 파악해야 배치가 어떤 방식으로 작동하는지 알 수 있고 나중에 트러블 슈팅도 가능하다고 생각함!!

 

 

스프링 배치 메타 테이블

 

각 테이블 하나씩 확인해 보록 하자. 😀😀

 

Job 관련 테이블

  • BATCH_JOB_INSTANCE
  • BATCH_JOB_EXECUTION
  • BATCH_JOB_EXECUTION_PARAMS
  • BATCH_JOB_EXECUTION_CONTEXT

 

BATCH_JOB_INSTANCE

 - Job이 실행될 때 jobinstance 정보가 저장되며 job_name과 job_key를 키로 하여 하나의 데어터가 저장된다

 - 동일한 job_name과 job_key로 중복 저장될 수 없다

 

 

JOB_INSTANCE_ID PK
VERSION 업데이트 될 떄 마다 1씩 증가
JOB_NAME Job을 구성할 때 부여하는 Job의 이름
JOB_KEY job_name과 jobParameter를 합쳐 해싱한 값을 저장

 

 

 

 

BATCH_JOB_EXECUTION

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

 

 

JOB_EXECUTUON_ID PK
VERSION 업데이트 될 떄 마다 1씩 증가
JOB_INSTANCE_ID BATCH_JOB_INSTANCE 테이블 PK값(FK 역할)
CREATE_TIME 실행이 생성된 시점 기록
START_TIME 실행이 시작된 시점 기록
END_TIME 실행이 종료된 시점을 기록하며 Job 실행 도중 오류가 발생해서 중단될 경우 값이 저장되지 않을 수 있음
STATUS 실행 상태(BatchStatus) 저장(COMPLETED, FAILED, STOPPED...)
EXIT_CODE 실행 종료코드(ExitStatus)를 저장(COMPLETED, FAILED...)
EXIT_MESSAGE Status가 실패일 경우 실패 원인 등의 내용 저장
LAST_UPDATED 마지막 실행 시점 기록

 

 

 

BATCH_JOB_EXECUTION_PARAMS

 - Job과 함께 실행되는 JobParameter 정보를 저장

 

 

 

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)

 

 

 

BATCH_JOB_EXECUTION_CONTEXT

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

 - Step 간 서로 공유 가능함

 

 

JOB_EXECUTION_ID JobExecution 식별 키, JOB_EXECUTION 마다 각 생성
SHORT_CONTEXT JOB의 실행 상태정보, 공유데이터 등의 정보를 문자열로 저장
SERIALIZED_CONTEXT 직렬화(serialized)된 전체 컨텍스트

 

 

 

Step 관련 테이블

  • BATCH_STEP_EXECUTION
  • BATCH_STEP_EXECUTION_CONTEXT

 

BATCH_STEP_EXECUTION

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

 

 

 

STEP_EXECUTION_ID Step 실행정보 식별키
VERSION 업데이트 될 떄 마다 1씩 증가
STEP_NAME Step을 구성할 때 부여하는 Step의 이름
JOB_EXECUTION_ID JOB_EXECUTION Table PK, 1:N 관계
START_TIME 실행 시작 시간 
END_TIME 실행 종료 시간, Job 실행 도중 오류 발생 시 값이 저장되지 않을 수 있음
STATUS 실행 상태(BatchStatus) 저장(COMPLETED, FAILED, STOPPED...)
COMMIT_COUNT 트랜잭션 당 커밋되는 수 
READ_COUNT 실행시점에 Read한 Item 수
FILTER_COUNT 실행도중 필터링된 Item 수
WRITE_COUNT 실행도중 저장되고 커밋된 Item 수
READ_SKIP_COUNT 실행도중 Read가 Skip된 Item 수
WRTIE_SKIP_COUNT 실행도중 Write가 Skip된 Item 수
PROCESS_SKIP_COUNT 실행도중 Process가 Skip된 Item 수
ROLLBACK_COUNT 실행도중 rollback이 일어난 수
EXIT_CODE 실행 종료코드(ExitStatus)를 저장(COMPLETED, FAILED...)
EXIT_MESSAGE Status가 실패일 경우 실패 원인 등의 내용을 저장
LAST_UPDATED 마지막 실행 시간

 

 

 

BATCH_STEP_EXECUTION_CONTEXT

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

 - Step별로 저장되며 Step 간 서로 공유할 수 없음

 

 

 

STEP_EXECUTION_ID StepExecution 식별 키, STEP_EXECUTION 마다 생성
SHORT_CONTEXT STEP의 실행 상태정보, 공유데이터등의 정보를 문자열로 저장
SERIALIZED_CONTEXT 직렬화된 전체 컨텍스트

 

 


이글은 인프런 정수원님의 ‘스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch’ 강의 내용을 바탕으로 정리 및 복습하기 위해 작성하였습니다.(링크)

 

 

반응형

'BackEnd(Java) > Spring Batch' 카테고리의 다른 글

3. Job  (0) 2023.02.14
배치 실행 시 잡파라미터 null 바인딩 현상  (0) 2023.02.08
1.스프링 배치 소개 및 프로젝트 구성  (0) 2022.09.27