# 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 수정 필요 - 스케줄 코드와 비즈니스 로직 혼재