diff --git a/journey/plans/260116_배당_귀족주_자동_수집_로빙_통합_계획.md b/journey/plans/260116_배당_귀족주_자동_수집_로빙_통합_계획.md index fd75ba0..0ee84c6 100644 --- a/journey/plans/260116_배당_귀족주_자동_수집_로빙_통합_계획.md +++ b/journey/plans/260116_배당_귀족주_자동_수집_로빙_통합_계획.md @@ -30,19 +30,23 @@ ## 구현 계획 -### Phase 1: rb8001 스케줄러 작업 생성 +### Phase 1: rb8001 서비스 및 스케줄러 작업 생성 **작업 내용**: -1. `rb8001/app/scheduler/jobs/dividend_collector.py` 생성 - - `_run_dividend_collector_with_logging()` 함수 구현 - - `subprocess.run()`으로 `collect_dividends.py --update-all` 실행 +1. `rb8001/app/services/dividend/dividend_collector_service.py` 생성 + - `collect_all_dividends()` async 함수 구현 + - `collect_dividends.py`의 메인 로직을 서비스로 이동하거나 import하여 사용 + - 로깅: 시작/완료/에러 기록 +2. `rb8001/app/scheduler/jobs/dividend_collector.py` 생성 + - `_run_dividend_collector_with_logging()` sync 래퍼 함수 구현 + - `asyncio.run()`으로 서비스 함수 실행 (기존 패턴과 동일) - 로깅: 시작/완료/에러 기록 -2. 스크립트 경로: `/home/admin/goosefarminvesting/backend/scripts/collect_dividends.py` -**예상 시간**: 30분 +**예상 시간**: 1시간 **파일 참조**: -- `rb8001/app/scheduler/jobs/diary_generator.py`: 스케줄러 작업 예시 +- `rb8001/app/scheduler/jobs/diary_generator.py`: 스케줄러 작업 예시 (내부 모듈 import 패턴) +- `rb8001/app/scheduler/jobs/companyx_news.py`: 서비스 import 패턴 참고 - `rb8001/app/scheduler/db_loader.py`: `JOB_TYPE_MAP` 구조 확인 --- @@ -56,7 +60,12 @@ - `cron_expression`: `'0 3 * * 0'` (매주 일요일 새벽 3시) - `enabled`: `true` 2. `rb8001/app/scheduler/db_loader.py`의 `JOB_TYPE_MAP`에 매핑 추가 - - `'dividend_collector': 'app.scheduler.jobs.dividend_collector._run_dividend_collector_with_logging'` + ```python + "dividend_collector": { + "func": "_run_dividend_collector_with_logging", + "module": "app.scheduler.jobs.dividend_collector" + } + ``` **예상 시간**: 20분 @@ -80,13 +89,17 @@ ``` rb8001 스케줄러 (APScheduler) ↓ (매주 일요일 새벽 3시) -dividend_collector.py (subprocess.run) - ↓ -goosefarminvesting/backend/scripts/collect_dividends.py --update-all +dividend_collector.py (_run_dividend_collector_with_logging) + ↓ (asyncio.run) +dividend_collector_service.py (collect_all_dividends) ↓ Supabase (dividend_stocks, dividend_history, dividend_metrics) ``` +**기존 패턴 준수**: +- `subprocess.run()` 대신 내부 모듈 import 사용 (`diary_generator.py`, `companyx_news.py` 참고) +- `_run_*_with_logging()` sync 래퍼 → `asyncio.run()` → 내부 서비스 async 함수 실행 + ### 스케줄러 패턴 - `scheduled_jobs` 테이블에 스케줄 정의 저장 @@ -98,11 +111,12 @@ Supabase (dividend_stocks, dividend_history, dividend_metrics) ## 파일 참조 -- `rb8001/app/scheduler/jobs/diary_generator.py`: 스케줄러 작업 예시 -- `rb8001/app/scheduler/db_loader.py`: `JOB_TYPE_MAP` 정의 +- `rb8001/app/scheduler/jobs/diary_generator.py`: 스케줄러 작업 예시 (내부 모듈 import 패턴) +- `rb8001/app/scheduler/jobs/companyx_news.py`: 서비스 import 패턴 참고 +- `rb8001/app/scheduler/db_loader.py`: `JOB_TYPE_MAP` 정의 (딕셔너리 구조) - `rb8001/app/state/scheduler_repository.py`: `scheduled_jobs` 테이블 CRUD -- `goosefarminvesting/backend/scripts/collect_dividends.py:609`: 수집 스크립트 -- `goosefarminvesting/DOCS/journey/troubleshooting/251110_dividend_aristocrats_full_collection.md:60`: 실행 시간 참고 +- `goosefarminvesting/backend/scripts/collect_dividends.py`: 수집 로직 참고 (서비스로 이동) +- `DOCS/journey/troubleshooting/260102_db_scheduler_management.md`: 스케줄러 시스템 구조 ---