워크스페이스와 프로젝트
이 장에서 다루는 것
PAIO가 작업을 담는 두 단위인 워크스페이스와 프로젝트를 설명하고, 워크스페이스를 열고 프로젝트를 만들고 이름을 바꾸거나 지우는 절차, 프로젝트 탐색기(EXPLORER)의 모든 조작, 저장 명령과 편집 이력(History) 패널을 다룹니다. 대상 독자는 PAIO로 처음 설계를 시작하는 사용자입니다. 선행 조건은 로그인과 활성 라이선스이며(03. 설치 · 로그인 · 라이선스), 만료 상태에서는 이 장의 생성·삭제·이름 변경·저장이 모두 막힙니다.
4.1 개념 정리
PAIO의 작업 단위는 두 층으로 나뉩니다.
워크스페이스 (폴더 하나)
├── ProjectA/ ← 프로젝트
│ ├── design/ doc/ code/ workflow/ export/ import/
├── ProjectB/ ← 프로젝트
└── ...
- 워크스페이스: 프로젝트들을 담는 상위 폴더입니다. 앱은 한 번에 하나의 워크스페이스를 엽니다.
- 프로젝트: 설계 산출물 한 벌입니다. 프로젝트 메타 파일과 6개 고정 폴더를 갖습니다.
워크스페이스 바로 아래의 폴더만 프로젝트 후보로 검사하며, 메타 파일을 가진 폴더만 프로젝트로 인식합니다. 더 깊은 곳에 있는 프로젝트는 찾지 않습니다. 탐색기에 보이는 프로젝트 이름은 폴더 이름이 아니라 메타 파일에 적힌 이름이고, 목록은 이름순으로 정렬됩니다.
한 워크스페이스 안의 여러 프로젝트를 동시에 열어 편집할 수 있습니다. 이때 Undo/Redo와 Save All 은 현재 활성 탭이 속한 프로젝트에만 적용됩니다. 다른 프로젝트의 편집 이력을 건드리지 않기 위한 설계이며, 앱을 종료할 때만 예외적으로 모든 프로젝트의 미저장 편집을 저장합니다.
참고로 같은 작업 디렉터리에서 PAIO를 두 번 실행하면 새 창이 열리지 않고 기존 창이 앞으로 나옵니다.
4.2 워크스페이스 열기
Project ▸ Open Workspace...(Ctrl+O) 를 실행합니다. Select Workspace Folder 라는 제목의 OS 폴더 선택 창이 열립니다. 이 창에서 새 폴더를 만들 수도 있습니다.- 폴더를 선택합니다. 앱이 그 폴더 바로 아래를 훑어 프로젝트를 찾고 탐색기에 나열합니다.
- 사이드바 제목이
EXPLORER: <폴더명>으로 바뀝니다. 원격에 연결되어 있으면 연결 정보가 제목에 함께 표시됩니다 ([SSH: <호스트>],[WSL: <배포판>],[Container: <컨테이너>]). 원격 연결은 17. 원격 개발에서 다룹니다.
결과 확인: 프로젝트가 하나 이상 있으면 트리에 프로젝트가 보입니다. 아무것도 없으면
No projects in workspace 와 Create a new project to get started 안내, 그리고
New Project 버튼이 표시됩니다. 워크스페이스를 아직 열지 않았다면 No workspace open 과
Open a workspace to get started, Open Folder 버튼이 표시됩니다.
- 마지막으로 연 워크스페이스는 기억되어 다음 실행 시 자동으로 복원됩니다.
- 워크스페이스 폴더를 감시하므로 외부에서 파일을 추가·삭제하면 탐색기가 자동으로 반영합니다(4.10).
- 로컬 워크스페이스에서는 프로젝트만 보입니다. 워크스페이스 폴더에 있는, 프로젝트가 아닌 폴더나 파일은 트리에 나타나지 않습니다. 원격(SSH/WSL/컨테이너) 모드에서는 반대로 폴더 내용 전체를 보여 주고 그 안의 프로젝트를 프로젝트 노드로 함께 그립니다.
- 워크스페이스를 바꾸면 편집 이력(4.9)이 전부 비워집니다.
4.3 프로젝트 만들기
4.3.1 절차
Project ▸ New Project(Ctrl+N) 를 실행합니다. 탐색기의 빈 영역이나 워크스페이스 노드를 우클릭한 뒤 New Project 를 선택해도 됩니다.- 워크스페이스가 열려 있지 않으면 워크스페이스 선택 창이 먼저 나타납니다. 여기서 취소하면 프로젝트 생성도 중단됩니다.
- New Project 입력 창에 이름을 입력합니다. 안내 문구는
Enter a name for the new project:이고, 확인 버튼은 Create 입니다. - Create 를 누르거나
Enter를 치는 순간 이름을 검사합니다. 규칙에 맞지 않으면 아래 4.3.2의 메시지가 입력란 밑에 표시되고 창은 닫히지 않습니다. Create 버튼 자체가 비활성이 되지는 않으며, 이름을 다시 고치면 메시지가 사라집니다.
결과 확인: 트리에 새 프로젝트 노드가 나타나고, 펼치면 고정 폴더가 보입니다.
design 아래의 System 노드를 열면 이름이 System 인 빈 시스템이 있습니다.
4.3.2 이름 규칙
프로젝트 이름이 따라야 하는 규칙과 위반 시 표시되는 메시지는 다음과 같습니다.
| 규칙 | 위반 시 메시지 |
|---|---|
| 비어 있을 수 없음 | Project name cannot be empty |
| 영문자·숫자·하이픈·밑줄만 허용 | Project name can only contain letters, numbers, hyphens, and underscores |
Windows 예약어 금지 (CON, PRN, AUX, NUL, COM0 ~ COM9, LPT0 ~ LPT9) | "<이름>" is a reserved system name and cannot be used |
| 워크스페이스 내 중복 금지 (대소문자 무시) | Project "<이름>" already exists |
예약어 검사도 중복 검사와 마찬가지로 대소문자를 구분하지 않습니다. Con, com1 처럼
대소문자만 다른 이름도 거부됩니다.
예를 들어 DoorEcu, body-domain, QuickStart_01 은 허용되고, 문 제어기, Door Ecu,
door.ecu 는 거부됩니다.
4.3.3 생성되는 것
프로젝트를 만들면 다음 항목이 생성됩니다.
| 항목 | 내용 |
|---|---|
| 고정 폴더 6개 | doc, design, code, workflow, export, import |
| 기본 모델 3개 | System · VFB · IVC |
기본 모델의 초기 내용은 다음과 같습니다.
- System — 시스템 이름과 루트 컴포지션 이름이 모두
System입니다. 프로젝트 이름을 따라가지 않으며, 나중에 자유롭게 바꿀 수 있습니다. - VFB — 이름이
System인 루트 컴포지션 하나만 있고 그 안은 비어 있습니다. - IVC — ECU, HPC, 통신 클러스터, 커플링 요소가 모두 빈 상태입니다.
폴더나 모델이 이미 있으면 덮어쓰지 않습니다. 폴더는 있는데 메타 파일만 없는 경우에는
메타 파일을 새로 만들어 프로젝트로 복구합니다. 폴더와 메타 파일이 모두 있으면
Project "<이름>" already exists 오류로 중단합니다.
4.3.4 Quick Start 프로젝트
Project ▸ Quick Start 도 같은 방식으로 프로젝트를 하나 만듭니다. 차이는 세 가지입니다.
- 입력 창의 제목이 Quick Start, 안내 문구가
Enter a name for the new Quick Start project:입니다. - 입력 창의 기본값이
QuickStart_01형태로 자동 제안됩니다. 번호는 워크스페이스에 이미 있는QuickStart_NN이름을 훑어 비어 있는 가장 작은 번호를 2자리로 채워 정합니다. - 생성 직후 QuickStart 편집기가 갤러리 모드로 열립니다.
이름 규칙은 4.3.2와 동일합니다. 프로젝트가 만들어졌는데 편집기가 열리지 못하면 Editor open failed 창이 나타나 프로젝트를 유지할지(Keep project) 지울지 (Delete project) 묻습니다. QuickStart 워크플로 자체는 15. AI 어시스턴트에서 다룹니다.
4.4 프로젝트 폴더 구조
디스크에는 고정 폴더가 6개 만들어지지만, 탐색기에는 5개만 표시됩니다. 폴더별 용도와 표시 규칙은 다음과 같습니다.
| 폴더 | 용도 | 탐색기 표시 | 트리에 보이는 파일 |
|---|---|---|---|
doc/ | 문서. 확장자에 따라 Markdown 에디터 / HTML 미리보기 / 이미지 뷰어 / 텍스트 에디터로 엽니다 | O | .md .markdown .html .htm .png .jpg .jpeg .gif .svg .webp .bmp .txt |
design/ | 모델 파일. 파일 목록 대신 모델 트리로 보여 줍니다 | O | 4.5 참조 |
code/ | C/C++/Rust 소스와 빌드 파일 | O | .c .cpp .h .hpp .cc .cxx .hh .hxx .rs .cmake + CMakeLists*.txt, Makefile, Cargo.toml, Cargo.lock |
workflow/ | AI QuickStart 워크플로 산출물 | O | .yaml .yml .json |
export/ | 익스포트 결과 | O | .arxml .xml .dbc |
import/ | 임포트 원본 보관용 | X | 표시되지 않음 |
표시와 동작이 다른 항목:
import폴더는 프로젝트를 만들 때 디스크에 실제로 생성되고 외부에서 지우면 자동 복구까지 되지만, 탐색기 트리에는 항목 자체가 나타나지 않습니다. 이 폴더의 내용을 보려면 프로젝트를 우클릭하고 Open in File Explorer 를 선택해 OS 파일 관리자를 이용합니다.
import/에는 PAIO가 아무것도 쓰지 않습니다. 임포트는 사용자가 고른 원본 파일을 그 자리에서 읽으며, 프로젝트로 복사하는 일은 없습니다.workflow/에도 PAIO가 자동으로 쓰지 않습니다. AI 워크플로가 생성한 모델은design트리로 들어가고, 실행 이력과 프리셋은 프로젝트가 아니라 앱의 사용자 데이터 폴더에 저장됩니다.
폴더 표시에 대한 추가 규칙은 다음과 같습니다.
- 확장자 필터는 탐색기 표시용입니다. 폴더에 다른 파일이 있어도 지워지지 않으며, 단지 트리에 나타나지 않을 뿐입니다.
- 하위 폴더까지 펼쳐 보여 주는 고정 폴더는
doc,code,export셋입니다.workflow는 파일만 나열합니다.code아래의target폴더(Rust 빌드 산출물)는 항상 숨깁니다. code폴더에서는 확장자 필터와 별개로CMakeLists.txt,Makefile,Cargo.toml,Cargo.lock이 이름으로 노출되고,CMakeLists로 시작하는.txt사본 (CMakeLists_copy.txt등)도 함께 보입니다.- 고정 폴더는 이름을 바꾸거나 삭제할 수 없습니다. 컨텍스트 메뉴에 해당 항목 자체가 없습니다.
4.5 design 트리 (모델 트리)
design 폴더는 파일이 아니라
의미 단위 트리(design 트리)로 표시됩니다.
design
├── System → System 페이지
│ ├── IVC → IVC 에디터 (네트워크 토폴로지)
│ ├── VFB → VFB 에디터 (SWC 구성)
│ ├── Interface → Interface 에디터
│ ├── DataType → DataType 에디터
│ └── Signal → Signal 에디터
└── Module
├── Definition (ECUC 모듈 정의)
└── Configuration (ECUC 모듈 설정)
System 노드와 그 아래의 5개 노드는 더블클릭하거나 우클릭 ▸ Open 을 선택하면 해당
에디터가 탭으로 열립니다. 탭 제목은 프로젝트이름:노드이름 형식입니다(예: DoorEcu:System).
표시와 동작이 다른 항목:
Module,Definition,Configuration세 노드는 트리에 보이지만 펼쳐도 하위 파일이 나오지 않습니다. 실제 디스크에는 모듈 정의와 모듈 설정이 들어 있습니다. 이들은 ECUC 에디터 자체의 모듈 탐색기에서 선택합니다(12. ECUC).Configuration노드의 우클릭 메뉴에는 Import ECUC Configuration 한 항목만 있고,Definition과Module노드에는 우클릭 메뉴가 아예 없습니다.
Signal 노드도 우클릭 메뉴가 없습니다. 여는 방법은 더블클릭입니다.
DataType 노드에는 열기 외에 임포트/익스포트 항목이 함께 있습니다(4.6.5).
트리 이름과 탭 제목이 다른 노드가 있습니다. 트리에는 IVC 로 표시되지만 열리는 에디터 탭의 제목은 In-Vehicle Network 입니다. 서로 다른 것이 아니라 같은 에디터입니다. System 노드도 다섯 개 하위 노드를 담는 부모이면서 그 자체로 System 에디터를 여는 노드이므로, 단순한 폴더가 아닙니다.
4.6 탐색기 조작
4.6.1 선택
탐색기 트리에서 항목을 선택하고 여는 조작은 다음과 같습니다.
| 조작 | 결과 |
|---|---|
| 클릭 | 단일 선택 |
Ctrl + 클릭 | 개별 항목 토글 (다중 선택) |
Shift + 클릭 | 마지막으로 고른 항목부터 범위 선택 |
| 더블클릭 | 에디터로 열기 (열 수 있는 노드일 때) |
| 우클릭 | 컨텍스트 메뉴. 우클릭한 항목이 이미 선택 집합 안이면 선택을 유지하고, 아니면 그 항목만 단일 선택으로 바꿉니다 |
이미 열려 있는 파일을 다시 열면 새 탭이 생기지 않고 기존 탭이 활성화됩니다. 전체 탭은 최대 20개까지만 열 수 있고, 그 뒤의 열기 요청은 조용히 무시됩니다.
4.6.2 탐색기 키보드 단축키
트리에 포커스가 있을 때 다음 단축키가 동작합니다.
| 키 | 동작 |
|---|---|
Ctrl+C | 선택한 파일·폴더 복사 |
Ctrl+X | 선택한 파일·폴더 잘라내기 |
Ctrl+V | 선택한 위치에 붙여넣기 |
Ctrl+A | 펼쳐진 모든 노드 선택 |
Delete | 선택한 파일·폴더 삭제 (우클릭 ▸ Delete와 동일하게 확인 창을 띄웁니다) |
Delete 와 잘라내기·복사는 파일과 폴더 노드에만 적용됩니다. 워크스페이스·프로젝트·고정
폴더·모델 노드는 대상에서 제외되므로 실수로 지워지지 않습니다.
4.6.3 사이드바 헤더 버튼
사이드바 헤더의 버튼과 동작은 다음과 같습니다.
| 버튼(툴팁) | 동작 |
|---|---|
| Refresh Explorer | 캐시를 모두 비우고 디스크를 다시 읽습니다. 펼침 상태는 유지됩니다 |
| Collapse All | 펼쳐진 노드가 하나라도 있으면 전부 접고, 하나도 없으면 전부 폅니다 (토글) |
| More Actions... | 동작 없음 |
표시와 동작이 다른 항목: More Actions... 버튼은 툴팁과 아이콘만 있고, 눌러도 아무 일도 일어나지 않습니다.
두 번째 버튼의 툴팁은 상태와 무관하게 항상 Collapse All 로 표시되지만, 동작은 위 표대로 접기와 펴기를 오갑니다.
4.6.4 드래그 앤 드롭
파일과 폴더를 끌어서 다른 폴더로 옮길 수 있습니다. 놓을 위치는 마우스 위치로 정해집니다.
- 폴더 행의 가운데에 올리면 그 폴더 안으로 넣는다는 뜻입니다. 폴더 전체가 강조되고
대상 폴더 이름이
→ 폴더이름/형태로 표시됩니다. 접혀 있는 폴더 위에서 약 0.6초 머무르면 자동으로 펼쳐집니다. - 행의 위쪽·아래쪽 가장자리에 올리면 삽입선이 표시됩니다. 이때는 마우스의 가로 위치로 어느 상위 폴더에 넣을지 결정합니다. 왼쪽으로 갈수록 상위 폴더가 선택됩니다.
- 놓으면 이동이 실행됩니다.
다음 경우는 무시됩니다: 자기 자신 위에 놓기, 폴더를 자신의 하위 트리에 놓기, 이미 그 폴더에 들어 있는 항목을 같은 폴더에 다시 놓기.
대상 폴더에 같은 이름이 이미 있으면 덮어쓰지 않고 이름을 바꿔 넣습니다(4.6.8의 이름 충돌 규칙). 이동에 실패해도 별도의 오류 창은 뜨지 않습니다.
4.6.5 컨텍스트 메뉴 (우클릭)
노드 종류마다 메뉴가 다릅니다. 메뉴 항목이 하나도 없는 노드는 우클릭해도 메뉴가 나타나지 않습니다.
워크스페이스 노드 / 빈 영역
| 항목 | 동작 |
|---|---|
| New Project | 새 프로젝트 만들기 (4.3) |
| Refresh | 프로젝트 목록 다시 읽기 (워크스페이스 노드에만 있음) |
빈 영역 메뉴는 워크스페이스가 열려 있을 때만 나타납니다.
프로젝트
| 항목 | 동작 |
|---|---|
| Import | ARXML/DBC 파일을 골라 이 프로젝트로 가져옵니다 |
| Export | 이 프로젝트를 export/<프로젝트이름>.arxml 로 내보냅니다 |
| Open in Terminal | 하단 터미널 패널을 열고 프로젝트 폴더에서 셸을 시작합니다 |
| Open in File Explorer | OS 파일 관리자로 프로젝트 폴더를 엽니다 |
| Rename Project | 프로젝트 이름 변경 (4.7) |
| Delete Project | 프로젝트 폴더 삭제 (4.7) |
| Paste | 클립보드에 잘라내기/복사한 항목 붙여넣기 (클립보드가 비어 있지 않을 때만 표시) |
임포트와 익스포트의 상세 절차는 13. 임포트 · 익스포트에 있습니다.
고정 폴더
| 폴더 | 메뉴 |
|---|---|
doc | New File, New Folder, (클립보드가 있으면) Paste |
code | New File, New Folder, (클립보드가 있으면) Paste |
design, workflow, export | 없음 (메뉴가 나타나지 않습니다) |
일반 폴더
| 항목 | 비고 |
|---|---|
| New File | 경로가 doc 또는 code 아래일 때만 표시 |
| New Folder | 항상 표시 |
| Cut / Copy / Paste | Paste는 클립보드가 있을 때만 |
| Rename | 다중 선택 시 비활성 |
| Delete | 다중 선택 시 Delete (n) 으로 표시 |
표시와 동작이 다른 항목:
export폴더 아래의 하위 폴더에서 New Folder 를 눌러도 아무 일도 일어나지 않습니다.doc과code아래에서는 정상 동작합니다.
파일
메뉴 항목은 Open, Cut, Copy, Rename, Delete 입니다. 파일 노드에는 Paste가 없습니다. 붙여넣기 대상으로 파일을 고르면 그 파일이 들어 있는 폴더에 붙습니다.
모델 노드
| 노드 | 메뉴 |
|---|---|
| System, IVC, VFB, Interface, DataType | Open |
| Signal | 없음 |
| Module, Definition | 없음 |
| Configuration | Import ECUC Configuration |
4.6.6 파일과 폴더 만들기
doc 또는 code 폴더(또는 그 하위 폴더)에서 우클릭 ▸ New File 을 선택합니다.
- New File 입력 창이 열립니다. 확장자를 포함한 이름을 입력합니다.
- Create 를 누릅니다. 빈 파일이 만들어지고 즉시 편집기 탭으로 열립니다.
허용되는 확장자는 폴더마다 다릅니다.
| 폴더 | 허용 확장자 | 위반 시 메시지 |
|---|---|---|
doc | .md, .markdown | Only Markdown files (.md) are allowed in doc folder |
code | .c .h .cpp .hpp .cc .cxx .hh .hxx .rs | Only C/C++/Rust files (.c, .h, .cpp, .hpp, .cc, .cxx, .hh, .hxx, .rs) are allowed in code folder |
공통 검사는 다음과 같습니다.
| 규칙 | 메시지 |
|---|---|
| 비어 있을 수 없음 | File name cannot be empty |
< > : " / \ | ? * 사용 불가 | File name contains invalid characters |
| 확장자 필수 | File name must include an extension (e.g., .md) (code 폴더에서는 (e.g., .c, .rs)) |
| 같은 폴더에 동명 파일 금지 | "<이름>" already exists in this folder |
doc폴더는 이미지와 HTML을 표시하지만(4.4), 만들 수 있는 것은 Markdown뿐입니다. 이미지 등 다른 파일은 OS 파일 관리자로 복사해 넣으면 트리에 나타납니다.
New Folder 는 이름만 묻습니다(Folder name cannot be empty,
Folder name contains invalid characters).
4.6.7 이름 변경과 삭제
파일 이름 변경 — 우클릭 ▸ Rename 을 선택합니다.
- 입력 창에는 확장자를 뺀 이름만 들어갑니다. 확장자는 그대로 유지됩니다.
예를 들어
main.c의 이름을driver로 바꾸면driver.c가 됩니다. - 대상 파일이 열려 있고 저장하지 않은 변경이 있는데 그 편집기가 새 경로를 스스로 따라갈 수 없으면, Unsaved Changes 확인 창이 먼저 나타납니다. Cancel 을 선택하면 이름 변경 자체가 취소됩니다. 새 경로를 따라갈 수 있는 편집기는 묻지 않고 저장하지 않은 내용을 유지합니다.
- 이름이 바뀌면 열려 있던 탭과 편집 이력이 새 경로를 따라갑니다.
폴더 이름 변경 — 같은 메뉴의 Rename 을 사용합니다. 폴더 아래에 저장하지 않은 탭이 있으면 확인 창을 띄우지 않고 처리합니다. 새 경로를 스스로 따라갈 수 있는 편집기는 저장하지 않은 내용을 그대로 들고 새 경로로 옮겨 가고, 그럴 수 없는 편집기는 자동으로 저장한 뒤 이름이 바뀝니다. 폴더 이름이 바뀌는 순간 옛 경로가 사라져 저장할 곳이 없어지기 때문이며, 확인 창을 띄우지 않는 것은 의도된 동작입니다.
삭제 — 우클릭 ▸ Delete 를 선택하거나 Delete 키를 누릅니다. 대상에 따라 확인 창이
다음과 같이 나타납니다.
| 대상 | 확인 창 제목 | 본문 |
|---|---|---|
| 파일·폴더 1개 | Delete File | Are you sure you want to delete "<이름>"? + This action cannot be undone. |
| 여러 개 | Delete Files | 개수와 최대 10개까지의 이름 목록 + This action cannot be undone. |
삭제된 파일과 그 하위의 파일을 보고 있던 탭은 함께 닫힙니다. 삭제에 실패해도 별도의 오류 창은 뜨지 않습니다.
4.6.8 잘라내기 · 복사 · 붙여넣기
- Cut / Copy 는 선택된 파일·폴더 전체를 클립보드에 담습니다. 잘라내기 표시는 트리에서 흐린 색으로 나타나지만, 여러 개를 한 번에 잘라내도 대표 항목 하나만 흐려집니다. 나머지 항목도 붙여넣기 대상에는 그대로 포함됩니다.
- Paste 는 고른 폴더(파일을 골랐으면 그 파일의 상위 폴더)에 붙여넣습니다.
- 폴더를 자기 자신 위에 붙여넣으면 상위 폴더로 대상이 바뀌고, 자신의 하위 트리에는 붙여넣을 수 없습니다.
- 잘라내기 붙여넣기가 한 건이라도 성공하면 클립보드는 비워집니다. 복사 붙여넣기는 클립보드를 유지하므로 여러 곳에 반복해서 붙여넣을 수 있습니다.
이름 충돌 규칙 — 복사·이동·드래그로 붙여넣을 위치에 같은 이름이 이미 있으면 덮어쓰지
않고 이름을 바꿔 넣습니다. 예를 들어 main.c 를 같은 폴더에 붙여넣으면 main_copy.c 가
되고, 그 이름도 차 있으면 main_copy2.c, main_copy3.c 순으로 번호가 붙습니다. 폴더도
같은 규칙을 따릅니다.
4.7 프로젝트 이름 변경과 삭제
4.7.1 Rename Project
- 프로젝트를 우클릭하고 Rename Project 를 선택합니다. 입력 창에는 현재 이름이 채워져 있습니다.
- 새 이름을 입력하고 Rename 을 누릅니다.
이름 검사는 프로젝트 생성 때와 다릅니다. 여기서는 영문자·숫자 제한이 적용되지 않습니다. 적용되는 규칙은 다음과 같습니다.
| 규칙 | 메시지 |
|---|---|
| 비어 있을 수 없음 | Project name cannot be empty |
< > : " / \ | ? * 사용 불가 | Project name contains invalid characters |
| Windows 예약어 금지 | "<이름>" is a reserved system name and cannot be used |
| 다른 프로젝트와 중복 금지 | Project "<이름>" already exists |
이름을 바꾸면 폴더명과 메타 파일 이름이 함께 바뀌고, 메타 파일에 적힌 이름과 수정 시각이
값도 갱신됩니다. 열려 있던 탭과 편집 이력도 새 경로로 따라갑니다. 대소문자만 바꾸는 경우
(test → Test)는 Windows 파일 시스템 때문에 임시 이름을 거쳐 두 단계로 처리합니다.
프로젝트 작업이 이미 진행 중이면(예: 다른 프로젝트를 지우는 중) 요청이 무시됩니다.
4.7.2 Delete Project
- 프로젝트를 우클릭하고 Delete Project 를 선택합니다.
- Delete Project 확인 창이 나타납니다. 본문은
Are you sure you want to delete "<이름>"?와This action cannot be undone.입니다. - Delete 를 누릅니다. Deleting Project 진행 창이 나타나고, 해당 프로젝트의 탭이 모두 닫힌 뒤 폴더 전체가 삭제됩니다.
삭제에 실패하면 Delete Failed 창에 실패 사유가 표시됩니다.
삭제된 프로젝트의 편집 이력은 Undo 타임라인에서 제거됩니다. 이렇게 하지 않으면 이후의 Undo가 지워진 파일을 디스크에 되살릴 수 있기 때문입니다. 같은 이름으로 프로젝트를 다시 만들 때도 같은 정리가 수행되므로, 예전 프로젝트의 내용이 새 프로젝트에 되살아나지 않습니다.
4.8 저장
저장 명령은 다음 세 가지입니다.
| 명령 | 위치 | 동작 |
|---|---|---|
| Save | Project ▸ Save (Ctrl+S) | 현재 활성 에디터를 저장합니다 |
| Save As... | Project ▸ Save As... (Ctrl+Shift+S) | 아래 설명 참조 |
| Save All | Project ▸ Save All | 활성 프로젝트의 변경된 모든 파일을 저장합니다 |
- 변경된 탭은 탭 제목 옆에 점(●)으로 표시됩니다.
- 변경된 탭을 닫으려 하면 Unsaved Changes 확인 창이 나타납니다. 버튼은 Save / Don't Save / Cancel 입니다.
- 앱을 종료할 때는 활성 프로젝트만이 아니라 모든 프로젝트의 미저장 변경을 저장 대상으로 삼습니다.
Ctrl+S는 에디터 밖(예: 메뉴를 클릭한 직후 포커스가 빠진 상태)에서 눌러도 메뉴 Save 와 같은 경로로 저장합니다. 다른 곳에서 이미 처리한Ctrl+S는 중복 실행되지 않습니다.
표시와 동작이 다른 항목: Save As... 는 메뉴·전역 키로는 동작하지 않습니다. 실제 "다른 이름으로 저장"은 IVC 에디터와 DataType 에디터에 포커스를 두고
Ctrl+Shift+S를 눌렀을 때만 동작합니다(05. 화면 구성과 조작 5.1.2 참조).
저장이 되지 않는 경우도 있습니다. 라이선스가 만료 또는 읽기 전용 상태이면 저장 명령이 업그레이드 안내 다이얼로그로 대체됩니다(03. 설치 · 로그인 · 라이선스 3.4 참조).
4.9 편집 이력 (History)
하단 유틸리티 패널의 History 탭에서 프로젝트의 편집 타임라인을 볼 수 있습니다. 이
이 타임라인을 편집 이력이라고 부르며, 목록은
활성 프로젝트 범위를 따릅니다.
패널은 View ▸ Toggle Panel 메뉴 항목이나 상태바 왼쪽의 패널 버튼(툴팁 Toggle Panel (History / Problems))으로 켜고 끕니다. 메뉴에는 Ctrl+J 가 함께 적혀 있지만 이는 표기일 뿐이며, 실제 키보드 Ctrl+J 는 터미널 패널을 토글합니다. Utility 패널을 키보드로 여는 단축키는 없습니다.
- 최신 항목이 위로 옵니다. 가운데 Current state 표시를 기준으로 위쪽은 Redo 대상(흐리게), 아래쪽은 Undo 대상입니다. 맨 아래는 Initial state 입니다.
- 각 행에는 아이콘, 동작 설명, 대상 에디터/파일 태그, 시각(HH:MM:SS)이 표시됩니다. 행에 마우스를 올리면 전체 파일 경로와 날짜·시각이 툴팁으로 나타납니다.
- 한 번 클릭하면 그 행이 선택되고, 더블클릭하면 그 시점으로 한 번에 이동합니다(시간 이동). Initial state 를 더블클릭하면 이 프로젝트의 모든 편집을 되돌린 상태로 이동합니다.
- 이동이 진행되는 동안에는 목록이 잠겨 추가 조작을 받지 않습니다.
- 목록은 현재 활성 프로젝트의 이력만 보여 줍니다. 편집이 하나도 없으면
No edits yet in this project.가 표시됩니다. 활성 프로젝트가 정해지지 않은 상태(예: 열린 탭이 하나도 없는 경우)에서는 전체 이력을 보여 주며, 비어 있으면No edits yet.이 표시됩니다. - 이력 보관 개수는 프로젝트별로 관리됩니다. 한 프로젝트의 이력은 최대 25개까지 남고, 그중 대량 작업(AI 생성, 임포트, ECUC 생성)은 최대 10개까지만 남습니다. 어느 한도를 넘으면 그 프로젝트 안에서 오래된 항목부터 정리됩니다. 다른 프로젝트의 이력을 밀어내지 않으며, 대량 작업이 사용자의 직접 편집 이력을 밀어내지도 않습니다.
- 워크스페이스를 바꾸면 이력 전체가 비워집니다.
옆의 Problems 탭은 항상 No problems have been detected. 만 표시하는 자리
표시자입니다. 모델 검증 결과는 별도의 VALIDATION 패널에서 확인합니다
(14. Validation, 05. 화면 구성과 조작).
4.10 외부 변경 감시와 자동 복구
앱은 열려 있는 워크스페이스 폴더를 감시합니다.
- 감시 깊이는 10단계이며, 점(
.)으로 시작하는 파일과 폴더, 그리고node_modules는 감시하지 않습니다. - 쓰기가 끝난 뒤 약 0.2초 안정될 때까지 기다렸다가 이벤트를 처리하므로, 큰 파일을 복사하는 중에 트리가 흔들리지 않습니다.
- 외부에서 프로젝트가 추가·삭제되면 목록을 다시 읽습니다.
- 프로젝트의 고정 폴더를 외부에서 지우면 자동으로 다시 만듭니다. 6개 고정 폴더 전부가
대상이며, 탐색기에 표시되지 않는
import도 포함됩니다. 다만 프로젝트를 삭제하는 중이거나 메타 파일이 사라져 더 이상 프로젝트로 인식되지 않는 폴더에는 복구를 수행하지 않습니다.
열려 있는 편집기가 있는 파일이 외부에서 바뀐 경우, 그 편집기에 저장하지 않은 변경이 있으면 디스크 내용을 다시 읽어 들이지 않습니다. 다시 읽으면 사용자의 미저장 편집이 조용히 사라지기 때문입니다. 이 경우 화면의 모델이 그대로 유지되고, 다시 읽기를 건너뛰었다는 안내가 한 번 표시되며, 저장하면 화면의 내용이 디스크를 덮어씁니다. 저장하지 않은 변경이 없으면 외부 변경을 그대로 반영합니다.
4.11 파일을 직접 편집할 때
프로젝트의 모델은 텍스트 JSON으로 저장되므로 형상 관리(diff/merge)에 그대로 올릴 수 있습니다. 다만 PAIO 밖에서 직접 고치는 것은 권하지 않습니다. 꼭 필요하다면 다음을 유의하세요. 외부 변경을 앱이 어떻게 처리하는지는 4.10을 참고하세요.
- 여러 파일에 걸친 이름 참조를 손으로 고치면 정합성이 깨질 수 있습니다. 이름 변경은 에디터에서 하는 편이 안전합니다(참조가 함께 갱신됩니다).
- 이름 규칙을 어긴 값(빈 문자열, 공백, 숫자로 시작하는 이름 등)을 손으로 넣으면 에디터가 거부하지 못합니다. 이름은 식별자이므로 참조가 끊어질 수 있습니다.
- 편집 후 문제를 확인하려면 검증 패널을 사용합니다(14. Validation).