From 4f99788ad2838e64f9711a9b027986370949e88c Mon Sep 17 00:00:00 2001 From: Claude-51124 Date: Sat, 17 Jan 2026 10:21:57 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20rb8001=20=EA=B8=B0=EC=A1=B4=20=ED=8C=A8?= =?UTF-8?q?=ED=84=B4=EC=97=90=20=EB=A7=9E=EA=B2=8C=20=EB=B0=B0=EB=8B=B9=20?= =?UTF-8?q?=EA=B7=80=EC=A1=B1=EC=A3=BC=20=EC=8A=A4=EC=BC=80=EC=A4=84?= =?UTF-8?q?=EB=9F=AC=20=EA=B3=84=ED=9A=8D=20=EC=88=98=EC=A0=95=20(subproce?= =?UTF-8?q?ss=20=E2=86=92=20=EB=82=B4=EB=B6=80=20=EC=84=9C=EB=B9=84?= =?UTF-8?q?=EC=8A=A4=20import)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ฑ์ฃผ_์ž๋™_์ˆ˜์ง‘_๋กœ๋น™_ํ†ตํ•ฉ_๊ณ„ํš.md | 44 ++++++++++++------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/journey/plans/260116_๋ฐฐ๋‹น_๊ท€์กฑ์ฃผ_์ž๋™_์ˆ˜์ง‘_๋กœ๋น™_ํ†ตํ•ฉ_๊ณ„ํš.md b/journey/plans/260116_๋ฐฐ๋‹น_๊ท€์กฑ์ฃผ_์ž๋™_์ˆ˜์ง‘_๋กœ๋น™_ํ†ตํ•ฉ_๊ณ„ํš.md index fd75ba0..0ee84c6 100644 --- a/journey/plans/260116_๋ฐฐ๋‹น_๊ท€์กฑ์ฃผ_์ž๋™_์ˆ˜์ง‘_๋กœ๋น™_ํ†ตํ•ฉ_๊ณ„ํš.md +++ b/journey/plans/260116_๋ฐฐ๋‹น_๊ท€์กฑ์ฃผ_์ž๋™_์ˆ˜์ง‘_๋กœ๋น™_ํ†ตํ•ฉ_๊ณ„ํš.md @@ -30,19 +30,23 @@ ## ๊ตฌํ˜„ ๊ณ„ํš -### Phase 1: rb8001 ์Šค์ผ€์ค„๋Ÿฌ ์ž‘์—… ์ƒ์„ฑ +### Phase 1: rb8001 ์„œ๋น„์Šค ๋ฐ ์Šค์ผ€์ค„๋Ÿฌ ์ž‘์—… ์ƒ์„ฑ **์ž‘์—… ๋‚ด์šฉ**: -1. `rb8001/app/scheduler/jobs/dividend_collector.py` ์ƒ์„ฑ - - `_run_dividend_collector_with_logging()` ํ•จ์ˆ˜ ๊ตฌํ˜„ - - `subprocess.run()`์œผ๋กœ `collect_dividends.py --update-all` ์‹คํ–‰ +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()`์œผ๋กœ ์„œ๋น„์Šค ํ•จ์ˆ˜ ์‹คํ–‰ (๊ธฐ์กด ํŒจํ„ด๊ณผ ๋™์ผ) - ๋กœ๊น…: ์‹œ์ž‘/์™„๋ฃŒ/์—๋Ÿฌ ๊ธฐ๋ก -2. ์Šคํฌ๋ฆฝํŠธ ๊ฒฝ๋กœ: `/home/admin/goosefarminvesting/backend/scripts/collect_dividends.py` -**์˜ˆ์ƒ ์‹œ๊ฐ„**: 30๋ถ„ +**์˜ˆ์ƒ ์‹œ๊ฐ„**: 1์‹œ๊ฐ„ **ํŒŒ์ผ ์ฐธ์กฐ**: -- `rb8001/app/scheduler/jobs/diary_generator.py`: ์Šค์ผ€์ค„๋Ÿฌ ์ž‘์—… ์˜ˆ์‹œ +- `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` ๊ตฌ์กฐ ํ™•์ธ --- @@ -56,7 +60,12 @@ - `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'` + ```python + "dividend_collector": { + "func": "_run_dividend_collector_with_logging", + "module": "app.scheduler.jobs.dividend_collector" + } + ``` **์˜ˆ์ƒ ์‹œ๊ฐ„**: 20๋ถ„ @@ -80,13 +89,17 @@ ``` rb8001 ์Šค์ผ€์ค„๋Ÿฌ (APScheduler) โ†“ (๋งค์ฃผ ์ผ์š”์ผ ์ƒˆ๋ฒฝ 3์‹œ) -dividend_collector.py (subprocess.run) - โ†“ -goosefarminvesting/backend/scripts/collect_dividends.py --update-all +dividend_collector.py (_run_dividend_collector_with_logging) + โ†“ (asyncio.run) +dividend_collector_service.py (collect_all_dividends) โ†“ 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` ํ…Œ์ด๋ธ”์— ์Šค์ผ€์ค„ ์ •์˜ ์ €์žฅ @@ -98,11 +111,12 @@ Supabase (dividend_stocks, dividend_history, dividend_metrics) ## ํŒŒ์ผ ์ฐธ์กฐ -- `rb8001/app/scheduler/jobs/diary_generator.py`: ์Šค์ผ€์ค„๋Ÿฌ ์ž‘์—… ์˜ˆ์‹œ -- `rb8001/app/scheduler/db_loader.py`: `JOB_TYPE_MAP` ์ •์˜ +- `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:609`: ์ˆ˜์ง‘ ์Šคํฌ๋ฆฝํŠธ -- `goosefarminvesting/DOCS/journey/troubleshooting/251110_dividend_aristocrats_full_collection.md:60`: ์‹คํ–‰ ์‹œ๊ฐ„ ์ฐธ๊ณ  +- `goosefarminvesting/backend/scripts/collect_dividends.py`: ์ˆ˜์ง‘ ๋กœ์ง ์ฐธ๊ณ  (์„œ๋น„์Šค๋กœ ์ด๋™) +- `DOCS/journey/troubleshooting/260102_db_scheduler_management.md`: ์Šค์ผ€์ค„๋Ÿฌ ์‹œ์Šคํ…œ ๊ตฌ์กฐ ---