6.5 KiB
Visual Studio 2026 개발 Tornado Live 실행
목적과 안전 기본
이 문서는 개발 PC의 Visual Studio 2026에서 MBN_STOCK_WEBVIEW.LegacyParityApp을
명확한 시작 대상으로 실행하고, 개발 Tornado2에 연결하는 방법을 설명한다.
저장소의 송출 기본값과 Release 동작은 계속 DryRun이다. 개발 Live는 다음 세 조건이
동시에 맞는 Debug 프로세스 한 회차에서만 기존 Live 게이트를 설정한다.
- 시작 인자가 정확히
--development-live하나이다. - 컴파일된 앱이 Debug 빌드이다.
- 아래 Git 제외 로컬 승인 파일이 존재하며 엄격한 스키마 검사를 통과한다.
조건이 하나라도 다르면 환경 변수를 설정하지 않는다. 로컬 파일이 없거나 읽기 권한이
없고, JSON 또는 해시 형식이 잘못된 경우에도 시작은 fail-closed로 진행되어 기존
playout.local.json의 안전 기본인 DryRun을 사용한다.
Visual Studio 시작 대상과 프로필
공유 솔루션 실행 프로필은 저장소 루트의
MBN_STOCK_WEBVIEW.slnLaunch에 있으며 다음 프로젝트만 시작한다.
src\MBN_STOCK_WEBVIEW.LegacyParityApp\MBN_STOCK_WEBVIEW.LegacyParityApp.csproj
Debug|x64와 Release|x64의 MSIX Deploy 대상도 루트 프로토타입이 아니라 이 프로젝트이다. Visual
Studio의 시작 드롭다운에는 다음 두 프로필이 표시된다.
| 순서 | 프로필 | 동작 |
|---|---|---|
| 1 | MBN_STOCK_WEBVIEW.LegacyParityApp - Development Live (Package) |
--development-live를 전달한다. 유효한 로컬 승인 파일이 있을 때만 Live를 구성한다. |
| 2 | MBN_STOCK_WEBVIEW.LegacyParityApp - Explicit DryRun (Package) |
개발 Live 인자를 전달하지 않는다. |
개발 PC에서 Live를 사용할 때는 공유 실행 프로필 Legacy Parity App (VS F5), 구성
Debug, 플랫폼 x64, 첫 번째 Development Live 패키지 프로필을 선택하고 F5를 누른다.
DryRun 확인은 두 번째 프로필을 선택한다. 앱은 단일 인스턴스이므로 프로필을 바꿀 때
기존 인스턴스를 정상 종료한 뒤 다시 실행해야 한다.
패키지된 WinUI 3 full-trust 실행에서는 Visual Studio가 프로세스 명령줄에 인자를 전달해도
LaunchActivatedEventArgs.Arguments가 빈 문자열일 수 있다. 부트스트랩은 activation 인자가
비어 있을 때에만 Environment.GetCommandLineArgs()가 정확히 exe + 인자 1개인 경우 그
하나를 사용한다. 인자가 없거나 둘 이상이면 합치거나 일부를 무시하지 않고 Live 요청을
거부한다. Release 빌드는 이 fallback으로 정확한 인자를 얻더라도 Debug-only gate에서
승인 파일을 읽지 않고 기존 DryRun 설정을 유지한다.
로컬 승인 파일
실제 파일 경로는 다음과 같다.
%LOCALAPPDATA%\MBN_STOCK_WEBVIEW\Config\playout.development-live.local.json
실제 파일명은 .gitignore에 포함되어 있다. 저장소의
Config\playout.development-live.example.json을 구조 참고용으로 사용하되, 예제의
해시 placeholder는 실행 가능한 값이 아니다. 실제 승인 파일은 정확히 다음 다섯 속성만
가진다.
{
"schemaVersion": 1,
"mode": "Live",
"authorization": "I_AUTHORIZE_LIVE_PROGRAM_OUTPUT_FOR_THIS_LAUNCH",
"nativeSha256": "<독립적으로 승인한 x64 K3D native DLL의 64자리 SHA-256>",
"interopSha256": "<독립적으로 승인한 x64 K3D Interop DLL의 64자리 SHA-256>"
}
검사 규칙은 다음과 같다.
- 파일 크기는 1~4096바이트이다.
- 파일과
%LOCALAPPDATA%아래의 중간 디렉터리는 reparse point가 아니다. - JSON 주석, trailing comma, 중복 속성, 알 수 없는 속성, 대소문자가 다른 속성을 허용하지 않는다.
schemaVersion은 숫자1,mode는 정확히Live,authorization은 위 문자열과 정확히 일치해야 한다.- 두 해시는 공백 없는 64자리 16진수여야 한다. 경로나 DLL은 Git에 기록하지 않는다.
- 파일 없음, 잘못된 경로, 공유 위반, I/O 또는 읽기 권한 오류는 모두 같은 제한된
authorization-unavailable결과로 처리하며 경로와 값은 로그에 표시하지 않는다.
현재 설치 파일의 해시를 그 자리에서 계산했다는 이유만으로 승인 값으로 사용해서는 안 된다. 벤더 배포본 또는 기존에 독립 검수된 증적과 대조한 값을 사용한다. 파일 ACL은 현재 개발 사용자와 관리자만 수정할 수 있도록 유지한다.
기존 playout.local.json
기존 설정 파일 경로는 그대로이다.
%LOCALAPPDATA%\MBN_STOCK_WEBVIEW\Config\playout.local.json
이 파일의 mode는 DryRun으로 유지한다. Development Live 부트스트랩이 성공한 해당
Debug 프로세스에서만 MBN_STOCK_PLAYOUT_MODE=Live를 process scope로 덮어쓴다.
기존 이중 게이트를 유지하기 위해 로컬 설정에는 trustedLiveOutputEnabled: true가
명시되어야 한다.
실제 cue의 PlayoutCue.SceneName은 builder의 대표 SceneCode가 아니라 활성 cut alias다.
전체 이관 UI를 개발 PGM에서 검증할 때 testSceneAllowlist에는
LegacySceneRuntimeCoverage.ExpectedCutCodes와 동일한 다음 45개 alias를 사용한다.
5001, 5006, 5011, 5016, 50160, 5023, 5024, 5025, 5026, 5029,
5032, 5037, 5068, 5070, 5072, 5074, 5076, 5077, 5078, 5079,
5080, 5081, 5082, 5083, 5084, 5085, 5086, 50860, 5087, 5088,
6001, 6067, 8001, 8002, 8003, 8018, 8032, 8035, 8040, 8046,
8051, 8056, 8061, 8067, N5001
8010과 8086은 활성 cue alias가 아니므로 넣지 않는다. 승인 Cuts에 종속 asset이 없는
장면은 allowlist에 있더라도 기존 asset 검증에서 계속 차단된다.
프로세스 범위 적용 순서
엄격한 파일 검사가 끝난 뒤 다음 값을 process scope에만 적용한다.
- 승인된 native SHA-256 pin
- 승인된 Interop SHA-256 pin
MBN_STOCK_PLAYOUT_MODE=Live- Live authorization — 항상 마지막에 설정
중간 환경 쓰기가 실패하면 기존 값을 복구하고 Live authorization을 새로 설정하지 않는다.
EnvironmentLiveAuthorization은 MainWindow와 IPlayoutEngine을 만들 때 값을 한 번만
캡처하므로, 부트스트랩은 반드시 new MainWindow()보다 먼저 실행된다.
Release 빌드에서는 --development-live가 전달되어도 로컬 승인 파일을 읽지 않고 환경을
변경하지 않는다. 이 개발 편의 경로는 기존 운영 Live 승인 경로나 안전 게이트를 대체하지
않는다.