휴면회원 상태변경 스프링 배치를 통해
스프링배치를 구현하면서 이런 의문점이 생겼습니다.
‘솔직히 이렇게 스프링 배치로 긴 코드를 구현할 것 없이
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 라는 설정을 통해 확인할 수 있습니다.
이 외에도 스프링배치에는 훨씬 더 다양한 기능이 있고 장점이 많겠지만,
현재까지 구현한 내용에서 실질적으로 느껴본 스프링 배치의 장점을 정리해보았습니다.
사실 위 내용도 코드로 직접 구현하려면 당연히 할 수는 있습니다.
하지만 그렇게 배치 처리를 위한 로직을 새로 만드는 것보다,
스프링 배치에서 제공하는 기능을 이용하면 생산성이 더 높아지기에
프레임워크를 사용한다는 결론을 내렸습니다.
👉 위 장점을 바탕으로 배치를 구현함에 있어
스프링 배치를 활용하는 것도 하나의 선택지로 고려할 수 있다고 생각합니다.
'Programming > Java & Spring 관련 내용 정리' 카테고리의 다른 글
[Spring] 멀티모듈 구성 방법 (0) | 2022.10.28 |
---|---|
[Spring Batch] 오류가 나면 어떻게 해야할까? - Skip과 Retry (0) | 2022.10.28 |
[Spring Batch] Step에서 데이터를 처리하는 방법 2가지 (+ 예제) (0) | 2022.09.22 |
[Spring Batch] 로그인한지 1년 지난 회원 -> 휴면회원으로 상태변경하는 배치구현 (0) | 2022.09.22 |
[Spring] Filter와 Interceptor의 차이가 무엇인가요? (+ AOP) (0) | 2022.08.15 |