개발놀이터

스프링 배치 메타 데이터 본문

Spring/Spring Batch

스프링 배치 메타 데이터

마늘냄새폴폴 2022. 9. 18. 21:09

본 포스팅은 인프런의 정수원님의 스프링 배치 강의를 듣고 정리한 포스팅입니다. 더 자세한 내용은 강의를 참고해주세요. 

 

스프링 배치는 실행 및 관리를 위한 목적으로 여러 도메인(Job, Step, JobParameter 등등)의 정보들을 저장, 업데이트, 조회할 수 있는 스키마를 제공합니다. 

 

과거, 현재의 실행에 대한 세세한 정보, 실행에 대한 성공과 실패 여부 등을 일목요연하게 관리함으로써 배치운용에 있어 리스크 발생시 빠른 대치가 가능합니다. 

 

DB와 연동할 경우 필수적으로 메타 테이블이 생성되어야 합니다. 

 

 

DB 스키마 제공

파일 위치는 /org/springframework/batch/core/schema-*.sql에 존재하고 DB 유형별로 제공합니다. 

 

이때 스키마 생성에 대한 설정을 할 수 있는데 application 파일에 spring.batch.jdbc.initialize-schema 설정을 세 단계로 나눠 처리할 수 있습니다. 

 

  • ALWAYS :   스크립트를 항상 실행합니다. RDBMS 설정이 되어 있을 경우 내장 DB 보다 우선적으로 실행됩니다. 
  • EMBEDDED : 내장 DB일 때만 실행되며 스키마가 자동 생성됩니다. EMBEDDED는 기본값입니다. 
  • NEVER : 스크립트가 항상 실행되지 않고 내장 DB일 경우 스크립트가 생성이 안되기 때문에 오류가 발생합니다. 운영에서 수동으로 스크립트 생성 후 설정하는 것을 권장하는 옵션입니다. 

 

메타 테이블

 

출처 : https://docs.spring.io/spring-batch/docs/3.0.x/reference/html/metaDataSchema.html

메타 테이블은 크게 나누면 두개로 나눌 수 있습니다. 바로 Job과 관련된 테이블과 Step과 관련된 테이블 이렇게 두개로 나눌 수 있습니다. 

 

먼저 Job과 관련된 테이블부터 설명하겠습니다. 

  • BATCH_JOB_INSTANCE : Job이 실행될 때 JobInstance 정보가 저장되며 job_name과 job_key를 키로 하여 하나의 데이터가 저장됩니다.  이때 동일한 job_name과 job_key로 중복 저장될 수 없습니다. job_key는 JobParameter를 해시값으로 하는 값을 저장합니다. 즉, 동일한 해시값(JobParamter)은 중복저장되지 않으므로 이 말은 곧 동일한 해시값인 경우 JobInstance가 재시작한다는 의미로 받아들일 수 있습니다. 
  • BATCH_JOB_EXECUTION : Job의 실행정보가 저장되며 Job 생성, 시작, 종료 시간, 실행 상태, 메시지 등을 관리하는 테이블입니다. 
  • BATCH_JOB_EXECUTION_PARAMS : Job과 함께 실행되는 JobParameter의 정보를 저장하는 테이블입니다. 
  • BATCH_JOB_EXECUTION_CONTEXT : Job의 실행동안 여러가지 상태정보, 공유 데이터를 직렬화 (json 형식) 하여 저장합니다. 또한 해당 테이블은 Step 간 서로 공유가 가능하다는 특징이 있습니다. 

 

다음은 Step과 관련된 테이블입니다.

  • BATCH_STEP_EXECUTION : Step의 실행정보가 저장되며 생성, 시작, 종료 시간, 실행상태, 메시지 등을 관리합니다. 
  • BATCH_STEP_EXECUTION_CONTEXT : Step의 실행동안 여러가지 상태정보, 공유 데이터를 직렬화 (json 형식) 하여 저장합니다. 또한 해당 테이블은 Step 별로 저장되며 Step간 서로 공유할 수 없다는 특징을 가지고 있습니다. 

 

이제 이 테이블들의 속성에 대해 하나씩 살펴보도록 하겠습니다. 

 

BATCH_JOB_INSTANCE

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

 

BATCH_JOB_EXECUTION

  • JOB_EXECUTION_ID : JobExecution을 고유하게 식별할 수 있는 기본 키, JOB_INSTANCE와 일대다의 관계입니다.
  • VERSION : 업데이트 될 때마다 1씩 증가하는 값
  • JOB_INSTANCE_ID : JOB_INSTANCE의 키 저장
  • CREATE_TIME : 실행(Execution)이 생성된 시점을 TimeStamp 형식으로 기록
  • START_TIME : 실행(Execution)이 시작된 시점을 TimeStamp 형식으로 기록
  • END_TIME : 실행이 종료된 시점을 TimeStamp로 기록하며 Job 실행 도중 오류가 발생해서 Job이 중단된 경우 값이 저장되지 않을 수 있다는 특징이 있습니다. 
  • STATUS : 실행 상태(BatchStatus)를 저장 (COMPLETED, FAILED, STOPPED 등등)
  • EXIT_CODE : 실행 종료 코드 (ExitStatus)를 저장 (COMPLETED, FAILED 등등)
  • EXIT_MESSAGE : Status가 실패일 경우 실패 원인 등의 내용을 저장
  • LAST_UPDATED : 마지막 실행 시점을 TimeStamp 형식으로 기록

 

BATCH_JOB_EXECUTION_PARAMS

  • JOB_EXECUTION_ID : JobExecution 식별 키, JOB_EXECUTION과는 일대다 관계
  • TYPE_CD : STRING, LONG, DATE, DUBLE 타입 정보
  • KEY_NAME : 파라미터 키 값
  • STRING_VAL : 파라미ㅏ터 문자 값
  • DATE_VAL : 파라미터 날짜 값
  • LONG_VAL : 파라미터 Long 값
  • DOUBLE_VAL : 파라미터 Double 값
  • IDENTIFYING : 식별 여부 (TRUE, FALSE)

 

BATCH_JOB_EXECUTION_CONTEXT

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

 

BATCH_STEP_EXECUTION

  • STEP_EXECUTION_ID : Step의 실행정보를 고유하게 식별할 수 있는 기본 키
  • VERSION : 업데이트 될 때마다 1씩 증가하는 값
  • STEP_NAME : Step.을 구성할 때 부여하는 Step 이름
  • JOB_EXECUTION_ID : JobExecution 기본 키, JobExecution과는 일대다 관계
  • START_TIME : 실행이 시작된 시점을 TimeStamp 형식으로 기록
  • END_TIME : 실행이 종료된 시점을 TimeStamp로 기록하며 Job실행 도중 오류가 발생해서 Job이 중단된 경우 값이 저장되지 않을 수 있다는 특징이 있습니다. 
  • STATUS : 실행 상태 (BatchStatus)를 저장 (COMPLETED, FAILED, STOPPED 등등)
  • COMMIT_COUNT : 트랜잭션 당 커밋되는 수를 기록
  • READ_COUNT : 실행시점에 Read한 Item의 수를 기록
  • 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 : 실행 종료 코드를 저장
  • EXIT_MESSAGE : Status가 실패이ㅏㄹ 경우 실패 원인 등의 내용을 저장
  • LAST_UPDATED : 마지막 실행시점을 TimeStamp 형식으로 기록

 

BATCH_STEP_EXECUTION_CONTEXT

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

 

이렇게 메타테이블에 대해서 알아봤습니다. 긴 글 읽어주셔서 감사합니다.