Development/Spring

Spring Framework 에서 Batch 구현하기

南山 2017. 9. 21. 17:03

Spring Framework 에서 Batch 구현하기

 

일반적으로 batch 작업은 일련의 작업을 몇개의 단위로 묶어서 연속적으로 일괄처리해주는 것을 말하며 일반적으로 일정시간(주로 야간)에 정기적으로 실행하거나 사용자의 요구에 의해서 실행된다.

 

규칙적으로 실행하기 위해서 scheduler 를 사용하며 background 에서 실행되기 위해서 thread 로 작동하는 경우가 많다.

 

이를 구현하기 위해서 몇가지 방법이 있는데, spring framework 에서는 

1. 단순한 단일 작업이냐 아니면 

2. 선/후행 작업으로 나눠지는 복잡한 작업이냐에 따라서 구현 방법을 달리한다.

 

전자의 경우 비즈니스 로직을 구현하고 thread 로 실행시킨다.

정기적으로 실행하는 경우는 scheduler 를 붙여서 구현한다.

후자의 경우는 선행작업이 완전히 commit 되어야 후행작업이 이루어지기 때문에 선행작업이 오류없이 완료되었는지도 확인해야 하고 오류가 발생하면 repository 에 저장했다가 해당 작업을 다시 실행해야 하는등의 복잡한 로직이 추가로 구현되어야 하는데 일련의 기능들을 개발자가 직접 구현하기 위해서는 상당한 리소스가 투입되어야 한다.

그런데 후자와 같은 경우는 spring framework 에서 제공하는 batch 모듈을 사용하면 간단하게 해결할 수 있다.

 

spring framework 에서 제공하는 batch 모듈은 작업의 단위를 job 으로 구분하고 각 job 은 여러개의 step 으로 구성되어 있다.

job 의 진행정보는 repository 에 저장되어 관리된다.

각 step 은 step1 > step2 > step3 의 순서대로 진행되는것을 보장하며 만약 오류가 발생하면 job 이 아닌 해당 step 만 restart 가 가능하다.

scheduler 는 제공하지 않기 때문에 직접 붙여줘야 하는데 일반적으로 quartz, crontab 을 많이 사용한다.

 

batch 모듈에 대한 모든 정보를 repository 에 저장해서 관리하기때문에 배치작업에 대한 모니터링 툴을 만드는것이 가능하다.