Files
networkSetup/docs/code-design/07-ui-and-commands.md
T

6.3 KiB

Tauri 화면과 명령 인터페이스

화면 구성

화면 입력/행동 결과
프로젝트 생성·열기·저장, 제품명/제조사/엔진, 소스 alias 연결 현재 revision, 미확정 필드
파일 목록 파일/폴더 추가, include/exclude, 대상 폴더, 서명 정책 실제 설치 트리, 용량, 누락·충돌·변경 파일
설치 설정 기본/기존 경로, perMachine, x64, 필수 런타임 설치 디렉터리·사전 조건 미리보기
설치 과정 단계 추가·삭제·활성화·순서·조건, 핸들러 설정 모드별 실행 계획, 의존성·필수 단계 검사
설치 UI 테마·로고·색상·문구, 지원되는 페이지·입력 항목 편집 모드별 미리보기, 선택한 BA 백엔드의 지원 범위
레지스트리 hive/view/key/name/type/value 편집 형식 검증, 생성/수정/삭제 차이
버전과 식별자 목표 버전, 전체 전환/동일 계열 선택 자동 할당 GUID와 변경 이유, 기존 계열 잠금
릴리스 생성 출력 프로필, 서명 프로필, 생성 계획 파일/용량/도구/설치 경로 요약과 오류
패치 생성 목표 릴리스, 기준 상태 복수 선택 기준별 호환 여부·차이·대체 경로
작업/이력 실행·취소·실패 작업 재검사, 로그 보기 단계 진행률, 실패 원인, 결과 폴더
릴리스 상세 파일·서명·검증 증빙, 내보내기 확정 결과와 배포 준비 상태

파일 수가 수천 개이므로 트리·표는 가상화하고 정렬·검색·필터를 제공한다. 큰 목록은 Rust 쪽에서 페이지 단위로 조회하며 매번 전체 파일 목록을 IPC로 보내지 않는다. 단일 EXE로 만들 수 없는 용량은 생성 시작 전에 가능한 출력 방식을 설명한다.

일반 흐름은 프로젝트 열기 → 설정 수정 → 계획 미리보기 → 빌드 실행 → 결과 확인이다. 패치는 목표 전체 릴리스를 먼저 만들고 기준 릴리스를 선택한다. 설정이 달라졌으면 예전 계획을 실행할 수 없으며 차이를 다시 계산한다.

미서명 개발 결과에는 개발용 · 배포 불가를 표시한다. 서명 완료와 설치 시험 완료를 별도 항목으로 표시하여 성공 아이콘 하나로 뭉뚱그리지 않는다. 업로드/그룹 승격 버튼은 초기 구현 범위에 넣지 않고 배포 시스템용 파일 내보내기를 제공한다.

Tauri IPC 계약

아래 이름은 구현할 Command 제안이며 현재 존재하는 API가 아니다.

Command 요청 → 응답
open_project 허용된 파일 선택 결과 → ProjectHandle, revision, 요약
save_project handle, expectedRevision, DTO → 새 revision
resolve_files handle, revision → 목록 snapshotId, 요약
list_resolved_files snapshotId, cursor, filter → page, nextCursor
validate_project handle, revision → ValidationReport
preview_install_flow handle, revision, installMode, mockState → 시스템 변경 없는 실행 계획
preview_installer_ui handle, revision, backend, installMode → 미리보기 모델과 미지원 기능
plan_release handle, revision, outputProfiles → planId, 입력 해시, 변경/경고
plan_patch targetReleaseId, baseStateIds → 기준별 planId 또는 차단 이유
start_build planId, clientRequestId → jobId
get_job / cancel_job jobId → 작업 상태 / 취소 접수
list_releases / get_release 조회 조건 / releaseId → 이력 / 상세
export_release releaseId, 허용된 목적지 → export 결과

서버 측 세션의 ProjectHandle과 planId를 사용하고 WebView에서 전달한 절대 경로를 그대로 신뢰하지 않는다. clientRequestId는 중복 클릭/재전송을 같은 jobId로 연결한다. 계획 데이터·권한·프로젝트 revision은 Rust가 재검증한다.

작업 이벤트는 jobId, 단조 증가 sequence, stage, status, completedBytes, totalBytes, messageCode를 포함한다. WebView가 끊겼다가 돌아오면 get_job과 마지막 sequence 이후 기록을 조회한다. 이벤트만이 유일한 상태 저장소가 되지 않는다. 로그는 크기 제한·회전·비밀값 제거를 적용한다.

오류는 code, stage, message, details, retryable, logRef 형태다. 예: MissingRequiredFile, TargetPathCollision, IdentityConflict, PatchIncompatible, PayloadTooLarge, SigningFailed, ToolchainMismatch, FullUpgradeRouteUnavailable. 화면은 원인과 바꿔야 할 설정을 보여 주고 외부 도구 원문은 상세 로그에서 확인한다.

CLI 계약

다음은 구현 예정인 명령 형식이다. 현재 실행 가능한 명령이 아니다.

package-builder validate --project .\package-project.json --format json
package-builder plan release --project .\package-project.json --profile offline-layout
package-builder build --plan-id <planId>
package-builder plan patch --target <releaseId> --base-state <baseStateId>
package-builder job status --id <jobId> --format json
package-builder export --release <releaseId> --output D:\exports\egbim

CI용 release/patch 편의 명령은 같은 엔진에서 plan+build를 연속 호출하도록 추가한다. 비대화식 실행은 미확정 설정을 질문으로 보류하지 않고 실패 코드로 종료한다. JSON 결과는 stdout, 진행 로그는 stderr로 분리하고 비밀값을 두 출력 모두에서 제거한다.

제안 종료 코드는 0 성공, 2 입력/검증 오류, 3 호환 불가, 4 도구 실행 실패, 5 서명/무결성 실패, 6 작업 잠금 충돌, 130 취소다. 이것은 생성기 종료 코드이며 MSI의 0/3010/1641 등 설치 결과 코드와 혼동하지 않는다. 명령 성공은 해당 명령의 완료만 의미하고 일반 사용자 배포 성공을 의미하지 않는다.

생성 프로그램 자체 배포

Tauri 앱 자체의 설치 패키지와 버전은 EG-BIM의 프로젝트/제품 GUID와 분리한다. 개발 머신의 WebView2, WiX, SDK 및 서명 연동 도구를 검사하는 환경 진단 화면을 제공한다. 필요한 외부 도구를 자동 다운로드하거나 번들에 재배포하는 기능은 라이선스·고정 버전 검토 후 추가하며, 최초 구현은 관리자가 준비한 도구 프로필을 사용한다.