Lined Notebook

Spring Batch Job

by HeshAlgo

스프링 배치를 시작하기 위해서 Job, Step, tasklet 등 기본적인 용어가 무엇을 의미하는 것인지 알아야 할 필요가 있는데 해당 게시물에서는 Job에 대해서 알아보겠습니다.

 

1. Job

Job은 배치의 전반적인 프로세스를 관리하는 엔티티입니다. Job은 아래와 같은 계층 구조를 가지고 있으며 가장 최상위 계층에 존재합니다. Job Configuration을 통해 생성되는 객체 단위로서 배치작업을 어떻게 구성하고 실행할 것인지 전체적으로 설정하고 명세해놓은 객체를 말합니다.

2. JobInstance

Job이 실행될 때 생성되는 Job의 논리적 실행 단위 객체로서 고유하게 식별 가능한 작업 실행을 나타냅니다.

Job의 설정과 구성은 동일하지만 Job이 실행되는 시점에 처리하는 내용은 다릅니다. 즉, 같은 잡을 실행하지만 오늘 실행되는 내용과 내일 실행되는 내용이 다르다는것을 나타냅니다. 

 

JobInstance는 새로 시작되는 배치일 경우 Job + JobParameter로 새로운 JobInstance를 생성합니다. 그런데 이전과 동일한 Job + Jobparameter로 실행될 경우 이미 존재하는 JobInstance를 반환하게 됩니다. 

 

Job과 JobInstance는 1:M의 관계를 가지면서 BATCH_JOB_INSTANCE 테이블과 매핑되는데 JOB_NAME(Job)과 JOB_KEY(JobParameter)가 동일한 데이터는 중복해서 저장이 불가능합니다.

 

1) JobInstance 생성 Flow

2) BATCH_JOB_INSTACE Table

JOB_INSTANCE_ID JOB_NAME JOB_KEY
1 SimpleJob d52d8cd98d00e214e9412998ecf2457e
2 SimpleJob e41z8cb98q00b204e9800998ecf8427e

JOB_INSTANCE_ID에는 각 다른 인스턴스 값이 저장이 되고

JOB_NAME에는 등록된 잡의 이름이 저장이 되고

JOB_KEY에는 Job Parameter를 해싱한 값이 저장이 됩니다. 

JobName + JobParamter는 중복된 데이터는 가질수 없습니다.

 

3. JobParameter

- Job을 실행할 때 함께 포함되어 사용되는 파라미터를 가진 도메인 객체

- JobParameter와 JobInstance는 1대1 관계

 

 

4. JobExecution

JobLauncher : Job을 실행시키는 주체

JobInstance에 대한 한번의 시도를 의미하는 객체로서 Job 실행 중에 발생한 정보들을 저장하는 객체

해당 JobExecution은 JobInstance가 실행 될 때 마다 생성된다.

JobExecution은 FAILED 또는 COMPLETED 등의 Job의 실행 결과 상태를 가지고 있다.

FAILED : JobInstance 실행이 완료되지 않은 것으로 간주해서 재실행이 가능, JobParameter의 동일한 값으로 계속 실행 가능

COMPLETED : JobInstance 실행이 완료된 것으로 간주해서 재실행이 불가능

 

1) BATCH_JOB_EXECUTION Table

- JobInstance와 JobExecution은 1:M의 관계로서 JobInstance에 대한 성공/실패 내역을 가지고 있다.

'Spring Batch' 카테고리의 다른 글

Spring Batch Step  (0) 2023.05.22
Spring Batch Introduction  (0) 2023.05.07
스프링 배치 DB 스키마  (0) 2022.02.01

블로그의 정보

꾸준히 공부하는 개발 노트

HeshAlgo

활동하기