feat: make LegacyParityApp playout live-only

This commit is contained in:
2026-07-28 14:52:59 +09:00
parent 11d3849933
commit ea96a08ad5
23 changed files with 456 additions and 270 deletions

View File

@@ -11,16 +11,16 @@
이 문서는 개발 PC의 Visual Studio 2026에서 `MBN_STOCK_WEBVIEW.LegacyParityApp`
명확한 시작 대상으로 실행하고, 개발 Tornado2에 연결하는 방법을 설명한다.
저장소의 송출 기본값과 Release 동작은 계속 `DryRun`다. 개발 Live는 다음 세 조건이
동시에 맞는 **Debug 프로세스 한 회차**에서만 기존 Live 게이트를 설정한다.
지정 개발 PC의 Debug와 Release 전체 앱은 모두 보호된 `Live`로만 기동한다. 개발 Live는
다음 조건이 동시에 맞을 때 기존 Live 게이트를 설정한다.
1. 시작 인자가 정확히 `--development-live` 하나이다.
2. 컴파일된 앱이 Debug 빌드이다.
1. 정상 무인자 실행이거나 시작 인자가 정확히 `--development-live` 하나이다.
2. 소스 전용 설정 빌드가 아닌 전체 runtime 빌드이다.
3. 아래 Git 제외 로컬 승인 파일이 존재하며 엄격한 스키마 검사를 통과한다.
조건이 하나라도 다르면 환경 변수를 설정하지 않는다. 로컬 파일이 없거나 읽기 권한이
없고, JSON 또는 해시 형식이 잘못된 경우에도 시작은 fail-closed로 진행되어 기존
`playout.local.json`의 안전 기본인 `DryRun`을 사용한다.
없고, JSON 또는 해시 형식이 잘못된 경우에는 전체 앱의 Live 엔진 기동을 차단하고
명확한 오류를 표시한다. `DryRun`으로 폴백하지 않는다.
새 clone처럼 아직 검증된 runtime 연결이 없는 경우의 첫 F5는 예외적으로 소스 전용 설정
앱을 연다. 이 프로세스는 `--development-live`를 적용하지 않고 DB와 송출을 모두 차단한다.
@@ -29,7 +29,7 @@
`dotnet build`, DB 복사, K3D 검사와 Live 승인 발급도 실행하지 않으므로 즉시 완료되어야
한다. 설정을 완료한 뒤 창을 닫고 F5를 한 번 더 누르면 전체 앱 빌드가 시작된다.
기존 유효한 Live 승인 파일이 없는 PC는 두 번째 F5에서도 안전한 `DryRun`을 유지한다.
기존 유효한 Live 승인 파일이 없는 PC는 두 번째 F5에서 전체 앱 기동이 차단된다.
DB overlay, K3D pin과 Development Live 승인이 필요하면 아래 수동 초기화 절차를 별도로
완료한다. 자세한 절차는
[개발 PGM 인수 절차](DEVELOPMENT_LIVE_HANDOFF.md#2-기존-자산-보유-pc-clone-후-1회-초기화)를
@@ -50,24 +50,22 @@ src\MBN_STOCK_WEBVIEW.LegacyParityApp\MBN_STOCK_WEBVIEW.LegacyParityApp.csproj
```
`Debug|x64``Release|x64`의 MSIX Deploy 대상도 루트 프로토타입이 아니라 이 프로젝트이다. Visual
Studio의 시작 드롭다운에는 다음 프로필 표시된다.
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 확인은 두 번째 프로필을 선택한다. 앱은 단일 인스턴스이므로 프로필을 바꿀 때
기존 인스턴스를 정상 종료한 뒤 다시 실행해야 한다.
개발 PC에서는 공유 실행 프로필 `Legacy Parity App (VS F5)`, 구성 `Debug` 또는 `Release`,
플랫폼 `x64`, Development Live 패키지 프로필을 선택하고 F5를 누른다. 앱은 단일
인스턴스이므로 구성을 바꿀 때 기존 인스턴스를 정상 종료한 뒤 다시 실행해야 한다.
패키지된 WinUI 3 full-trust 실행에서는 Visual Studio가 프로세스 명령줄에 인자를 전달해도
`LaunchActivatedEventArgs.Arguments`가 빈 문자열일 수 있다. 부트스트랩은 activation 인자가
비어 있을 때에만 `Environment.GetCommandLineArgs()`가 정확히 `exe + 인자 1개`인 경우 그
하나를 사용한다. 인자가 없거나 둘 이상이면 합치거나 일부를 무시하지 않고 Live 요청을
거부한다. Release 빌드는 이 fallback으로 정확한 인자를 얻더라도 Debug-only gate에서
승인 파일을 읽지 않고 기존 `DryRun` 설정을 유지한다.
비어 있을 때에만 `Environment.GetCommandLineArgs()`를 확인한다. 인자가 없으면 정상 Live
실행으로 처리하고, 정확히 `exe + --development-live`이면 호환 Live 실행으로 처리한다.
추가 인자가 있으면 합치거나 일부를 무시하지 않고 기동을 거부한다. Release도 Debug와
동일한 보호된 승인 파일과 검증을 사용한다.
## 로컬 승인 파일
@@ -137,8 +135,8 @@ DryRun 확인은 두 번째 프로필을 선택한다. 앱은 단일 인스턴
%LOCALAPPDATA%\MBN_STOCK_WEBVIEW\Config\playout.local.json
```
이 파일의 `mode``DryRun`로 유지한다. Development Live 부트스트랩이 성공한 해당
Debug 프로세스에서만 `MBN_STOCK_PLAYOUT_MODE=Live`를 process scope로 덮어쓴다.
이 파일의 `mode``Live`로 유지한다. Development Live 부트스트랩은 Debug와 Release
프로세스에서 검증된 Live authorization과 K3D 해시를 process scope로 적용한다.
기존 이중 게이트를 유지하기 위해 로컬 설정에는 `trustedLiveOutputEnabled: true`
명시되어야 한다.
@@ -170,6 +168,5 @@ Debug 프로세스에서만 `MBN_STOCK_PLAYOUT_MODE=Live`를 process scope로
`EnvironmentLiveAuthorization``MainWindow``IPlayoutEngine`을 만들 때 값을 한 번만
캡처하므로, 부트스트랩은 반드시 `new MainWindow()`보다 먼저 실행된다.
Release 빌드에서는 `--development-live`가 전달되어도 로컬 승인 파일을 읽지 않고 환경을
변경하지 않는다. 이 개발 편의 경로는 기존 운영 Live 승인 경로나 안전 게이트를 대체하지
않는다.
Release 빌드도 Debug와 같은 로컬 승인 파일을 읽고 같은 안전 게이트를 적용한다. 이는
운영/방송 환경의 별도 승인 절차를 대체하지 않는다.