스케줄러
ShedLock 기반 분산 스케줄러 작업 목록입니다.
작업 목록
| 작업명 | 주기 | 락 설정 | 설명 |
|---|---|---|---|
| 이용 종료 알림톡 | 매 10분 (정각 기준) | 20s ~ 40s | 예약 종료 시 카카오 알림톡 발송 |
| 네이버 예약 동기화 | 30초 간격 | 5s ~ 15s | 네이버 스마트플레이스 예약 크롤링 + 가상계좌 발급 |
| 네이버 세션 헬스체크 | 매시간 정각 | 30s ~ 60s | 네이버 API 쿠키 유효성 확인 |
| 쿠키 갱신 사전 알림 | 09:00, 23:00 | 30s ~ 60s | Slack으로 쿠키 갱신 리마인더 |
| 초과체류 감지 | 매 10분 (5초 오프셋) | 20s ~ 4m | YOLO 기반 룸 내 사람 감지 |
| 다중 인원 감지 | 매 5분 | 30s ~ 120s | 이용 중 2인 이상 감지 시 Discord 알림 |
| HA 헬스체크 | 매 5분 | 30s ~ 4m | HomeAssistant 연결 상태 확인 |
ShedLock
분산 환경에서 스케줄러 중복 실행을 방지합니다.
- 저장소: PostgreSQL
shedlock테이블 - lockAtLeastFor: 최소 락 유지 시간 (빠르게 끝나도 다른 인스턴스에서 재실행 방지)
- lockAtMostFor: 최대 락 유지 시간 (행 걸린 작업의 락 자동 해제)
로깅
@LogScheduler AOP 어노테이션으로 MDC에 서비스 라벨이 자동 설정됩니다.
| 라벨 | 작업 |
|---|---|
scheduler-alimtalk | 이용 종료 알림톡 |
scheduler-naver-crawler | 네이버 예약 동기화 |
scheduler-occupancy | 초과체류 감지 |
scheduler-ha-healthcheck | HA 헬스체크 |
Grafana Loki에서 서비스별로 로그를 필터링할 수 있습니다:
{service="scheduler-naver-crawler"} | json | level="ERROR"
연속 예약 처리
이용 종료 알림톡 발송 시, 다음 예약의 시작 시간이 현재 예약 종료 시간과 동일하면 연속 예약으로 판단하여 알림을 SKIP합니다.