From 4c2d837a497263fb0084f4c37a195162816ef62d Mon Sep 17 00:00:00 2001 From: happybell80 Date: Sat, 17 Jan 2026 10:17:08 +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=EB=AC=B8=EC=84=9C=20=EC=B6=94=EA=B0=80=20(24=20?= =?UTF-8?q?=EC=84=9C=EB=B2=84=20=EC=A0=91=EA=B7=BC=EC=9A=A9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...±μ£Ό_μžλ™_μˆ˜μ§‘_λ‘œλΉ™_톡합_κ³„νš.md | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 journey/plans/260116_λ°°λ‹Ή_κ·€μ‘±μ£Ό_μžλ™_μˆ˜μ§‘_λ‘œλΉ™_톡합_κ³„νš.md diff --git a/journey/plans/260116_λ°°λ‹Ή_κ·€μ‘±μ£Ό_μžλ™_μˆ˜μ§‘_λ‘œλΉ™_톡합_κ³„νš.md b/journey/plans/260116_λ°°λ‹Ή_κ·€μ‘±μ£Ό_μžλ™_μˆ˜μ§‘_λ‘œλΉ™_톡합_κ³„νš.md new file mode 100644 index 0000000..a77117b --- /dev/null +++ b/journey/plans/260116_λ°°λ‹Ή_κ·€μ‘±μ£Ό_μžλ™_μˆ˜μ§‘_λ‘œλΉ™_톡합_κ³„νš.md @@ -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 λ¬Έμ„œ μž‘μ„±: κ΅¬ν˜„ μ™„λ£Œ ν›„ 기둝