계획 문서 분리: DB 스케줄러 관리 계획을 plans/260102_db_scheduler_management.md로 이동

This commit is contained in:
Claude-51124 2026-01-02 11:34:36 +09:00
parent 710c31f088
commit 8f27d9afb9
2 changed files with 58 additions and 47 deletions

View File

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

View File

@ -1,52 +1,10 @@
# DB 기반 동적 스케줄러 관리 시스템
## 날짜: 2025-09-22
## 작성자: Claude / happybell80
## 관련 서비스: rb8001
## 상태: 계획
**날짜**: 2025-09-22
**작성자**: 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 수정 필요
- 스케줄 코드와 비즈니스 로직 혼재
## 계획
→ 상세: [plans/260102_db_scheduler_management.md](../../plans/260102_db_scheduler_management.md)