docs: 배당 귀족주 로빙 통합 계획 문서 추가 (24 서버 접근용)

This commit is contained in:
happybell80 2026-01-17 10:17:08 +09:00
parent 29b926c9fc
commit 4c2d837a49

View File

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