2023. 2. 6. 18:52ㆍBackEnd(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 |