본문 바로가기
IT/Java

spring Batch

by 성준하이 2022. 8. 25.
반응형

스프링에는 다양한 기능들이 있고 우리가 실제로 사용하는것은 프로젝트에 맞게 다양하다.

지금까지 다뤄온 글들과는 다른 기능을 하나 소개 해보려고 한다.

 

먼저 이름을 소개하면 스프링 배치 이다.

자세한 내용은 스프링 공식 홈페이지에서 확인을 해볼수가 있다.

https://spring.io/projects/spring-batch

 

Spring Batch

Spring Batch provides reusable functions that are essential in processing large volumes of records, including logging/tracing, transaction management, job processing statistics, job restart, skip, and resource management. It also provides more advanced tec

spring.io

 

Spring Batch란?

Spring Batch는 로깅/추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기, 리소스 관리 등 대용량 레코드 처리에 필수적인 기능을 제공한다. 또한 최적화 및 파티셔닝 기술을 통해 대용량 및 고성능 배치 작업을 가능하게 하는 고급 기술 서비스 및 기능을 제공한다.

Spring Batch에서 배치가 실패하여 작업 재시작을 하게 된다면 처음부터가 아닌 실패한 지점부터 실행을 하게 되고 중복 실행을 막기 위해 성공한 이력이 있는 Batch는 동일한 Parameters로 실행 시 Exception이 발생하게 된다.

즉, 대용량 처리를 위해서 존재하는 프로젝트이다.

 

다음에 다뤄볼 내용중 하나인데 스프링 스케줄러 라는 개념이 있다.

하지만 이 배치는 스케줄러와는 좀 다른 개념이다.

 

스프링 배치 용어

스프링 배치를 사용하기 위해서는 용어들이 있는데 다음과 같다.

  • Job
    • 배치처리 과정을 하나의 단위로 만들어 놓은 객체
    • 배치처리 과정에 있어 전체 계층 최상단에 위치
  • JobInstance
    • Job의 실행의 단위
    • Job을 실행시키게 되면 하나의 JobInstance가 생성
      예를들어 1월 1일 실행, 1월 2일 실행을 하게 되면 각각의 JobInstance가 생성되며 1월 1일 실행한 JobInstance가 실패하여 다시 실행을 시키더라도 이 JobInstance는 1월 1일에 대한 데이터만 처리하게 됨
  • JobParameters
    • JobInstance 를 구분하기 위함
    • JobInstance 구별 외에도 개발자 JobInstacne에 전달되는 매개변수 역할
    • String, Double, Long, Date 4가지 형식만을 지원
  • JobExecution
    • JobInstance에 대한 실행 시도에 대한 객체
      1월 1일에 실행한 JobInstacne가 실패하여 재실행을 하여도 동일한 JobInstance를 실행시키지만 이 2번에 실행에 대한 JobExecution은 개별로 생기게 됨, JobExecution는 이러한 JobInstance 실행에 대한 상태,시작시간, 종료시간, 생성시간 등의 정보를 담고 있음
  • Step
    • Job의 배치처리를 정의하고 순차적인 단계를 캡슐화
    • Job은 최소한 1개 이상의 Step을 가져야 하며 Job의 실제 일괄 처리를 제어하는 모든 정보가 들어있음
  • StepExecution
    • JobExecution과 동일하게 Step 실행 시도에 대한 객체를 나타냄
      하지만 Job이 여러개의 Step으로 구성되어 있을 경우 이전 단계의 Step이 실패하게 되면 다음 단계가 실행되지 않음으로 실패 이후 StepExecution은 생성되지 않음
    • 또한 JobExecution과 동일하게 실제 시작이 될 때만 생성되며 StepExecution에는 JobExecution에 저장되는 정보 외에 read 수, write 수, commit 수, skip 수 등의 정보들도 저장이 됨
  • ExecutionContext
    • Job에서 데이터를 공유 할 수 있는 데이터 저장소
    • Spring Batch에서 제공하는 ExecutionContext는
      • JobExecutionContext
        • Commit 시점에 저장
      • StepExecutionContext
        • 실행 사이에 저장
    • ExecutionContext를 통해 Step간 Data 공유가 가능하며 Job 실패시 ExecutionContext를 통한 마지막 실행 값을 재구성 할 수 있음
  • JobRepository
    • 위에서 말한 모든 배치 처리 정보를 담고있는 매커니즘
    • Job이 실행되게 되면 JobRepository에 JobExecution과 StepExecution을 생성하게 되며 JobRepository에서 Execution 정보들을 저장하고 조회하며 사용하게 됨
  • JobLauncher
    • Job과 JobParameters를 사용하여 Job을 실행하는 객체
  • ItemReader
    • Step에서 Item을 읽어오는 인터페이스
    • ItemReader에 대한 다양한 인터페이스가 존재하며 다양한 방법으로 Item을 읽어 올 수 있음
  • ItemWriter
    • 처리 된 Data를 Writer 할 때 사용
      Writer는 처리 결과물에 따라 Insert가 될 수도 Update가 될 수도 Queue를 사용한다면 Send가 될 수도 있고,
      Writer 또한 Read와 동일하게 다양한 인터페이스가 존재
      Writer는 기본적으로 Item을 Chunk로 묶어 처리하고 있음
  • ItemProcessor
    • Reader에서 읽어온 Item을 데이터를 처리하는 역할
    • Processor는 배치를 처리하는데 필수 요소는 아니며 Reader, Writer, Processor 처리를 분리하여 각각의 역할을 명확하게 구분

 

스프링에서 Batch를 사용하는건 다음과 같다.

Job은 여러가지의 Step 모음으로 구성되어있고 Job은 순차적인 Step을 수행하며 Batch 를 수행하게 된다.

Step 은 Tasklet 처리 방식과 Chunk 지향 처리 방식을 지원한다.

반응형

'IT > Java' 카테고리의 다른 글

javadoc 관련  (33) 2022.09.03
Mybatis 3.0 이상 적용하기  (43) 2022.09.02
스프링 웹플럭스(webflux)  (43) 2022.08.24
Optional 이란?  (51) 2022.08.23
@Valid annotation (BindingResult, Error)(유효성 검사)  (48) 2022.08.22

댓글