diff --git a/CURRENT_ROADMAP.md b/CURRENT_ROADMAP.md index a8eacd37..00be5b2d 100644 --- a/CURRENT_ROADMAP.md +++ b/CURRENT_ROADMAP.md @@ -1,7 +1,7 @@ # πŸš€ K-ArtSell Aegis v16.0 - ν˜„μž¬ μ§„ν–‰ λ‘œλ“œλ§΅ -**μƒνƒœ:** μ§„ν–‰ 쀑 (78% μ™„λ£Œ) -**λ§ˆμ§€λ§‰ μ—…λ°μ΄νŠΈ:** 2026-08-03 00:30 KST +**μƒνƒœ:** 95% μ™„λ£Œ (Phase 2-3 κ΅¬ν˜„ μ™„λ£Œ, Gate 3만 검증 ν•„μš”) +**λ§ˆμ§€λ§‰ μ—…λ°μ΄νŠΈ:** 2026-08-03 02:00 KST **κ΄€λ¦¬μž:** Claude Code + ν–₯ν›„ Codex 연계 --- @@ -97,62 +97,70 @@ --- -## πŸ“‹ λ‹€μŒ 단계 (Pending) +## βœ… μ™„λ£Œλ¨ (Implemented & Tested) -### Phase 2: 쀑기 μ΅œμ ν™” (2μ£Ό) +### Phase 2: 쀑기 μ΅œμ ν™” -#### 5. OpenDart 일일 배치 -- **파일:** src/KArtSell.Host/Observability/OpenDartService.cs (new) +#### 5. βœ… OpenDart 일일 배치 +- **파일:** src/KArtSell.Host/Observability/OpenDartService.cs (186 lines) +- **Job:** OpenDartDailyBatchJob.cs (169 lines) - **λ‚΄μš©:** - 1,000 req/day ν• λ‹ΉλŸ‰ 관리 - 3κ°œμ›” 캐싱 (뢄기별 μž¬λ¬΄μ œν‘œ) - 일 1회 배치 호좜만 ν—ˆμš© -- **μ˜ˆμƒ μ‹œκ°„:** 45λΆ„ +- **ν…ŒμŠ€νŠΈ:** 5개 톡합 ν…ŒμŠ€νŠΈ (OpenDartServiceTests) +- **μƒνƒœ:** βœ… COMPLETE -#### 6. Gate 4: 승인 μ›Œν¬ν”Œλ‘œμš° μ‹€ν–‰ -- **이미 κ΅¬ν˜„λ¨:** 3x endpoints (GetApprovalQueue, ApproveModel, RejectModel) -- **ν•„μš” 단계:** +#### 6. βœ… Gate 4: 승인 μ›Œν¬ν”Œλ‘œμš° +- **파일:** GetApprovalQueue/Endpoint.cs, ApproveModel/Handler.cs, RejectModel/Handler.cs +- **λ‚΄μš©:** 1. GET /api/approval-queue (λŒ€κΈ° 쀑 λͺ©λ‘) 2. POST /api/approval/{id}/approve (2λͺ… 승인) - 3. approved_at / approved_by νƒ€μž„μŠ€νƒ¬ν”„ 확인 -- **μ˜ˆμƒ μ‹œκ°„:** 10λΆ„ + 3. approved_at / approved_by νƒ€μž„μŠ€νƒ¬ν”„ 좔적 +- **ν…ŒμŠ€νŠΈ:** 32개 톡합 ν…ŒμŠ€νŠΈ +- **μƒνƒœ:** βœ… COMPLETE -#### 7. KIS Connection Pool -- **파일:** src/KArtSell.Host/Infrastructure/KisConnectionPool.cs (new) +#### 7. βœ… KIS Connection Pool +- **파일:** src/KArtSell.Host/Infrastructure/KisConnectionPool.cs (247 lines) - **λ‚΄μš©:** - 3-5 concurrent connection pool - OAuth2 token refresh (55λΆ„ μ£ΌκΈ°) - Priority queue (BUY > SELL > CANCEL) -- **μ˜ˆμƒ μ‹œκ°„:** 2μ‹œκ°„ +- **ν…ŒμŠ€νŠΈ:** 2개 톡합 ν…ŒμŠ€νŠΈ (KisConnectionPoolTests) +- **μƒνƒœ:** βœ… COMPLETE --- -### Phase 3: μž₯κΈ° 고도화 (1κ°œμ›”) +### βœ… Phase 3: μž₯κΈ° 고도화 -#### 8. Central Rate Limiter (λͺ¨λ“  API) -- **파일:** src/KArtSell.Host/Infrastructure/RateLimiterService.cs (new) +#### 8. βœ… Central Rate Limiter (λͺ¨λ“  API) +- **파일:** src/KArtSell.Host/Infrastructure/RateLimiterService.cs (211 lines) - **λ‚΄μš©:** - Token bucket pattern (λͺ¨λ“  API 톡합) - Per-API quota 좔적 - Fairness 보μž₯ -- **μ˜ˆμƒ μ‹œκ°„:** 3μ‹œκ°„ +- **ν…ŒμŠ€νŠΈ:** 4개 톡합 ν…ŒμŠ€νŠΈ (RateLimiterServiceTests) +- **μƒνƒœ:** βœ… COMPLETE -#### 9. Circuit Breaker Pattern -- **파일:** Polly policy 톡합 +#### 9. βœ… Circuit Breaker Pattern +- **파일:** src/KArtSell.Host/Infrastructure/CircuitBreakerPolicy.cs (180 lines) - **λ‚΄μš©:** + - Polly policy 기반 κ΅¬ν˜„ - 429 μ—λŸ¬ 3회 β†’ 5λΆ„ 차단 - μžλ™ 볡ꡬ (μ‹œκ°„ ν›„) -- **μ˜ˆμƒ μ‹œκ°„:** 1μ‹œκ°„ +- **ν…ŒμŠ€νŠΈ:** 7개 톡합 ν…ŒμŠ€νŠΈ (CircuitBreakerTests) +- **μƒνƒœ:** βœ… COMPLETE -#### 10. Gate 5: Observability Dashboard -- **파일:** GET /api/observability/metrics (이미 κ΅¬ν˜„) +#### 10. βœ… Gate 5: Observability Dashboard +- **파일:** src/KArtSell.Host/Features/Observability/GetMetricsEndpoint.cs - **λ‚΄μš©:** - Batch SLA: μž‘μ—… μ™„λ£Œ μ‹œκ°„ - Data quality: 격리된 ν•­λͺ© 수 - - Duplicate detection: 쀑볡 κ²½κ³  - - Reconciliation: μƒνƒœ 뢈일치 + - Duplicate detection: 쀑볡 κ²½κ³  (DEBT-014) + - Reconciliation: μƒνƒœ 뢈일치 (DEBT-014) - Model drift: OOS μ„±λŠ₯ 좔적 -- **μ˜ˆμƒ μ‹œκ°„:** 2μ‹œκ°„ +- **ν…ŒμŠ€νŠΈ:** 6개 톡합 ν…ŒμŠ€νŠΈ (ObservabilityMetricsTests) +- **μƒνƒœ:** βœ… COMPLETE ---