
최소한으로 울리는 알림 만들기: 비정상 병원 알림
두줄요약
Kafka 기반 병원 판정 흐름에 Redis와 Slack 알림을 결합해 에이전트 연결 끊김을 조기 감지했습니다.\n발송 지연·중복·복구 기준을 설계해 대응이 필요한 알림만 전달하도록 했습니다.
문제 상황
- 병원 PC 에이전트 연결 끊김으로 앱 접수가 중단돼도 사용자 문의 전까지 인지하지 못하는 운영 공백
- 휴게시간·휴진 같은 정상 접수 중단과 실제 연결 장애의 구분 필요
구조와 흐름
- MongoDB Change Stream, 일·주기 배치 요청을 Kafka 토픽으로 모아 1·2차 접수 상태 판정
- 판정 컨슈머 후처리에서 실사용 병원 Redis Set, 접수 가능 진료실, 에이전트 연결 상태를 조합한 Slack 알림 대상 선별
- Slack 메시지 ts를 알림 서버에 저장하고 복구 시 기존 스레드에 지속 시간 포함 답글 발송
선택 이유
- 별도 크론 대신 기존 판정 컨슈머의 결과를 재사용해 판정 기준 이원화와 크론 감시 부담 제거
- HSETNX와 Kafka 메시지 발행 시각 기반 끊김 경과 시간 측정으로 컨슈머 분산·재전달에 흔들리지 않는 발송 시점 확보
- Redis SET NX와 TTL lease로 다중 컨슈머의 중복 발송 방지 및 발송 중단 뒤 재시도 가능성 확보
트레이드오프
- 메시지 단위 요약 집계로 컨슈머 간 대기 없는 신속한 동시 장애 알림 선택
- 한 회차의 장애 병원이 여러 메시지로 나뉘면 전체 합산 기준을 넘어도 요약 알림이 누락될 수 있는 한계

