104 lines
7.3 KiB
Markdown
104 lines
7.3 KiB
Markdown
# 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
|
|
- 항목 선택
|
|
- 드래그 정렬 및 위/아래 이동
|
|
- 선택 삭제
|
|
- 로컬 저장/불러오기
|
|
- 기존 운영 흐름을 반영한 `PREPARE` / `TAKE IN` / `NEXT` / `TAKE OUT` UI
|
|
- `F2`, `F8`, `Esc` 단축키
|
|
- 원본의 공급자 비의존 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 연결 계층은 구현 및 실제 DB 스모크 검증을 완료했습니다. Tornado/K3D는 안전 기본값인 `DryRun`과 실제 어댑터 경계를 구현했습니다. 현재 장비에는 `PGM` Tornado만 실행 중이므로 그 프로세스에는 COM을 활성화하지 않았고, 실제 송출 호출 검증은 별도 Test 인스턴스·채널·씬이 준비된 뒤 진행합니다. DB 설정은 [DB 운영 가이드](docs/DATABASE.md), 송출 설정과 롤백은 [Tornado/K3D 운영 가이드](docs/PLAYOUT.md), 원본 Scene/PageN 대조는 [송출 흐름 분석](docs/LEGACY_PLAYOUT_ANALYSIS.md), 전체 현황은 [마이그레이션 문서](docs/MIGRATION.md)를 참고하세요.
|
|
|
|
## 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가 이전 진단을 계속 표시하면 `빌드 > 솔루션 정리` 후 다시 빌드하세요.
|
|
|
|
## 명령줄 빌드
|
|
|
|
```powershell
|
|
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
|
|
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을 열기 전에 [읽기 전용 점검 스크립트](scripts/Inspect-TornadoTestIsolation.ps1)로 확인합니다. 설치 폴더의 다른 Tornado2 버전 EXE는 현재 사용자 설정과 출력 장치를 공유할 수 있으므로 PGM 옆에서 TEST 대용으로 실행하지 않습니다.
|
|
|
|
별도 Test 인스턴스 검증은 [Tornado/K3D 운영 가이드](docs/PLAYOUT.md)의 단계별 CLI를 사용합니다. `--test-plan`은 절대 경로 로컬 JSON과 씬 자산만 확인하며 엔진/COM을 만들지 않습니다. PGM/PROGRAM이 전혀 없는 격리 출력에서만 `--test-connect`로 연결·해제를 확인한 뒤 `--test-sequence`로 `PREPARE → TAKE IN → NEXT → TAKE OUT`을 실행합니다. Test 명령은 `MBN_STOCK_PLAYOUT_*` 환경 override와 Live 설정을 거부하고 자동 재연결·재생을 하지 않습니다. 승인된 Test 씬 후보는 basename `5001`, `5006`이며 실제 자산 경로는 저장소에 기록하지 않습니다.
|
|
|
|
중요: 앱의 기본 `DryRun`, `--probe`, `--dry-run`, `--test-plan`은 `KTAPConnect`를 호출하지 않습니다. 따라서 이 단계에서 Tornado2의 `View > Network Monitoring Window`에 앱이 보낸 통신 기록이 없는 것은 정상입니다. 이 CLI 절차에서는 모든 안전 게이트를 통과한 격리 `Test`의 `--test-connect`에서 처음 네트워크 기록을 기대하며, 별도로 승인된 UI Test 실행도 기록을 만들 수 있습니다. 사용할 포트는 예제 숫자가 아니라 해당 격리 Test Tornado의 `Tools > Option > Control > Network Server > TCP Port` 실값이어야 합니다.
|
|
|
|
MSIX 생성:
|
|
|
|
```powershell
|
|
dotnet build MBN_STOCK_WEBVIEW.csproj `
|
|
-c Release `
|
|
-p:Platform=x64 `
|
|
-p:GenerateAppxPackageOnBuild=true `
|
|
-p:AppxPackageSigningEnabled=false
|
|
```
|
|
|
|
위 명령은 서명되지 않은 개발 패키지를 `AppPackages`에 만듭니다. 배포용 MSIX는 `Package.appxmanifest`의 `CN=Wickedness`와 정확히 일치하는 인증서로 서명해야 합니다. 인증서와 개인 키는 저장소에 커밋하지 않습니다.
|
|
|
|
## 구성과 보안
|
|
|
|
원본 `RES/MmoneyCoder.ini`의 값은 저장소에 복사하지 않았습니다. [예제 설정](Config/appsettings.example.json)에는 빈 값만 있으며 실제 설정은 `%LOCALAPPDATA%\MBN_STOCK_WEBVIEW\Config\database.local.json` 또는 `MBN_STOCK_*` 환경 변수를 사용합니다. 로컬 파일 생성, 환경 변수, 보안과 스모크 테스트 방법은 [DB 운영 가이드](docs/DATABASE.md)에 정리했습니다.
|
|
|
|
MSIX 설치 폴더는 읽기 전용입니다. 로그, 플레이리스트, 운영자 설정과 미리보기 파일은 이후 `ApplicationData.Current.LocalFolder` 또는 `LocalCacheFolder`에 저장해야 합니다. Tornado 씬/영상처럼 큰 운영 자산은 별도의 설정 가능한 외부 폴더로 유지합니다.
|
|
|
|
## 프로젝트 구조
|
|
|
|
```text
|
|
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`은 수정하거나 초기화하지 않았습니다.
|