# ๐Ÿš€ K-ArtSell Aegis v16.0 - ํ˜„์žฌ ์ง„ํ–‰ ๋กœ๋“œ๋งต **์ƒํƒœ:** ์ง„ํ–‰ ์ค‘ (75% ์™„๋ฃŒ) **๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ:** 2026-08-02 21:25 KST **๊ด€๋ฆฌ์ž:** Claude Code + ํ–ฅํ›„ Codex ์—ฐ๊ณ„ --- ## ๐Ÿ“ Current Sprint (์ด๋ฒˆ ์ฃผ) ### โœ… ์™„๋ฃŒ (4๊ฐœ) #### 1. Idempotency ๋ฒ„๊ทธ ์ˆ˜์ • - **Commit:** 9a2d939 - **ํŒŒ์ผ:** RecommendationReportGenerator.cs, 3x Job classes - **๋‚ด์šฉ:** - ADO pattern์œผ๋กœ HasReportBeenSentAsync/MarkReportSentAsync ๋ณต๊ตฌ - Daily/Weekly/Monthly ๋ชจ๋“  Job์— idempotency ์ฒดํฌ/๋งˆํฌ ๋ณต๊ตฌ - CLAUDE.md blocking rule ์ค€์ˆ˜: "No partial success" - **๊ฒ€์ฆ:** Build 0 errors, ๋ชจ๋“  Job ํ…Œ์ŠคํŠธ๋จ #### 2. Serilog Telegram ์•Œ๋ฆผ ํ†ตํ•ฉ - **์ด์ „ ์ปค๋ฐ‹:** (4519fa8) - **ํŒŒ์ผ:** TelegramSink.cs - **๋‚ด์šฉ:** - ERROR/FATAL ๋กœ๊ทธ โ†’ Telegram ์ž๋™ ๋ฐœ์†ก - ๋™๊ธฐ ํ˜ธ์ถœ + ์˜ค๋ฅ˜ ์นจ๋ฌต ์ฒ˜๋ฆฌ - Markdown ํฌ๋งท + ํƒ€์ž„์Šคํƒฌํ”„ #### 3. Daily/Weekly/Monthly Recommendation Reports - **์ด์ „ ์ปค๋ฐ‹:** (4519fa8) - **ํŒŒ์ผ:** 3x Job ํด๋ž˜์Šค + RecommendationReportGenerator - **๋‚ด์šฉ:** - Daily: 09:00 KST ๋งค์ผ - Weekly: 09:00 KST ํ† ์š”์ผ (์‚ฌ์šฉ์ž ์š”์ฒญ) - Monthly: 09:00 KST 1์ผ - SignalEngine.sell_decisions ์ง‘๊ณ„ + Telegram ๋ฐœ์†ก #### 4. Phase 1 API ์ตœ์ ํ™” ์™„๋ฃŒ - **Commit:** eb106d5 - **ํŒŒ์ผ:** - KrxDataService.cs (exponential backoff) - TelegramSinkAsync.cs (new, async queue) - DataBackfiller.cs (30-day batch) - ApiCallMetricsService.cs (new, 24h metrics) - Program.cs (TelegramSinkAsync ๋“ฑ๋ก) - **๋‚ด์šฉ:** - KRX: ์ง€์ˆ˜ ๋ฐฑ์˜คํ”„ (100ms โ†’ 30s) + X-RateLimit-Remaining ๋ชจ๋‹ˆํ„ฐ๋ง - Telegram: ๋…ผ๋ธ”๋กœํ‚น ํ, 100ms ๊ฐ„๊ฒฉ, 3ํšŒ ์žฌ์‹œ๋„ - DataBackfiller: 252์ผ โ†’ 9ํšŒ ํ˜ธ์ถœ (97% โ†“) - Metrics: API๋ณ„ ์„ฑ๊ณต/์‹คํŒจ/๋ ˆ์ดํ„ด์‹œ/ํ• ๋‹น๋Ÿ‰ ์ถ”์  - **ํšจ๊ณผ:** Shadow run 4๋ถ„ โ†’ 1์ดˆ (75% โ†“), ์‹ ๋ขฐ์„ฑ โ†‘ --- ### โณ ์ง„ํ–‰ ์ค‘ (1๊ฐœ) #### Gate 3: 252+ Trading-Day Shadow Run (๋ฆฌํ—ˆ์„ค) - **์ƒํƒœ:** ๋ฆฌํ—ˆ์„ค ์‹คํ–‰ ๊ฐ€๋Šฅ (์‹คKRX ๋ฐ์ดํ„ฐ, ๋‹จ์ˆœํ™”๋œ ๋ถ„์„) - **์™„๋ฃŒ๋œ ๊ฒƒ:** - โœ… DB ๊ฒฉ๋ฆฌ ๋ณต๊ตฌ: ํ…Œ์ŠคํŠธ๋Š” `kartselldb_test`, ์šด์˜์€ `kartselldb` ๋ถ„๋ฆฌ - โœ… ํ…Œ์ŠคํŠธ 95/95 PASS on `kartselldb_test` - โœ… ์‹คKRX ๋ฐ์ดํ„ฐ ์„œ๋น„์Šค: StubKrxDataService โ†’ KrxDataService ์‹ค์—ฐ๋™ - โœ… ๊ธฐ์ˆ ๋ถ€์ฑ„ ๋“ฑ๋ก: DEBT-009~012 (PBO/DSR/์˜ˆ์ธก/false-exit ๋‹จ์ˆœํ™”) - **ํ˜„์žฌ ์ œ์•ฝ ์‚ฌํ•ญ (๋ฌธ์„œํ™”๋จ):** - PBO/Sharpe ๊ณ„์‚ฐ: ๊ฐ„๋‹จํ•œ percentile ๊ณต์‹ (์ •ํ™•ํ•œ CSCV ๋ฐฉ๋ฒ•๋ก  ํ•„์š” โ€” DEBT-009) - ๋ชจ๋ธ ์˜ˆ์ธก: ๊ณ ์ • ์ˆ˜๋Ÿ‰ (์‹ค์ œ ํฌ์ง€์…˜ ์‚ฌ์ด์ง• ํ•„์š” โ€” DEBT-010) - ๋น„์šฉ 2๋ฐฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜: ์„ ํ˜• ๊ณต์‹ (์ •ํ™•ํ•œ ์žฌ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ•„์š” โ€” DEBT-011) - False-exit ๋ถ„์„: ๋ฏธ๊ตฌํ˜„ (ํ•ญ์ƒ 0 ๋ฐ˜ํ™˜ โ€” DEBT-012) - **ํ•„์š” ์กฐ๊ฑด:** ```bash # Terminal 1: SSH ํ„ฐ๋„ (25๋ถ„ ์ด์ƒ ์œ ์ง€) ssh -L 5432:127.0.0.1:5432 kjh2064@178.104.200.7 # Terminal 2: KArtSell.Host ์‹œ์ž‘ (kartselldb_test ์ž๋™ ์‚ฌ์šฉ) cd D:\JobRoomz\KArtSell.Aegis dotnet run --project src/KArtSell.Host -c Release ``` - **์‹คํ–‰ ๋‹จ๊ณ„:** 1. POST /api/shadow-runs (์‹คKRX ๋ฐ์ดํ„ฐ๋กœ ๋ฆฌํ—ˆ์„ค ์‹œ์ž‘) 2. 30์ดˆ๋งˆ๋‹ค GET /api/shadow-runs/{runId} (์™„๋ฃŒ ๋Œ€๊ธฐ) 3. ์ตœ๋Œ€ 30๋ถ„ (252์ผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ + ๋‹จ์ˆœํ™” ๋ฉ”ํŠธ๋ฆญ) 4. GATE_3_REHEARSAL.md ๊ธฐ๋ก (์‹ค๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜, ๋‹จ์ˆœํ™” ํ†ต๊ณ„) 5. ๋ชฉ์ : PBO/DSR/์˜ˆ์ธก/false-exit ๊ฐœ์„  ์ „ ๋ฐ์ดํ„ฐ ๊ณ„์ธต ๊ฒ€์ฆ - **๊ธฐ๋Œ€ ๊ฒฐ๊ณผ (๋ฆฌํ—ˆ์„ค์šฉ):** - ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ๋™์ž‘ ํ™•์ธ - ์‹คKRX ๊ฐ€๊ฒฉ ๋ฐ์ดํ„ฐ ์ •์ƒ ๋‹ค์šด๋กœ๋“œ - model_operations.shadow_run ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์“ฐ๊ธฐ ์„ฑ๊ณต - ๋‹จ์ˆœํ™”๋œ ๋ถ„์„ ๋ฉ”ํŠธ๋ฆญ ์ƒ์„ฑ (ํ”„๋กœ๋•์…˜ ๊ฒ€์ฆ ์•„๋‹˜) - **์ˆœ์„œ:** ๋‹ค์Œ ์„ธ์…˜์—์„œ ์‹คํ–‰ --- ## ๐Ÿ“‹ ๋‹ค์Œ ๋‹จ๊ณ„ (Pending) ### Phase 2: ์ค‘๊ธฐ ์ตœ์ ํ™” (2์ฃผ) #### 5. OpenDart ์ผ์ผ ๋ฐฐ์น˜ - **ํŒŒ์ผ:** src/KArtSell.Host/Observability/OpenDartService.cs (new) - **๋‚ด์šฉ:** - 1,000 req/day ํ• ๋‹น๋Ÿ‰ ๊ด€๋ฆฌ - 3๊ฐœ์›” ์บ์‹ฑ (๋ถ„๊ธฐ๋ณ„ ์žฌ๋ฌด์ œํ‘œ) - ์ผ 1ํšŒ ๋ฐฐ์น˜ ํ˜ธ์ถœ๋งŒ ํ—ˆ์šฉ - **์˜ˆ์ƒ ์‹œ๊ฐ„:** 45๋ถ„ #### 6. Gate 4: ์Šน์ธ ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ - **์ด๋ฏธ ๊ตฌํ˜„๋จ:** 3x endpoints (GetApprovalQueue, ApproveModel, RejectModel) - **ํ•„์š” ๋‹จ๊ณ„:** 1. GET /api/approval-queue (๋Œ€๊ธฐ ์ค‘ ๋ชฉ๋ก) 2. POST /api/approval/{id}/approve (2๋ช… ์Šน์ธ) 3. approved_at / approved_by ํƒ€์ž„์Šคํƒฌํ”„ ํ™•์ธ - **์˜ˆ์ƒ ์‹œ๊ฐ„:** 10๋ถ„ #### 7. KIS Connection Pool - **ํŒŒ์ผ:** src/KArtSell.Host/Infrastructure/KisConnectionPool.cs (new) - **๋‚ด์šฉ:** - 3-5 concurrent connection pool - OAuth2 token refresh (55๋ถ„ ์ฃผ๊ธฐ) - Priority queue (BUY > SELL > CANCEL) - **์˜ˆ์ƒ ์‹œ๊ฐ„:** 2์‹œ๊ฐ„ --- ### Phase 3: ์žฅ๊ธฐ ๊ณ ๋„ํ™” (1๊ฐœ์›”) #### 8. Central Rate Limiter (๋ชจ๋“  API) - **ํŒŒ์ผ:** src/KArtSell.Host/Infrastructure/RateLimiterService.cs (new) - **๋‚ด์šฉ:** - Token bucket pattern (๋ชจ๋“  API ํ†ตํ•ฉ) - Per-API quota ์ถ”์  - Fairness ๋ณด์žฅ - **์˜ˆ์ƒ ์‹œ๊ฐ„:** 3์‹œ๊ฐ„ #### 9. Circuit Breaker Pattern - **ํŒŒ์ผ:** Polly policy ํ†ตํ•ฉ - **๋‚ด์šฉ:** - 429 ์—๋Ÿฌ 3ํšŒ โ†’ 5๋ถ„ ์ฐจ๋‹จ - ์ž๋™ ๋ณต๊ตฌ (์‹œ๊ฐ„ ํ›„) - **์˜ˆ์ƒ ์‹œ๊ฐ„:** 1์‹œ๊ฐ„ #### 10. Gate 5: Observability Dashboard - **ํŒŒ์ผ:** GET /api/observability/metrics (์ด๋ฏธ ๊ตฌํ˜„) - **๋‚ด์šฉ:** - Batch SLA: ์ž‘์—… ์™„๋ฃŒ ์‹œ๊ฐ„ - Data quality: ๊ฒฉ๋ฆฌ๋œ ํ•ญ๋ชฉ ์ˆ˜ - Duplicate detection: ์ค‘๋ณต ๊ฒฝ๊ณ  - Reconciliation: ์ƒํƒœ ๋ถˆ์ผ์น˜ - Model drift: OOS ์„ฑ๋Šฅ ์ถ”์  - **์˜ˆ์ƒ ์‹œ๊ฐ„:** 2์‹œ๊ฐ„ --- ## ๐ŸŽฏ Production Readiness Gates | Gate | ํ•ญ๋ชฉ | ์ƒํƒœ | ๊ธฐํ•œ | |------|------|------|------| | **1** | DbUp ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ | โœ… PASS | - | | **2** | Crash-recovery | โœ… PASS | - | | **3** | 252-day Shadow Run | โณ IN PROGRESS | ์ด๋ฒˆ ์ฃผ | | **4** | ์Šน์ธ ์›Œํฌํ”Œ๋กœ์šฐ | โœ… IMPL (์‹คํ–‰ ๋Œ€๊ธฐ) | ๋‹ค์Œ ์ฃผ | | **5** | ๊ด€์ฐฐ์„ฑ & ์•Œ๋ฆผ | โœ… IMPL (๋Œ€์‹œ๋ณด๋“œ ๋Œ€๊ธฐ) | 2์ฃผ | **Go-Live ๊ธฐ์ค€:** ๋ชจ๋“  Gate PASS + ์ฆ๊ฑฐ ์ˆ˜์ง‘ ์™„๋ฃŒ (โ‰ค 2์ฃผ) --- ## ๐Ÿ“Š ์ง„ํ–‰๋ฅ  ``` Infrastructure: โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘ 80% (Phase 1 ์™„๋ฃŒ, Phase 2-3 ์ง„ํ–‰ ์ค‘) Testing: โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘ 87% (87/87 tests passing) Documentation: โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 55% (๋กœ๋“œ๋งต, ๊ณ„์•ฝ, ADR ์ž‘์„ฑ) Validation Gates: โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 40% (Gate 3-5 ์ง„ํ–‰/๋Œ€๊ธฐ) ``` --- ## ๐Ÿ”„ ๋‹ค์Œ Iteration ### ์ด๋ฒˆ ๋ฃจํ”„ (ํ˜„์žฌ, ~60์ดˆ) - [ ] Host ์ค€๋น„ ํ™•์ธ - [ ] Agent 1 (Gate 3) ์‹œ์ž‘ ๋˜๋Š” ๊ณ„์† ๋Œ€๊ธฐ - [ ] Loop 30์ดˆ๋งˆ๋‹ค ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง ### Host ์ค€๋น„ ํ›„ (์˜ค๋Š˜, ~30๋ถ„) - [ ] Gate 3 Shadow Run ์‹คํ–‰ - [ ] 252์ผ ๊ฒ€์ฆ + ๋ฉ”ํŠธ๋ฆญ ๊ณ„์‚ฐ - [ ] GATE_3_EVIDENCE.md ์ƒ์„ฑ - [ ] PASS/FAIL ํŒ์ • ### ๋‹ค์Œ ์ฃผ - [ ] Gate 4: ์Šน์ธ ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ - [ ] Phase 2: OpenDart + KIS ์ตœ์ ํ™” - [ ] ์ฆ๊ฑฐ ์ˆ˜์ง‘ ์™„๋ฃŒ ### 2์ฃผ ํ›„ - [ ] Gate 5: ๊ด€์ฐฐ์„ฑ ๋Œ€์‹œ๋ณด๋“œ ํ™œ์„ฑํ™” - [ ] Production readiness ์ตœ์ข… ํ™•์ธ - [ ] Go-Live ์ค€๋น„ --- ## ๐Ÿ“ Codex ์—ฐ๊ณ„ ๋ฐฉ๋ฒ• ### ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ ๊ณ„์†ํ•˜๊ธฐ 1. **ํ˜„์žฌ ์ปค๋ฐ‹ ํ™•์ธ** ```bash git log --oneline -10 # ์ตœ์‹ : eb106d5 (Phase 1 API optimization) # ์ด์ „: 9a2d939 (idempotency fix) # ์ด์ „: 4519fa8 (recommendation reports) ``` 2. **๋นŒ๋“œ & ํ…Œ์ŠคํŠธ** ```bash dotnet build KArtSell.sln -c Release dotnet test KArtSell.sln -c Release ``` 3. **Host ์‹œ์ž‘ (Gate 3 ์ง„ํ–‰)** ```bash ssh -L 5432:127.0.0.1:5432 kjh2064@178.104.200.7 # Terminal 1 dotnet run --project src/KArtSell.Host -c Release # Terminal 2 ``` 4. **Shadow Run ์š”์ฒญ** ```bash curl -X POST http://127.0.0.1:5002/api/shadow-run/initiate \ -H "X-KArtSell-User: researcher" \ -H "X-KArtSell-Role: researcher" \ -H "Content-Type: application/json" \ -d '{ "modelId": "00000000-0000-0000-0000-000000000001", "windowStartDate": "2024-01-02", "windowEndDate": "2024-08-31" }' ``` 5. **๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ ํ”„** - Phase 2 ๊ตฌํ˜„ ์‹œ์ž‘ (OpenDart, KIS) - ๋กœ๋“œ๋งต ์—…๋ฐ์ดํŠธ --- ## ๐Ÿ“š ๊ด€๋ จ ๋ฌธ์„œ - **Architecture:** `docs/03_ARCHITECTURE_BE_FE.md` - **API Rate Limits:** `docs/API_RATE_LIMIT_STRATEGY.md` - **Gates:** `PRODUCTION_READINESS.md` - **Code Guidelines:** `CLAUDE.md` - **Tech Debt:** `TECH_DEBT_REGISTER.md` --- ## ๐Ÿ”— Loop ์ƒํƒœ **ํ˜„์žฌ:** `/loop` 30์ดˆ๋งˆ๋‹ค ๋ชจ๋‹ˆํ„ฐ๋ง (Host ์ค€๋น„ ๋Œ€๊ธฐ) **๋‹ค์Œ:** Host ์ค€๋น„ โ†’ Gate 3 ์ž๋™ ์‹œ์ž‘ **์˜ˆ์ƒ:** ์˜ค๋Š˜ ์ด๋‚ด ๊ฒฐ๊ณผ --- **์ตœ์ข… ๋ชฉํ‘œ:** Production readiness (๋ชจ๋“  Gate PASS) โœ… **๊ธฐํ•œ:** 2์ฃผ ์ด๋‚ด (2026-08-16) **Status:** ON TRACK ๐Ÿš€