Files
MBN_STOCK_WEBVIEW/README.md

11 KiB

MBN Stock WebView

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

현재 유일한 개발·실행 대상은 src/MBN_STOCK_WEBVIEW.LegacyParityApp입니다. Visual Studio F5, 개발 MSIX, 신규 기능과 회귀 검증은 모두 이 앱을 기준으로 합니다.

루트 MBN_STOCK_WEBVIEW.csproj와 루트 MainWindow*/Web은 이전 비교 프로토타입입니다. 현행 솔루션과 기본 F5 대상에서는 제외하되, 연결된 과거 비교 테스트를 별도로 정리할 때까지 참고 소스로 보존합니다. 현재 완료·제한·외부 결정 범위는 이관 현재 기준선이 유일한 우선 문서이며, 문서별 용도는 문서 안내에서 확인할 수 있습니다.

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

  • .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개 국내 시장 종목 검색과 실행 파일 옆 Res INI 기반 컷/UI 구성
  • 빌드 시 읽기 전용 원본 bin\Debug\Cuts를 실행 파일 옆 Cuts로 같은 구조로 배치
  • 기존 운영 흐름을 반영한 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 조회 계층, 원본 10초 DB 상태 감시, Tornado/K3D 어댑터와 35개 scene 계약을 구현했습니다. 2026-07-18 현재 개발 MSIX의 전체 UI/DB 검증과 실제 PGM runtime route 32/34가 끝났으며, 남은 두 route는 원본에도 없는 s5006/s6001 영상 자산 때문에 fail closed 상태입니다. 앱과 Release 패키지의 기본 모드는 계속 DryRun이며 Live allowlist, 명령 예산, callback/OutcomeUnknown 게이트를 완화하지 않습니다. 이 개발 PC의 Tornado2/PGM 마이그레이션 검증은 사용자가 반복 승인 없이 진행하도록 상시 허용했으며, 적용 범위와 중단 조건은 개발 환경 상시 권한에 기록했습니다. 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에 연결했습니다. 실제 Windows 입력으로 검색·키보드·컷/플레이리스트 drag·PList 모달과 화면별 버튼, 개발 DB create/save→fresh readback→delete를 검증했고 cleanup까지 확인했습니다. PList 2,213행 가운데 1,581행은 즉시 복원되고 GraphE fresh read로 22행을 추가 복원할 수 있으며, 최종 610행은 식별정보 부족으로 추정 없이 차단합니다. 5077 6행 20페이지 전체, 마지막 페이지, 5088 12행 전환과 장기 실행 뒤 unload도 실제 PGM에서 확인했습니다. 고객 배포용 서명 MSIX, 외부 영상·배경 자산, 610행의 DBA 결정은 아직 남아 있습니다.

과거 검증 자료

1.0.5 패키지와 날짜가 붙은 Gate·Release·Live 문서는 당시 실행의 역사적 증거입니다. 현행 완료 판정이나 새 패키지 승인으로 재사용하지 않습니다. 당시 상세 내용은 1.0.5 패키지 감사동작 동등성 작업 기록에 보존되어 있습니다.

Visual Studio 2026에서 실행

  1. MBN_STOCK_WEBVIEW.sln을 엽니다.
  2. 솔루션 구성을 Debug, 플랫폼을 x64로 선택합니다.
  3. 공유 시작 프로필 Legacy Parity App (VS F5) 또는 src\MBN_STOCK_WEBVIEW.LegacyParityApp을 시작 프로젝트로 선택합니다.
  4. 실행 프로필이 MBN_STOCK_WEBVIEW.LegacyParityApp - Explicit DryRun (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 .\src\MBN_STOCK_WEBVIEW.LegacyParityApp\MBN_STOCK_WEBVIEW.LegacyParityApp.csproj `
  -c Release `
  -p:Platform=x64 `
  -p:GenerateAppxPackageOnBuild=true `
  -p:AppxPackageSigningEnabled=false

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

구성과 보안

원본 Res/MmoneyCoder.ini의 값은 저장소에 복사하지 않았습니다. 일반 Visual Studio 개발 빌드는 원본 INI를 Git 밖에서 실행 파일 옆 Res로 복사해 기존 경로를 재현하고, MSIX는 %LOCALAPPDATA%\MBN_STOCK_WEBVIEW\Res\MmoneyCoder.ini 또는 기존 database.local.json을 사용합니다. 환경 변수는 선택된 파일보다 우선합니다. 설정 우선순위, 보안과 실제 DB 스모크 방법은 DB 운영 가이드에 정리했습니다.

MSIX 설치 폴더는 읽기 전용입니다. 빌드 시 읽기 전용 원본 Cuts 179개와 허용된 UI용 Res 파일은 실행 출력·게시·MSIX에 포함되지만, DB 자격증명 INI·백업·인증서·벤더 DLL은 포함하지 않습니다. 현재 원본에 없는 s5006/s6001 영상과 일부 배경은 별도 원본 제작 자산을 확보해야 합니다. 로그, 플레이리스트, 운영자 설정과 미리보기 파일은 ApplicationData.Current.LocalFolder 또는 LocalCacheFolder에 저장합니다.

프로젝트 구조

src/MBN_STOCK_WEBVIEW.LegacyParityApp/ WinUI 3 / WebView2 / 원본 동작 호환 MSIX 앱
  MainWindow*.cs, Web/         네이티브 권위·보안 경계와 로컬 운영 UI
MBN_STOCK_WEBVIEW.csproj       이전 프로토타입 앱(솔루션/F5 제외, 참고용 보존)
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은 수정하거나 초기화하지 않았습니다.