ADR-003 쿨다운/dedup 상태 = Redis SET NX PX (신호 단위)
Status
Accepted (2026-07-03)
Context
동일 알람 신호(엔드포인트 + source + severity)는 15분간 재알림을 억제해야 한다(FR-7). 억제 판정은 LLM 호출 前에 이뤄져야 비용·레이턴시를 아낀다(PRD 문제정의). ⑦ 다중 인스턴스 확장을 고려해야 한다.
Decision
Redis SET key value NX PX 900000으로 신호 단위 쿨다운을 구현한다. 키: alerting:cooldown:{env}:{endpoint}:{source}:{severity}. 획득 성공=쿨다운 진입(발송 진행), 실패=쿨다운 중(억제). TTL 15분.
Alternatives
- DB 유니크 제약 + 시각 비교 — TTL 자동만료 없음(정리 배치 필요), 억제 판정에 DB 왕복.
- 인메모리 캐시(Caffeine) — ⑦ 다중 인스턴스에서 인스턴스별 상태 분리 → 중복 발송.
Rationale
- 원자적 dedup(
SET NX) — 동시 동일 신호에서 한 인스턴스만 획득. - TTL 자동 만료 — 별도 정리 불필요.
- Redis 기설치(
spring-boot-starter-data-redis),RedisDistributedLock등 선례. - dedup 키가 “신호”라 LLM 호출 전에 판정(FR-7 의도).
Consequences
- 쿨다운 키 계약은 INFRA-01(private-redis-implementer)이 문서로 확정.
AlertCooldownRepositoryinterface(domain) +AlertCooldownRepositoryImpl(infra, RedisTemplate).- 멱등 키 = 쿨다운 신호 키 — 규칙 엔진 재발신·내부 재호출이 15분 창에서 첫 건만 통과.