반응형
공공 데이터 포털 Open API를 활용하여 개인 프로젝트를 진행한 적이 있습니다. 데이터의 최신성을 고려하여 일정 시간마다 open API를 호출하여 새로운 정보를 갱신하기 위해 Spring Scheduler를 공부하고 적용하였습니다.
Spring Scheduler를 공부할 때 Spring Batch와 비교하며 설명하는 경우를 심심찮게 보게 되어 Spring Batch도 이참에 공부해야겠다 생각이 들어 포스팅하게 되었습니다.
Spring Scheduler에 대해서 궁금하다면 아래 링크를 클릭
https://yeo-computerclass.tistory.com/417
Batch & Scheduler 정의
스케줄러(Scheduler)
- 일정한 시간(혹은 날짜)에 등록한 작업을 자동으로 실행하도록 하는 작업을 의미한다.
배치(Batch)
- 데이터를 실시간으로 처리하는 것이 아닌 모아서 일괄 처리하는 작업을 의미한다.
- 하루동안 쌓인 데이터(대용량)를 배치 작업을 통해 특정 시간에 일괄처리하는 경우이다. 사용자에게 빠른 응답이 필요하지 않은 서비스에 적용할 수 있고 일괄처리를 하기 때문에 특정 시간 이후에는 자원을 거의 소비하지 않는 것이 특징이다.
배치와 스케줄러는 다른 개념이지만 특정 시간에 프로그램(작업)을 실행한다는 점에서 같은 개념이라 혼동할 수 있다.
Spring Batch
스프링 프레임워크에서 사용되는 배치 프레임워크인 Spring Batch 역시 대용량 일괄처리의 편의를 위해 만들어졌다.
Spring Batch 사용 경우
- 대용량의 비즈니스 작업 처리
- 로깅 / 추적
- 작업 처리 통계
- 트랜잭션 관리
- 작업 재시작 건너뛰기
- etc
Spring Batch Architecture
Spring Batch는 아래와 같이 3가지 구조로 나뉜다. 모듈화함으로 인해서 개발자는 Application 계층의 비즈니스 로직에 집중할 수 있고, 배치의 동작과 관련된 것은 Batch Core에 있는 클래스들을 이용하여 제어할 수 있다.
- Application
- Spring Batch를 통해 개발자가 작성한 모든 배치 작업과 사용자 정의 코드
- Batch Core
- 배치 작업을 시작하고 제어하는 데 필요한 핵심 API 포함 (실행, 모니터링 등)
- JobLauncher, Job, Step, Flow 등
- Batch Infrastructure
- Application과 Core 모두 공통 Infrastructure 위에서 빌드한다.
- Job 실행의 흐름과 처리를 위한 틀을 제공한다.
- 개발자와 애플리케이션에서 사용하는 일반적인 Reader, Writer, RetryTemplate 같은 서비스를 포함
Spring Batch Architecture 용어 설명
- JobRepository
- 배치 처리 정보를 저장하는 저장소 역할
- 저장 정보 : 배치 수행과 관련된 수치 데이터, Job의 상태
- Job
- 배치처리 과정을 하나의 단위로 표현한 객체
- 하나 이상의 Step을 포함하는 컨테이너이다.
- step
- 스프링 배치에서 가장 일반적인 상태 단위
- Job을 구성하는 독립적인 하나의 단계로 Job의 세부 작업을 Task 기반으로 설정하고 명세해놓은 객체이다.
- tasklet, Chunck 두 가지 기반 존재
- tasklet
Step이 중지될 때까지 계속 반복해서 수행된다. 수행할 때마다 독립적인 트랜잭션이 얻어진다.
초기화, 알림 전송 등에 사용된다. - chunk
한 번에 하나씩 데이터(Chunk)를 읽어들여, Chunk 단위로 트랜잭션을 다룬다.
Chunk 단위로 트랜잭션을 수행하기 때문에 실행하여도 Chunk 만큼만 Rollback 되고 그전까지 결과는 적용된다. - 스프링 배치는 대용량 데이터를 다루는 경우가 대다수이기 때문에 Chunk 기반을 선호한다.
- tasklet
- JobLauncher
- 배치 Job을 실행시키는 역할로 실행된 Job은 갖고 있는 Step을 실행한다.
- JobInstance, JobParameters, JobExecution 등 여러 용어와 흐름에 대한 이해가 있어야 하지만 스프링 부트는 Job을 시작하는 기능을 제공하기 때문에 역할이 이렇구나 정도만 받아들이고 추후에 다시 공부해 보길 바란다.
- ItemReader / ItemProcessor / ItemWriter
- Chunk 모델을 구현하면서 데이터의 입력 / 처리 / 출력 3가지 프로세스로 분할하기 위한 인터페이스이다.
- ItemReader와 ItemWriter는 데이터 IO를 담당한다. 데이터 베이스와 파일을 Java객체 컨버팅을 제공하기에 Spring Batch를 사용하는 것으로 충분히 컨버팅이 가능하다.
- ItemProcessor는 입력 확인 및 비즈니스 로직을 구현한다.
- Chunk 모델을 구현하면서 데이터의 입력 / 처리 / 출력 3가지 프로세스로 분할하기 위한 인터페이스이다.
반응형
'Spring Batch' 카테고리의 다른 글
Spring Batch 문법 (0) | 2023.01.26 |
---|---|
Spring Batch 메타 테이블 데이터 (0) | 2023.01.26 |
Spring Batch 설정하기 (0) | 2023.01.26 |