From 96c58e21047c8090adce58a8fc953dbce6184a89 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Sat, 17 Jan 2026 10:39:40 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20=EB=B0=B0=EB=8B=B9=20=EA=B7=80=EC=A1=B1?= =?UTF-8?q?=EC=A3=BC=20=EB=A1=9C=EB=B9=99=20=ED=86=B5=ED=95=A9=20=EA=B3=84?= =?UTF-8?q?=ED=9A=8D=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20(Phase=202?= =?UTF-8?q?=20=EC=99=84=EB=A3=8C,=20Phase=201=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?=EA=B0=80=EC=9D=B4=EB=93=9C=20=EC=B6=94=EA=B0=80,=20TDD=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=8B=9C=EB=82=98=EB=A6=AC?= =?UTF-8?q?=EC=98=A4=20=EC=B6=94=EA=B0=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...±μ£Ό_μžλ™_μˆ˜μ§‘_λ‘œλΉ™_톡합_κ³„νš.md | 49 ++++++++++++++++--- 1 file changed, 42 insertions(+), 7 deletions(-) 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 λ¬Έμ„œ μž‘μ„±: κ΅¬ν˜„ μ™„λ£Œ ν›„ 기둝