본문 바로가기

Programming/Java & Spring 관련 내용 정리

[Spring Batch] 스프링 배치를 써야 할까?

 

 

휴면회원 상태변경 스프링 배치를 통해

스프링배치를 구현하면서 이런 의문점이 생겼습니다.

 

 

[Spring Batch] 로그인한지 1년 지난 회원 -> 휴면회원으로 상태변경하는 배치구현

[ 실행흐름 ] 1. [ Job] Job은 스프링부트 배치를 처리함에 있어서 가장 상위 계층이다. JobBuilderFactory에서 생성된 JobBuilder를 통해 Job을 생성한다. ✏️ .incrementer(new RunIdIncrementer()) Spring..

domean.tistory.com

 

 

‘솔직히 이렇게 스프링 배치로 긴 코드를 구현할 것 없이

update user set status = 'inactive' where login_date > 2022-01-01

라는 업데이트 쿼리 날리는 API 를 스케쥴러로 호출하면 되는 거 아닌가?’

 

대용량 데이터가 아니라면, 위 방법이 훨씬 간단하다고 생각합니다.

 

하지만 이번에 스프링 배치를 구현하면서 느낀 실질적인 장점은 다음과 같습니다.

 

 

 


 

1. chunk 기반 배치로 구현 시, 

이 배치를 만든 사람이 무슨 배치를 구현하고자 하는지 가시적으로 더 파악하기 쉽다고 느꼈습니다.

 

 

예를 들어, 아래 코드를 보면

reader에서 마지막 로그인 일자가 1년 이전이면서 상태가 ACTIVE인 회원들을 찾아오고

processor에서 위 회원들의 상태를 INACTIVE로 바꾸고

wirter에서 회원 상태를 저장함을 알 수 있습니다.

 

단계적으로 무엇을 하고자 하는 배치인지 파악하기가 쉽습니다.

 

 

 

 


 

2. 데이터가 대용량인 경우, Chunk 기반 배치를 돌리면

데이터를 일정 단위로 끊어서 돌릴 수 있다는 장점이 있습니다.

 

예를 들면, 아래와 같이 100개 분량의 배치를 10개 단위로 끊어서 돌리는 것인데

데이터가 대용량이라면 이 부분이 큰 장점이 될 수 있겠다고 느꼈습니다.

 

 

 

 


 

3. 배치가 성공했는지 여부를 ‘Spring Batch 메타 테이블’을 통해 확인할 수가 있습니다.

 

배치를 실행하면 자동적으로 저장되는 BATCH_STEP_EXECUTION 테이블의 데이터를 보면 아래와 같습니다.

어떤 배치 step인지, 그리고 그 step이 성공했는지 여부 및 시간을 확인할 수 있습니다.

 

 

 


 

4. 이 배치가 실행될 때 처리한 데이터 건 수는 얼마인지, 얼마큼의 시간이 걸렸는지

listener 라는 설정을 통해 확인할 수 있습니다.

 

 

 

 

 

 

 


이 외에도 스프링배치에는 훨씬 더 다양한 기능이 있고 장점이 많겠지만,

현재까지 구현한 내용에서 실질적으로 느껴본 스프링 배치의 장점을 정리해보았습니다.

 

사실 위 내용도 코드로 직접 구현하려면 당연히 할 수는 있습니다.

 

하지만 그렇게 배치 처리를 위한 로직을 새로 만드는 것보다,

스프링 배치에서 제공하는 기능을 이용하면 생산성이 더 높아지기에

프레임워크를 사용한다는 결론을 내렸습니다.

 

 

👉 위 장점을 바탕으로 배치를 구현함에 있어

스프링 배치를 활용하는 것도 하나의 선택지로 고려할 수 있다고 생각합니다.