2026-07-12 19:47:03 +09:00
2026-07-12 19:28:15 +09:00
2026-07-12 19:28:15 +09:00
2026-07-12 19:47:03 +09:00

MBN Stock WebView

기존 MBN_STOCK_N WinForms 애플리케이션을 단계적으로 대체하기 위한 Windows 데스크톱 프로젝트입니다.

현재 기준 기술 스택은 다음과 같습니다.

  • .NET 8 / C#
  • WinUI 3 (XAML)
  • Windows App SDK 1.8.6 (1.8.260317003)
  • WebView2 기반 운영 UI
  • Windows x64 전용
  • 단일 프로젝트 MSIX

현재 화면/계약 구현 범위

  • WinUI 3 네이티브 창과 WebView2 간 JSON 메시지 브리지
  • FarPoint 플레이리스트를 대체하는 Web UI
    • 첫 열 송출 포함, 행/Ctrl+행 작업 선택
    • 드래그 정렬 및 위/아래 이동
    • 선택 삭제
    • 로컬 저장/불러오기
  • Oracle/MariaDB 4개 국내 시장 종목 검색과 실행본 종목.ini 31개 컷 선택
  • 기존 운영 흐름을 반영한 PREPARE / TAKE IN / NEXT / TAKE OUT UI
  • F8, Esc 단축키와 원본 배경 선택용 F2의 안전 예약
  • 원본의 공급자 비의존 SQL/데이터 요청 71개를 .NET 8 Core 프로젝트로 이관
  • Oracle/MariaDB 실제 비동기 IDataQueryExecutor와 소스별 health/retry/timeout
  • WebView 코스피·코스닥·NXT·5개 지수·해외 실데이터 조회와 장애 UI
  • COM 중립 IPlayoutEngine, x64 K3D late binding, 전용 STA 큐와 프로세스 감시
  • 네이티브 결과가 성공한 뒤에만 갱신되는 PREPARE / TAKE IN / NEXT / TAKE OUT WebView 브리지
  • 기본 DryRun, Test 전용 인스턴스·채널·씬 allowlist 및 Live 이중 승인 안전 게이트
  • MSIX 패키지 매니페스트와 x64 게시 프로필

Oracle/MariaDB 조회 계층과 Tornado/K3D 어댑터의 코드·계약·자동 검증은 구현했습니다. 이는 운영 Oracle 쓰기나 35개 장면 전체의 실제 PGM 동등성이 끝났다는 뜻이 아닙니다. 앱과 패키지의 기본 모드는 계속 DryRun이며 Live allowlist, 회차별 승인, 명령 예산, callback/OutcomeUnknown 게이트를 완화하지 않습니다. DB 설정은 DB 운영 가이드, 송출 설정·실제 검증 증거·롤백은 Tornado/K3D 운영 가이드, 원본 Scene/PageN 대조는 송출 흐름 분석, 장면별 현황은 35개 Scene 동등성 매트릭스, 전체 412개 실행 action과 전용 편집 화면은 운영자 UI 동등성 인벤토리를 참고하세요. 재감사에서 확인한 미적용·적용 중·외부자산 필요 항목은 원본 기능 재감사 기준표가 최종 상태 기준입니다.

35개 Scene/PageN 런타임과 원본 MainForm·UC1~UC7·GraphE·FSell·VIList·PList·AList·ThemeA·EList의 화면·bridge 계약은 WinUI 3/WebView2에 연결했습니다. 412개 고정 실행 action은 폐쇄형 매트릭스로 고정하며, 수동 재무·순매도·VI·테마·전문가·이름 있는 플레이리스트는 저장 후 재조회와 신뢰 검증이 끝나기 전에는 PREPARE할 수 없습니다. 실제 PList 2,213행은 한국어 7필드 무손상과 typed persistence가 모두 일치했고, KRX·해외종목·GraphE fresh proof를 합쳐 1,603행이 현재 selection으로 복원되며 610행은 명시적 사유로 차단됩니다. 종목비교.dat 8쌍은 설치 패키지에서 1회 이전·재시작 영속성까지 확인했습니다. 이 수치는 scene data·asset·PREPARE·PGM 성공이 아니며, 운영 DB write와 승인된 5001/5074 밖의 실제 PGM 확인은 여전히 미검증입니다.

최종 검증 기준선 (2026-07-12)

  • 현재 마이그레이션 소스에서 Core 1,383개, Infrastructure 173개, Playout 393개가 Debug/Release x64에서 각각 모두 통과했다. 구성별 1,949개, 두 구성 합계 3,898개이며 실패·skip은 0건이다. Web 구문 27개와 테스트 415/415, 원본 scene 기준선 35/35도 통과했다.
  • 원본 Cuts 기준 active alias 45개의 .t2s는 missing/unsafe 0건이고 종속 asset 23개는 unsafe 0건, missing 14건이다. 누락은 s5006 큐브 배경 1개와 s6001 국가별 영상 13개다. 실제 Oracle 21c/MariaDB read-only 스모크는 삼성 검색과 필수 loader 33/33, 전체 query 58건을 통과했지만 DB→DTO→mutation 검증 범위다.
  • clean source commit df60e09에서 Release x64 signed MSIX를 새로 빌드했다. 1.0.5.0 SHA-256은 1B0BA713619CC3BD7CB3E03D78FD1EB1CEAF49E7D50F5C00DDFB483917BA5437이며, CN=Comtrophy SignTool 검증, 290개 패키지 항목, Web 33개 byte-for-byte 일치, 금지 자산·비밀값 0건을 확인했다.
  • 설치본 Wickedness.MBNStockWebView_1.0.5.0_x64__qbv3jkvsn3aj0C:\Program Files\WindowsApps의 실제 package context에서 실행했다. 실제 삼성전자 검색과 1열판기본_현재가 5001 구성, PREPARE → TAKE IN → 자동 refresh 정확히 1회 → CAPPED · 1/1 → 3.5초 무변화 → TAKE OUT/IDLE을 DryRun에서 확인했다. Oracle/MariaDB는 2/2 정상이고 KTAP 시도·NEXT·DB write·OutcomeUnknown은 0건이다. 상세 증거는 1.0.5 패키지 감사에 있다.
  • 실제 Tornado2 검증은 고정 계획 55C7755C2F874B4B012239117D4AB717BBCE194E7DCC8DA9B0E40D094FF8CA19MBNWEB-20260711-H 한 회차로 제한했다. PGM에서 50015074 page 1/page 2를 확인한 뒤 TAKE OUT의 검은 화면을 확인했다. Network Monitoring의 정확한 합계는 SCENE_PREPARE 5001 = 3, SCENE_PREPARE 5074 = 2, PLAY = 4, SCENE_PLAYED = 4, FAILURE = 0, ERROR = 0, retry 0이며 최종 OutcomeUnknown = false다.
  • 이후 Round I는 자동 refresh 최대 1회를 넘어 9회가 실행되어 FAIL 처리했다. 1.0.5의 native cap은 package-context DryRun을 통과했지만 실제 Tornado 재검증 전이므로 Round I 승인이나 Round H 패키지 증거를 새 패키지에 재사용하지 않는다.
  • 실제 Tornado 증거는 승인된 5001/5074에만 적용한다. 나머지를 포함한 35개 builder, 45개 active alias, 5·6·12행 PageN 경계와 마지막 페이지는 자동 매트릭스 테스트로 검증했다. s5025는 Git/MSIX 밖의 승인된 trusted CP949 입력 파일이 있어야 하는 운영 전제조건을 유지한다.

Visual Studio 2026에서 실행

  1. MBN_STOCK_WEBVIEW.sln을 엽니다.
  2. 솔루션 구성을 Debug, 플랫폼을 x64로 선택합니다.
  3. MBN_STOCK_WEBVIEW를 시작 프로젝트로 설정합니다.
  4. 실행 프로필이 MBN_STOCK_WEBVIEW (Package)인지 확인합니다.
  5. F5로 빌드·배포·실행합니다.

이 프로젝트는 MSIX 패키지 ID가 필요한 앱입니다. bin 아래의 EXE를 직접 실행하지 말고 반드시 Package 프로필이나 설치된 MSIX로 실행하세요.

기존 중복 형식 오류(CS0121, CS0436)는 루트 앱 프로젝트가 하위 Core 소스까지 다시 컴파일하던 문제였으며, 현재 src\**\*.cs를 앱 컴파일 대상에서 제외해 해결했습니다. Visual Studio가 이전 진단을 계속 표시하면 빌드 > 솔루션 정리 후 다시 빌드하세요.

명령줄 빌드

dotnet restore MBN_STOCK_WEBVIEW.sln -p:Platform=x64
dotnet build MBN_STOCK_WEBVIEW.sln -c Debug -p:Platform=x64

K3D 등록 상태와 COM을 열지 않는 dry-run 송출 흐름 확인:

powershell -NoProfile -ExecutionPolicy Bypass `
  -File .\scripts\Inspect-K3DRegistration.ps1
dotnet run --project .\tools\MBN_STOCK_WEBVIEW.PlayoutSmoke `
  -c Debug -p:Platform=x64 -- --dry-run

격리 Tornado TEST의 프로세스·Network Server 포트·loopback 주소·LISTEN 소유권은 COM을 열기 전에 읽기 전용 점검 스크립트로 확인합니다. 설치 폴더의 다른 Tornado2 버전 EXE는 현재 사용자 설정과 출력 장치를 공유할 수 있으므로 PGM 옆에서 TEST 대용으로 실행하지 않습니다.

별도 Test 인스턴스 검증은 Tornado/K3D 운영 가이드의 단계별 CLI를 사용합니다. --test-plan은 절대 경로 로컬 JSON과 씬 자산만 확인하며 엔진/COM을 만들지 않습니다. PGM/PROGRAM이 전혀 없는 격리 출력에서만 --test-connect로 연결·해제를 확인한 뒤 --test-sequencePREPARE → TAKE IN → NEXT → TAKE OUT을 실행합니다. Test 명령은 MBN_STOCK_PLAYOUT_* 환경 override와 Live 설정을 거부하고 자동 재연결·재생을 하지 않습니다. 승인된 Test 씬 후보는 basename 5001, 5006이며 실제 자산 경로는 저장소에 기록하지 않습니다.

중요: 앱의 기본 DryRun, --probe, --dry-run, --test-planKTAPConnect를 호출하지 않습니다. 따라서 이 단계에서 Tornado2의 View > Network Monitoring Window에 앱이 보낸 통신 기록이 없는 것은 정상입니다. 이 CLI 절차에서는 모든 안전 게이트를 통과한 격리 Test--test-connect에서 처음 네트워크 기록을 기대하며, 별도로 승인된 UI Test 실행도 기록을 만들 수 있습니다. 사용할 포트는 예제 숫자가 아니라 해당 격리 Test Tornado의 Tools > Option > Control > Network Server > TCP Port 실값이어야 합니다.

Tornado2의 PGM 창은 본 프로그램의 KTAP 명령을 렌더링하는 출력 창입니다. 현재 PGM과의 네트워크 왕복만 진단할 때는 일반 Test/Live 엔진을 완화하지 않고 --pgm-connect-diagnostic을 사용합니다. 이 명령은 Registry64에서 계산한 x64 K3D 네이티브 DLL과 Interop이 운영자 승인 SHA-256 핀 MBN_STOCK_K3D_NATIVE_SHA256/MBN_STOCK_K3D_INTEROP_SHA256과 각각 일치할 때만 동적으로 사용하며 KTAPConnect → Disconnect만 한 번 수행합니다. Scene player, 장면 로드, PREPARE, PLAY, STOP 계열 API 표면은 포함하지 않으며 해시 승인 절차와 판정 방법은 Tornado/K3D 운영 가이드에 있습니다.

MSIX 생성:

dotnet build MBN_STOCK_WEBVIEW.csproj `
  -c Release `
  -p:Platform=x64 `
  -p:GenerateAppxPackageOnBuild=true `
  -p:AppxPackageSigningEnabled=false

위 명령은 서명되지 않은 개발 패키지를 AppPackages에 만듭니다. 배포용 MSIX는 Package.appxmanifestIdentity/Publisher 값과 정확히 일치하는 인증서로 서명해야 합니다. 인증서와 개인 키는 저장소에 커밋하지 않습니다.

구성과 보안

원본 RES/MmoneyCoder.ini의 값은 저장소에 복사하지 않았습니다. 예제 설정에는 빈 값만 있으며 실제 설정은 %LOCALAPPDATA%\MBN_STOCK_WEBVIEW\Config\database.local.json 또는 MBN_STOCK_* 환경 변수를 사용합니다. 로컬 파일 생성, 환경 변수, 보안과 스모크 테스트 방법은 DB 운영 가이드에 정리했습니다.

MSIX 설치 폴더는 읽기 전용입니다. 로그, 플레이리스트, 운영자 설정과 미리보기 파일은 이후 ApplicationData.Current.LocalFolder 또는 LocalCacheFolder에 저장해야 합니다. Tornado 씬/영상처럼 큰 운영 자산은 별도의 설정 가능한 외부 폴더로 유지합니다.

프로젝트 구조

MBN_STOCK_WEBVIEW.csproj       WinUI 3 / WebView2 / 단일 프로젝트 MSIX
MainWindow.xaml(.cs)           네이티브 창, WebView 초기화, 보안 경계, 메시지 브리지
Web/                           FarPoint를 대체하는 로컬 운영 UI
src/MBN_STOCK_WEBVIEW.Core/    이관된 데이터 요청 및 공급자 비의존 Core
src/MBN_STOCK_WEBVIEW.Infrastructure/ Oracle/MariaDB 공급자·설정·복원력·health
src/MBN_STOCK_WEBVIEW.Playout/ x64 Tornado/K3D STA·COM 어댑터와 안전 게이트
tests/                         Core/Infrastructure/Playout 단위 테스트
tools/MBN_STOCK_WEBVIEW.DbSmoke/ 비밀값을 출력하지 않는 실제 DB 스모크
tools/MBN_STOCK_WEBVIEW.PlayoutSmoke/ COM 비활성 probe/plan과 격리 Test 연결·시퀀스 CLI
Config/                        비밀값 없는 구성 템플릿
ThirdPartyNotices/             공급자 재배포 라이선스 고지
docs/                          마이그레이션 기록과 다음 단계

원본 C:\Users\MD\source\repos\MBN_STOCK_N은 수정하거나 초기화하지 않았습니다.

Description
No description provided
Readme 11 MiB
Languages
C# 66.8%
JavaScript 23.5%
PowerShell 7.2%
CSS 1.8%
HTML 0.7%