본문으로 건너뛰기
참조

용어집

플랫폼 용어의 정확한 뜻과, 개발자가 실제로 혼동하는 짝들. 각 항목에 "무엇이 아닌지"를 함께 적었습니다.

용어집

작업 가이드나 API 계약을 읽다가 필요한 용어를 찾는 문서입니다. Scope, population, 소유권, 멤버십은 서로 다른 사실이므로 아래 권한 예시로 구분하세요. 여기의 정의를 별도 환경 설정 단계로 취급할 필요는 없습니다.

읽는 방법

알파벳순이 아니라 혼동을 일으키는 짝별로 묶었습니다. 각 항목은 그 용어가 무엇인지, 그리고 더 중요한 경우 무엇이 아닌지를 밝힙니다.

지속 어휘의 소유자는 docs/doctrine/02-TERMS.md입니다. 아직 구현되지 않은 용어는 그렇다고 적었습니다.

정의와 코드가 어긋나면 enum이 정본입니다. 아래 용어들의 실제 값 집합은 이 네 곳에 있습니다.

Nexia\Permission\AssignmentScope;   // tenant, legal_entity, operating_unit
Nexia\Permission\SubjectPopulation; // all, self, direct_reports, legal_entity, operating_unit
Nexia\Permission\GrantControl;      // standard, protected
Nexia\AppDescriptors\DescriptorStatus; // active, deprecated, removed

최소 예시

authorization 문장을 서로 다른 네 용어로 읽으세요.

Permission: workshop.note.update
Role: Workshop editor
Data scope: one Legal Entity
Subject population: all

Permission은 action을 명명하고 Role은 이를 묶으며 Access Grant가 scope와 population을 더합니다. 어느 것도 authentication이나 organization membership가 아닙니다.

플랫폼과 소유권

용어정체아닌 것
Tenant한 고객사의 데이터와 실행을 다른 고객사의 것과 분리하는 격리 경계쿼리에 붙이는 필터
PlatformApp이 붙는 테넌트향 제품 표면. Core와 그것을 조립하는 호스트서비스를 굴리는 운영 계층
Core같은 표면을 가리키는 내부 소유 용어. 그래서 core.* 식별자가 이 이름을 씀산문에서 쓸 대외 명칭
Service operations가입 관리, 도메인, 프로비저닝, 공개 사이트, 개발자 포털테넌트 업무 진실의 소유자
App도메인 진실을 소유하고 명시적 계약으로 통합하는 업무 기능플랫폼 안의 폴더, 별도 서비스
App Package한 App의 독립 버전 Composer 배포 단위플랫폼 소유 소스
App Manifest플랫폼이 여러분의 contribution을 어디서 찾을지 선언하는 클래스기능 등록부
App Definitionextra.nexia.app 메타데이터 블록PHP 설정
SDK유일한 공개 경계 — Nexia\*와 @nexia/sdk유틸리티 라이브러리
Resource소유권과 권한 경계가 명시된 지속 업무 개념아무 Eloquent 모델

App과 App Package의 차이. App은 기능이고 Package는 배포 방식입니다. app_key가 둘 다 식별하며 절대 바뀌지 않습니다.

Platform과 Core의 차이. 같은 것을 두 독자에게 다르게 부릅니다. 산문에서는 플랫폼, 코드에서는 Core입니다. app/Platform/ 디렉터리는 용어보다 먼저 생긴 이름이라 여기서 말하는 Platform이 아니라 서비스 운영 계층입니다.

작업 공간과 패키지 해석

아래 용어는 소스 코드가 실행 중인 테넌트에 도달하기까지의 서로 다른 단계를 가리킵니다. 같은 뜻으로 바꿔 쓸 수 없으며, 지속되는 doctrine 어휘가 아니라 현재 개발 도구의 동작을 설명합니다.

용어정체아닌 것
Repository(저장소)버전 관리되는 소스와 Git 이력. Core, App SDK, 각 App Package가 서로 다른 저장소를 가짐Composer 설치나 테넌트에서 켜진 App
소스 폴더개발자가 코드를 읽고 수정하는 폴더. Core는 nexia-cloud-os/, SDK는 packages/app-sdk, App은 packages/{app}에 있음Composer 설치 뷰. 소스 폴더가 있어도 Composer가 반드시 사용하지는 않음
로컬 소스 목록 (local package selection)PACKAGES=...로 정하고 로컬에 저장하는 패키지 key 목록. 생성된 composer.local.json이 어느 SDK·App 소스 폴더를 사용할지 결정Git branch 선택, 일반 UI 선택, 테넌트 설치
로컬 소스 패키지저장된 로컬 소스 목록에 든 패키지. Core가 해당 checkout으로 Composer·frontend 로컬 overlay를 준비함App이 어느 테넌트에 설치됐다는 증거
Lock으로 해석된 패키지로컬 소스 목록 밖에 있어 커밋된 composer.lock에서 버전과 소스를 가져오는 패키지편집할 소스 루트
Composer 설치 뷰런타임 도구가 Composer\InstalledVersions::getInstallPath()로 찾는 해석 완료 패키지 경로개발자가 편집하는 소스 위치
테넌트 설치App 하나를 특정 테넌트에서 사용할 수 있게 만드는 런타임 설치 기록과 initializer 결과packages/의 소스 폴더, Composer 해석, 사용자 권한

저장소 동작은 clone, branch switch, file restore처럼 실제 행위를 밝힙니다. selection도 그 자체로는 일반적인 선택일 뿐입니다. 코드의 local package selection을 국문판에서는 그 역할이 드러나는 로컬 소스 목록이라고 씁니다.

업무 실행과 조율

용어정체아닌 것
Workbench사람이 지금 할 일과 업무 도구를 여는 Shell 컨텍스트업무 상태 소유자, 실행 엔진
Business Process사람이 작성한 BPMN 프로세스와 DMN 결정을 실행하는 Core 런타임Workflow, 내장 Camunda 런타임
전자 결재 (Approval)결재선과 결정 증거, 문서 snapshot을 소유하는 Core 런타임업무 양식 하나, Process User Task
WorkflowTemporal 같은 durable workflow 런타임 계열을 위해 남겨 둔 용어Business Process와 전자 결재의 상위 이름

Nexia Business Process는 OMG BPMN·DMN 표준 용어를 사용하고 Camunda 8의 작성·오케스트레이션 모델을 참고하지만, 실행 상태와 nexia:* 확장을 직접 소유합니다. 현재 개발자 문서에서 Workflow는 구현된 제품 영역을 가리키지 않습니다. 앞으로 durable workflow 런타임을 설명할 때 Business Process와 구별해 쓰기 위한 이름입니다.

조직 구조

이 묶음은 모두 실제 조직 구조를 모델링합니다. 그러나 어느 것도 권한을 부여하지 않습니다.

용어정체아닌 것
Party실세계 사람 또는 조직 하나의 공유 식별권한 범위, 업무 프로필
Legal Entity내부 법적·계약·세무·회계·고용 실체운영 계층, PartyRole
Legal Entity MembershipUser가 한 Legal Entity에 유효기간을 갖고 참여하는 사실행위 권한 — 참여와 Shell 가용성만 통제
Operating Unit운영 책임의 지속 단위Legal Entity, 암묵적 권한 부여
Operating Unit MembershipUser가 한 Operating Unit에 참여하는 사실Worker Assignment, 권한 부여
Site실세계 장소 — 사무실, 공장, 지점, 물류 거점Operating Unit, App 실행 설비
WorkerPeople이 소유하는 사람 Party의 인력 프로필PartyRole, 그 자체로 권한
Worker AssignmentWorker를 업무 컨텍스트에 배치한 유효기간 기록User 멤버십, Access Grant
PartyRole한 Party의 가벼운 비권한 분류Legal Entity, 업무 프로필, 관계
PartyRelationship두 Party 사이의 지속적 유형 관계권한 부여
Business profileParty가 특정 App 도메인에 참여하는 방식을 정의한 App 소유 레코드Party, PartyRole
Workspace / view context사용자 경험 컨텍스트권한 뿌리, 지속 진실의 소유자

이 묶음 전체의 규칙: 참여는 권한이 아닙니다. 멤버십은 무언가를 선택 가능하게 만듭니다. 그 레코드에 행위하려면 Access Grant가 필요합니다.

권한

한 결정을 이루는 네 부분입니다.

용어정체아닌 것
Authentication신원 검증Authorization
Authorization행위자가 보호된 동작을 해도 되는지 백엔드가 강제 평가하는 것프런트엔드가 판단하는 무엇
Permission그 기능을 소유한 코드가 선언하는 정확한 백엔드 강제 업무 동작 — Core 또는 App대상 모집단이나 데이터 범위
RolePermission의 재사용 가능한 묶음. 테넌트가 작성하거나 Core가 동기화한 시스템 기준 Role이름이나 조직 배치로 생기는 데이터 접근
Access grantRole을 데이터 범위 안에서 행위자에게 배정한 유효기간 기록멤버십
Data scopeGrant가 적용되는 한정된 업무 컨텍스트구조로부터 암묵 생성되는 무엇
Subject populationGrant가 겨냥할 수 있는 행위자 상대 모집단 — self, direct_reports 등그 자체로 동작을 부여하는 것
Delegation명시적·한정적·회수 가능·감사 가능한 대리 권한상속되거나 스스로 확장되는 권한
Field policy보이는 레코드의 어느 필드를 읽고 바꿀 수 있는지 정하는 백엔드 규칙레코드 단위 가시성
Separation of duties양립 불가 권한을 막는 서버 강제 정책아직 동작하는 기능 — 이연 상태

Permission과 Role과 Grant의 차이. Permission은 무엇을, Role은 어느 묶음을, Grant는 어디서·누구의 것을 말합니다. 여러분의 App은 Permission만 선언합니다.

Permission은 능력을 지칭하고 범위를 지칭하지 않습니다. workshop.note.update는 어느 노트인지 말하지 않습니다.

확장 패턴

닮아 보이는 다섯 가지입니다. 판별식은 결과를 누가 소유하는가입니다.

용어결과 소유자내 원본과 갈라지는가
Catalog여러분의 코드 — 실시간으로 읽힘아니오
Descriptor여러분의 코드 — 런타임에 해석됨아니오
Preset선택 후 테넌트즉시
Template복사 후 테넌트즉시
Initializer설치 시점의 테넌트즉시
용어정체아닌 것
Contribution선언된 위치에서 SDK 인터페이스를 구현한 클래스등록 호출
Catalog플랫폼이 발견·게이팅·해석하는 코드 소유 정의테넌트가 관리하는 기준 정보
Registry (백엔드)발견된 contribution 위의 플랫폼 런타임 조회 계층여러분이 쓰기하는 대상
Registry (프런트엔드 SDK)App이 시작 시 쓰고 Shell이 런타임에 읽는 레지스트리 — resourceInspectorAdapterRegistry, approvalComposerBusinessFormRegistry백엔드 contribution 레지스트리
Descriptor기능을 플랫폼 런타임에 연결하는 타입 있는 선언. Version과 lifecycle field는 descriptor 계열 계약을 따르며 하위 ResourceLifecycleEventDescriptor도 자체 payload schemaVersion을 가짐테넌트 레코드, Template
Preset관리자가 채택할 수 있는 권장 구성권한 부여, 생성된 Role
Copyable template행위자가 명시적으로 복사하는 코드 정의 원본살아 있는 정의
InitializerApp이 동작하는 데 필요한 최소 행데이터 적재 수단
Demo data폐기 가능한 샘플 레코드설치 전제 조건

Catalog와 기준 정보의 차이. quality.defect_code가 존재한다는 사실은 Catalog입니다. 공장이 실제로 쓰는 결함코드는 기준 정보입니다.

Template과 Catalog의 차이. Catalog에 수정을 배포하면 모든 테넌트가 받습니다. Template에 수정을 배포하면 기존 복사본은 그대로입니다.

Shell과 프런트엔드

용어정체아닌 것
Shell호스트가 소유하는 애플리케이션 프레임App이 배치하는 무엇
Activity Rail최좌측 영역 — Workbench, App Launcher, 운영 항목직접 기여하는 내비게이션
Side Navigation SurfaceSettings, App Menu, Workbench 컨텍스트 중 하나를 그리는 슬롯세 개의 별도 영역
App Menu그 슬롯의 app:{app_key} 뷰Settings Menu
Settings Menushell.settings 뷰 — 호스트 전용App 설정이 사는 곳
Navigation context항목이 어느 Side Navigation 뷰에 속하는지권한
DestinationRoute·아이콘·라벨·배치·권한 게이트권한 부여
Route SurfaceRoute 또는 탭 단위 화면Work Surface
Work SurfaceRoute Surface 안의 Primary Section + 선택적 Inspector SectionRoute Surface
Slot호스트 소유 화면의 이름 있는 버전 삽입 지점여러분이 새로 만들 수 있는 것
Slot Widget레지스트리 슬롯을 채우는 여러분의 컴포넌트대시보드 위젯
Dashboard widget배치 가능하고 Resource에 묶인 컴포넌트Slot Widget

Slot Widget과 Dashboard widget의 차이. Slot Widget은 호스트 화면이 공개한 고정 지점을 채웁니다. Dashboard widget은 테넌트가 대시보드에 배치합니다.

selected/active와 focused의 차이. 앞은 지속되는 현재 상태, 뒤는 키보드·포인터가 잠시 겨냥한 후보입니다.

라이프사이클

용어정체접근 권한을 주는가
호스트 활성화패키지를 호스트에 설치하고 정의를 동기화아니오
테넌트 설치한 테넌트에 설치 행을 쓰고 initializer를 실행아니오
초기화설치의 initializer 단계 — pending → initialized | failed아니오
Operational설치가 활성이고 초기화 완료, 모든 전제 App도 operational아니오
Access Grant행위자와 Role, Data scope, Subject population, 유효기간을 묶는 레코드 — 지속 권한의 유일한 출처예
Role 배정Access Grant를 만들거나 편집하는 UI 축약어. Role 멤버십만으로는 아무것도 부여되지 않음그 자체로는 아니오

현재 연산에 적용되는 Access Grant가 상시 권한의 근거입니다. 탐색과 설치는 기능을 사용할 준비를 할 뿐 사용자 권한을 부여하지 않습니다.

문서와 설계

용어정체
Current designReference에 기록된 변경 가능한 구현 선택
Protected invariant구현이 바뀌어도 살아남아야 하는 제품·보안·정합성·복구 결과
Transition exception아직 제거할 수 없어 기록한 기존 경계 위반 — 재사용할 선례가 아님

doctrine에 있으나 구현되지 않은 것

이 항목들을 전제로 설계하지 마세요. 이연이지 포기는 아닙니다.

용어상태
Separation of dutiesSoD 규칙 테이블이 아직 없음
Access delegation 레코드이연
Data scope로서의 core.site이연 — scope는 tenant, legal_entity, operating_unit
Legal Entity relationship descendants이연 — descendants는 core.operating_unit만 지원
reporting_tree, assigned_records 모집단SubjectPopulation에 없음

doctrine이 enum에 없는 값을 지칭하면 실제로 동작하는 것은 enum입니다.

오류

혼동한 쌍잘못된 추론올바른 확인
Authentication / authorization로그인한 사용자는 행위할 수 있음backend Permission 결정을 확인
Membership / Access Grant조직 참여가 권한을 부여함membership는 참여에 영향, Grant가 권한을 운반
Catalog / master data코드 소유 Resource 정의가 tenant 편집 데이터임Catalog는 type을 선언, master data는 tenant의 행
App / App Packagefolder가 업무 capability임App은 capability, Package는 delivery unit
packages/의 소스 폴더 / 로컬 소스 목록디스크에 패키지 소스 폴더가 있으면 Composer가 자동으로 그 코드를 사용함저장된 로컬 소스 목록에 package key가 있는지 확인
Composer 설치 / 테넌트 설치vendor/에 패키지가 보이면 모든 테넌트에서 App을 쓸 수 있음해당 테넌트의 App 설치 상태를 별도로 확인

실제 사용

packages/assets/src/Contribution/Resources/AssetModule.php는 capability와 scope를 서로 다른 선언으로 유지합니다.

코드 예시
PHP
public static function permissionAssignmentScope(): AssignmentScope
{
    return AssignmentScope::LegalEntity;
}

public static function permissionResources(): array
{
    return ['assets.asset' => ['read', 'register', 'update_identity', 'validate', 'import', 'retire', 'export', 'audit']];
}

이 소스는 glossary의 구분을 보여 줍니다. Permission은 action을 명명하고 AssignmentScope는 grant가 적용될 수 있는 곳을 명명합니다.

관련 문서

원본 위치: docs/developers/content/ko/app-sdk/glossary.md