DOCS/troubleshooting/250919_naverworks_slack_04_db_scheduler_management.md

1.7 KiB

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