단체 알림 진행도 응답
관리자 페이지에서 앱으로 단체 알림의 진행도를 볼 수 있으면 좋겠다는 요구사항이 생겼다. 실시간으로 정확하게 알려줄 필요는 없다고는 했다. 그래서 관리자 페이지에서 사용할 진행도 API를 만들어 명세서를 전달하기로 했다.
✔ 비동기 멀티 스레드 환경
단체 알림은 한 번에 약 100만 건 이상을 보낼 수 있도록 설계가 되었다. 비동기 멀티 스레드 환경으로 구성했으며, 보내는 알림의 전체 수를 나누어 각 스레드에 할당을 했다.
✔ 고려 사항
비동기로 처리가 되다 보니, 각 스레드의 값을 하나로 합칠 수 있는 공유 자원이 필요했다. 그리고 하나의 단체 메시지만 있는 것이 아니었기 때문에 각 단체 메시지마다 구별을 해서 진행도를 처리해야 했다. 마지막으로 단체 알림 서버가 증원이 될 수 있기 때문에 여러 서버가 공유할 수 있어야 했다.
✔ Redis Command 사용
고려 사항을 만족하고 현재 사용을 하고 있는 기술 중에 가장 적합한 것은 레디스 캐시였다. 레디스를 사용하여 처리를 했으며, 각 스레드가 접근을 해 진행도를 상승시켜야 하기 때문에 동시성 문제와 값 상승을 시킬 수 있는 Incr를 사용하기로 했다.
incr key
추가적으로 처리량을 1씩 추가할 때마다 레디스에 접근하면 부하가 발생할 수 있기 때문에 1000 단위로 끊어서 처리하기로 했다. 레디스에 제공해 주는 incrby를 사용하기로 했다.
incrby key 1000
✔ 참고
'프로젝트' 카테고리의 다른 글
AWS SQS 메시지 소비할 때 Visibility Timeout 문제 (0) | 2024.08.04 |
---|---|
Header 데이터 처리에 발생하는 예외에 람다 사용하기 (0) | 2024.07.21 |
사용하면서 느낀 Kotlin의 Null Safety (0) | 2024.07.01 |
Java Spring에서 Kotlin' Data Class의 Json Parsing 문제 (0) | 2024.06.09 |
Java에서 Mybatis Custom TypeHandler 생성해서 사용하기 (0) | 2024.06.02 |