프레임워크(Framework)/Spring

[Spring Batch] 스프링 배치 DB 스키마 이해하기 - Spring boot 2.x

잇트루 2023. 6. 20. 01:04
반응형
본 내용은 온라인 강의 사이트 인프런의 정수원 님의 강의 내용이 포함되어 있습니다.
스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch
 

스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch - 인프런 | 강의

초급에서 중~고급에 이르기까지 스프링 배치의 기본 개념부터 API 사용법과 내부 아키텍처 구조를 심도있게 다룹니다. 그리고 스프링 배치 각 기능의 흐름과 원리를 학습하게 되고 이를 바탕으

www.inflearn.com

 

 

스프링 배치 DB 스키마

 

 

Job 관련 테이블

batch_job_instance

Job이 실행될 때 JobInstance 정보가 저당되며 job_name과 job_key를 키로 하여 하나의 데이터가 저장된다. 동일한 job_name과 job_key로 중복 저장될 수 없다.

CREATE TABLE BATCH_JOB_INSTANCE  (
    JOB_INSTANCE_ID BIGINT  NOT NULL PRIMARY KEY ,
    VERSION BIGINT ,
    JOB_NAME VARCHAR(100) NOT NULL,
    JOB_KEY VARCHAR(32) NOT NULL,
    constraint JOB_INST_UN unique (JOB_NAME, JOB_KEY)
) ENGINE=InnoDB;
  • JOB_INSTANCE_ID : Job 인스턴스를 식별할 수 있는 기본 키(id)
  • VERSION : 업데이트될 때마다 1씩 증가
  • JOB_NAME : Job을 구성할 때 부여하는 Job 이름
  • JOB_KEY : job_name과 jobParameter를 합쳐 해싱한 값을 저장

 

 

batch_job_execution

job의 실행정보가 저장되며 Job의 생성, 시작, 종료 시간, 실행 상태, 메시지 등을 관리한다. batch_job_instance 테이블과 일대다 관계다.

CREATE TABLE BATCH_JOB_EXECUTION  (
    JOB_EXECUTION_ID BIGINT  NOT NULL PRIMARY KEY ,
    VERSION BIGINT  ,
    JOB_INSTANCE_ID BIGINT NOT NULL,
    CREATE_TIME DATETIME(6) NOT NULL,
    START_TIME DATETIME(6) DEFAULT NULL ,
    END_TIME DATETIME(6) DEFAULT NULL ,
    STATUS VARCHAR(10) ,
    EXIT_CODE VARCHAR(2500) ,
    EXIT_MESSAGE VARCHAR(2500) ,
    LAST_UPDATED DATETIME(6),
    JOB_CONFIGURATION_LOCATION VARCHAR(2500) NULL,
    constraint JOB_INST_EXEC_FK foreign key (JOB_INSTANCE_ID)
    references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID)
) ENGINE=InnoDB;
  • JOB_EXECUTION_ID : JobExceution을 고유하게 식별할 수 있는 기본 키(id)
  • VERSION : 업데이트될 때마다 1씩 증가
  • JOB_INSTANCE_ID : job_instance의 키 값을 저장
  • CREATE_TIME : JobExcution이 생성된 시점을 TimeStamp 형식으로 저장
  • START_TIME : JobExcution이 시작된 시점을 TimeStamp 형식으로 저장
  • END_TIME : JobExcution이 종료된 시점을 TimeStamp 형식으로 저장, Job의 실행 도중 예외 발생 시에는 저장하지 않음
  • STATUS : JobExcution의 실행 상태를 저장(COMPLETED, FAILED, STOPPED, …)
  • EXIT_CODE : JobExcution의 실행 종료코드를 저장(COMPLETED, FAILED, …)
  • EXIT_MESSAGE : JobExcution의 종료 메시지를 저장, Status가 FAILED일 경우 실패에 대한 원인 등의 내용을 저장
  • LAST_UPDATED : JobExcution의 마지막 실행 시점을 TimeStamp 형식으로 저장

 

 

batch_job_execution_params

Job과 함께 실행되는 JobParameter 정보를 저장한다. batch_job_execution 테이블과 일대다 관계다.

CREATE TABLE BATCH_JOB_EXECUTION_PARAMS  (
    JOB_EXECUTION_ID BIGINT NOT NULL ,
    TYPE_CD VARCHAR(6) NOT NULL ,
    KEY_NAME VARCHAR(100) NOT NULL ,
    STRING_VAL VARCHAR(250) ,
    DATE_VAL DATETIME(6) DEFAULT NULL ,
    LONG_VAL BIGINT ,
    DOUBLE_VAL DOUBLE PRECISION ,
    IDENTIFYING CHAR(1) NOT NULL ,
    constraint JOB_EXEC_PARAMS_FK foreign key (JOB_EXECUTION_ID)
    references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID)
) ENGINE=InnoDB;
  • JOB_EXECUTION_ID : 실행된 JobExcution의 식별 키(id)
  • TYPE_CD : JobPameter의 데이터 타입 코드(STRING, LONG, DATE, DOUBLE)
  • KEY_NAME : JobPameter의 이름
  • STRING_VAL : JobPameter의 String 값
  • DATE_VAL : JobPameter의 Date 값
  • LONG_VAL : JobPameter의 Long 값
  • DOUBLE_VAL : JobPameter의 Double 값
  • IDENTIFYING : 식별여부(TRUE, FALSE)

 

 

batch_job_execution_context

Job의 실행동안 여러 가지 상태정보, 공유 데이터를 Josn 형식으로 직렬화하여 저장한다. Step 간의 서로 공유가 가능하다.

CREATE TABLE BATCH_JOB_EXECUTION_CONTEXT  (
    JOB_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY,
    SHORT_CONTEXT VARCHAR(2500) NOT NULL,
    SERIALIZED_CONTEXT TEXT ,
    constraint JOB_EXEC_CTX_FK foreign key (JOB_EXECUTION_ID)
    references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID)
) ENGINE=InnoDB;
  • JOB_EXECUTION_ID : 실행된 JobExecution의 키 값(id), 각 JobExecution 마다 생성
  • SHORT_CONTEXT : 문자열로 저장된 JobExecutionContext 정보(Job의 실행 상태, 공유 데이터 등)
  • SERIALIZED_CONTEXT : 직렬화하여 저장된 JobExecutionContext 정보

 

 

Step 관련 테이블

batch_step_execution

Step의 실행정보가 저장되며 생성, 시작, 종료 시간, 실행 상태, 메시지 등을 관리한다. batch_job_excution 테이블과 일대다 관계다.

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,
    START_TIME DATETIME(6) NOT NULL ,
    END_TIME DATETIME(6) 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(2500) ,
    EXIT_MESSAGE VARCHAR(2500) ,
    LAST_UPDATED DATETIME(6),
    constraint JOB_EXEC_STEP_FK foreign key (JOB_EXECUTION_ID)
    references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID)
) ENGINE=InnoDB;
  • STEP_EXECUTION_ID : 실행된 StepExecution을 식별할 수 있는 기본 키(id)
  • VERSION : 업데이트될 때마다 1씩 증가
  • STEP_NAME : 실행된 StepExecution의 Step 이름
  • JOB_EXECUTION_ID : 실행된 JobExecution의 기본키(id)
  • START_TIME : StepExecution이 시작된 시점을 TimeStamp 형식으로 저장
  • END_TIME : StepExecution이 종료된 시점을 TimeStamp 형식으로 저장, StepExcution 실행 중 예외가 발생하면 저장하지 않음
  • STATUS : StepExecution의 상태 (COMPLETED, FAILED, STOPPED, …)
  • COMMIT_COUNT : StepExecution 실행 중 트랜잭션 당 커밋되는 수 저장
  • READ_COUNT : StepExecution 실행 중 read한 item 수 저장
  • FILTER_COUNT : StepExecution 실행 중 필터링된 item 수 저장
  • WRITE_COUNT : StepExecution 실행 중 저장되고 커밋된 item 수 저장
  • READ_SKIP_COUNT : StepExecution 실행 중 read가 skip된 item 수 저장
  • WRITE_SKIP_COUNT : StepExecution 실행 중 write가 skip된 item 수 저장
  • PROCESS_SKIP_COUNT : StepExecution 실행 중 Process가 skip된 item 수 저장
  • ROLLBACK_COUNT : StepExecution 실행 중 롤백(rollback)이 일어난 수 저장
  • EXIT_CODE : StepExecution의 종료 코드 (COMPLETED, FAILED, …)
  • EXIT_MESSAGE : StepExecution의 종료 메시지를 저장, Status가 FAILED일 경우 실패에 대한 원인 등의 내용을 저장
  • LAST_UPDATED : StepExecution의 마지막 실행 시점을 TimeStamp 형식으로 저장

 

 

batch_step_execution_context

Step의 실행동안 여러가지 상태 정보, 공유 데이터를 Josn 형식으로 직렬화하여 저장한다. Step 별로 저장되며 Step 간의 서로 공유할 수 없다.

CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT  (
    STEP_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY,
    SHORT_CONTEXT VARCHAR(2500) NOT NULL,
    SERIALIZED_CONTEXT TEXT ,
    constraint STEP_EXEC_CTX_FK foreign key (STEP_EXECUTION_ID)
    references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID)
) ENGINE=InnoDB;
  • STEP_EXECUTION_ID : 실행된 StepExecution의 키 값(id), 각 StepExecution 마다 생성
  • SHORT_CONTEXT : 문자열로 저장된 StepExecutionContext 정보(Step의 실행 상태, 공유 데이터 등)
  • SERIALIZED_CONTEXT : 직렬화하여 저장된 StepExecutionContext 정보
반응형