diff --git a/journey/plans/260116_배당_귀족주_자동_수집_로빙_통합_계획.md b/journey/plans/260116_배당_귀족주_자동_수집_로빙_통합_계획.md new file mode 100644 index 0000000..a77117b --- /dev/null +++ b/journey/plans/260116_배당_귀족주_자동_수집_로빙_통합_계획.md @@ -0,0 +1,114 @@ +# 배당 귀족주 자동 수집 로빙 통합 계획 + +**작성일**: 2026-01-16 +**작성자**: Agent +**태그**: `dividend-aristocrats`, `robeing`, `rb8001`, `scheduler`, `automation` +**참고 문서**: `260102_db_scheduler_management.md` (로빙 스케줄러 시스템) + +--- + +## 목표 + +배당 귀족주 데이터 자동 수집을 로빙(rb8001)의 DB 기반 스케줄러 시스템에 통합하여, 환경변수 재시작 없이 동적 관리 가능하도록 한다. + +**참고**: 로빙 스케줄러 시스템은 `DOCS/journey/troubleshooting/260102_db_scheduler_management.md` 참조 + +--- + +## 현재 상태 + +### 완료된 작업 + +1. **데이터 수집 스크립트**: `goosefarminvesting/backend/scripts/collect_dividends.py` 수동 실행으로 전체 69개 종목 수집 완료 +2. **Supabase 데이터**: `dividend_stocks`(69개), `dividend_history`(10,895건), `dividend_metrics`(68개) 저장 완료 + +### 미완료 작업 + +1. **자동 수집 설정**: 현재 수동 실행만 가능, 자동 스케줄링 미구현 + +--- + +## 구현 계획 + +### Phase 1: rb8001 스케줄러 작업 생성 + +**작업 내용**: +1. `rb8001/app/scheduler/jobs/dividend_collector.py` 생성 + - `_run_dividend_collector_with_logging()` 함수 구현 + - `subprocess.run()`으로 `collect_dividends.py --update-all` 실행 + - 로깅: 시작/완료/에러 기록 +2. 스크립트 경로: `/home/admin/goosefarminvesting/backend/scripts/collect_dividends.py` + +**예상 시간**: 30분 + +**파일 참조**: +- `rb8001/app/scheduler/jobs/diary_generator.py`: 스케줄러 작업 예시 +- `rb8001/app/scheduler/db_loader.py`: `JOB_TYPE_MAP` 구조 확인 + +--- + +### Phase 2: DB에 스케줄 등록 + +**작업 내용**: +1. `scheduled_jobs` 테이블에 레코드 추가 + - `name`: `'dividend_collector'` + - `job_type`: `'dividend_collector'` + - `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'` + +**예상 시간**: 20분 + +--- + +### Phase 3: 테스트 및 검증 + +**작업 내용**: +1. rb8001 서버 재시작 후 스케줄 자동 로드 확인 +2. 수동 실행 테스트: `POST /api/scheduler/jobs/dividend_collector/run` +3. Supabase 데이터 확인: `dividend_history` 테이블 최신 데이터 확인 + +**예상 시간**: 20분 + +--- + +## 아키텍처 + +### 데이터 흐름 + +``` +rb8001 스케줄러 (APScheduler) + ↓ (매주 일요일 새벽 3시) +dividend_collector.py (subprocess.run) + ↓ +goosefarminvesting/backend/scripts/collect_dividends.py --update-all + ↓ +Supabase (dividend_stocks, dividend_history, dividend_metrics) +``` + +### 스케줄러 패턴 + +- `scheduled_jobs` 테이블에 스케줄 정의 저장 +- `db_loader.py`의 `JOB_TYPE_MAP`으로 job_type → 함수 매핑 +- `_run_*_with_logging()` sync 래퍼 함수 패턴 +- 환경변수 재시작 없이 DB에서 동적 관리 + +--- + +## 파일 참조 + +- `rb8001/app/scheduler/jobs/diary_generator.py`: 스케줄러 작업 예시 +- `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`: 실행 시간 참고 + +--- + +## 다음 단계 + +1. Phase 1 실행: rb8001 스케줄러 작업 생성 +2. Phase 2 실행: DB에 스케줄 등록 +3. Phase 3 실행: 테스트 및 검증 +4. 로빙 troubleshooting 문서 작성: 구현 완료 후 기록