From aa9ff7fe04c94515e78bb56c3525c80fd629ed46 Mon Sep 17 00:00:00 2001 From: qorgh529 Date: Mon, 27 Apr 2026 21:04:31 +0900 Subject: [PATCH] =?UTF-8?q?docs:=202026-04-27=20=EC=95=8C=EB=A6=BC=20?= =?UTF-8?q?=EC=B1=84=EB=84=90=20=EA=B4=80=EB=A6=AC=20UI=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=82=B4=EC=9A=A9=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/README.md b/README.md index b8cb3b5..777fe12 100755 --- a/README.md +++ b/README.md @@ -766,3 +766,59 @@ fetch('/api/admin/notify-test', { - **backend/frontend 이미지 주소** — 내부 서비스명(`gitea-http.gitea.svc.cluster.local:3000`) → 외부 IP(`192.168.10.101:30000`)로 변경 - **notifier.py, monitor.py 누락** — Dockerfile에 파일이 있었으나 `--no-cache` 재빌드로 해결 - **notify-secrets** — 기존 Secret이 잘못된 값으로 등록되어 있어 재생성 + +### 2026-04-27 (알림 채널 관리 UI 추가) + +#### 기능 추가 +- **🔔 알림 채널 관리 페이지** — 관리자 탭에 추가, 웹에서 직접 알림 채널 추가/수정/삭제 가능 +- **다중 채널 지원** — Discord 전용 / Gmail 전용 / Discord+Gmail 혼합 채널을 복수로 등록 가능 +- **채널 유형별 발송 (B방식)** — 채널 유형과 알림 종류의 교집합으로 발송 대상 자동 결정 +- **DB 기반 알림 설정** — `notify_channels` 테이블에 저장, Pod 재시작 후에도 설정 유지 +- **환경변수 fallback** — DB 채널 미등록 시 K8s Secret 환경변수로 자동 대체 +- **notifier.py 전면 개선** — 매 발송 시 DB에서 활성 채널 목록 직접 조회 후 발송 + +#### 채널 유형별 발송 규칙 + +| 채널 유형 | notify_both (Pod 이상/복구) | notify_discord_only (계정잠금/임시PW) | notify_email_only (인증서만료) | +|---------|--------------------------|--------------------------------------|-------------------------------| +| Discord+Gmail | Discord + Gmail | Discord만 | Gmail만 | +| Discord 전용 | Discord만 | Discord만 | 발송 안 함 | +| Gmail 전용 | Gmail만 | 발송 안 함 | Gmail만 | + +#### 알림 채널 등록 방법 (웹 UI) +1. 관리자 로그인 → **🔔 알림 설정** 탭 +2. 좌측 폼에서 채널 이름, 유형, Webhook URL / Gmail 정보 입력 +3. **💾 저장** 클릭 → 우측 목록에 추가됨 +4. 목록에서 ✏️ 클릭 → 폼에 값 자동 입력 후 수정/저장 +5. 🗑️ 클릭 → 채널 삭제 +6. **📨 테스트 발송** 버튼으로 등록된 모든 채널에 테스트 알림 발송 + +#### DB 테이블 수동 생성 (신규 배포 전 필요 시) +```bash +kubectl exec -n web-portal deployment/backend -- python3 -c " +import psycopg2 +conn = psycopg2.connect(host='postgres-service', database='portaldb', user='portaluser', password='portalpass') +cur = conn.cursor() +cur.execute('''CREATE TABLE IF NOT EXISTS notify_channels ( + id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, type VARCHAR(20) NOT NULL, + discord_webhook_url TEXT DEFAULT chr(0), gmail_user VARCHAR(200) DEFAULT chr(0), + gmail_app_password TEXT DEFAULT chr(0), alert_email_to VARCHAR(200) DEFAULT chr(0), + enabled BOOLEAN DEFAULT TRUE, created_at TIMESTAMP DEFAULT NOW() +)''') +conn.commit() +print('완료') +" +``` + +> ℹ️ 새 `main.py` 배포 후에는 startup 시 자동으로 테이블이 생성되므로 수동 생성 불필요. + +#### 프로젝트 구조 변경 +``` +backend/ +├── main.py ← 알림 채널 CRUD API 추가, notify_channels 테이블 자동 생성 +├── notifier.py ← DB 기반 다중 채널 발송으로 전면 재작성 +└── monitor.py ← 변경 없음 (notifier 인터페이스 동일) + +frontend/ +└── index.html ← 🔔 알림 설정 탭 추가 (좌측 폼 + 우측 리스트 UI) +```