diff --git a/journey/plans/260116_배당_귀족주_자동_수집_로빙_통합_계획.md b/journey/plans/260116_배당_귀족주_자동_수집_로빙_통합_계획.md index 0ee84c6..aaf04a1 100644 --- a/journey/plans/260116_배당_귀족주_자동_수집_로빙_통합_계획.md +++ b/journey/plans/260116_배당_귀족주_자동_수집_로빙_통합_계획.md @@ -21,10 +21,12 @@ 1. **데이터 수집 스크립트**: `goosefarminvesting/backend/scripts/collect_dividends.py` 수동 실행으로 전체 69개 종목 수집 완료 2. **Supabase 데이터**: `dividend_stocks`(69개), `dividend_history`(10,895건), `dividend_metrics`(68개) 저장 완료 +3. **Phase 2 완료**: DB 스케줄 등록 완료 (`scheduled_jobs` 테이블, `JOB_TYPE_MAP` 매핑, 자동 배포 및 등록 확인) ### 미완료 작업 -1. **자동 수집 설정**: 현재 수동 실행만 가능, 자동 스케줄링 미구현 +1. **Phase 1**: `dividend_collector_service.py`의 `collect_all_dividends()` 실제 로직 구현 (현재 placeholder) +2. **Phase 3**: 수동 실행 테스트 및 검증 --- @@ -42,16 +44,24 @@ - `asyncio.run()`으로 서비스 함수 실행 (기존 패턴과 동일) - 로깅: 시작/완료/에러 기록 +**구현 가이드**: +- `collect_dividends.py`의 main 로직 (`--update-all` 옵션) 참고: + 1. `AristocratsCollector().fetch_aristocrats_list()` - 배당 귀족주 리스트 수집 + 2. `AristocratsCollector().enrich_with_market_data()` - 시장 데이터 추가 + 3. `DataSaver().save_aristocrats()` - 데이터베이스에 저장 + 4. 각 종목마다 `update_ticker_data()` 실행 (배당 이력, 분석, 저장) + **예상 시간**: 1시간 **파일 참조**: - `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` 구조 확인 +- `goosefarminvesting/backend/scripts/collect_dividends.py:590-613`: `--update-all` 로직 참고 --- -### Phase 2: DB에 스케줄 등록 +### Phase 2: DB에 스케줄 등록 ✅ 완료 **작업 내용**: 1. `scheduled_jobs` 테이블에 레코드 추가 @@ -74,10 +84,26 @@ ### Phase 3: 테스트 및 검증 **작업 내용**: -1. rb8001 서버 재시작 후 스케줄 자동 로드 확인 +1. rb8001 서버 재시작 후 스케줄 자동 로드 확인 ✅ 2. 수동 실행 테스트: `POST /api/scheduler/jobs/dividend_collector/run` 3. Supabase 데이터 확인: `dividend_history` 테이블 최신 데이터 확인 +**TDD 테스트 시나리오**: + +**시나리오 1: 수동 실행 테스트** +- `POST /api/scheduler/jobs/dividend_collector/run` 엔드포인트로 수동 실행 +- 로그 확인: 시작/완료 메시지 +- DB 확인: `dividend_history` 테이블에 최신 데이터 저장 (오늘 날짜 기준) + +**시나리오 2: 데이터 수집 검증** +- 69개 종목 데이터 수집 확인 +- 배당 이력 저장 확인 (`dividend_history` 테이블) +- 계산 지표 저장 확인 (`dividend_metrics` 테이블) + +**시나리오 3: 에러 처리** +- 네트워크 에러 시 로깅 및 재시도 로직 확인 +- 부분 실패 시 다른 종목 처리 계속 진행 확인 + **예상 시간**: 20분 --- @@ -93,6 +119,14 @@ dividend_collector.py (_run_dividend_collector_with_logging) ↓ (asyncio.run) dividend_collector_service.py (collect_all_dividends) ↓ +1. AristocratsCollector: Wikipedia 리스트 수집 +2. 시장 데이터 추가 (yfinance) +3. DataSaver: dividend_stocks 저장 +4. 각 종목마다 update_ticker_data: + - DividendHistoryCollector: 배당 이력 수집 + - DividendAnalyzer: 분석 및 계산 + - DataSaver: dividend_history, dividend_metrics 저장 + ↓ Supabase (dividend_stocks, dividend_history, dividend_metrics) ``` @@ -115,14 +149,15 @@ Supabase (dividend_stocks, dividend_history, dividend_metrics) - `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`: 수집 로직 참고 (서비스로 이동) +- `goosefarminvesting/backend/scripts/collect_dividends.py:590-613`: `--update-all` 로직 (서비스로 이동) +- `goosefarminvesting/backend/scripts/collect_dividends.py:622-680`: `update_ticker_data()` 함수 (각 종목 처리) - `DOCS/journey/troubleshooting/260102_db_scheduler_management.md`: 스케줄러 시스템 구조 --- ## 다음 단계 -1. Phase 1 실행: rb8001 스케줄러 작업 생성 -2. Phase 2 실행: DB에 스케줄 등록 -3. Phase 3 실행: 테스트 및 검증 +1. ✅ Phase 2 완료: DB 스케줄 등록 +2. Phase 1 진행: rb8001 서비스 로직 구현 (TDD로 테스트하면서) +3. Phase 3 실행: 수동 실행 테스트 및 검증 4. 로빙 troubleshooting 문서 작성: 구현 완료 후 기록