From 5a2ced624445ae3853f672329f8cb6fa6f84e62f Mon Sep 17 00:00:00 2001 From: happybell80 Date: Mon, 22 Sep 2025 22:36:59 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20DB=20=EA=B8=B0=EB=B0=98=20=EB=8F=99?= =?UTF-8?q?=EC=A0=81=20=EC=8A=A4=EC=BC=80=EC=A4=84=EB=9F=AC=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20=EC=8B=9C=EC=8A=A4=ED=85=9C=20=EB=AC=B8=EC=84=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20(04)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0919_naverworks_slack_02_daily_briefing.md | 1 + ...rworks_slack_04_db_scheduler_management.md | 52 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 troubleshooting/250919_naverworks_slack_04_db_scheduler_management.md diff --git a/troubleshooting/250919_naverworks_slack_02_daily_briefing.md b/troubleshooting/250919_naverworks_slack_02_daily_briefing.md index 80b4671..0f87c5a 100644 --- a/troubleshooting/250919_naverworks_slack_02_daily_briefing.md +++ b/troubleshooting/250919_naverworks_slack_02_daily_briefing.md @@ -70,6 +70,7 @@ ### 4.2 rb8001 구현 - [ ] naverworks_briefing_skill.py 파일 생성 - [ ] APScheduler 잡 등록 (09:00 KST, main.py) + - 주의: main.py는 이미 732줄로 과도함, 최소한의 등록만 - [ ] 환경변수 설정: - NAVERWORKS_BRIEFING_ENABLED=true - NAVERWORKS_BRIEFING_CHANNEL_ID=C09C98KK2TT diff --git a/troubleshooting/250919_naverworks_slack_04_db_scheduler_management.md b/troubleshooting/250919_naverworks_slack_04_db_scheduler_management.md new file mode 100644 index 0000000..de170a4 --- /dev/null +++ b/troubleshooting/250919_naverworks_slack_04_db_scheduler_management.md @@ -0,0 +1,52 @@ +# DB 기반 동적 스케줄러 관리 시스템 + +## 날짜: 2025-09-22 +## 작성자: Claude / happybell80 +## 관련 서비스: rb8001 +## 상태: 계획 + +--- + +## 1. 목적 +main.py 732줄 중 130줄이 스케줄 관련 코드. DB로 이동하여 동적 관리. + +## 2. 테이블 구조 +- scheduled_jobs 테이블 +- 컬럼: id(UUID), name, job_type, cron_expression, enabled, config(JSONB) +- 인덱스: enabled, job_type + +## 3. Job Type 매핑 +- naverworks_briefing → NaverWorksBriefingSkill.process_briefing +- daily_summary → DMSkill.send_daily_summary_dm +- companyx_news → NewsPostingSkill.process_news_batch +- lunch_worldcup → send_lunch_worldcup_notification + +## 4. 동작 방식 +1. 서버 시작 시 DB에서 enabled=true 조회 +2. job_type으로 함수 매핑 +3. APScheduler에 등록 +4. 런타임 중 API로 추가/수정/삭제 + +## 5. API 엔드포인트 +- POST /api/scheduler/jobs - 새 잡 추가 +- PATCH /api/scheduler/jobs/{name} - 스케줄 수정 +- DELETE /api/scheduler/jobs/{name} - 잡 삭제 +- GET /api/scheduler/jobs - 목록 조회 + +## 6. 데이터 예시 +| name | job_type | cron_expression | config | +|------|----------|-----------------|---------| +| naverworks_daily | naverworks_briefing | 0 9 * * mon-fri | {"channel_id": "C09C98KK2TT"} | +| team_summary | daily_summary | 0 9 * * 1-5 | {} | +| companyx_news | companyx_news | 0 10 * * mon-fri | {"channel_id": "C09CP4MDX71"} | + +## 7. 장점 +- 재배포 없이 스케줄 변경 +- 웹 UI로 관리 가능 +- 히스토리 추적 +- 백업/복구 용이 + +## 8. 현재 문제점 +- 환경변수 산재 (DAILY_SUMMARY_ENABLED 등) +- 새 스케줄마다 main.py 수정 필요 +- 스케줄 코드와 비즈니스 로직 혼재 \ No newline at end of file