# ๐Ÿš€ K-ArtSell Aegis v16.0 - ํ˜„์žฌ ์ง„ํ–‰ ๋กœ๋“œ๋งต **์ƒํƒœ:** ์ง„ํ–‰ ์ค‘ (70% ์™„๋ฃŒ) **๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ:** 2026-08-02 15:20 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 ๊ฒ€์ฆ - **์ƒํƒœ:** Host ์ค€๋น„ ๋Œ€๊ธฐ - **Agent:** Agent 1 (a5e849ce9aa370df7) - **ํ•„์š” ์กฐ๊ฑด:** ```bash # Terminal 1: SSH ํ„ฐ๋„ (25๋ถ„ ์ด์ƒ ์œ ์ง€) ssh -L 5432:127.0.0.1:5432 kjh2064@178.104.200.7 # Terminal 2: KArtSell.Host ์‹œ์ž‘ cd D:\JobRoomz\KArtSell.Aegis dotnet run --project src/KArtSell.Host -c Release ``` - **์‹คํ–‰ ๋‹จ๊ณ„:** 1. POST /api/shadow-run/initiate (shadowRunId ํš๋“) 2. 30์ดˆ๋งˆ๋‹ค GET /api/shadow-run/{id}/status (์™„๋ฃŒ ๋Œ€๊ธฐ) 3. ์ตœ๋Œ€ 30๋ถ„ (252์ผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ + ๋ฉ”ํŠธ๋ฆญ ๊ณ„์‚ฐ) 4. GATE_3_EVIDENCE.md ์ƒ์„ฑ (PBO/DSR/Cost/Phase ๋ฉ”ํŠธ๋ฆญ) 5. PASS/FAIL ํŒ์ • - **๊ธฐ๋Œ€ ๊ฒฐ๊ณผ:** - PBO: โ‰ค 20% (ํ†ต๊ณผ ๊ธฐ์ค€) - DSR: โ‰ฅ 95th percentile - Cost: 1.5๋ฐฐ-2.5๋ฐฐ (์ •์ƒ) - Phase metrics: Bull/Bear/Sideways ์กด์žฌ - **์ˆœ์„œ:** Host ์ค€๋น„ ์งํ›„ ์ž๋™ ์‹œ์ž‘ --- ## ๐Ÿ“‹ ๋‹ค์Œ ๋‹จ๊ณ„ (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 ๐Ÿš€