왜 Notification을 Spring Batch로 했을까?

devdo·2022년 5월 23일
1

Project

목록 보기
1/11
post-thumbnail

Spring Batch 경험

이전에 프로젝트를 진행하면서 매일 00시에 테이블을 일괄적으로 갱신해는 작업이 있었습니다. 경험이 부족했던 그땐 batch 작업이라는 것이 스케쥴링을 돌리면서 진행하는 어떠한 것이라고 생각했었습니다.

기능의 존재만 어렴풋이 알고만 있었던 것이지요. 시간이 지나 이번에 개인 프로젝트를 진행하면서 결국 spring batch를 맞이하게 되었고 스케쥴러까지 같이 구현하게 되었습니다.


Spring Batch와 스케줄러의 차이가 뭔가??

이 둘의 차이는 동작이 일어나는 행위를 하는 주체가 Spring batch이고
이를 유발하는 트리거가 스케줄러입니다.

이전에 작업할 때는 Spring batch를 사용하지 않고 스케줄러로 메서드를 실행하는 것으로 구현했던 걸 봤던 것 같습니다.

이번에 공부하면서 보니 Spring batch의 장점과 활용도를 잘 알게되었습니다.


Spring Batch가 뭔데 그래서 왜 사용하는 건가?

Spring batch는 대용량의 작업을 처리하는데 사용됩니다. 이를 서비스를 제공하고 있는 서버에서 실행시키게 되면 해당 서버의 리소스를 엄청나게 잡아먹어 성능 저하 혹은 프로그램다운이 되는 악영향을 미칠수 있습니다.

따라서 보통 배치 서버를 별도로 두고 배치 서버에서는 배치작업만 수행하도록 하게 작성합니다.


이해를 위해서 예시를 들어보면,

예를 들면 매일 새벽 2시에 호출된 API의 횟수를 카운트를 해야한다거나, 매출량을 정산해야 한다거나 하는 작업들이 있습니다. 

이러한 개별 작업 단위를 Batch Job이라고 합니다.
Spring Batch의 기본 용어 정리가 필요하시면 이 블로그를 참고 하시면 됩니다! 🙂
https://velog.io/@mooh2jj/SpringBoot-Batch


그래서 필자가 이번 프로젝트에 Spring batch를 쓴 이유는 간단하게 정리하면 이렇습니다.

1) 스프링의 기술을 배웠으므로 러닝커브가 낮다고 생각했다.
말 그대로 스프링 배치는 스프링의 기술과 철학을 사용하기 때문에 Spring을 학습했다면 러닝커브가 상당히 낮아지고 활용하기가 쉽다는 장점이 있습니다.

2) 다양한 Interface 및 구현체를 제공한다.
MyBatisReader, JdbcReader, RepositoryReader 등 제공해주는 객체들을 활용하면 DB에 있는 데이터를 손쉽게 조회할 수 있습니다.

3) 대용량 배치 처리에 적합하다.
제가 한 프로젝트에는 대용량의 트래픽을 산정하고 만들었습니다. 다시 말하면 대용량 작업을 처리하는데 배치 작업이 가장 맞다고 생각했습니다.

4) 실패 시 재시도를 해주는 기능을 제공한다.
프레임워크의 도움을 받지 않는다면 try-catch 문을 이용해서 재시도를 해야하지만, Spring Batch에서는 어떻게 재시도할 지에 대해서만 정의해주면 손쉽게 재시도가 가능합니다.

5) 손쉬운 이벤트 처리가 가능하다.
2)번과 비슷한 이유이기도 합니다. 이벤트 처리하는데 비동기 처리등(RabbitMQ, Kafka 등등)이 있었지만 제가 구현하고자 하는 처리에는 batch 작업으로 이벤트처리하는 데는 문제 없다고 생각했습니다.

6) 실행 이력에 대한 저장이 가능하다.
JobRepository를 이용해 실행 이력을 저장할 수 있습니다. Batch의 Meta Table이 존재합니다. 이 스키마에 실핼 Job 데이터들이 저장되기에 이력을 모니터링하고자 하는 프로젝트에 적합했습니다.


자 다음에는 이 Spring Batch 기술들을 제 프로젝트에 어떻게 적용시켰는지에 대해서 다음 포스팅 때 올려보도록 하겠습니다 😃

https://velog.io/@mooh2jj/Cursor-기반-vs-Paging-기반-ItemReader-정하기



출처 프로젝트

https://github.com/f-lab-edu/ward-study-reservation

profile
배운 것을 기록합니다.

0개의 댓글