54 lines
1.7 KiB
Markdown
54 lines
1.7 KiB
Markdown
# 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_briefing` → `NaverWorksBriefingSkill.process_briefing`
|
|
- `daily_summary` → `DMSkill.send_daily_summary_dm`
|
|
- `companyx_news` → `NewsPostingSkill.process_news_batch`
|
|
- `lunch_worldcup` → `send_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 수정 필요
|
|
- 스케줄 코드와 비즈니스 로직 혼재
|
|
|