제품 기본 사양
이 장에서 다루는 것
PAIO의 확정된 수치·목록·제약을 한곳에 모았습니다. 지원 OS와 설치 패키지, 실행 환경, 기술 스택, AUTOSAR 지원 범위, 입출력 포맷, 데이터 모델, AI·검증·라이선스·보안·업데이트 사양, 그리고 알려진 제약을 다룹니다. 조작 절차는 다루지 않습니다. 대상 독자는 도입 검토자와 문제를 좁혀 가는 사용자이며, 선행 조건은 없습니다.
표에 나오는 용어의 뜻은 21. 용어 사전에서 찾을 수 있습니다.
2.1 제품 식별 정보
제품을 식별하는 기본 정보는 다음과 같습니다.
| 항목 | 값 |
|---|---|
| 제품명 | PAIO |
| 버전 | 0.5.0 |
| 실행 파일명 (Windows) | PAIO |
| 서명자 (Windows) | POPCORNSAR Co.,Ltd. |
| 라이선스 | 상용 (PopcornSAR PAIO License) |
Windows 서명자 문자열은 인증서에 적힌 그대로 대문자이며 쉼표 뒤 공백이 없습니다 (
POPCORNSAR Co.,Ltd.).
2.2 지원 플랫폼과 설치 패키지
지원 OS와 배포 형식은 다음과 같습니다.
| OS | 아키텍처 | 배포 형식 | 산출물 이름 |
|---|---|---|---|
| Windows | x64 | NSIS 설치 실행 파일, ZIP | PAIO-win-x64.exe, PAIO-win-x64.zip |
| macOS | x64, arm64 (Apple Silicon) | DMG, ZIP | PAIO-mac-x64.dmg, PAIO-mac-arm64.dmg, 각 .zip |
| Linux | x64 | DEB, tar.gz | PAIO-linux-x64.deb, PAIO-linux-x64.tar.gz |
Windows 설치 프로그램(NSIS) 동작
Windows 설치 프로그램에서 사용자에게 보이는 동작은 다음과 같습니다.
- 원클릭 설치가 아니라 마법사 형태로 진행됩니다.
- 사용자 단위 설치가 기본입니다.
- 설치 경로를 바꿀 수 있습니다.
- 바탕화면 바로가기는 마지막 화면의 체크박스로 결정되며, 이 체크박스는 기본으로 켜져 있습니다.
- 제거해도 앱 데이터는 남습니다.
- 한국어 Windows에서도 설치 화면은 영문으로 표시됩니다.
macOS · Linux
- macOS 빌드는 코드 서명과 공증(notarize)을 모두 수행하지 않습니다.
- Linux
.deb는 아이콘을/usr/share/icons/hicolor/아래에 설치하고.desktop파일을 만들어 줍니다. - Linux
.tar.gz는 시스템 통합이 없으므로, 앱이 첫 실행 시 스스로~/.local/share/icons/hicolor/<크기>/apps/paio.png에 아이콘을 등록합니다. 이미.deb로 설치되어 있거나 개발 모드로 실행 중이면 이 등록을 건너뜁니다.
2.3 실행 환경
실행 환경과 관련된 값은 다음과 같습니다.
| 항목 | 값 |
|---|---|
| 창 기본 크기 | 1200 x 800 |
| 창 최소 크기 | 800 x 600 |
| 창 프레임 | 프레임 없음 (커스텀 타이틀바). macOS는 hiddenInset |
| 창 표시 시점 | 화면 준비가 끝난 뒤 (초기에는 숨김) |
| 동시에 열 수 있는 에디터 탭 | 최대 20개 |
| 워크스페이스 단위 격리 | userData를 workspace-<md5(cwd) 앞 8자> 로 분리 + 워크스페이스별 단일 인스턴스 락 |
| 계정/라이선스/머신 ID 저장 | 워크스페이스와 무관한 머신 전역 경로 |
| 로그인 전 화면 | 메인 레이아웃 자체가 생성되지 않습니다 |
같은 워크스페이스(같은 작업 디렉터리)로 PAIO를 두 번 실행하면 두 번째 인스턴스는 종료되고 기존 창에 포커스가 갑니다. 서로 다른 워크스페이스는 각각 독립 인스턴스로 실행됩니다.
2.4 기술 스택
PAIO는 Electron 기반 데스크톱 앱입니다. 코드 편집은 Monaco, 터미널은 xterm을 씁니다.
2.5 AUTOSAR 지원 사양
스키마 버전
PAIO가 다루는 AUTOSAR 스키마 버전 정보는 다음과 같습니다.
| 축 | 값 | 설명 |
|---|---|---|
| 출력 스키마 릴리스 | R25-11 고정 (AUTOSAR_00054.xsd) | 모든 익스포트가 xmlns="http://autosar.org/schema/r4.0", xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_00054.xsd" 로 나갑니다 |
| 번들 XSD | R25-11 (AUTOSAR_00054.xsd), R20-11 (AUTOSAR_00049.xsd) | schemas/autosar/VERSIONS.json, 기본값 R25-11 |
| AUTOSAR 기능 버전 축 | 4.3 / 4.4 / 4.5 / 4.6 / 4.7 (기본 4.7) | 변환 계층의 별도 축입니다. 스키마 릴리스와 독립적입니다 |
- ECUC Module Definition 임포트 시에는 파일의
xsi:schemaLocation에서 스키마 번호를 읽어 기록합니다.
지원 프로토콜
프로토콜별 지원 범위는 다음과 같습니다.
| 프로토콜 | IVC 토폴로지 | Signal 에디터 |
|---|---|---|
| CAN / CAN FD | 커넥터·컨트롤러·클러스터 모두 추가 가능 | CAN 탭에서 프레임 편집 |
| LIN | 커넥터·컨트롤러(LIN Master / LIN Slave)·클러스터 추가 가능 | LIN 탭에서 프레임 편집 |
| Ethernet | 커넥터·컨트롤러·클러스터·스위치(Coupling Element) 추가 가능 | 전용 탭 없음 |
| FlexRay | 추가 메뉴 없음. 임포트된 FlexRay 요소도 화면에 나타나지 않습니다(아래 경고 참조) | 전용 탭 없음 |
Signal 에디터의 탭은 CAN, LIN, PDU, SIGNAL 네 개입니다. FlexRay 와 Ethernet 탭은 나타나지 않습니다. NM-PDU는 별도 탭이 아니라 통합 PDU 탭에서 편집합니다.
FlexRay 요소는 IVC 에디터에서 사라집니다. IVC 에디터는 FlexRay 커넥터·컨트롤러·클러스터를 화면에 그리기 전에 걸러냅니다. 저장할 때는 화면의 다이어그램만 가지고 IVC 모델을 다시 만들기 때문에, FlexRay 요소가 들어 있는 프로젝트에서 IVC 에디터를 편집하고 저장하면 그 요소가 파일에서 없어집니다. 따라서 FlexRay가 포함된 ARXML을 다룰 때는 IVC 에디터에서 저장하지 않는 것이 안전합니다.
입출력 포맷
PAIO가 주고받을 수 있는 포맷과 각 기능의 진입점은 다음과 같습니다.
| 방향 | 포맷 | 진입점과 비고 |
|---|---|---|
| 임포트 | ARXML | 프로젝트 노드 우클릭 ▸ Import. 다중 선택 가능. ECUC Module Definition / Configuration도 같은 흐름에서 추출됩니다 |
| 임포트 | DBC | 같은 Import 다이얼로그에서 함께 선택 가능. 인코딩은 항상 auto (UTF-8 BOM만 감지, 없으면 ISO-8859-1) |
| 임포트 | ECUC Configuration ARXML | Module ▸ Configuration 노드 우클릭 ▸ Import ECUC Configuration |
| 익스포트 | ARXML (R25-11) | 프로젝트 노드 우클릭 ▸ Export. 저장 위치를 묻지 않고 <프로젝트>/export/ 에 바로 씁니다. 최대 8종 파일 |
| 익스포트 | ARXML (ECU/Machine Extract) | IVC 캔버스에서 ECU 노드 우클릭 ▸ Extract ECU, HPC 노드 우클릭 ▸ Extract Machine |
| 익스포트 | DBC | 현재 버전에서는 제공되지 않습니다(13.6 참조) |
프로젝트 익스포트가 만드는 파일은 최대 8종이며, 모두 <프로젝트>/export/ 에 놓입니다. 조건을
만족하지 못한 파일은 아예 만들어지지 않으므로, export 폴더에 파일이 8개보다 적은 것은
정상입니다.
| 파일 | 내용 | 생성 조건 |
|---|---|---|
<Project>_System.arxml | System, ECU Instance, Machine Design, 클러스터, NM, TP, Global Time 등 | System 모델을 읽을 수 있을 때(새 프로젝트에는 항상 생성되므로 사실상 항상) |
<Project>_SWC.arxml | SWC / 컴포지션 / Machine | SWC·컴포지션·Machine 중 하나라도 있을 때 |
<Project>_Interface.arxml | 포트 인터페이스 | 인터페이스가 있을 때 |
<Project>_IDS.arxml | IDSM(침입 탐지) 보안 이벤트 정의 | IDS 모델이 있고 유효할 때 |
<Project>_COM.arxml | IVC 토폴로지 + 프레임 / PDU / 시그널 | 항상 (통신 데이터가 없어도 씁니다) |
<Project>_DataType.arxml | 데이터 타입, SW-BASE-TYPE, CompuMethod, Unit, DataConstr | 항상 (DataType 모델이 없으면 내장 프리미티브만 담아 씁니다) |
<Project>_EcucModuleDef.arxml | ECUC 모듈 정의 | design/Module/Definition/ 에 정의가 있을 때 |
<Project>_EcucConfVal.arxml | ECUC 모듈 설정값 | design/Module/Configuration/ 에 설정이 있을 때 |
2.6 데이터 모델 사양
데이터 모델과 관련된 값은 다음과 같습니다.
| 항목 | 값 |
|---|---|
| 프로젝트 고정 폴더(디스크) | doc, design, code, workflow, export, import (6개) |
| 프로젝트 고정 폴더(탐색기 표시) | doc, design, code, workflow, export (5개) |
JSON 스키마 전체: io-model, ivc, signal, system, interface, datatype,
vfb, vfb.layout, swc, service, ids, machine, ecuc-module-def,
ecuc-module-config.
import폴더는 만들어지지만 탐색기에는 보이지 않습니다. 프로젝트를 만들 때 디스크에는 6개 폴더가 모두 생성되지만, 탐색기 트리가 그리는 고정 폴더 목록에는import가 빠져 있습니다. 파일 탐색기로 프로젝트 폴더를 열면import폴더를 볼 수 있습니다.
새 프로젝트의 design 트리에는 System · VFB · IVC 셋만 준비됩니다. 나머지는 해당 에디터에서
처음 저장하거나 임포트가 그 내용을 만들 때 생깁니다.
자세한 내용은 04. 워크스페이스와 프로젝트에서 확인할 수 있습니다.
2.7 AI 프로바이더 사양
제공되는 AI 프로바이더는 다음 5종이며, 화면의 목록도 이 순서입니다.
| 화면 표시 이름 | 방식 | 기본 설정 |
|---|---|---|
| Claude [OPUS] | 로컬 CLI를 서브프로세스로 실행 | Claude CLI 설치·로그인 필요 |
| Claude [GLM] | HTTP API | 엔드포인트 https://api.z.ai/api/paas/v4, 모델 glm-5.1, API 키 필요 |
| Gemini | 로컬 CLI를 서브프로세스로 실행 | Gemini CLI 설치·로그인 필요 |
| Codex | 로컬 CLI를 서브프로세스로 실행 | Codex CLI 설치·로그인 필요 |
| Ollama | 로컬 HTTP | http://localhost:11434, 모델 llama3.2:3b (설치된 모델 자동 감지) |
Claude [GLM] 은 이름과 달리 Anthropic Claude가 아니라 Zhipu AI의 GLM API를 호출합니다. 실제로 호출하는 엔드포인트는
https://api.z.ai/api/paas/v4입니다.
- GLM은 환경 변수
GLM_BASE_URL/GLM_MODEL로 엔드포인트와 모델을 바꿀 수 있습니다. API 키는 앱 안에서 입력해 암호화 저장하며, 환경 변수GLM_API_KEY/ZHIPUAI_API_KEY도 대체 수단으로 인정합니다. - 채팅 UI 언어는 한국어(
ko) / 영어(en) / 일본어(ja) / 중국어(zh)입니다. 기본값은ko이며, 선택한 언어는 응답 언어를 강제하는 시스템 프롬프트로 이어집니다. - QuickStart 워크플로 템플릿은 7개 도메인 / 24개 템플릿입니다 (body 6, powertrain 7, adas 3, infotainment 4, chassis 2, gateway 1, diagnostics 1).
2.8 검증(Validation) 사양
검증 기능의 주요 수치는 다음과 같습니다.
| 항목 | 값 |
|---|---|
| 등록된 규칙 수 | 263개 |
| 심각도 | 등록된 규칙이 쓰는 값은 error(227개) 와 warning(36개) 두 가지입니다. info 를 쓰는 규칙은 없습니다 |
| 상태바 배지 | 위반 총 개수를 표시하고, 0이면 숨깁니다. 99 초과 시 99+. 검증 자체가 실패하면 개수 대신 ! 를 표시합니다 |
| 실행 시점 | 편집이나 워크스페이스 변경 뒤 손을 멈추면 곧바로 자동 실행 |
| 결과 이동 | 위반 행 클릭 시 해당 요소를 소유한 에디터를 엽니다. 대부분은 요소까지 선택·강조하지만, 요소를 찾지 못하면 에디터만 열립니다 |
각 규칙이 무엇을 검사하는지는 이 장 머리말의 AUTOSAR 표준 제약을 참고하세요.
2.9 라이선스와 기능 제한
권한은 라이선스 상태에 따라 켜지고 꺼집니다. 절차와 화면은 03. 설치 · 로그인 · 라이선스에 있으며, 여기서는 값만 정리합니다.
| 항목 | 값 |
|---|---|
| 플랜 종류 | none / trial / pro / enterprise |
| 라이선스 상태 | trial / active / expired / readonly |
| 활성 상태 권한 | 읽기 / 쓰기 / 생성 / 삭제 / 익스포트 / 임포트 모두 허용 |
| 만료 상태 권한 | 읽기와 임포트만 허용 (쓰기 / 생성 / 삭제 / 익스포트 차단) |
| 기본 상태 | 로그인 + 라이선스 검증 전까지 잠금(읽기 전용) |
| 익스포트 | 온라인 검증을 요구합니다 (오프라인 / 만료 / 변조 시 거부) |
| 인증 백엔드 | PARS (https://pars.popcornsar.com/pars-ext) |
거부될 때 나오는 실제 메시지 문자열은 다음과 같습니다.
| 상황 | 메시지 |
|---|---|
| 만료 상태에서 편집 계열 조작 | PLAN_EXPIRED: <조작명> is not allowed |
| 설치 무결성 검사 실패 상태에서 익스포트 | INTEGRITY_EXPORT_DENIED: Installation integrity check failed |
| 서버에 연결하지 못한 상태에서 익스포트 | OFFLINE_EXPORT_DENIED: A server connection is required |
| 서버가 라이선스를 무효로 판정한 상태에서 익스포트 | PLAN_EXPIRED: Export is not permitted on this plan |
임포트는 만료 상태에서도 항상 허용됩니다. 만료된 라이선스로도 기존 데이터를 읽고 가져올 수는 있게 하려는 정책입니다.
라이선스의 기간과 만료 시각은 서버(PARS)가 발급하는 라이선스 정보를 따릅니다.
2.10 보안 사양
보안과 관련된 설정은 다음과 같습니다.
| 항목 | 값 |
|---|---|
| 컨텍스트 격리 | contextIsolation: true, nodeIntegration: false, sandbox: false, webviewTag: true |
| CSP | default-src 'self' / script-src 'self' / style-src 'self' 'unsafe-inline' / img-src 'self' data: https: / font-src 'self' data: / connect-src 'self' + Google OAuth 3개 도메인 + www.plantuml.com / frame-src 'none' / object-src 'none' / base-uri 'self' |
| 네비게이션 | 개발 모드는 localhost, 배포 모드는 file: 만 허용. 문서 뷰어 <webview> 는 file: 만 허용. 외부 링크는 시스템 브라우저로 |
| 워크스페이스 격리 | 워크스페이스별 userData 분리 + 워크스페이스별 단일 인스턴스 락 |
| 토큰/라이선스 캐시 | Electron safeStorage 로 암호화 |
| 무결성 (Windows) | Electron asar 무결성 퓨즈 + 부팅 시 PAIO.exe Authenticode 자체 검사 |
connect-src 에 허용된 Google 도메인은 accounts.google.com, oauth2.googleapis.com,
www.googleapis.com 세 개입니다.
무결성 검사 결과
서명이 유효하지 않은 설치본(변조·재서명)에서는 편집 기능이 세션 동안 읽기 전용으로 잠깁니다. 앱은 종료되지 않습니다. 판정별 동작과 대처, 진단 파일의 위치는 20. 문제 해결 · FAQ 20.1에 있습니다.
설치 후 잠금이 걸렸을 때의 대처는 03. 설치 · 로그인 · 라이선스 3.1.5절을 보세요.
2.11 업데이트 알림 사양
업데이트 알림의 사양은 다음과 같습니다.
| 항목 | 값 |
|---|---|
| 방식 | 알림 전용(notify-only) — 새 버전이 있는지 확인해 알리기만 합니다. 자동 다운로드도 자동 설치도 없습니다 |
| 피드 | https://pars.popcornsar.com/pars-ext/updates/paio/latest.yml |
| 주기 | 로그인 직후 1회 + 이후 6시간 간격 백그라운드 확인 (개발 모드에서는 반복 확인 비활성) |
| 수동 확인 | Help ▸ Check for Updates |
| 상태바 표시 | 새 버전이 있을 때만 표시됩니다. 평소에는 숨어 있습니다 |
| 다운로드 경로 | 토스트의 Download 버튼이 다운로드 페이지(https://autosar.io/support)를 엽니다 |
- 버전 비교는
major.minor.patch숫자 세 자리만 봅니다. 프리릴리스 태그는 무시합니다. - 확인에 실패하면 토스트 본문이
Update check failed: <사유>형태가 됩니다. 사유 문자열과 뜻은 20.12 에 정리했습니다. - 인디케이터·토스트·수동 확인 등 동작 설명은 3.5 를 참조하세요.
2.12 알려진 제약 사항
현재 버전에서 미리 알아 두어야 할 제약을 세 갈래로 나누어 정리합니다. 정해진 한도, 동작하지 않거나 제공되지 않는 항목, 그리고 오해하기 쉬운 정상 동작입니다.
용량 · 범위 제약
정해진 한도와 범위 제약은 다음과 같습니다.
| 제약 | 내용 |
|---|---|
| 에디터 탭 수 | 최대 20개입니다. 20개를 채운 뒤 새 파일을 열면 아무 안내 없이 열리지 않습니다(콘솔 경고만 남습니다). 탭을 닫아야 다시 열 수 있습니다 |
| ECUC 자동 생성 | CAN 컨트롤러가 1개라고 가정합니다(첫 번째 CAN 컨트롤러만 반영합니다). 다중 CAN 구성은 지원되지 않습니다 |
| ECUC 자동 생성 모듈 | Can, CanIf, Com, EcuC, PduR 5종 |
| ECUC 자동 생성 전제 조건 | 대상 ECU에 CAN 커넥터가 없으면 Generate ECUC 버튼과 모듈 체크박스가 모두 비활성입니다. 이때 패널에는 No CAN connector configured. Please add a CAN connector first to enable ECUC generation. 이 표시됩니다 |
| 에디터 분할 | 그룹을 만들거나 없앨 때 레이아웃 전체를 다시 그리므로, 스크롤 위치·포커스 같은 화면 상태는 보장되지 않습니다 |
동작하지 않거나 제공되지 않는 항목
다음 항목은 화면에 보이거나 있을 것으로 기대되지만, 현재 버전에서는 동작하지 않거나 제공되지 않습니다.
| 항목 | 실제 동작 |
|---|---|
| Export to DBC (프로젝트 컨텍스트 메뉴) | 현재 버전에서는 제공되지 않습니다. CAN 정보는 프로젝트 Export의 <프로젝트명>_COM.arxml 로 전달합니다(13.6) |
| DBC 임포트 인코딩 선택 | 인코딩을 고르는 설정은 없으며 항상 자동 감지입니다. BOM 없는 UTF-8 파일은 ISO-8859-1로 읽힙니다(13.2.8) |
| Signal 에디터 FlexRay / Ethernet 탭 | 이 두 탭은 나타나지 않습니다(7.2) |
| IVC Add Connector / Add Controller 의 FlexRay | 메뉴 항목 자체가 없습니다. 임포트된 FlexRay 요소도 화면에 나타나지 않습니다(2.5 경고 참조) |
프로젝트 import 폴더 | 디스크에는 만들어지지만 탐색기 트리에는 표시되지 않습니다(2.6절 참조) |
design ▸ Module 노드 더블클릭 | Coming Soon 안내만 있는 빈 탭이 열립니다. 그 아래 Definition / Configuration 노드를 열어야 합니다 |
그 밖에 알아 둘 동작
다음은 문제로 오해하기 쉬운 정상 동작입니다.
| 동작 | 이유 |
|---|---|
| ARXML 익스포트가 저장 위치를 묻지 않습니다 | 프로젝트 구조가 고정되어 있어 항상 <프로젝트>/export/ 에 씁니다 |
| 임포트를 시작하면 저장하지 않은 편집이 먼저 저장됩니다 | 임포트가 모델을 다시 쓰고 열린 에디터가 디스크에서 다시 읽으므로, 저장하지 않은 편집을 미리 내보내지 않으면 그 편집이 사라집니다 |
| 임포트 결과의 노드가 그리드에 줄지어 배치됩니다 | ARXML에 좌표가 없으므로 임포터가 자동 배치합니다. 한 번 옮겨 두면 재임포트해도 그 좌표가 유지됩니다 |
| 내보낸 ARXML을 다른 곳에서 읽으면 화면 배치가 복원되지 않습니다 | 다이어그램 좌표는 프로젝트 안의 IVC 모델과 *.vfb.layout 에만 있고 ARXML로는 나가지 않습니다. 자세한 내용은 01. 제품 개요 1.3절 참고 |
| 11종 내장 프리미티브가 DataType 모델에 없습니다 | 프리미티브는 메모리에만 존재하는 내장 정의이며 파일에 저장하지 않는 것이 정상입니다. 자세한 내용은 10. DataType 에디터 참고 |
| 외부에서 파일이 바뀌어도 편집 중이면 다시 읽지 않습니다 | 저장하지 않은 편집을 덮어쓰지 않기 위해서입니다. 이때는 다시 읽지 않았다는 경고가 표시되고 화면의 모델이 유지됩니다. 저장하거나 되돌린 뒤에는 정상적으로 반영됩니다 |