feat(collection): 데이터 수집 파이프라인 완전 마이그레이션 (Stage 2-3 완료)
Quant Engine CI/CD Pipeline / validate-core (push) Failing after 10s
WBS-9.3 - NULL Policy CI Gate / NULL Policy Validation (push) Failing after 6s
Quant Engine CI/CD Pipeline / validate-ui-and-storage (push) Has been skipped
Snapshot Admin Deployment / build-and-deploy (push) Failing after 1m1s
Deploy to Production / Build & Deploy to Production (push) Successful in 1m23s
Quant Engine CI/CD Pipeline / validate-core (push) Failing after 10s
WBS-9.3 - NULL Policy CI Gate / NULL Policy Validation (push) Failing after 6s
Quant Engine CI/CD Pipeline / validate-ui-and-storage (push) Has been skipped
Snapshot Admin Deployment / build-and-deploy (push) Failing after 1m1s
Deploy to Production / Build & Deploy to Production (push) Successful in 1m23s
**Stage 2: KIS API 클라이언트 + PostgreSQL 인프라**
- IKisApiClient.cs + KisApiClient.cs 구현
· 토큰 캐싱 (ITokenCache 통합)
· 보안 강화: /trading/ 경로 및 주문 TR_ID 차단
· Windows env var + registry fallback (자격증명)
· Bearer 토큰 인증
- PostgreSQL 저장소:
· CollectionRepository (CRUD + 대시보드)
· PostgresTokenCache (토큰 생명주기)
· 3개 테이블 자동 생성 (kis_collection_runs, snapshots, errors)
· Dapper + 원시 SQL (PostgreSQL 호환)
- API DI 등록:
· builder.Services.AddScoped<ICollectionRepository, CollectionRepository>()
· builder.Services.AddScoped<ITokenCache, PostgresTokenCache>()
· builder.Services.AddScoped<IKisApiClient, KisApiClient>()
**Stage 3: Web API 통합 + Blazor UI**
- CollectionEndpoints.cs: 6개 RESTful 엔드포인트
· GET /api/collection/state (대시보드 요약)
· GET /api/collection/runs (최근 실행 이력)
· GET /api/collection/runs/{runId}/snapshots
· GET /api/collection/runs/{runId}/errors
· GET /api/collection/latest/{ticker}
· POST /api/collection/run (비동기 실행 시작)
- Collection.razor: Fluent UI 기반 대시보드
· 요약 카드 (상태, 스냅샷 수, 에러 수)
· 최근 에러 테이블
· 최근 실행 이력
· Start/Refresh 컨트롤
· FluentSkeleton 로딩 상태
- ApiClient.cs: 8개 Collection 메서드 + DTO
**보안 거버넌스 강화**
- AssertReadOnly() 차단 목록:
· FORBIDDEN_PATH_SUBSTRINGS: { "/trading/" }
· FORBIDDEN_TR_ID_PREFIXES: { "TTTC08", "VTTC08", "TTTC01", "VTTC01", "TTTC8434R", "VTTC8434R" }
· 출처: governance/rules/06_no_direct_api_trading.yaml
**빌드 결과**
- ✅ Compile: 0 errors, 6 RC warnings (acceptable)
- ✅ Runtime: 성공
- ✅ 서버: http://localhost:5265
**마이그레이션 상태 (CLAUDE.md 업데이트)**
- Phase 1 (Web UI): ✅ COMPLETE
- Phase 2 (KIS API + 데이터 수집): ✅ COMPLETE (통합 테스트 대기)
- Phase 3 (CLI Tools): 📋 PLANNED
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,56 +0,0 @@
|
||||
{
|
||||
"runtimeTarget": {
|
||||
"name": ".NETCoreApp,Version=v10.0",
|
||||
"signature": ""
|
||||
},
|
||||
"compilationOptions": {},
|
||||
"targets": {
|
||||
".NETCoreApp,Version=v10.0": {
|
||||
"QuantEngine.Tools/1.0.0": {
|
||||
"dependencies": {
|
||||
"QuantEngine.Application": "1.0.0",
|
||||
"QuantEngine.Core": "1.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"QuantEngine.Tools.dll": {}
|
||||
}
|
||||
},
|
||||
"QuantEngine.Application/1.0.0": {
|
||||
"dependencies": {
|
||||
"QuantEngine.Core": "1.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"QuantEngine.Application.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"QuantEngine.Core/1.0.0": {
|
||||
"runtime": {
|
||||
"QuantEngine.Core.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"QuantEngine.Tools/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"QuantEngine.Application/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"QuantEngine.Core/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"runtimeOptions": {
|
||||
"tfm": "net10.0",
|
||||
"framework": {
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "10.0.0"
|
||||
},
|
||||
"configProperties": {
|
||||
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,56 +0,0 @@
|
||||
{
|
||||
"runtimeTarget": {
|
||||
"name": ".NETCoreApp,Version=v10.0",
|
||||
"signature": ""
|
||||
},
|
||||
"compilationOptions": {},
|
||||
"targets": {
|
||||
".NETCoreApp,Version=v10.0": {
|
||||
"QuantEngine.Tools/1.0.0": {
|
||||
"dependencies": {
|
||||
"QuantEngine.Application": "1.0.0",
|
||||
"QuantEngine.Core": "1.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"QuantEngine.Tools.dll": {}
|
||||
}
|
||||
},
|
||||
"QuantEngine.Application/1.0.0": {
|
||||
"dependencies": {
|
||||
"QuantEngine.Core": "1.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"QuantEngine.Application.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"QuantEngine.Core/1.0.0": {
|
||||
"runtime": {
|
||||
"QuantEngine.Core.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"QuantEngine.Tools/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"QuantEngine.Application/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"QuantEngine.Core/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,13 +0,0 @@
|
||||
{
|
||||
"runtimeOptions": {
|
||||
"tfm": "net10.0",
|
||||
"framework": {
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "10.0.0"
|
||||
},
|
||||
"configProperties": {
|
||||
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
|
||||
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
|
||||
}
|
||||
}
|
||||
}
|
||||
-4
@@ -1,4 +0,0 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v10.0", FrameworkDisplayName = ".NET 10.0")]
|
||||
@@ -1,22 +0,0 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("QuantEngine.Tools")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+d083eb7bf9b7e96f19b3ac73f4d514e69e495e47")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("QuantEngine.Tools")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("QuantEngine.Tools")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
// Generated by the MSBuild WriteCodeFragment class.
|
||||
|
||||
-1
@@ -1 +0,0 @@
|
||||
9aa2728d652ca380b2d0dcd31323e64d07ee4fcf0b6cde7b66f7d1c153433cf8
|
||||
-18
@@ -1,18 +0,0 @@
|
||||
is_global = true
|
||||
build_property.TargetFramework = net10.0
|
||||
build_property.TargetFrameworkIdentifier = .NETCoreApp
|
||||
build_property.TargetFrameworkVersion = v10.0
|
||||
build_property.TargetPlatformMinVersion =
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property.EntryPointFilePath =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = QuantEngine.Tools
|
||||
build_property.ProjectDir = C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\
|
||||
build_property.EnableComHosting =
|
||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||
build_property.EffectiveAnalysisLevelStyle = 10.0
|
||||
build_property.EnableCodeStyleSeverity =
|
||||
BIN
Binary file not shown.
-1
@@ -1 +0,0 @@
|
||||
1d48ffb61bcb16ee26ff8dd1f8df5a43d62055c7e2eadff47940d76e842ce3a3
|
||||
-20
@@ -1,20 +0,0 @@
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\bin\Debug\net10.0\QuantEngine.Tools.exe
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\bin\Debug\net10.0\QuantEngine.Tools.deps.json
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\bin\Debug\net10.0\QuantEngine.Tools.runtimeconfig.json
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\bin\Debug\net10.0\QuantEngine.Tools.dll
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\bin\Debug\net10.0\QuantEngine.Tools.pdb
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\bin\Debug\net10.0\QuantEngine.Application.dll
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\bin\Debug\net10.0\QuantEngine.Core.dll
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\bin\Debug\net10.0\QuantEngine.Core.pdb
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\bin\Debug\net10.0\QuantEngine.Application.pdb
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Debug\net10.0\QuantEngine.Tools.csproj.AssemblyReference.cache
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Debug\net10.0\QuantEngine.Tools.GeneratedMSBuildEditorConfig.editorconfig
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Debug\net10.0\QuantEngine.Tools.AssemblyInfoInputs.cache
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Debug\net10.0\QuantEngine.Tools.AssemblyInfo.cs
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Debug\net10.0\QuantEngine.Tools.csproj.CoreCompileInputs.cache
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Debug\net10.0\QuantEng.78F9363A.Up2Date
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Debug\net10.0\QuantEngine.Tools.dll
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Debug\net10.0\refint\QuantEngine.Tools.dll
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Debug\net10.0\QuantEngine.Tools.pdb
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Debug\net10.0\QuantEngine.Tools.genruntimeconfig.cache
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Debug\net10.0\ref\QuantEngine.Tools.dll
|
||||
|
||||
Binary file not shown.
-1
@@ -1 +0,0 @@
|
||||
7ce6c2c1059f99fce2c9e50837963ea8e7cf9093ec7e5cd84e46dc9429038c60
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
-4
@@ -1,4 +0,0 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v10.0", FrameworkDisplayName = ".NET 10.0")]
|
||||
@@ -1,22 +0,0 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("QuantEngine.Tools")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+c5e6a013f40060315f33535da0c1f8af21134d52")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("QuantEngine.Tools")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("QuantEngine.Tools")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
// Generated by the MSBuild WriteCodeFragment class.
|
||||
|
||||
-1
@@ -1 +0,0 @@
|
||||
4bad5b92be324d9dcf5d5e183111c39115ee05883363d663d31882586dcbfc6e
|
||||
-18
@@ -1,18 +0,0 @@
|
||||
is_global = true
|
||||
build_property.TargetFramework = net10.0
|
||||
build_property.TargetFrameworkIdentifier = .NETCoreApp
|
||||
build_property.TargetFrameworkVersion = v10.0
|
||||
build_property.TargetPlatformMinVersion =
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property.EntryPointFilePath =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = QuantEngine.Tools
|
||||
build_property.ProjectDir = C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\
|
||||
build_property.EnableComHosting =
|
||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||
build_property.EffectiveAnalysisLevelStyle = 10.0
|
||||
build_property.EnableCodeStyleSeverity =
|
||||
@@ -1,8 +0,0 @@
|
||||
// <auto-generated/>
|
||||
global using System;
|
||||
global using System.Collections.Generic;
|
||||
global using System.IO;
|
||||
global using System.Linq;
|
||||
global using System.Net.Http;
|
||||
global using System.Threading;
|
||||
global using System.Threading.Tasks;
|
||||
Binary file not shown.
BIN
Binary file not shown.
-1
@@ -1 +0,0 @@
|
||||
2490a4d1b774178fcc0778ed2f1a8c56953e2c7e2c47937b42724ddde96181b7
|
||||
-20
@@ -1,20 +0,0 @@
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\bin\Release\net10.0\QuantEngine.Tools.exe
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\bin\Release\net10.0\QuantEngine.Tools.deps.json
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\bin\Release\net10.0\QuantEngine.Tools.runtimeconfig.json
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\bin\Release\net10.0\QuantEngine.Tools.dll
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\bin\Release\net10.0\QuantEngine.Tools.pdb
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\bin\Release\net10.0\QuantEngine.Application.dll
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\bin\Release\net10.0\QuantEngine.Core.dll
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\bin\Release\net10.0\QuantEngine.Core.pdb
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\bin\Release\net10.0\QuantEngine.Application.pdb
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Release\net10.0\QuantEngine.Tools.csproj.AssemblyReference.cache
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Release\net10.0\QuantEngine.Tools.GeneratedMSBuildEditorConfig.editorconfig
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Release\net10.0\QuantEngine.Tools.AssemblyInfoInputs.cache
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Release\net10.0\QuantEngine.Tools.AssemblyInfo.cs
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Release\net10.0\QuantEngine.Tools.csproj.CoreCompileInputs.cache
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Release\net10.0\QuantEng.78F9363A.Up2Date
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Release\net10.0\QuantEngine.Tools.dll
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Release\net10.0\refint\QuantEngine.Tools.dll
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Release\net10.0\QuantEngine.Tools.pdb
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Release\net10.0\QuantEngine.Tools.genruntimeconfig.cache
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Tools\obj\Release\net10.0\ref\QuantEngine.Tools.dll
|
||||
Binary file not shown.
-1
@@ -1 +0,0 @@
|
||||
dae588d3b69f6c2f8da24f9a30391af4c6ab686a695e60e1813806779915f8f1
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user