7.6 KiB
원본 호환 마이그레이션 기준선
기준일: 2026-07-15
현재 결정
마이그레이션의 실행 대상은 MBN_STOCK_WEBVIEW.LegacyParityApp이다. 이 앱은
.NET 8 / C# / WinUI 3 / Windows App SDK 1.8 / WebView2 / Windows x64 / MSIX로
구성된 Windows 데스크톱 프로그램이다. WebView2는 앱에 포함된 로컬 HTML/CSS/JavaScript를
표시하는 컨트롤이며, 별도 웹 서버에 배포하는 웹사이트가 아니다.
원본 WinForms UI의 화면 구성과 클릭 이벤트를 먼저 동등하게 옮긴 뒤 개선한다. 기존에
검증된 Core / Infrastructure / Playout은 재사용하며, 원본 업무 규칙과 송출 권위는
C#에 둔다.
기준 원본과 보존 원칙
- 읽기 전용 원본:
C:\Users\MD\source\repos\MBN_STOCK_N - 원본 저장소와
MBN_STOCK_N\MBN_STOCK_N\bin\Debug\Cuts는 분석·검증에만 사용한다. - 원본 파일, 원본 설정, 실제 컷과 자산을 수정하거나 새 저장소에 복사하지 않는다.
- 벤더 DLL, K3D 라이선스, 인증서, DB 비밀번호, 실제 컷·배경 파일과 로컬 운영 설정은 Git/MSIX에 넣지 않는다.
- 실행 컷 목록은 구분행 2개를 포함한 물리행 33개와 실제 종목 컷 31개다.
- 원본 scene inventory는 35개 builder이며, MainForm에서 도달 가능한 runtime은 34개
builder와 45개 active alias다.
s8086은 원본과 같이 무alias 진단 전용이다.
실행 구조와 권위 경계
| 계층 | 책임 |
|---|---|
MBN_STOCK_WEBVIEW.LegacyApplication |
원본 MainForm/UC/Form 상태, 클릭 이벤트, playlist와 업무 규칙의 C# 권위 |
MBN_STOCK_WEBVIEW.LegacyBridge |
WebView가 보낼 수 있는 intent의 strict JSON allowlist와 표시 snapshot 계약 |
MBN_STOCK_WEBVIEW.LegacyParityApp |
WinUI 3 창, 로컬 WebView2 UI, DB composition root, 송출 연결과 개발 MSIX |
MBN_STOCK_WEBVIEW.Core |
DTO, scene resolver/builder, PageN과 LegacyPlayoutWorkflow |
MBN_STOCK_WEBVIEW.Infrastructure |
Oracle/MariaDB와 신뢰 파일 저장소 구현 |
MBN_STOCK_WEBVIEW.Playout |
IPlayoutEngine 뒤의 K3D/Tornado2 어댑터, STA 큐와 안전 게이트 |
WebView는 표시와 사용자 입력 수집만 담당한다. 종목·시장 identity, 7필드 playlist 행,
scene alias, DB mutation, PageN, PREPARED/PROGRAM 상태는 Web에서 임의 생성하거나
확정할 수 없다. 모든 입력은 LegacyBridgeProtocol의 폐쇄형 intent로 파싱되고
LegacyOperatorController가 다시 검증한 뒤 실행된다.
이관된 원본 UI와 이벤트
- 원본 10개 업무 탭과 탭 순서 변경
- 모든 탭에서 유지되는 종목 검색, 종목 결과, 31개 컷과 playlist 편집
- 328개 fixed action, 코스피·코스닥 업종 44개 action, 비교 대상 24개와 비교 9개 action
- UC4 테마, UC6 전문가와 UC7 거래정지의 원본 단일 클릭 동작
- UC4/UC6 목록 행과 고정 action 트리의 독립 클릭 경계
- GraphE 네 수동 재무 화면과 행 더블클릭 추가
- FSell 개인·외국인·기관 5행 입력과 VI 목록·정렬·페이지 입력
- PList/AList의 목록, 신규 생성, 저장, 불러오기, 삭제와 행 더블클릭
- ThemeA와 EList의 검색, 생성, 편집, 삭제, 종목 구성과 순서 변경
- UC5 해외업종·해외종목·해외지수
- playlist 단일/Ctrl/Shift 선택, enabled, 위/아래 이동, 선택/전체 삭제
- F2/F3 배경, Fade, NEXT/Page NEXT, TAKE OUT, 종료 확인과 자동 갱신
FarPoint 표 자체는 Web table로 바뀌었지만 원본의 선택, 정렬, 이동, 단일/더블클릭, 저장·불러오기 이벤트 경계는 C# intent와 snapshot으로 유지한다.
송출 동작
운영자 화면에는 원본처럼 TAKE IN, NEXT, TAKE OUT을 제공한다. 별도 native
PREPARE 버튼은 엔지니어링 진단용으로 DOM에 유지하지만 숨겨져 있다. idle 상태에서
TAKE IN 또는 F8을 한 번 실행하면 C#이 같은 게이트 안에서 다음 순서를 정확히 한 번씩
수행한다.
- 선택 playlist와 page를 C# snapshot으로 고정
- 실제 DB/신뢰 파일에서 DTO를 다시 조회
BeginTransaction→ mutation →QueryVariables→EndTransactionPrepareTakeIn
PREPARE 성공 뒤 TAKE IN이 실패하거나 결과가 불명확하면 prepared 소유권을 유지하고
자동 재시도하지 않는다. NEXT는 같은 scene의 다음 PageN과 다음 enabled playlist 행을
원본 조건으로 구분한다. timeout과 OutcomeUnknown에서는 반대 명령, cleanup 명령 또는
동일 명령을 추측해 반복하지 않는다.
기본 송출 모드는 계속 DryRun이다. Live는 개발 Tornado2/PGM 설정, 프로세스별 명시적
환경 승인, scene allowlist, 명령 예산을 모두 통과해야 한다. 이 안전 게이트는 개발 환경에서도
완화하지 않는다.
scene, alias와 PageN 기준선
- 원본 scene builder source inventory: 35/35
- 도달 가능한 active alias: 45개, 승인된 읽기 전용 Cuts에 대응
.t2s존재 - PageN:
s5074=5,s5077=6,s5088=12개 단위 - page count:
min(20, ceil(itemCount / pageSize)) - 빈 결과, 첫/마지막 부분 페이지, 정확한 경계, 20페이지 cap, 21페이지 거부, 같은 scene Page NEXT와 다음 playlist NEXT를 자동 테스트로 고정
장면별 세부 상태는 SCENE_EQUIVALENCE.md, 호출 순서는
LEGACY_PLAYOUT_ANALYSIS.md를 따른다.
DB 검증 기준선
실제 Oracle/MariaDB read-only 스모크는 필수 scene selector 33/33, 전체 query 58건을 통과했다. 이는 실제 DB → DTO → mutation 경로 검증이며 외부 영상 자산이나 PGM 출력 성공을 뜻하지 않는다.
개발 DB write 스모크는 충돌 격리된 임시 식별자로 다음 9개 시나리오의 create/save → fresh readback → delete → absence를 통과했다.
- GraphE
INPUT_PIE,INPUT_GROW,INPUT_SELL,INPUT_PROFIT4개 - PList/AList named playlist 1개
- ThemeA KRX 1개와 NXT 1개
- EList/expert 1개
스모크는 production executor를 사용하고 write 재시도를 하지 않는다. 결과가
OutcomeUnknown이면 cleanup이나 다음 시나리오를 실행하지 않는 규칙도 유지한다.
DB 비밀번호와 원문 데이터는 문서와 로그에 기록하지 않는다.
외부자산 상태
45개 active alias의 .t2s는 존재한다. 다만 다음 14개 종속 파일은 현재 승인 Cuts에
제공되지 않았다.
s5006:Video\큐브배경.vrv1개s6001: 국가별Video\20201008_<국가>.vrv13개
또한 원본 sibling 배경 디렉터리의 기본.vrv도 이 장비에 없다. 이 상태는 scene/UI
코드 누락이나 마이그레이션 실패가 아니라 Git/MSIX 밖 외부자산 미제공이다. 자산이
없으면 해당 경로는 COM 호출 전에 fail closed하고, 다른 파일로 추정 대체하지 않는다.
Visual Studio 실행
MBN_STOCK_WEBVIEW.sln을 연다.x64구성을 선택한다.src\MBN_STOCK_WEBVIEW.LegacyParityApp\MBN_STOCK_WEBVIEW.LegacyParityApp.csproj를 시작 프로젝트로 지정한다.- Debug 실행 또는 Release x64 MSIX를 생성한다.
개발 패키지 identity는 Wickedness.MBNStockWebView.LegacyParity이며 기존 운영 패키지
identity를 대체하지 않는다.
2026-07-15 검증 기록
확정된 전체 회귀, 새 Release MSIX SHA-256, package-context DryRun/Live, 개발
Tornado2 Network Monitoring과 PGM 결과는
LEGACY_PARITY_VALIDATION_20260715.md에
기록했다. 이전 패키지의 숫자나 해시는 현재 결과로 재사용하지 않았다.