DOCS/journey/plans/260102_db_scheduler_management.md

1.7 KiB

DB 기반 동적 스케줄러 관리 시스템

날짜: 2026-01-02 작성자: happybell80 관련 서비스: rb8001 상태: 계획


목적

main.py 732줄 중 130줄이 스케줄 관련 코드. DB로 이동하여 동적 관리.

테이블 구조

  • scheduled_jobs 테이블
  • 컬럼: id(UUID), name, job_type, cron_expression, enabled, config(JSONB)
  • 인덱스: enabled, job_type

Job Type 매핑

  • naverworks_briefingNaverWorksBriefingSkill.process_briefing
  • daily_summaryDMSkill.send_daily_summary_dm
  • companyx_newsNewsPostingSkill.process_news_batch
  • lunch_worldcupsend_lunch_worldcup_notification

동작 방식

  1. 서버 시작 시 DB에서 enabled=true 조회
  2. job_type으로 함수 매핑
  3. APScheduler에 등록
  4. 런타임 중 API로 추가/수정/삭제

API 엔드포인트

  • POST /api/scheduler/jobs - 새 잡 추가
  • PATCH /api/scheduler/jobs/{name} - 스케줄 수정
  • DELETE /api/scheduler/jobs/{name} - 잡 삭제
  • GET /api/scheduler/jobs - 목록 조회

데이터 예시

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"}

장점

  • 재배포 없이 스케줄 변경
  • 웹 UI로 관리 가능
  • 히스토리 추적
  • 백업/복구 용이

현재 문제점

  • 환경변수 산재 (DAILY_SUMMARY_ENABLED 등)
  • 새 스케줄마다 main.py 수정 필요
  • 스케줄 코드와 비즈니스 로직 혼재