PSD( Private-Self-Development )

Spring Batch 도메인 이해 본문

Backend/Spring Batch

Spring Batch 도메인 이해

chjysm 2023. 2. 6. 14:33

출저 :https://docs.spring.io/spring-batch/docs/3.0.x/reference/html/metaDataSchema.html

1.  Job

개념 

  • 배치 계층 구조의 최상위 개념, 하나의 작업 자체를 의미
  • 배치 작업을 어떻게 구성하고 실행할 것인지 전체적으로 설명하고 명세해 놓은 클래스 
  • 스프링 배치가 기본 구현체를 제공한다.
  • 여러 Step 을 포함하고 있다.

 

기본 구현체 종류

  • SimpleJob
    • 순차적으로 Step 을 실행  
  • FlowJob
    • 특정 조건 과 흐름에 따라 Step 을 실행 

 

2.   JobInstance

개념

  • Job 이 실행될 때 생성되는 Job 의 논리적 실행 단위 객체 (각 작업 실행)
  • Job + JobParameter 의 구성을 가지며, 같은 Job 이라도 JobParameter 가 다르면 새로 JobInstance 를 생성 
  • Job(1) 과는 1:M
  • JobParameter 와는 1:1

 

3.  JobParameter

개념

  • Job 을 생성할 때 사용되는 Parameter 도메인 객체
  • 하나의 Job 에 사용되는 여러개의 Parameter 를 표현
  • Job(1) 과는 1:M
  • JobInstance 와는 1:1
  • JobExecution(M) 과는 1:M

 

4.  JobExecution

개념

  • JobInstance 에 대한 한 번의 시도를 의미
  • JobExecution 은 상태값을 가지며, 이 상태가 'FAILED' 이면 재실행 가능(여러번 가능), 'COMPLETED면 재실행 불가능 
  • JobInstance(1) 와는 1:M
  • JobParameter(1) 와는 1:M

 


 

5.  STEP

개념

  • Batch Job  을 구성하는 단계를 의미 하는 도메인 객체
  • 모든 Job 은 하나 이상의 Step  으로 구성된다.

기본 구현체 종류

  • TaskletStep
    • 기본이 되는 클래스 Tasklet 타입의 구현제 제어 
  • PartitionStep
    • 멀티 스레드 방식으로 Step 을 여러개로 분리 실행
  • JobStep
    • Step 내에서 Job 을 실행
  • FlowStep
    • Step 내에서 Flow 를 실행 

 

6.  StepExecution

개념

  • Step 에 대한 한 번의 시도를 의미
  • 각 Step 별로 생성된다. 
  • Job 이 재시작 될 경우, 이미 성공한 Step 은 제외하고 실패한 Step 만 재실행 된다.
  • 이전 단계 Step 이 실패한 경우, 현재 Step 에 관한 StepExecution은 생성하지 않는다.
  • JobExecution(1) 과는 1:M 관계

 

JobExecution 과의 관계

  • Step의 StepExecution 이 모두 정상적으로 완료 되어야 JobExecution이 정상적으로 완료된다.
  • Step의 StepExecution 중 하나라도 실패하면 JobExecution 은 실패한다

 

7.  StepContribution 

개념 

  • 청크 프로세스의 변경사항을 버퍼링 한 후 StepExecution 의 상태를 업데이트 하는 도메인 객체
  • 청크 커밋 직전에 StepExecution 의 apply 메서드를 호출
  • ExitStatus 의 기본 종료 코드 외 사용자 정의 종료코드를 생성하여 적용 가능  
❓청크(chunk)?
Spring Batch 에서 데이터 덩어리로 작업 할 때, 각 커밋 사이에 처리되는 row 수
즉, Chunk 단위로 트랜잭션 을 다루는 것 

예를 들어, 작업이 실패한 경우, Chunk 만큼만 롤백이 되고, 이전에 커밋된 Chunk 범위는 반영이 된다. 

 

 


 

8.  ExecutionContext

개념

  • StepExecution 또는 JobExecution 객체의 상태(state)를 저장하는 공유 객체
  • DB 에 직렬화 한 값으로 저장됨 - { “key” : “value”}
  • Job 재시작 시 이미 처리한 Row 데이터는 건너뛰고 이후로 수행하도록 할 때 상태 정보를 활용한다

 

공유 범위

  • Step 범위 
    • 각 Step 의 StepExecution 에 저장되며 Step 간 서로 공유 안됨
  • Job 범위
    • 각 Job의 JobExecution 에 저장되며 Job 간 서로 공유 안되며 해당 Job의 Step 간 서로 공유됨

 

9.  JobRepository

개념

  • 배치 작업 중 정보를 저장하는 저장소 => git 의 로컬저장소 혹은 Jpa 컨텍스트 같은 역할
  • Job이 언제 수행되었고, 언제 끝났으며, 몇 번이 실행되었고 실행에 대한 결과 등의
    배치 작업의 수행과 관련된 모든 meta data 를 저장함
  • JobLauncher, Job, Step 구현체 내부에서 CRUD 기능을 처리
  • @EnableBatchProcessing 어노테이션만 선언하면 자동으로 JobRepository 빈 생성
  • BatchConfigurer 인터페이스를 구현하거나 BasicBatchConfigurer 를 상속해서
    JobRepository 설정을 커스터마이징 할 수 있다

 

설정 종류

  • JDBC 방식으로 설정 - JobRepositoryFactoryBean
    • 내부적으로 AOP 기술를 통해 트랜잭션 처리를 해주고 있음
    • 트랜잭션 isolation 의 기본값은 SERIALIZEBLE 로 최고 수준,
      다른 레벨(READ_COMMITED, REPEATABLE_READ)로 지정 가능
    • 메타테이블의 Table Prefix 를 변경할 수 있음, 기본 값은 “BATCH_” 임
  • In Memory 방식으로 설정 – MapJobRepositoryFactoryBean
    • 성능 등의 이유로 도메인 오브젝트를 굳이 데이터베이스에 저장하고 싶지 않을 경우
    • 보통 Test 나 프로토타입의 빠른 개발이 필요할 때 사용

 

10.  JobLauncher

개념

  • 배치 Job 을 실행시킨다.
  • Job과 Job Parameters를 인자로 받으며, 요청된 배치 작업을 수행한 후 최종 client 에게 JobExecution을 반환함
  • 스프링 부트 배치가 구동이 되면 JobLauncher 빈이 자동 생성 된다

 

실행 방법 종류

  • 동기적 실행( 기본 )
    • taskExecutor 를 SyncTaskExecutor 로 설정
    • JobExecution 을 획득하고 배치 처리를 모두 완료 하고 client 에 JobExecution 반환
    • 스케줄러에 의한 배치 처리에 적합 - 배치 처리 시간이 길어도 되는 경우
  • 비 동기적 실행
    • taskExecutor 가 SimpleAsyncTaskExecutor 로 설정
    • JobExecution 을 획득한 후 Client 에게 바로 JobExecution 을 반환하고 배치 처리를 완료
    • HTTP 요청에 의한 배치처리에 적합 – 배치처리 시간이 길 경우 응답이 늦어지지 않도록 함

 

 

 


참조

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

 

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

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

www.inflearn.com

https://jojoldu.tistory.com/331

 

6. Spring Batch 가이드 - Chunk 지향 처리

Spring Batch의 큰 장점 중 하나로 Chunk 지향 처리를 얘기합니다. 이번 시간에는 Chunk 지향 처리가 무엇인지 한번 살펴보겠습니다. 6-1. Chunk? Spring Batch에서의 Chunk란 데이터 덩어리로 작업 할 때 각 커

jojoldu.tistory.com