본문 바로가기
공부/스프링 배치

스프링배치 도메인

by 띵커베르 2023. 4. 10.
728x90
  • JOB
  • 기본 개념
    • 배치 계층 구조에서 가장 상위에 있는 개념. 하나의 배치작업 자체를 의미.
    • Job Configuration 을 통해 생성되는 객체 단위로서, 배치 작업을 어떻게 구성하고 실행할 것인지 설정하고 명세해 놓은 객체
    • 배치 Job 을 구성하기 위한 최상위 인터페이스이며 스프링 배치가 기본 구현체를 제공한다.
    • 여러 Step 을 포함하고 있는 컨테이너로서 반드시 한개 이상의 Step 으로 구성해야 함.
  • 기본 구현체
    • SimpleJob
      • 순차적으로 Step 을 실행시키는 Job
      • 모든 Job 에서 유용하게 사용할 수 있는 표준 기능을 갖고 있음
    • FlowJob
      • 특정한 조건과 흐름에 따라 Step 을 구성하여 실행시키는 Job
      • Flow 객체를 실행시켜 작업을 진행함.
  • ---
  • JobInstance
  • 기본 개념
    • Job 이 실핼될 떄 생성되는 Job 의 논리적 실행 단위 객체로서 고유하게 식별 가능한 작업 실행을 나타냄
    • Job 의 설정과 구성은 동일하지만 Job 이 실행되는 시점에 처리하는 내용은 다르기 때문에 Job 의 실행을 구분해야 함
      • ex) 하루에 한 번 씩 배치 Job 이 실행된다면 매일 실행되는 각각의 Job 을 JobInstance 로 표현합니다.
  • JobInstance 생성 및 실행
    • 처음 시작하는 Job + JobParameter 일 경우 새로운 JobInstance 생성
    • 이전과 동일한 Job + JobParameter 으로 실행 할 경우 이미 존재하는 JobInstance 리턴
      • 내부적으로 JobName + JobKey(JobParameter hash 값) 를 가지고 JobInstance 객체를 얻음
  • BATCH_JOB_INSTANCE 테이블과 매핑
    • JOB_NAME(Job) 과 JOB_KEY 가 동일한 데이터는 중복해서 저장할 수 없음
  • ---
  • JobParamater
  • 기본 개념
    • Job 을 실행할 때 함께 포함되어 사용되는 파라미터를 가진 도메인 객체
    • 하나의 Job 에 존재할 수 있는 여러개의 JobInstance 를 구분하기 위한 용도
    • Jobparameter 와 JobInstance 는 1:1 관계
  • 생성 및 바인딩
    • 어플리케이션 실행 시 주입: Java -jar LogBatch.jar requestDate=20230101
    • 코드로 생성: JobParameterBuilder, DefaultJobParametersConverter
    • SpEL 이용: @Value("#{jobParameter[requestDate]}"), @JobScopre, @StepScope 선언 필수
  • BATCH_JOB_EXECUTION_PARAM 테이블과 매핑
    • JOB_EXECUTION 과 1:M 의 관계
  • ---
  • JobExecution
  • 기본 개념
  • JobInstance 에 대한 한번의 시도를 의미하는 객체로서 Job 실행 중에 발생한 정보들을 저장하고 있는 객체
    • 시작시간, 종료시간, 상태(시작됨, 완료, 실패), 종료상태의 속성을 가짐
  • JobInstance 과의 관계
    • JobExecution 은 FAILED 또는 COMPLETED 등의 Job 의 실행 결과 상태를 가지고 있음
    • JobExecution 의 상태 결과가 COMPLETED 면 JobInstance 실행이 완료된 것으로 간주해서 재 실행이 불가함
    • JobExecution 의 실행 상태 결과가 FAILED 면 JobInstance 실행이 완료되지 않은 것으로 간주해서 재실행이 가능함
      • JobParamter 가 동일한 값으로 Job 을 실행할지라도 JobInstance 를 계속 실행할 수 있음
    • JobExecution 의 실행 상태 결과가 COMPLETED 될 떄까지 하나의 JobInstance 내에서 여러 번의 시도가 생길 수 있음
  • BATCH_JOB_EXECUTION 테이블과 매핑
    • JonInstance 와 JobExecution 는 1:M 의 관계로서 JonInstance 에 대한 성공 / 실패 의 내역을 가지고 있음.
  • ---
  • Step
  • 기본개념
    • Batch Job 을 구성하는 독립적인 하나의 단계로서 실제 배치 처리를 정의하고 컨트롤하는 데 필요한 모든 정보를 가지고 있는 도메인 객체
    • 단순한 단일 task 뿐 아니라 입력과 처리 그리고 출력과 관련된 복잡한 비즈닌스 로직을 포함하는 모든 설정들을 담고 있다.
    • 배치작업을 어떻게 구성하고 실행할 것인지 Job 의 세부 작업을 task 기반으로 설정하고 명세해 놓은 객체
    • 모든 Job 은 하나 이상의 Step 으로 구성되어 있다.
  • 기본 구현체
    • TaskletStep
      • 가장 기본이 되는 클래스로서 Tasklet 타입의 구현체들을 제어한다.
    • PartitionStep
      • 멀티 스레드 방식으로 Step 을 여러개로 분리해서 실행한다.
    • JobStep
      • Step 내에서 Job 을 실행하도록 한다.
    • FlowStep
      • Step 내에서 Flow 를 실행하도록 한다.
  • ---
  • StepExecution
  • 기본개념
    • Step 에 대한 한번의 시도를 의미하는 객체, Step 실행 중에 발생한 정보들을 저장하고 있는 객체
      • 시작시간, 종료시간, 상태(시작됨, 완료, 실패), commit, count, rollback count 등의 속성을 가짐
    • Step 이 매번 시도될 때마다 생성되며 각 Step 별로 생성된다.
    • Job 이 재시작 하더라도 이미 성공 완료된 Step 은 재 실행되지 않고 실패한 Step 만 실행된다.
    • 이전 단계 Step 이 실패해서 현재 Step 을 실행하지 않았다면 StepExecution 을 생성하지 않는다. Step 이 실제로 시작됐을 때만 StepExecution 을 생성한다.
  • JobExecution 과의 관계
    • Step 의 StepExecution 이 모두 정상적으로 완료 되어야 JobExcution 이 정상적으로 완료된다.
    • Step 의 StepExecution 중 하나라도 실패하면 JobExecution 은 실패한다.
  • BATCH_STEP_EXECUTION 테이블과 매핑
    • JobExecution 와 StepExecution 는 1:M 관계
    • 하나의 Job 에 여러 개의 Step 으로 구성했을 경우 각 StepExecution 은 하나의 JobExecution 을 부모로 가진다.
  • ---
  • StepContribution
  • 기본개념
    • 청크 프로세스의 변경 사항을 버퍼링 한 후 StepExecution 상태를 업데이트하는 도메인 객체
    • 청크 커밋 직전에 StepExecution 의 apply 메서드를 호출하여 상태를 업데이트 함.
    • ExitStatus 의 기본 종료코드 외 사용자 종료코드를 생성해서 적용 할 수 있음.
  • ---
  • ExecutionContext
  • 기본개념
    • 프레임워크에서 유지 및 관리하는 키 / 값으로 된 컬렉션으로 StepExecution 또는 JobExecution 객체의 상태를 저장하는 공유 객체
    • DB 에 직렬화 한 값으로 저장됨
    • 공유 범위
      • Step 범위 - 각 Step 의 StepExecution 에 저장되며 Step 간 서로 공유 안됨
      • Job 범위 - 각 Job 의 JobExecution 에 저장되며, Job 간 서로 공유 안되며 해당 Job 의 Step 간 서로 공유됨
    • Job 재 시작시 이미 처리한 Row 데이터는 건너뛰고 이후로 수행하도록 할 때 상태 정보를 활용한다.
  • ---
  • JobRepository
  • 기본개념
    • 배치 작업 중의 정보를 저장하는 저장소 역할
    • Job 이 언제 수행되었고, 언제 끝났으며, 몇 번이 실행되었고 실행에 대한 결과 등의 배치 작업의 수행과 관련된 모든 meta data 를 저장함
      • JobLauncher, Job, Step 구현체 내부에서 CRUD 기능을 처리함
  • ---
  • JobLauncher
  • 기본개념
    • 배치 Job 을 실행시키는 역할을 한다.
    • Job 과 Job Parameters 를 인자로 받으며 요청된 배치 작업을 수행한 후 최종 Client 에게 JobExecution 을 반환함.
    • 스프링 부트 배치가 구동이 되면 JobLauncher 빈이 자동 생성 된다.
    • Job 실행
      • JobLauncher.run(Job, JobParameters)
      • 스프링 부트 배치에서는 JoblauncherApplicationRunner 가 자동적으로 JobLauncher 를 실행시킨다.
      • 동기적 실행
        • taskExecutor 를 SyncTaskExecutor 로 설정할 경우 (기본값은 SyncTaskExecutor)
        • JobExecution 을 획득하고 배치 처리를 최종 완료한 이후 Client 에게 JobExecution 을 반환
        • 스케줄러에 의한 배치처리에 적합 함 - 배치처리시간이 길어도 상관없는 경우
      • 비 동기적 실행
        • taskExecutor 가 SimpleAsyncTaskExecutor 로 설정할 경우
        • JobExecution 을 획득한 후 Client 에게 바로 JobExecution 을 반환하고 배치처리를 완료한다.
        • HTTP 요청에 의한 배치처리에 적합 함 - 배치처리 시간이 길 경우 응답이 늦어지지 않도록 함.
    • ---
728x90

'공부 > 스프링 배치' 카테고리의 다른 글

스프링배치 - Flow  (0) 2023.04.13
스프링 배치 - Step  (0) 2023.04.13
스프링 배치 - Job  (0) 2023.04.12
스프링 배치 실행 - JobBuilderFactory, JobBuilder  (0) 2023.04.12
스프링배치 - 테이블  (0) 2023.04.10

댓글