10 KiB
원본 기능 재감사 기준표
감사 기준일: 2026-07-15
원본(읽기 전용): C:\Users\MD\source\repos\MBN_STOCK_N
마이그레이션 대상: C:\Users\MD\source\repos\MBN_STOCK_WEBVIEW
감사 결론
현재 실행 대상은 .NET 8 / C# / WinUI 3 / Windows App SDK 1.8 / WebView2 기반
MBN_STOCK_WEBVIEW.LegacyParityApp이다. 이는 웹사이트가 아니라 로컬 Web 자산을
WebView2에 표시하는 x64 Windows 데스크톱/MSIX 앱이다.
초기 프로토타입 문서의 “미이관 버튼 disabled”, “Tornado2에 연결하지 않음”, “DB write
없음”은 현재 상태가 아니다. 원본 UI와 클릭 이벤트는 LegacyParityApp → strict bridge →
C# workflow로 연결됐고, 개발 DB write 9개 시나리오와 설치된 MSIX의 개발 PGM 최종
통합까지 검증했다. 기본 송출 모드는 계속 DryRun이다.
상태 정의
| 상태 | 의미 |
|---|---|
완료 |
현재 LegacyParityApp 코드와 해당 자동/통합 검증에 반영됨 |
외부자산 필요 |
코드로 만들 수 없는 Git/MSIX 밖의 승인 영상·배경이 제공되지 않음 |
외부 데이터 정합성 |
현재 DB view/data가 원본 규칙의 fresh identity를 공급하지 않아 추정 없이 차단함 |
우선순위별 결과
| ID | 우선순위 | 기능 | 상태 | 현재 판정과 증적 | 남은 경계 |
|---|---|---|---|---|---|
| LF-001 | P0 | s6001 해외지수 영상 |
외부자산 필요 | builder와 trusted asset 검사는 완료. 승인 Cuts에 국가 영상 13개가 없음 | 제공 후 asset preflight와 해당 scene PGM |
| LF-002 | P0 | cut/asset coverage | 완료 | active alias 45개 .t2s 존재. alias missing/unsafe 0, asset unsafe 0, asset missing 14를 분리 보고 |
누락 자산 자체는 LF-001/LF-003 |
| LF-003 | P0 | s5006 큐브 배경 |
외부자산 필요 | Video\큐브배경.vrv 1개가 승인 Cuts에 없음. builder 누락이 아님 |
제공 후 s5006 DryRun/PGM |
| LF-004 | P0 | 실제 개발 DB write | 완료 | GraphE 4 + PList/AList 2 + ThemeA KRX/NXT 2 + EList 1, 총 9개가 create/save→fresh readback→delete→absence PASS, 잔여 0 | 운영 DB write를 뜻하지 않음 |
| LF-005 | P0 | 개발 Tornado2/PGM 최종 통합 | 완료 | 설치된 최신 MSIX에서 5001 PREPARE/TAKE IN/자동 갱신 → playlist NEXT 5074 1/2 → Page NEXT 2/2 → TAKE OUT, Network Monitoring·PGM·BYE 확인 |
14개 외부 영상 자산 scene은 제공 후 별도 PGM |
| LF-006 | P0 | 원본 35 scene | 완료 | 원본 inventory와 source 기준선 35/35, DTO→mutation→runtime matrix 통과 | 모든 scene의 실제 PGM 완료로 확대 해석 금지 |
| LF-007 | P0 | PageN/NEXT | 완료 | 5·6·12개 단위, 최대 20페이지, 빈/경계/마지막 부분 페이지 테스트와 개발 PGM에서 5074 9종목의 5+4 Page NEXT·다음 행 NEXT 확인 |
없음 |
| LF-008 | P0 | 원클릭 TAKE IN | 완료 | 보이는 TAKE IN/F8 한 번으로 fresh page load 후 PREPARE 1회→TAKE IN 1회. native PREPARE는 진단용으로 유지하되 hidden | unknown에서 재시도 금지 |
| LF-009 | P0 | C# 권위/strict bridge | 완료 | Web은 intent만 전송. LegacyBridgeProtocol allowlist와 LegacyOperatorController snapshot이 DB identity·playlist·scene·송출 상태의 권위 |
새 intent에도 동일 경계 유지 |
| LF-010 | P1 | 10개 탭과 action inventory | 완료 | 10탭, fixed 328, 업종 44, 종목 31, 비교 target 24/action 9를 폐쇄형으로 고정 | 동적 DB 행은 별도 검증 |
| LF-011 | P1 | UC4/UC6/UC7 클릭 | 완료 | 테마·전문가·거래정지는 원본 단일 클릭. UC4/UC6 행은 fixed tree handler와 독립, stale generation 거부 | 없음 |
| LF-012 | P1 | GraphE/FSell/VI | 완료 | GraphE CRUD·찾기·정렬·행 double-click, FSell/VI 확인 시 save+playlist append+close, 취소 경계 이관 | s5025/VI 전용 PGM은 LF-005 |
| LF-013 | P1 | PList/AList | 완료 | 목록·생성·save/load/delete·행 double-click 이관, 개발 DB write/readback/cleanup PASS | 기존 blocked raw row는 추정 복원 금지 |
| LF-014 | P1 | ThemeA/EList | 완료 | 검색·신규·편집·삭제·종목 구성·순서·Delete key 이관, KRX/NXT/expert 개발 DB 시나리오 PASS | scene PGM은 LF-005 |
| LF-015 | P1 | UC5 해외 | 완료 | 해외업종·해외종목·해외지수 조회와 playlist 경로 이관 | s6001 13개 영상은 LF-001 |
| LF-016 | P1 | F2/F3 기본 배경 | 외부자산 필요 | sibling background root, picker, background-none와 trusted path 검사는 완료. 이 장비에 기본.vrv가 없음 |
제공 전 fail closed |
| LF-017 | P1 | 시스템 종료 확인 | 완료 | package-context에서 기본 취소 확인창의 중립 문구·종료/취소 두 버튼을 대조하고 종료 1회, BYE 1회, 자동 TAKE OUT/반대 명령 없음 확인 | 없음 |
| LF-018 | P1 | 원본 비교쌍/수동 파일 | 완료 | 종목비교.dat 8쌍 1회 import·재시작 marker, FSell 3×5행과 VI 9항목 trusted parser/store 검증 |
원본 파일은 계속 읽기 전용 |
| LF-019 | P1 | 실제 DB read→DTO→mutation | 완료 | Oracle/MariaDB 필수 scene selector 33/33, 전체 query 58건 PASS | 외부 asset/PGM 성공과 별도 |
| LF-020 | P2 | FarPoint 대체 | 완료 | Web table로 바꾸되 선택·정렬·이동·single/double-click·저장 이벤트를 strict C# intent로 재현 | 활성 Print/Excel export는 원본에도 없음 |
| LF-021 | P2 | 패키지 단일 인스턴스·모달 격리 | 완료 | 두 번째 activation 전달, 강제 종료 없음. modal에서 F2/F3/F8/Escape와 playlist key 격리 | 새 MSIX 전체 회귀 |
| LF-022 | P2 | 영구 운영 로그/bridge 오류 | 완료 | bounded/redacted log와 toast, malformed payload가 송출 상태를 바꾸지 않음 | authoritative Network Monitoring과 함께 판독 |
| LF-023 | P1 | NXT 저장 playlist restore | 외부 데이터 정합성 | stale code를 제목/current identity로 재검증하는 닫힌 경로는 완료. 현재 v_all_stock 결과가 비어 preview를 fail closed |
DBA/data 정합성 없이는 direct-table 추정 금지 |
DB 검증 상세
Read-only scene smoke
실제 Oracle/MariaDB에서 필수 scene selector 33/33과 전체 query 58건이 성공했다.
이 검증은 실제 DB → 명시 DTO → scene mutation 경로를 증명한다. .t2s, 영상·배경 자산,
K3D 명령 또는 PGM 화면 검증을 대신하지 않는다.
개발 DB write smoke
production service/executor와 충돌 격리된 임시 식별자를 사용했다.
| 시나리오 | 개수 | 검증 |
|---|---|---|
GraphE INPUT_PIE, INPUT_GROW, INPUT_SELL, INPUT_PROFIT |
4 | create, fresh readback, delete, absence |
| PList/AList named playlist | 2 | definition/items save, fresh readback, delete, absence |
| ThemeA KRX | 1 | create, preview/readback, delete, absence |
| ThemeA NXT | 1 | create, preview/readback, delete, absence |
| EList expert | 1 | create, preview/readback, delete, absence |
| 합계 | 9 | PASS, 잔여 0 |
write는 자동 재시도하지 않는다. OutcomeUnknown이면 cleanup mutation이나 다음 시나리오를
보내지 않는 구현·테스트 경계를 유지한다. 이 결과는 개발 DB 검증이며 운영 DB에 임의 쓰기를
허용하거나 수행했다는 뜻이 아니다.
기존 PLAY_LIST read-only 재분류
실제 Oracle 활성 정의 23개와 연결된 2,213행은 원문의 7필드, 한국어, enabled, ITEM_INDEX와 원본의 page 공백 제거 규칙을 보존했다.
| route | 건수 | 결과 |
|---|---|---|
| 기존 닫힌 매퍼 | 1,250 | selection 1,250 |
| 업종 | 24 | selection 24 |
| 비교 | 99 | selection 74, 시장 identity 유실 25 차단 |
| 해외지수 candle | 61 | selection 61 |
| NXT theme | 48 | current preview empty 48 차단 |
| KRX theme | 587 | current-code 94, 나머지 identity/preview/문법/지원 경계로 차단 |
| 해외종목 | 78 | selection 78 |
| GraphE | 36 | fresh materialization 22, 값/identity 14 차단 |
| unique closed mapper 없음 | 30 | nearest-scene 추정 없이 차단 |
| 합계 | 2,213 | 통합 selection 1,603 / 명시 차단 610 |
selectionMapped는 scene asset, PREPARE나 PGM 성공 수치가 아니다. 상세는
NAMED_PLAYLIST_READ_AUDIT.md를 따른다.
외부자산 목록
45개 active alias의 .t2s는 존재한다. 별도 종속 asset 14개만 제공되지 않았다.
s5006:Video\큐브배경.vrvs6001:Video\20201008_미국.vrvVideo\20201008_독일.vrvVideo\20201008_영국.vrvVideo\20201008_프랑스.vrvVideo\20201008_일본.vrvVideo\20201008_중국.vrvVideo\20201008_홍콩.vrvVideo\20201008_대만.vrvVideo\20201008_싱가포르.vrvVideo\20201008_태국.vrvVideo\20201008_필리핀.vrvVideo\20201008_말레이시아.vrvVideo\20201008_인도네시아.vrv
- 기본 배경: sibling
배경\기본.vrv
이 파일들의 부재는 code/build 실패가 아니라 외부자산 미제공이다. 검사기는 존재, 0바이트, root escape, reparse와 manifest 중복을 검사하고 누락 경로와 영향 builder만 redacted 형태로 보고한다.
원본 I/O에서 의도적으로 제외한 항목
- 활성 Print/Excel/FarPoint export/import 호출은 원본에서 발견되지 않았다.
- CSV playlist save/load, thumbnail watcher와
SaveImageFile은 주석 또는 미호출 경로다. s8086은 builder는 있으나 원본 MainForm active alias가 없는 diagnostic route다.- 위 dead/hidden 경로를 새 활성 기능으로 만들지 않는다.
최종 증적 기록
확정된 증적과 최신 전체 회귀의 기록 위치는
LEGACY_PARITY_VALIDATION_20260715.md다.
다음 값은 추측하거나 이전 package 결과를 재사용하지 않는다.
| 항목 | 상태 |
|---|---|
| Debug/Release x64 전체 테스트 개수 | PASS — .NET 각 2,394/2,394, Web 435/435 |
| 새 Release x64 MSIX SHA-256·서명 | FC4EEE1509675E643D2B4CB435E279CAC4611B28534048D9B9EE611E361E0E1F, Valid, CN=Comtrophy |
| 새 package-context 실행 | PASS — DryRun과 개발 Live, 정상 종료 |
| 개발 Tornado2 Network Monitoring/PGM 결과 | PASS — 5001 → 5074 1/2 → 2/2 → TAKE OUT/BYE |
| Gitea 반영 commit | PASS — 최종 이관·검증 문서 포함 commit을 origin/main에 fast-forward push |
원본 저장소는 최종 검증과 배포 이후에도 계속 읽기 전용으로 유지한다.