처음 배우는 스프링 부트2 : http://www.yes24.com/Product/Goods/64584833
SpringBootBatch
사용해야 하는 이유
- 대용량 데이터 처리에 최적화되어 고성능을 발휘한다.
- 효과적인 로깅, 통계처리, 트랜잭션 관리 등 재사용 가능한 필수 기능을 지원한다.
- 수동으로 처리하지 않도록 자동화되어 있다.
- 예외사항과 비정상 동작에 대한 방어 기능이 있다.
- 스프링부트 배치의 반복되는 작업 프로세스를 이해하면 비즈니스 로직에 집중할 수 있다.
주의사항
- 가능하면 단순화해서 복잡한 구조와 로직을 피해야 한다.
- 데이터를 직접 사용하는 작업이 빈번하게 일어나므로
데이터 무결성을 유지하는 유효성 검사 등의 방어책이 있어야 한다.
- 배치 처리 시 시스템 I/O 사용을 최소화해야 한다.
잦은 I/O로 데이터베이스 커넥션과 네트워크 비용이 커지면 성능에 영향을 줄 수 있다.
가능하면 한번에 데이터를 조회하여, 메모리에 저장해두고 처리를 한 다음, 그 결과를 한번에 데이터베이스에 저장하는것이 좋다.
- 일반적으로 같은 서비스에 사용되는 웹, API, 배치, 기타 프로젝트들은 서로 영향을 준다.
배치 처리가 진행되는 동안 다른 프로젝트 요소에 영향을 주는 경우가 없는지 주의해야 한다.
- 스프링 부트 배치는 스케쥴러를 제공하지 않는다.
스프링에서 제공하는 쿼츠 프레임워크(Quartz Framework)를 같이 사용해야 한다.
Linux의 crontab은 서버마다 따로 스케쥴링을 관리해야하기 때문에 권장되지 않는다.
쿼츠를 사용하면 클러스터링 뿐만 아니라, 다양한 스케쥴링 기능, 실행 이력 관리 등 여러 이점을 얻을 수 있다.
Gradle 의존성
compile('org.springframework.boot:spring-boot-starter-batch')
testCompile('org.springframework.batch:spring-batch-test')