본문으로 건너뛰기

알림 Provider 선택 가이드 (on-prem / cloud)

GenD 의 알림 시스템 (NotificationService) 은 5개 provider 를 지원하며, 운영 환경에 맞춰 선택 가능합니다. 본 가이드는 환경별 권장사항과 NotificationChannel 등록 절차를 정리합니다.

환경별 권장 Provider

환경권장 provider비권장이유
GenD prod (Azure AKS, dwmyoung 팀)SlackProvider, EmailProvider외부 인터넷 outbound 허용, ChatOps 표준
on-prem 가스공사EmailProvider (SMTP)Slack/Telegram사내 메일 서버 — 외부 의존성 0, 보안 정책 적합
on-prem 일반 (Mattermost/Rocket.Chat 보유)WebhookProviderSlack사내 ChatOps 또는 SIEM 연동
차단 환경 (보안 등급 높음)GenOSNotificationProvider모든 외부GenOS 플랫폼 내부 알림만, 외부 통신 0
글로벌 SaaS 운영SlackProvider표준 ChatOps

Provider 별 구성

SlackProvider (외부 webhook)

# Slack workspace admin 이 Incoming Webhooks 발급
# https://api.slack.com/messaging/webhooks
WEBHOOK_URL="https://hooks.slack.com/services/T01234/B56789/abcdef..."

curl -X POST https://gend.genon.ai/api/v1/notification-channels \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d "{
\"name\": \"mlops-alerts\",
\"provider\": \"slack\",
\"config\": {\"webhook_url\": \"$WEBHOOK_URL\"},
\"events\": [\"drift.breach\"],
\"enabled\": true
}"

제약: 외부 인터넷 outbound (hooks.slack.com) 통신 필요. 폐쇄망 환경 사용 불가.

EmailProvider (사내 SMTP)

curl -X POST https://gend.genon.ai/api/v1/notification-channels \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "mlops-alerts-email",
"provider": "email",
"config": {
"smtp_host": "smtp.kogas.co.kr",
"smtp_port": 587,
"smtp_use_tls": true,
"smtp_username": "gend-alerts@kogas.co.kr",
"smtp_password": "<vault-secret>",
"from": "gend-alerts@kogas.co.kr",
"to": ["mlops-team@kogas.co.kr"]
},
"events": ["drift.breach"],
"enabled": true
}'

장점: 모든 on-prem 환경에서 동작. 사내 메일 시스템 활용 — 외부 의존 0.

WebhookProvider (일반 HTTP)

사내 ChatOps (Mattermost / Rocket.Chat / Teams Connector) 또는 SIEM (Splunk / ELK / 사내 모니터링) 연동.

curl -X POST https://gend.genon.ai/api/v1/notification-channels \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "mlops-alerts-mattermost",
"provider": "webhook",
"config": {
"url": "https://mattermost.kogas.local/hooks/abc...",
"method": "POST",
"headers": {"Content-Type": "application/json"}
},
"events": ["drift.breach"],
"enabled": true
}'

호환: Mattermost / Rocket.Chat / Slack-compatible 모든 webhook (사내 hosting). 사내 SIEM 도 동일 패턴.

GenOSNotificationProvider (내부 전용)

폐쇄망/차단 환경 — GenOS 플랫폼 내부 알림 UI 만 사용:

curl -X POST https://gend.genon.ai/api/v1/notification-channels \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "mlops-alerts-genos",
"provider": "genos",
"config": {
"target_user_group": "mlops-admins"
},
"events": ["drift.breach"],
"enabled": true
}'

최강 보안: 외부 통신 0, GenOS user_group 멤버에게만 in-app notification.

이벤트 타입 (events 배열)

현재 NotificationService 가 dispatch 하는 event_type 목록:

event_type발생 시점추가 metadata
drift.breachDriftService.compute_and_persist() 시 breach 감지model_name, drift_score, drifted_features
drift.warndrift_score 가 warn threshold 초과model_name, drift_score
model.predict.deniedKServe predict ABAC 차단 (#1282)model_name, subject_id, reason
model.deployedKServe InferenceService 배포 완료model_name, deployment_id, namespace
approval_requested승인 요청 생성 (#3317)request_id, request_type, status, url
approval_decided승인/거부 결정 (#3317)request_id, request_type, status, url

여러 채널이 같은 event_type 구독 가능 (예: Slack + Email 동시 발송).

승인 알림 받기 (v1.2.1+)

승인 요청은 생성·결정 시 위 두 이벤트를 발행하지만, 구독 채널이 없으면 아무에게도 전달되지 않는다. 요청은 notification_event_log 에 남아 GET /api/v1/events 로 조회할 수 있을 뿐이다. 승인 담당자가 실제로 알림을 받으려면 채널을 등록해야 한다:

curl -X POST https://gend.genon.ai/api/v1/notification/channels \
-H "Authorization: Bearer $ADMIN_TOKEN" -H "Content-Type: application/json" \
-d '{
"name": "approval-queue-slack",
"provider_type": "slack",
"config_json": {"webhook_url": "https://hooks.slack.com/services/..."},
"events": ["approval_requested", "approval_decided"],
"severity_filter": "all"
}'

:::warning 알림 본문에는 요청 내용이 담기지 않는다 승인 이벤트는 request_id·request_type·status 만 싣는다. 요청 제목·신청자·대상 테이블·워크스페이스는 의도적으로 제외한다 — notification_event_logGET /api/v1/events모든 인증 사용자에게 열려 있어(워크스페이스 필터 없음) 본문에 담는 순간 전 테넌트에 공개되기 때문이다. 알림은 "요청이 도착했다"는 신호이고, 내용 확인과 승인/거부는 앱의 데이터 액세스 → 검토 화면에서 한다. :::

검증 절차

채널 등록 후 검증:

# 1. 채널이 events 매핑 정상 등록되었는지 확인
curl -H "Authorization: Bearer $ADMIN_TOKEN" \
https://gend.genon.ai/api/v1/notification-channels

# 2. drift breach 강제 트리거 (테스트용)
curl -X POST https://gend.genon.ai/api/v1/models/credit_risk/drift/compute \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"force_breach": true, "rows_evaluated": 10000, "drift_score": 0.95}'

# 3. 알림 도착 확인
# - Slack: 채널에 메시지 도착
# - Email: 수신함 확인
# - Webhook: 사내 endpoint 로그
# - GenOS: 사용자 in-app notification

# 4. drift_report.notified_at 갱신 검증
curl -H "Authorization: Bearer $ADMIN_TOKEN" \
"https://gend.genon.ai/api/v1/models/credit_risk/drift?limit=1" \
| python3 -c "import sys,json; print(json.loads(sys.stdin.read())[0]['notified_at'])"

운영 권장사항

  1. on-prem 신규 배포 시 Email 우선 — 외부 의존 0, 사내 메일 서버 활용.
  2. 다중 채널 등록 — primary (in-app) + secondary (Email) 로 fail-safe.
  3. Webhook URL 은 Vault 저장 — secret 직접 노출 금지. ESO 로 Kubernetes secret sync 후 환경변수 주입.
  4. 이벤트 구독 최소화 — drift 외 model.predict.denied 등 noisy event 는 별도 채널/구독 분리.

관련