BackEnd/Spring Batch

[Spring Batch 정리하기] 2. DB Schema

Wonol 2024. 7. 22. 09:00
반응형

1. Meta Schema

- Spring Batch 의 실행 및 관리를 위한 목적으로 여러 도메인(Job, Step, JobParameters 등)들에 대한 정보를 저장, 업데이트, 조회 등의 작업을 할 수 있는 스키마 제공

- 과거 및 현재의 Batch 실행에 대한 정보(성공, 실패 여부)를 관리함으로서 배치 운영 및 장애와 관련된 대처 가능

- DB 와 연동할 경우 필수적으로 메타 테이블이 생성되어야 함(커스텀마이징을 통해 테이블 없이 수행은 가능)

- 위 이미지와 같이 6개의 Meta Table 과 3개의 Sequence Table 이 존재

2. Meta Schema DB 생성

- spring-batch-core 라이브러리 내부에 schema-*.sql 파일의 데이터베이스 종류별 메타 데이터 스키마가 존재

  • 수동 생성
    - 쿼리 복사 후 직접 수행
  • 자동 생성
    - application.yaml 혹은 application.properties 에 spring.bathc.jdbc.initalize-schema 설정
    - ALWAYS : 스크립트 항상 실행, RDBMS 를 내장 DB 보다 우선 수행
    - EMBEDDED : 내장 DB 일때만 생성
    - NEVER : 스크립트 항상 실행 안함

- 간단하게 schema-mysql.sql 을 확인해 보면 아래와 같다.(데이터베이스 종류에 따라 쿼리는 다르다)

3. Meta Table 정보

3-1) BATCH_JOB_INSTANCE

- Job 이 실행될 때 생성되는 JobInstance 에 관한 정보를 저장.

- 전체 계층 구조의 최상위 역할.

컬럼 설명
JOB_INSTANCE_ID  Primary Key
VERSION  해당 Row 가 Update 될 때마다 1 증가
JOB_NAME  jobBuilderFactory.get 에 설정한 Batch Job Name
JOB_KEY  동일한 작업에 대한 식별하는 키 값

3-2) BATCH_JOB_EXECUTION

- JobExecution 에 관련된 모든 정보를 저장.

- JobInstance 가 실행될 때마다 시작시간, 종료시간, 종료 코드 등을 가짐.

컬럼 설명
JOB_EXECUTION_ID  Primary Key
VERSION  해당 Row 가 Update 될 때마다 1 증가
JOB_INSTANCE_ID  BATCH_JOB_INSTANCE 테이블의 Foreign Key
CREATE_TIME  실행이 생성된 타임스탬프
START_TIME  실행이 시작된 타임스탬프
END_TIME  성공, 실패 상관 없이 실행이 완료된 타임스탬프
 이 컬럼이 빈 값이라면 어떤 유형의 오류가 있었고, 프레임워크가 실패하기 전 마지막   저장을 수행할 수 없었음을 나타냄
STATUS  실행 상태
EXIT_CODE  실행 종료 코드
EXIT_MESSAGE  작업이 종료에 대한 메시지
LAST_UPDATE  실행이 지속된 마지막 타임스탬프

3-3) BATCH_JOB_EXECUTION_PARAMS

- Job 을 실행시킬 때 사용했던 JobParameters 에 대한 정보를 저장.
- String, Date, Long, Double 타입의 데이터만 저장 가능.

컬럼 설명
JOB_EXECUTION_ID  BATCH_JOB_EXECUTION 테이블에 대한 외래키(Foeign Key)
TYPE_CD  저장된 값의 데이터 유형, NOT NULL
KEY_NAME  저장된 값의 이름, NOT NULL
STRING_VAL String 타입 값
DATE_VAL Date 타입 값
LONG_VAL Long 타입 값
DOUBLE_VAL Double 타입 값
IDENTIFYING 매개변수가 관련 ID 에 기여했는지 여부를 나타내는 플래그

3-4) BATCH_JOB_EXECUTION_CONTEXT

- JobExecution 의 ExecutionContext 정보가 보관.

- ExecutionContext 데이터는 일반적으로 JobInstance 가 실패 시 중단된 위치에서 재시작할 수 있는 정보를 저장.

- Job 실행동안 여러 상태정보, 공유 데이터를 직렬화(Json)하여 저장

- Step 간 데이터 공유가 가능

컬럼 설명
JOB_EXECUTION_ID  BATCH_JOB_EXECUTION 테이블에 대한 Foreign Key
SHORT_CONTEXT  SERIALIZED_CONTEXT
SERIALIZED_CONTEXT  직렬화 된 Execution Context

3-5) BATCH_STEP_EXECUTION

- StepExecution 에 대한 정보를 저장.

- STEP_EXECUTION 정보인 읽은 수, 커밋 수, 스킵 수 등 다양한 정보를 추가로 보관. -> 스프링 배치 무한 수행 오류를 찾게 된 테이블

컬럼 설명
STEP_EXECUTION_ID  Primary Key
VERSION  해당 Row 가 Update 될 때마다 1 증가
STEP_NAME  stepBuilderFactory.get 에 설정한 Step Name
JOB_EXECUTION_ID  BATCH_JOB_EXECTUION 테이블의 Foreign Key
START_TIME  실행이 사작된 타임스탬프
END_TIME  성공, 실패 상관 없이 실행이 완료된 타임스탬프
 이 컬럼이 빈 값이라면 어떤 유형의 오류가 있었고, 프레임워크가 실패하기 전 마지막   저장을 수행할 수 없었음을 나타냄
STATUS  실행 상태
COMMIT_COUNT  실행 중에 단계가 트랜잭션을 커밋한 횟수
READ_COUNT  실행 중에 읽은 항목 수
FILTER_COUNT  실행 중에 필터링 된 항목 수
WRITE_COUNT  실행 중에 작성 된 커밋된 항목 수
READ_SKIP_COUNT  실행 중에 읽기에서 건너뛴 항목 수
WRITE_SKIP_COUNT  실행 중에 쓰기에서 건너뛴 항목 수
PROCESS_SKIP_COUNT  실행 중에 처리에서 건너뛴 항목 수
ROLLBACK_COUNT  실행 중에 롤백 된 항목 수
EXIT_CODE  실행 종료 코드
EXIT_MESSAGE  작업이 종료에 대한 메시지
LAST_UPDATE  실행이 지속된 마지막 타임스탬프

3-6) BATCH_STEP_EXECUTION_CONTEXT

- StepExecution 의 ExecutionContext 정보가 보관.

- ExecutionContext 데이터는 일반적으로 JobInstance 가 실패 시 중단된 위치에서 재시작할 수 있는 정보를 저장.

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

- Step 별로 저장되며 Step 간 데이터를 공유할 수 없음

컬럼 설명
STEP_EXECUTION_ID  BATCH_STEP_EXECUTION 테이블에 대한 Foreign Key
SHORT_CONTEXT  SERIALIZED_CONTEXT
SERIALIZED_CONTEXT  직렬화 된 Execution Context


참고

- https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B0%B0%EC%B9%98/dashboard

반응형