SKILL = Spring-Batch | RabbitMQ | Prometheus | Docker | JPA | MySQL SPEC ****= MiniPC(홈서버) - CPU(N100 4C/4T) | RAM (16GB) | SSD (512GB)
[문제상황]
유저가 설정한 시간에 회고 작성을 유도하는 푸시 알림을 전송하는 기능
****80% 유저가 설정한 회고 알림 시간이 저녁시간에 밀집되어 시간내에 전송가능한 배치시스템이 필요하다고 판단
기획 요구사항은 알림 발송이 1분내로 완료 되어야함 (ex 22:01 이 아닌 22:00내에 정확히 완료 되도록)
기존 시스템은 100만건 기준 56시간 이상 소요
[해결과정]
배치처리 구조도
JpaCursorItemReader 로 인한 OOM 발생, 한계점 파악 및 Keyset 페이지네이션 도입LIMIT 쿼리시 OOM 해결을 위한 driving query 패턴 적용[성과]