인프라 구축 완성 후 백엔드 업무에 참여했다.
알림 도메인과 일괄 알림 처리를 구현하기로 하고 방법을 고민했다.
FCM이 구축되어 있는 상황에서,

다음과 같은 엔티티를 설계했다.
기본 알림을 구축하는데는 어려움이 없었지만, 하루중 특정 시간에 사용자들에게 일괄 알림을 보내야 하는 상황이라면?
해당일 그림 일기를 작성하지 않은 사용자들에게 "아직 당일의 일기를 작성하지 않았습니다" 와 같은 알림을 보내고 싶었다.
현재는 회원의 수가 적어 스케줄러에서 Trigger를 발생 시키고 DB에 접근해 일기를 쓰지 않은 회원 리스트를 뽑아 알림을 처리할 수 있다.
하지만 회원의 수가 만명을 넘어 간다면?
알림을 처리중에 서버가 다운된다면?
이런 경우에 안정적으로 대규모 데이터 처리를 위한 기술이 바로 Spring Batch 라고 한다.
생각하는 Flow
해당 Flow를 적용하기 위해서는 Spring Batch 의 개념을 먼저 학습해야 했다.

해당 사진을 보면 Spring Batch의 구조를 확인할수 있다.
JobLancher를 통해서 Job을 호출할수 있고, 하나의 Job은 여러개의 Step으로 구성할 수 있다.
또한 하나의 Step은 Chunk or Tasklet으로 나뉜다.
간단한 일괄 처리이기 때문에 이번에는 1개의 Job, Step, Tasklet을 활용해서 기능을 구현하려고 한다.

Chunk를 사용한다면 3가지 단계로 나눠서 실행시킬수 있다.
Reader와 Processor에서는 1건씩 다뤄지고, Writer에선 Chunk 단위로 처리한다.
Reader에서 데이터를 하나 읽어온뒤, Processor에서 가공하고,데이터들을 별도의 공간에 모은 뒤, Chunk단위만큼 쌓이게 되면 Writer에 전달하고 Writer는 일괄 저장한다고 한다.
나는 읽어온 데이터를 변경하지 않기에 Tasklet이 더 적합하다고 판단이 들었다.
Batch의 큰 장점중 하나인 JobRepository 기능 또한 존재한다고 한다.

Spring Batch를 등록하면 다음과 같은 테이블들이 자동 생성되고 해당 Repository에 Batch의 동작을 기록해놓는다.
이를 통해 데이터 처리 도중 문제가 생겨도 문제가 생긴 지점을 기억하고 그 지점부터 이어서 처리할수 있다고 한다.
이래서 Batch를 사용하는거 같다.
다음 포스팅에서 실제로 Batch를 적용 해보고자 한다.
참고
[Spring Batch] Spring Batch의 장점
Spring Batch 가이드 - 배치 어플리케이션이란?
[spring batch] 스프링 배치 이해하고 적용하기