--- kind: CONCEPT slug: adapter-outbound-notification-c04 title: unhealthy 조건 넷에 DRAINING이 없다 topic: security-and-trust-boundaries project: clean-architecture-backend-template status: 게시 전 sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 rootTreeNode: concept:adapter-outbound-notification-c04 evidenceCapturedOn: 2026-09-01 assets: - key: adapter-outbound-notification-c04 file: ../../../final/evidence/rendered/adapter-outbound-notification-c04.svg evidence: - ../../../final/evidence/raw/adapter-outbound-notification-c04.txt source: - 원본 분석 절은 analysis/13-adapter-outbound-notification.md#L619 이다. module: adapter-outbound-notification --- # unhealthy 조건 넷에 DRAINING이 없다 `NotificationHealthReporter.snapshot()`이 `healthy = false`로 넘어가는 조건은 넷이고, `DRAINING`은 그 목록에 없다. 로테이션 중 드레인은 정상 운영이므로 그 자체로는 옳다. ## 본문 `NotificationHealthReporter.snapshot()`이 `healthy = false`로 넘어가는 조건은 넷이다. | 조건 | 위치 | |---|---| | 감시 대상 프로파일이 레지스트리에 없음 (`UNREGISTERED`) | `:57-62` | | 상태가 `AUTHENTICATION_FAILED` 또는 `DISABLED` | `:64-67` | | provider는 있는데 라우팅된 채널이 하나도 없음 | `:78-80` | | 서빙 상태가 선언된 임계치를 넘음 | `:83-85` | ## 세 번째 조건에 붙은 자기고발 "A platform with providers but no route accepts every request and delivers none. It was reported healthy because every runtime was healthy — **which was true and beside the point**." ## 분석 원문의 조건 표 :::evidence key="adapter-outbound-notification-c04" alt="분석 문서 analysis/13-adapter-outbound-notification.md 에서 이 기록의 근거 절을 그대로 잘라낸 15줄. 코드베이스를 측정한 것이 아니라 원본 판정이 무엇을 적었는지를 보여 준다." caption="analysis/13-adapter-outbound-notification.md 발췌 — 15줄" zoom="true" ::: ## DRAINING이 목록에 없다 여기서 눈에 띄는 것은 **`DRAINING`이 목록에 없다**는 점이다. 로테이션 중 드레인은 정상 운영이므로 그 자체로는 옳다. 그러나 §13의 P2와 겹치면 부작용이 하나 더 생긴다 — 아래 §21.2.