처음 스프링 배치를 접한건 인턴십 때 였다. 인턴십과정에서 웹을 만드는 작업을 하였는데 그 중에서 스프링배치를 이용하는 부분이 있었다. 당시에 스프링배치가 무엇이고 어떤 기능에 배치를 적용시켜야 할지 모르는 부분이 많았다. 개념을 잘 정리해주신 블로드도 많이 있지만 내 생각과 느낌을 정리하기 위해 포스트를 한다!
간단한 개념만 정리 할 것이고 적용은 아래 링크를 통해 포스트를 참고하길 바랍니다.
스프링 배치 적용(1)
스프링 배치 적용(2)
배치(batch) 프로그램이란 어떠한 데이터를 일괄적으로 모아 처리하는 작업을 의미한다. 이러한 작업을 정기적으로 반복하거나 규칙에 따라 수행한다.
이러한 대용량의 자료를 처리하는데 쓰이는 일괄처리를 지원하는 프레임워크로서 Quartz기반으로 동작한다.
이미지 출처: https://docs.spring.io/spring-batch/trunk/reference/html/domain.html
Job이란?
Job
은 배치잡업의 과정을 하나의 단위로 만들어 놓은 객체이다. 배치를 구성할 때 가장 상단에 위치한다.
JobInstance
JobInstances
는 Job의 실행단위 이다. 배치가 실행되면 하나의 JobInstance
가 생성된다.
JobParameters
JobParameters
는 String, Long, Double, Date로 총 4개의 형식을 지원하며, JobInstanc
e를 구별짓는 파라미터 이다.
JobExecution
JobExecution
은 JobInstance
가 실행될 때 시작시간, 종료시간, 생성시간, 상태 등의 정보를 담고 있다.
Step이란?
Step
은 Reader, Processor, Writer의 묶음이다. Job
은 최소 한개 이상의 Step
을 가져야한다.
StepExecution
StepExecution
은 Step
실행 시도에 대한 객체이다. 한 Step
이 실패하게 되면 다음 단계로 넘어가지 않는다.
ItemReader
ItemReader
는 배치를 실행할 데이터를 읽어오는 인터페이스이다. 많은 종류의 Reader
가 존재한다.
ItemProcessor
ItemProcessor
는 Reader
에서 읽어온 데이터를 가공하는 단계이다. Processor
는 필수 요소는 아니고 생략이 가능하다.
ItemWrtier
ItemWriter
는 Reader
에서 읽어오거나 Processor
에서 처리된 데이터를 Write
하는 인터페이스이다. 보통 Chunk
단위로 묶엇 진행한다.
Spring Batch에는 Chunk지향과 Tasklet처리 방식이 존재한다. 둘의 차이는 처리하는 데이터를 나눌것인가에서 차이가 발생한다. Chunk
지향 방식은 ChunkSize
라는 것을 통해 데이터를 처리할 갯수를 미리 설정해 둔다. 반면 Tasklet
방식은 한번에 데이터를 처리하는 과정이다. 상황에 따라 쓰이는 방식이 다르지만 실무에서는 많은 데이터를 처리 하기 때문에 Chunk
지향 방식을 지향한다.
Setting a fairly large page size and using a commit interval that matches the page size should provide better performance.
페이지 크기를 상당히 크게 설정하고 페이지 크기와 일치하는 커밋 간격을 사용하면 성능이 향상됩니다.
위와 같이 스프링에서는 ChunkSize
와 PagingSize
를 동일하게 하는것을 권고 한다. 만일 두 값이 다르다고 문제가 되진않지만 효율성이 떨어진다. 만약에 ChunkSize
가 20, PagingSize
가 10이면 한번의 Read
에서 10개의 데이터를 가져오게 된다. ChunkSize
가 20이므로 총 두번 Read를 하고 1번의 Transaction이 수행된다.
처음에 스프링 배치를 접하고 조금 헷갈렸던 개념이다. Scheduler은 Spring Batch를 실행시키는 메소드이므로 비교대상이 아니다.