docs: 배당 귀족주 로빙 통합 계획 업데이트 (Phase 2 완료, Phase 1 구현 가이드 추가, TDD 테스트 시나리오 추가)

This commit is contained in:
happybell80 2026-01-17 10:39:40 +09:00
parent 6362bc13c6
commit 96c58e2104

View File

@ -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 문서 작성: 구현 완료 후 기록