diff --git a/journey/plans/251016_bayesian_startup_valuation.md b/journey/plans/251016_bayesian_startup_valuation.md index 5c391b0..c59c7ed 100644 --- a/journey/plans/251016_bayesian_startup_valuation.md +++ b/journey/plans/251016_bayesian_startup_valuation.md @@ -61,10 +61,6 @@ ## 남은 작업 -### Phase 2 -- 실제 Likelihood 데이터 파싱 (Neo4j에서 invstSumValText 추출) -- `valuate_startup()` 함수에 `calculate_posterior_with_likelihood` 통합 - ### Phase 3 - Beta(α,β) 분포 업데이트 로직 (현재는 mu, sigma만 저장) - 30일 주기 재계산 스케줄러 (scheduler_repository 활용) diff --git a/journey/plans/260112_bayesian_valuation_remaining_tasks.md b/journey/plans/260112_bayesian_valuation_remaining_tasks.md index 2fcb844..96da922 100644 --- a/journey/plans/260112_bayesian_valuation_remaining_tasks.md +++ b/journey/plans/260112_bayesian_valuation_remaining_tasks.md @@ -1,7 +1,8 @@ # 베이지안 스타트업 가치평가 - 남은 작업 **날짜**: 2026-01-12 -**관련 문서**: `archive/251016_bayesian_startup_valuation.md` +**수정일**: 2026-01-20 (Phase 2 완료 확인, 문서 정리) +**관련 문서**: `plans/251016_bayesian_startup_valuation.md` --- @@ -11,7 +12,7 @@ --- -l## Phase 3: 추가 작업 +## Phase 3: 추가 작업 - Beta(α,β) 분포 업데이트 로직 (현재는 mu, sigma만 저장) - 30일 주기 재계산 스케줄러 (scheduler_repository 활용) @@ -23,5 +24,5 @@ l## Phase 3: 추가 작업 - Phase 1 구현: `troubleshooting/260112_bayesian_valuation_phase1_implementation.md` - Phase 2 구현: `troubleshooting/260112_bayesian_valuation_phase2_3_implementation.md` -- 원본 계획 문서: `plans/archive/251016_bayesian_startup_valuation.md` +- 원본 계획 문서: `plans/251016_bayesian_startup_valuation.md` diff --git a/journey/plans/260116_배당_귀족주_자동_수집_로빙_통합_계획.md b/journey/plans/260116_배당_귀족주_자동_수집_로빙_통합_계획.md deleted file mode 100644 index aaf04a1..0000000 --- a/journey/plans/260116_배당_귀족주_자동_수집_로빙_통합_계획.md +++ /dev/null @@ -1,163 +0,0 @@ -# 배당 귀족주 자동 수집 로빙 통합 계획 - -**작성일**: 2026-01-17 -**작성자**: 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개) 저장 완료 -3. **Phase 2 완료**: DB 스케줄 등록 완료 (`scheduled_jobs` 테이블, `JOB_TYPE_MAP` 매핑, 자동 배포 및 등록 확인) - -### 미완료 작업 - -1. **Phase 1**: `dividend_collector_service.py`의 `collect_all_dividends()` 실제 로직 구현 (현재 placeholder) -2. **Phase 3**: 수동 실행 테스트 및 검증 - ---- - -## 구현 계획 - -### Phase 1: rb8001 서비스 및 스케줄러 작업 생성 - -**작업 내용**: -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()`으로 서비스 함수 실행 (기존 패턴과 동일) - - 로깅: 시작/완료/에러 기록 - -**구현 가이드**: -- `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에 스케줄 등록 ✅ 완료 - -**작업 내용**: -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`에 매핑 추가 - ```python - "dividend_collector": { - "func": "_run_dividend_collector_with_logging", - "module": "app.scheduler.jobs.dividend_collector" - } - ``` - -**예상 시간**: 20분 - ---- - -### Phase 3: 테스트 및 검증 - -**작업 내용**: -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분 - ---- - -## 아키텍처 - -### 데이터 흐름 - -``` -rb8001 스케줄러 (APScheduler) - ↓ (매주 일요일 새벽 3시) -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) -``` - -**기존 패턴 준수**: -- `subprocess.run()` 대신 내부 모듈 import 사용 (`diary_generator.py`, `companyx_news.py` 참고) -- `_run_*_with_logging()` sync 래퍼 → `asyncio.run()` → 내부 서비스 async 함수 실행 - -### 스케줄러 패턴 - -- `scheduled_jobs` 테이블에 스케줄 정의 저장 -- `db_loader.py`의 `JOB_TYPE_MAP`으로 job_type → 함수 매핑 -- `_run_*_with_logging()` sync 래퍼 함수 패턴 -- 환경변수 재시작 없이 DB에서 동적 관리 - ---- - -## 파일 참조 - -- `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: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 2 완료: DB 스케줄 등록 -2. Phase 1 진행: rb8001 서비스 로직 구현 (TDD로 테스트하면서) -3. Phase 3 실행: 수동 실행 테스트 및 검증 -4. 로빙 troubleshooting 문서 작성: 구현 완료 후 기록