85 lines
6.2 KiB
Markdown
85 lines
6.2 KiB
Markdown
# MBN_STOCK_N 마이그레이션 현황
|
|
|
|
## 원본 기준선
|
|
|
|
원본은 .NET Framework 4.8 / C# 7.3 기반 WinForms 애플리케이션입니다. 약 38,000줄의 C# 코드와 다음 요소로 구성되어 있습니다.
|
|
|
|
- 대형 `MainForm` 및 7개 WinForms UserControl
|
|
- 보조 폼 7개
|
|
- Tornado/K3D 장면 처리 클래스 35개
|
|
- Oracle 및 MariaDB SQL/데이터 요청 계층
|
|
- FarPoint Spread 4 플레이리스트/그리드
|
|
|
|
원본 작업 트리의 `MainForm.cs`와 `RES/MmoneyCoder.ini`에는 커밋되지 않은 변경이 있습니다. 원본 저장소는 그대로 보존했으며, 새 프로젝트에는 비밀값이 포함된 INI를 복사하지 않았습니다.
|
|
|
|
## 적용 완료
|
|
|
|
| 기존 구현 | 새 구현 |
|
|
|---|---|
|
|
| WinForms MainForm | WinUI 3 `MainWindow` + 로컬 WebView2 UI |
|
|
| FarPoint `FpSpread` 플레이리스트 | HTML table + 선택/드래그 정렬/이동/삭제 |
|
|
| 플레이리스트 임시 저장 | WebView2 사용자 데이터 영역의 `localStorage` |
|
|
| WinForms 단축키 | Web UI `F2` / `F8` / `Esc` 처리 |
|
|
| 직접 DBManager 호출 | Core의 `IDataQueryExecutor` 경계 |
|
|
| `Data/Request` SQL 정의 | .NET 8 Core 프로젝트로 71개 이관 |
|
|
| 동기 Oracle/MySQL 연결 | 비동기 Oracle/MariaDB 공급자, 취소·timeout·선별 재시도 |
|
|
| DB 실패 시 `Application.Exit()` | 앱 유지 + WebView 소스별 health/오류/재조회 |
|
|
| 종목·지수 선택 데이터 | WebView의 KRX/NXT 종목 및 5개 지수 실데이터 표 |
|
|
| 직접 K3D COM 호출 | COM 중립 `IPlayoutEngine` + x64 late-bound 어댑터 |
|
|
| UI thread의 Tornado 호출 | bounded STA FIFO, timeout 격리, 재연결·프로세스 감시 |
|
|
| 버튼 즉시 상태 변경 | requestId 기반 WebView bridge와 실제 결과 후 상태 갱신 |
|
|
| AnyCPU/x86 혼재 | 솔루션 및 게시 프로필 x64 단일화 |
|
|
| 상대 경로 Web 파일 | MSIX Content 및 안전한 가상 호스트 매핑 |
|
|
|
|
WebView는 `https://app.mbn.local` 가상 호스트로 패키지 내부 파일만 제공합니다. 외부 탐색은 WebView 안에서 차단하고 기본 브라우저로 넘기며, 개발자 도구와 기본 컨텍스트 메뉴는 디버거가 연결된 경우에만 활성화합니다.
|
|
|
|
## 다음 구현 경계
|
|
|
|
### 데이터베이스
|
|
|
|
- 완료: `Oracle.ManagedDataAccess.Core 23.26.200`, `MySqlConnector 2.6.1` 고정
|
|
- 완료: 실제 비동기 `IDataQueryExecutor`, 취소, 명령/전체 timeout, 새 연결 재시도
|
|
- 완료: LocalAppData/환경 변수 설정과 공개 오류의 비밀값 비노출
|
|
- 완료: Oracle/MariaDB health, 기존 종목·지수 SQL의 WebView 조회, 단위/실DB 스모크
|
|
- 후속: 운영 보안 정책에 맞춘 Credential Locker/DPAPI 전환과 계정 자동 순환
|
|
- 후속: 사용자 입력이 들어가는 나머지 legacy SQL의 단계적 매개변수화
|
|
|
|
### Tornado/K3D
|
|
|
|
원본 `MainForm`/35개 Scene builder/`PageN`의 호출 순서와 현재 어댑터의 정확한 적용 범위는 [원본 Tornado 송출 흐름 분석](LEGACY_PLAYOUT_ANALYSIS.md)에 정리했습니다.
|
|
|
|
- 완료: Registry64의 K3D TypeLib/CLSID/ProgID/AMD64/Apartment 등록 검사
|
|
- 완료: 빌드 입력에 Interop DLL을 두지 않는 late binding과 선택적 진단용 `TlbImp` 스크립트
|
|
- 완료: `IPlayoutEngine` 경계, bounded STA FIFO/message pump, timeout 후 `OutcomeUnknown` 격리
|
|
- 완료: 연결/해제, 명시적 재연결(no replay), `Tornado2` 접두사 프로세스 감시
|
|
- 완료: `PREPARE`, `TAKE IN`, `NEXT`, `TAKE OUT` WebView 메시지 및 상태/오류 UI 연결
|
|
- 완료: 기본 DryRun, Test의 단일 loopback 테스트 인스턴스·채널·씬 allowlist, Live 이중 승인
|
|
- 완료: 현재 Tornado2 PGM 렌더 창에 대한 x64 K3D `KTAPConnect → Disconnect` 실제 왕복 및 Network Monitoring `[R] HELLO`/`[S] SUCCESS HELLO` 확인. 렌더 명령은 호출하지 않음
|
|
- 완료: 네이티브/Interop 이중 SHA-256 핀, 프로세스 수명 파일 잠금, 실제 PGM listener 소유권 및 KTAP 지연 dispatch 차단
|
|
- 완료: 승인된 실제 PGM에서 고정 해시의 `5001 → 5006 → TAKE OUT` 호출. `Connect → Prepare/Play(5001) → Prepare/Play(5006) → StopAll → Disconnect` 전 단계 성공, 세 관찰 구간 `5051/5052/5093ms`, PGM의 5001·5006 화면과 최종 검은 화면 확인
|
|
- 완료: 같은 회차 Network Monitoring의 `HELLO/LOAD_SCENE/SCENE_PREPARE/PLAY/STOPAL/BYE` 기록과 39개 연속 캡처를 manifest SHA-256으로 검증. 로컬 증거와 재현 절차는 [Tornado/K3D 운영 가이드](PLAYOUT.md)에 기록
|
|
- 완료: 첫 회차의 출력 전 Prepare 거부 원인이 cue 이중 resolve임을 확인하고, 상대 cue와 승인 검사용 절대 자산 경로를 분리하는 수정 및 회귀 테스트 적용. 결과 불명확 시 재시도 금지 원칙 유지
|
|
- 목표 완료 판정: 최초 완료 조건의 격리 Test 인스턴스 검증은 이후 운영자의 현재 PGM 대상 회차별 명시 승인으로 대체되었습니다. 따라서 위 고정 테스트 컷 `5001`/`5006`의 실제 SDK 호출과 화면·Network Monitoring 증거를 이번 목표의 실제 호출 검증으로 인정합니다. 이 예외는 현재 PGM을 일반 Test 인스턴스로 분류하거나 앱의 Test/Live 안전 게이트를 완화하지 않습니다.
|
|
- 배포 전 후속: 별도 승인된 Test 환경에서 MSIX WebView 컨텍스트의 실제 COM 활성화와 네 버튼 출력 관찰
|
|
- 후속: `OnScenePlayed`/`OnCutOut`/`OnStopAll` callback 기반 장기 세션 Scene unload
|
|
- 후속: 35개 scene builder의 복합 K3D mutation 및 `PageN`/`Nxt_PageN` 같은-scene 페이지 갱신 포팅
|
|
|
|
### 화면 기능
|
|
|
|
- Oracle 플레이리스트 영구 저장/불러오기
|
|
- 10개 업무 탭의 실제 데이터 바인딩
|
|
- 테마, 전문가, VI, 비교, 수동 그래프 편집기
|
|
- 35개 장면 빌더의 단계별 포팅
|
|
- 실제 Preview 이미지 및 씬/영상 자산 연결
|
|
|
|
## 의도적으로 제외한 항목
|
|
|
|
- WinForms `*.Designer.cs`, `*.resx`
|
|
- FarPoint DLL과 라이선스 파일
|
|
- `Interop.K3DAsyncEngineLib.dll` 복사본
|
|
- 원본 `App.config` 바인딩 리디렉션
|
|
- 실제 DB 주소, 계정, 암호가 들어 있는 INI
|
|
- Git에서 관리되지 않던 약 212MB의 Tornado 컷/영상 자산
|
|
|
|
이 항목들은 WinUI/WebView/MSIX 경계에 맞춰 재구현하거나, 정식 라이선스 및 운영 자산 위치가 확인된 뒤 어댑터 형태로 연결합니다.
|