본문 바로가기

공부/Spring

[Boot] 스프링 부트 배치

스프링 부트 배치

처음 배우는 스프링 부트2 참고

1. 배경

스프링 본부인 피보탈과 컨설팅 회사인 엑센츄어가 공동으로 개발

2. 이해

시나리오

  1. 읽기(read) : 데이터 저장소에서 특정 데이터 레코드를 읽음
  2. 처리(processing) : 원하는 방식으로 데이터를 가공/처리함
  3. 쓰기(write) : 수정된 데이터를 다시 저장소에 저장

관계

Job - Step : 1 : M
Step - ItemReader, ItemProcessor, ItemWriter : 1 : 1
하나의 큰 일감(Job)에 여러 단계(Step)를 사용함

2.1 Job

  • Job은 배치 처리 과정을 하나의 단위로 만들어 표현한 객체
  • 전체 배치 처리에 있어 항상 최상단 계층에 있음
  • Job 객체는 여러 Step 인스턴스를 포함하는 컨테이너

JobInstance

  • JobInstance는 배치에서 Job 이 실행될 때 하나의 Job 실행 단위임
  • 여러 개의 JobExecution을 가질 수 있음

ex) 일배치 잡을 실행 만약 오늘의 Job이 실패해 내일 다시 동일한 Job을 실행하면 오늘/내일의 실행 모두 같은 JobInstance를 사용함 하지만 오늘/내일의 각기 다른 JobExection을 생성함

JobExecution

  • JobInstance에 대한 한 번의 실행을 나타내는 객체임
  • Job 실행에 대한 정보를 담고 있는 도메인 객체 (JobInstance, 배치 상태, 시작 시간, 끝난 시간, 실패 했을때 메시지 등의 정보)

JobExection 객체 정보

  • jobParameters : Job 실행에 필요한 매개변수 데이터
  • jobInstance : Job 실행의 단위가 되는 객체
  • stepExecutions : StepExecution을 여러 개 가질 수 있는 Collection 타입

등등

JobParameters

  • Job이 실행될 때 필요한 파라미터들을 Map 타입으로 저장하는 객체
  • JobInstance를 구분하는 기준이 되기도 함 (1:1 관계)

2.2 Step

실질적인 배치 처리를 정의하고 제어하는 데 필요한 모든 정보가 들어 있는 도메인 객체
Job을 처리하는 실질적인 단위로 쓰이며 모든 Job 에는 1개 이상의 Step이 있어야 함

StepExecution

Step 실행 정보를 담는 객체

2.3 JobRepository

  • JobRepository 는 배치 처리 정보를 담고 있는 매커니즘임
  • 어떤 Job이 실행되었으며 몇 번 실행되었고 언제 끝났는지 등 배치 처리에 대한 메타 데이터를 저장함
  • Job 하나가 실행되면 JobRepository에서는 배치 실행에 관련된 정보를 담고 있는 도메인 객체인 JobExecution을 생성함
  • Step의 실행 정보를 담고 있는 StepExecution 도 저장소에 저장하며 전체 메타데이터를 저장/관리하는 역할을 수행함

2.4 JobLauncher

배치를 실행하는 인터페이스

매개변수로 Job과 JobParameters를 받아 JobExecution을 반환함

만약 매개변수가 이전과 동일하면서 이전에 JobExecution이 중단된 적이 있다며 동일한 JobExecution을 반환함

2.5 ItemReader

Step의 대상이 되는 배치 데이터를 읽어오는 인터페이스

FILE, XML, DB 등의 여러 타입의 데이터를 읽어올 수 있음

2.6 ItemProcessor

ItemReader로 읽어온 배치 데이터를 변환하는 역할을 수행함

비즈니스 로직을 분리하기위해, ItemWriter는 저장만 수행하고 ItemProcessor에서 로직 처리만 수행하도록 함

2.7 ItemWriter

배치 데이터를 저장함

List 자료구조를 사용해 지정한 타입의 리스트를 매개변수고 받으며 리스트의 데이터 수는 설정한 청크(chunk) 단위로 불러옴

청크 : 아이템이 트랜잭션에서 커밋되는 수

3. 구현

의존성 설정

build.gradle 추가

compile 'org.springframework.boot:spring-boot-starter-batch'
testCompile 'org.springframework.batch:spring-batch-test'

'공부 > Spring' 카테고리의 다른 글

[Boot] JPA 네이밍 전략  (0) 2019.03.11
[Boot] 의존 설정  (0) 2019.03.11
[Boot] @WebMvcTest  (0) 2019.02.15
[Boot] @SpringBootTest  (0) 2019.02.15
[AvtiveMQ] 정리  (0) 2019.02.10