# 원본 Cuts/Res 런타임 배치 ## 기준 원본 원본 저장소는 읽기 전용이며 다음 개발 출력만 런타임 자산 기준으로 사용한다. ```text C:\Users\MD\source\repos\MBN_STOCK_N\MBN_STOCK_N\bin\Debug ├─ Cuts └─ Res ``` Visual Studio가 시작하는 프로젝트는 `src\MBN_STOCK_WEBVIEW.LegacyParityApp\MBN_STOCK_WEBVIEW.LegacyParityApp.csproj`다. 이 프로젝트는 원본 경로가 존재하는 전체 빌드에서 파일을 저장소 안으로 복제하지 않고 외부 Content로 연결해 실행 파일 옆의 다음 구조를 만든다. ```text MBN_STOCK_WEBVIEW.LegacyParityApp.exe Cuts\... Res\... Web\... ``` ## 소스 전용 빌드와 전체 자산 빌드 기본 `LegacyRuntimeAssetsMode`는 `Auto`다. - 기본 형제 경로에 원본이 있으면 모든 필수 자산을 검증하고 전체 자산 빌드를 만든다. - 원본이 없는 새 Git clone의 Debug/F5는 빌드를 막지 않고 소스 전용 DryRun을 만든다. - 원본 경로를 명시하거나 Release MSIX를 만들면 기본값이 `Required`로 바뀌어 누락 자산을 다시 오류로 차단한다. 소스 전용 앱은 내장 컷/UI 목록으로 화면 검토가 가능하고 DB는 미연결 상태로 표시한다. 과거 로컬 송출 프로필, 운영자 송출·배경 경로, 프로세스 환경 override와 Development Live 실행 인수는 사용하지 않고 안전한 DryRun 기본값을 강제한다. 출력과 중간 패키징 파일은 이전 전체 빌드의 자산이나 `MmoneyCoder.ini`를 재사용하지 않도록 다음 별도 경로에 생성된다. ```text src\MBN_STOCK_WEBVIEW.LegacyParityApp\bin\SourceOnly\... src\MBN_STOCK_WEBVIEW.LegacyParityApp\obj\SourceOnly\... ``` 원본 경로가 다른 장비에서 전체 기능을 빌드하려면 다음 속성으로 `bin\Debug` 위치를 지정한다. 명시한 경로는 자동으로 `Required` 취급된다. ```text /p:LegacyRuntimeSourceRoot="D:\path\to\MBN_STOCK_N\MBN_STOCK_N\bin\Debug" ``` 필수 폴더와 `Cuts\5001.t2s`, 주요 UI INI가 없으면 전체 자산 빌드는 원인을 표시하고 중단한다. 경로 탐색이나 CI에서 소스 전용 동작을 명시적으로 확인할 때만 다음 조합을 사용할 수 있다. 이는 전체 기능 또는 배포 승인용 빌드가 아니다. ```text /p:LegacyRuntimeAssetsMode=Auto ``` Git에는 `Cuts`, DB 자격증명, 벤더 DLL, 라이선스, 인증서 또는 로컬 구성을 추가하지 않는다. ## Cuts `Cuts`의 179개 파일과 하위 구조를 출력·게시·MSIX에 그대로 배치한다. 환경 변수, 사용자 설정 메뉴의 디자인 폴더, playout 로컬 JSON의 `sceneDirectory`가 모두 비어 있고 실행 파일 옆 `Cuts`가 있으면 그 경로를 자동으로 사용한다. 장면 루트의 우선순위는 환경 변수, 사용자 설정, playout 로컬 JSON, 실행 파일 옆 기본 폴더 순이다. 현재 원본의 `Cuts\Video`는 비어 있다. 따라서 다음 외부 영상은 이 복사만으로 생기지 않는다. - `s5006`의 `Video\큐브배경.vrv` - `s6001`의 국가별 `Video\20201008_<국가>.vrv` 13개 - 원본 코드가 참조하는 일부 기본/스튜디오 `.vrv` 배경 이 파일은 임의 대체물을 만들지 않고 원 제작 자산을 확보할 때까지 해당 장면의 자산 검사에서 명시적으로 누락 처리한다. ## 사용자 설정 메뉴 좌측 메뉴 하단의 `설정`에서는 네이티브 폴더 선택 창으로 디자인(`Cuts`) 폴더, 설정(`Res`) 폴더와 선택 사항인 운영 배경 폴더를 직접 지정할 수 있다. 선택한 고정 로컬 폴더는 필수 파일, 카탈로그 형식과 reparse 여부를 검증한 뒤 다음 앱 전용 파일에 저장한다. ```text %LOCALAPPDATA%\MBN_STOCK_WEBVIEW\Config\runtime-folders.local.json ``` 폴더 변경과 기본값 복원은 자동 저장되지만 런타임 자산과 카탈로그에는 앱을 다시 시작한 뒤 적용된다. 같은 화면의 `왼쪽 메뉴 펼쳐서 시작`은 즉시 화면에 반영되고 다음 시작 상태도 위 파일에 저장된다. 절대 경로는 Web 콘텐츠에 전달하지 않는다. 이 화면은 자산 위치, 메뉴 시작 상태와 선택한 `Res` 안의 검증된 DB 프로필 위치만 관리한다. DB 자격증명의 내용은 표시하거나 직접 편집하지 않는다. Release/default `DryRun`, KTAP 호스트· 포트·채널, Test/Live 게이트, scene allowlist와 벤더 해시는 보호 설정으로 유지되며 폴더를 선택해도 완화되거나 변경되지 않는다. ## Res와 DB 설정 UI 이미지와 UI용 INI는 allowlist로 출력·게시·MSIX에 배치한다. 앱은 실행 시 이 파일들을 CP949 레거시 형식으로 읽고, 파일의 section/row/order를 기존의 폐쇄형 C# action catalog와 대조한 뒤 UI를 구성한다. INI가 임의의 scene/action을 새로 추가할 수는 없다. `MmoneyCoder.ini`는 실제 자격증명을 포함하므로 일반 Visual Studio 개발 출력에만 `Res\MmoneyCoder.ini`로 복사하고 MSIX Content에는 넣지 않는다. 일반 개발 빌드는 이 원본 파일이 없으면 중단하지만, MSIX 생성·게시 빌드는 자격증명 파일 없이도 비민감 자산만으로 수행할 수 있다. `Clean`은 실행 출력에 복사했던 INI를 제거한다. 패키지 실행은 다음 로컬 overlay를 사용할 수 있다. ```text %LOCALAPPDATA%\MBN_STOCK_WEBVIEW\Res\MmoneyCoder.ini ``` 사용자 설정 메뉴에서 별도 `Res` 폴더를 선택했고 그 안에 `MmoneyCoder.ini`가 있으면 앱은 저장 전에 형식을 네이티브에서 검증하고 다음 시작부터 그 DB 설정을 우선 사용한다. 파일 내용과 자격증명은 Web 화면에 노출하지 않으며 화면에서 직접 편집할 수도 없다. 단, one-shot Gate A 검증 실행에서는 이 사용자 선택을 무시하고 검증 계획에 고정된 `database.local.json`만 사용한다. `MmoneyCoder - 복사본.ini`, `.bak`, `.zip`, `afiedt.buf.txt`는 런타임 소비자가 없고 과거 자격증명 또는 SQL 흔적을 담을 수 있어 어떤 출력/패키지에도 넣지 않는다. 실제 자산과 설정은 Git 추적 대상이 아니다.