Spring Boot Batch 구조

Back-End/Spring boot Batch 2021. 1. 17. 11:27

Spring Boot Batch 의 장점


1. 대용량 데이터 처리에 최적화


2. 수동처리하지 않아도 되도록 자동화


3. 예외사항과 비정상 동작에 대한 방어기능


4. 반복적인 작업 프로세스를 이해하면 비지니스 로직에 집중 가능




Spring Boot Batch 사용시 주의 사항


1. 최대한 단순화해서 복잡한 구조와 로직을 피해야 함


2. 스프링 부트는 배치 스케쥴러를 제공하지 않아서, 스케쥴링 기능은 스프링에서 제공하는 쿼치 프레임워크 등을 이용해야 합니다.




Spring Boot Batch 구조


일반적으로 읽기, 처리, 쓰기의 3단계로 이루어져 있습니다.


 

  1. 읽기 (read) : 데이터 저장소 (일반적으로 데이터베이스) 에서 특정 데이터 레코드를 읽습니다.


  2. 처리 (processing) : 원하는 방식으로 데이터를 가공/처리 합니다.


  3. 쓰기 (write) : 수정된 데이터를 다시 저장소 (데이터베이스)에 저장 합니다.



처리 단계는 읽기 -> 처리 -> 쓰기의 순서로 이루어져 있습니다.



이것을 그림으로 도식화하면 아래와 같습니다.


- JOB -


JOB는 배치 처리 과정을 하나의 단위로 만들어 표현학 객체이고, 전체 배치 처리에 있어서 최상단 계층에 위치해 있습니다.


위에서 하나의 Job안에는 여러 Step가 있고, 스프링 배치에서 Job 객체는 여러 Step 인스턴스를 포함하는 컨테이너 입니다.


Job 객체를 만드는 빌더는 여러개가 있는데, 여러 빌더를 통합하여 처리하는 공장인


JobBuilderFactory로 원하는 Job를 쉽게 만들수 있습니다.





 

  - ItemReader -


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


  File, Xml Db등 여러 타입의 데이터를 읽어올 수 있습니다.




  - ItemProcessor -


  ItemProcess는 ItemReader로 읽어 온 배치 데이터를 변환하는 역할을 수행합니다.


  이것을 분리하는 이유는 다음과 같습니다.


  비즈니스 로직의 분리 - ItemWriter은 저장역할을 수행하고, ItemProcessor은 로직 처리만 수행해 역할을 분리해서 읽어온 배치 데이터와 

  

  쓰여질   데이터의  타입이 다를경우에 대응할 수 있게 하기 위함




 - ItemWriter -


  배치 데이터를 저장


  일반적으로 DB나 파일에 저장합니다.


  제네릭으로 원하는 타입을 받고 writer() 메서드는 List를 사용해서 저장한 타입의 리스트를 매개변수로 받습니다.





- JobInstance -


JobInstance는 배치 처리에서 Job가 실행될때 하나의 Job의 실행 단위 입니다.


만약 하루에 한번씩 배치 Job가 실행된다면 어제와 오늘 실행된 Job를 JobInstance라고 부를 수 있습니다.


각각의 JobInstance는 하나의 JobExecution을 갖는 것은 아니고, 오늘 Job를 실행했지만 실패했다면 다음날 동일한 JobInstance를 가지고 또 실행합니다.


그 이유는 Job 실행이 실패하면 JobInstance가 끝난것으로 간주하지 않기 때문입니다.


또한 그러한 이유로 JobInstance는 어제 실패한 JobExecution과 오늘 성공한 JobExecution 두가지를 갖게 됩니다.


즉 JobExecution은 여러개 가질 수 있다는 뜻입니다.




- JobExecution -


JobExecution은 JobInstance에 대한 한 번의 실행을 나타내는 객체입니다.


또한 JobExecution 인터페이스를 보면 Job 실행에 대한 정보를 담고 있는 도메인 객체가 있고,


JobExecution은 JobInstance, 배치 실행상태, 시작 시간, 끝난 시간, 실패했을 때 메시지 등의 정보를 담고 있습니다.




- JobParameters -


JobParameters는 Job가 실행될때 필요한 파라미터들을 Map 타입으로 지정하는 객체 입니다.


JobParameters는 JobInstance를 구분하는 기준이 되기도 합니다.


JobParameters와 JobInstance는 1 : 1 관계 입니다.




-Step-


Step는 실질적인 배치 처리를 정의하고, 제어 하는데 필요한 모든 정보가 있는 도메인 객체 입니다.


Job를 처리하는 실질적인 단위로 쓰입니다.


모든 Job에는 1개 이상의 Step가 있어야 합니다.




-StepExecution-


Job에 JobExecution Job 실행 정보가 있다면 Step에는 StepExecution 이라는 Step 실행 정보를 담는 객체가 있습니다.




-JobRepository-


JobRepository는 배치 처리 정보를 담고 있는 저장소 입니다.


어떤 Job가 실행되었느면 몇 번 실행되었고 언제 끝났는지 등 배치 처리에 대한 메타데이터를 저장합니다.


예를 들어 Job 하나가 실행되면 JobRepository에서는 배치 실행에 관련된 정보를 담고 있는 도메인 JobExecution을 생성합니다.





출처


https://cheese10yun.github.io/spring-batch-basic/

: