Spring Batch - Job

Eden Ko·2023년 5월 14일
0

Spring batch

목록 보기
2/3

Job

Spring Batch에서 Job은 단순히 스텝 인스턴스를 위한 컨테이너이다. 플로우에서 논리적으로 함께 속하는 여러 단계를 결합하고 재시작 가능성과 같이 모든 단계에 전역 속성을 구성할 수 있다. 작업 구성에는 다음이 포함된다.

  • 작업의 이름.
  • 단계 인스턴스의 정의 및 순서.
  • 작업을 다시 시작할 수 있는지 여부.

JobInstance

JobInstance는 논리적 작업 실행의 개념을 나타낸다.
EndOfDay 작업과 같이 하루가 끝날 때 한 번 실행되어야 하는 일괄 작업을 예시로 들어본다. EndOfDay 작업은 하나이지만 작업의 각 개별 실행은 별도로 추적해야 한다.
이 작업의 경우 하루에 하나의 논리적 JobInstance가 있다. 예를 들어 1월 1일 실행, 1월 2일 실행 등이 있다. 1월 1일 실행이 처음에 실패하고 다음 날 다시 실행되는 경우에도 여전히 1월 1일 실행이다. (일반적으로 이것은 처리하는 데이터와도 일치하므로, 1월 1일 실행은 1월 1일에 대한 데이터를 처리한다 - 아래 JobExecution에서 기술). 따라서 각 JobInstance는 여러 개의 실행을 가질 수 있으며, 주어진 시간에는 하나의 JobInstance(특정 Job과 식별되는 JobParameter에 해당)만 실행할 수 있다.

JobInstance의 정의는 로드할 데이터와 전혀 관련이 없다. 데이터를 로드하는 방법을 결정하는 것은 전적으로 ItemReader 구현에 달려 있다.
예를 들어 EndOfDay 시나리오에서는 데이터에 데이터가 속한 유효 날짜 또는 스케줄 날짜를 나타내는 열이 있을 수 있다. 따라서 1월 1일 실행은 1일의 데이터만 로드하고 1월 2일 실행은 2일의 데이터만 사용한다. 이 결정은 비즈니스 결정일 가능성이 높으므로 ItemReader가 결정할 수 있다. 그러나 동일한 JobInstance를 사용하면 이전 실행의 "상태"(즉, ExecutionContext)가 사용될지 여부가 결정된다.
새 JobInstance를 사용하는 것은 "처음부터 시작"을 의미하며, 기존 인스턴스를 사용하는 것은 일반적으로 "중단한 지점부터 시작"을 의미한다.

JobParameters

"하나의 JobInstance는 어떻게 다른 Job과 구별되나요?" 답은 JobParameters이다. JobParameters 객체에는 배치 작업을 시작하는 데 사용되는 매개변수 집합이 들어 있다. 다음 이미지에서 볼 수 있듯이 이러한 매개변수는 식별을 위해 사용되거나 실행 중에 참조 데이터로 사용될 수도 있다.

앞의 예에서 1월 1일과 1월 2일에 대한 두 개의 인스턴스가 있는 경우, 실제로는 하나의 Job만 있지만, Job 매개변수 01-01-2017로 시작된 것과 01-02-2017의 매개변수로 시작된 것 등 두 개의 JobParameter 개체를 가지고 있다. 따라서 컨트랙트는 다음과 같이 정의할 수 있다.
JobInstance = Job + 식별된 JobParameter 이렇게 하면 개발자가 어떤 매개변수가 전달되는지 제어할 수 있으므로 JobInstance가 정의되는 방식을 효과적으로 제어할 수 있다.

기본적으로 그렇지만 모든 작업 매개변수가 JobInstance의 식별에 기여해야 하는 것은 아니다. 그러나 프레임워크는 JobInstance의 식별에 기여하지 않는 매개변수가 포함된 Job을 제출하는 것도 허용한다.

JobExecution

JobExecution은 잡을 실행하려는 단일 시도에 대한 기술적 개념을 나타낸다. 실행은 실패 또는 성공으로 끝날 수 있지만, 실행이 성공적으로 완료되지 않는 한 주어진 실행에 해당하는 JobInstance는 완료된 것으로 간주되지 않는다.
앞에서 설명한 EndOfDay 작업을 예로 들어, 처음 실행할 때 실패한 01-01-2017에 대한 JobInstance를 생각해 본다. 첫 번째 실행(01-01-2017)과 동일한 식별 작업 매개 변수를 사용하여 다시 실행하면 새 JobExecution이 만들어진다. 그러나 여전히 JobInstance는 하나만 존재한다.

Job은 Job이 무엇이고 어떻게 실행되는지를 정의하며, JobInstance는 주로 올바른 재시작 시맨틱을 가능하게 하기 위해 실행을 함께 그룹화하는 순전히 조직적인 객체이다. 그러나 JobExecution은 실행 중에 실제로 일어난 일에 대한 기본 저장 메커니즘이며, 다음 표에서 볼 수 있듯이 제어하고 유지해야 하는 더 많은 속성을 포함한다.


https://docs.spring.io/spring-batch/docs/current/reference/html/domain.html#domainLanguageOfBatch

profile
Junior Developer

0개의 댓글