Workshop으로 항공편 경보 처리함 만들기
만들 애플리케이션
Flight Alert Inbox는 항공사 감독자가 항공편의 지연과 취소 가능성을 확인하고 조치하는 애플리케이션입니다. 여러 경보를 살펴보고, 대응할 경보의 우선순위를 정한 뒤, 선택한 경보에 조치를 제출하도록 구성합니다.
완성된 화면은 다음 요소로 구성됩니다.
- 왼쪽의 필터 목록에서 상태, 우선순위, 항공편 날짜를 선택합니다.
- 가운데 객체 테이블에서 조건에 맞는 경보를 봅니다.
- 오른쪽 객체 뷰에서 선택한 경보의 상세 정보를 확인합니다.
Resolve Alert버튼을 눌러 액션 폼을 열고, 설명을 입력한 뒤 변경을 제출합니다.
Foundry의 온톨로지는 각 환경의 데이터와 요구에 맞춰 구성됩니다. 따라서 모든 플랫폼 인스턴스(Enrollment)에 동일한 객체 유형이나 액션 유형이 존재하지는 않습니다.
시작 전에 필요한 리소스와 개념
아래 이름과 설정으로 처리함을 구성하려면 다음 리소스를 준비합니다.
| 필요한 항목 | 이 가이드에서의 용도 |
|---|---|
| 모듈을 만들 프로젝트 또는 폴더 | Workshop 애플리케이션을 저장할 위치 |
[Example Data] Flight Alert 객체 유형 | 화면에 표시하고 필터링할 경보 데이터 |
| 경보 객체와 속성에 대한 접근 | 실제 데이터와 상세 정보를 조회 |
[Example Data] De-escalate Flight Alert 액션 유형 | 선택한 경보에 변경을 제출 |
| 액션을 제출할 수 있는 권한과 조건 | 버튼을 누른 사용자의 변경 요청이 허용되는지 판단 |
[Example Data] Flight Alert를 찾을 수 없으면 Palantir Support에 문의할 수 있습니다. 기존 환경의 비슷한 객체 유형을 사용하려면 그 유형의 속성과 액션 입력에 맞춰 구성을 바꿉니다. 화면에서 사용할 이름을 입력하는 것만으로 객체 유형이나 액션이 생성되지는 않습니다.
Workshop의 모듈(Module)은 애플리케이션 구성을 저장하는 리소스입니다. 위젯(Widget)은 모듈 안에서 데이터를 표시하거나 사용자 입력을 받는 화면 요소이고, 변수(Variable)는 위젯과 계산 사이에 전달할 값을 담습니다. 객체 집합(Object set)은 여러 객체의 집합, 필터 변수는 그 집합에 적용할 조건을 나타냅니다.
액션(Action)은 온톨로지의 데이터 변경을 제출하는 기능입니다. 버튼을 배치하거나 화면 변수를 바꾸는 일과 액션 제출은 구분됩니다. 객체 유형, 속성, 액션 유형의 의미가 낯설다면 온톨로지 핵심 개념을 먼저 읽을 수 있습니다.
위젯 사이에서 전달되는 값
이 화면은 위젯들을 배치하는 것과 함께 입력 및 출력을 연결해야 동작합니다.
필터 목록의 출력은 경보 데이터 자체가 아니라 필터 조건입니다. 이 조건을 객체 테이블의 입력 객체 집합에 적용하면 표시되는 경보가 달라집니다. 테이블에서 현재 활성화된 객체는 객체 뷰의 표시 대상과 액션의 입력 대상에 사용합니다.
Active object 출력은 현재 활성화된 객체를 담은 객체 집합입니다. 여러 행을 체크하는 Selected objects 출력과는 별개입니다. 이 처리함에서는 현재 활성화된 경보 한 건을 중심으로 화면과 액션을 연결합니다.
1. 모듈 생성과 이름 지정
- 왼쪽 작업 공간(Workspace) 탐색 패널에서
Projects & Files를 엽니다. - 모듈을 저장할 프로젝트 또는 폴더로 이동합니다.
- 오른쪽 위의
New > Workshop module을 선택합니다. - 화면 왼쪽 위의 모듈 이름을 선택하고
Flight Inbox Tutorial로 바꿉니다.
기본 이름은 New module (2022-04-08 15:16:23)처럼 생성 시각이 포함된 형태입니다. 이를 알아보기 쉬운 이름으로 변경합니다.
모듈은 생성한 프로젝트 또는 폴더의 권한을 상속합니다. 저장 위치는 리소스를 정리하는 위치이면서 모듈의 접근 권한에도 영향을 줍니다. 모듈에 접근할 수 있다고 해서 표시할 객체 데이터나 모든 액션에 대한 권한까지 함께 얻는 것은 아니므로, 데이터와 액션의 접근 조건은 별도로 충족해야 합니다.
2. 객체 테이블 구성
객체 테이블(Object Table)에 [Example Data] Flight Alert 객체를 표시합니다.
- 모듈 레이아웃의 오른쪽에서
Add widget을 선택합니다. - 위젯 선택기에서
Object table을 선택합니다. Object table 1설정 패널의Object set을 엽니다.+ New object set variable을 선택합니다.- 변수 정의 창의
Starting object set에서[Example Data] Flight Alert를 선택합니다. - 위젯 설정 패널로 돌아와
Column Configuration의Add all properties를 선택합니다. Columns에서 열의 순서를 조정하거나 필요 없는 속성을 제거합니다.Flight Date를 목록의 맨 위로 옮겨 객체 제목 다음의 첫 번째 열에 표시합니다.Default sort(s)에서 정렬 기준으로Flight Date를 선택합니다.
Add all properties는 이 객체 유형의 속성마다 열을 추가합니다. 필요한 열만 직접 추가하려면 + Add column을 사용할 수 있습니다. 정렬 방향은 운영 화면에서 어느 날짜부터 볼지에 맞춰 정합니다.
테이블에 연결한 객체 집합 변수가 표시할 데이터를 결정하고, 열 설정은 그 데이터의 어떤 속성을 어떤 순서로 보여 줄지 결정합니다. 열을 숨기는 것과 객체 집합에서 객체를 제외하는 것은 다른 설정입니다.
3. 필터 목록을 만들고 테이블에 연결하기
필터 목록의 입력 구성
- 모듈 레이아웃의 왼쪽에서
Add widget을 선택합니다. Filter list위젯을 추가합니다.Filter list 1설정에서Object set을 엽니다.+ New object set variable을 선택하고,Starting object set을[Example Data] Flight Alert로 지정합니다.Filters Configuration에서+ Add filter를 사용해Status,Priority,Flight Date속성을 추가합니다.Layout configuration을vertical로 지정합니다.- 설정 패널 아래쪽의
Allow users to add and remove filters를 켭니다.
필터 목록에는 테이블에서 사용한 변수와 별도로 새 객체 집합 변수를 연결합니다. 필터 목록의 기준 객체 집합이 자신의 필터 출력으로 제한되지 않도록 하기 위해서입니다. 두 변수의 시작 유형이 같아도 테이블의 필터 적용과 필터 목록의 기준 데이터는 따로 관리합니다.
필터를 세로 목록 대신 더 작게 표시하려면 Pills 레이아웃을 사용할 수 있습니다. 이 방식은 사용자가 필터를 선택하면 설정을 위한 팝오버가 열리는 형태입니다.
필터 출력의 의미
Filter list 1 Filter output은 객체 집합 필터 변수(object set filter variable)입니다. 사용자가 선택한 조건을 담아 다른 객체 집합이나 위젯의 입력에 적용할 수 있습니다.
필터 변수에는 기본 조건을 지정할 수 있습니다. 선택한 값을 다른 입력에 재사용하려면 기본 필터의 값에 변수를 연결하고 Update used variables on filter value changes를 켭니다. 필터의 형태가 기본 구성과 일치하면 선택한 값이 연결된 변수에 반영됩니다. 이 처리함은 필터 출력 자체를 테이블 입력에 적용하므로 값 추출을 따로 구성할 필요가 없습니다.
객체 테이블에 필터 적용
- 객체 테이블을 선택해 설정 패널을 엽니다.
Object set을 선택합니다.- 변수 정의 창에서
Filter...를 열고Using a variable을 선택합니다. - 사용할 변수로
Filter list 1 Filter output을 지정합니다. - 필터 목록에서
Priority: Medium같은 조건을 선택하고 테이블의 표시 결과가 바뀌는지 확인합니다.
가상의 기준 객체 집합에 우선순위가 Medium인 경보 A-101과 High인 경보 A-102가 있다고 가정하겠습니다. 사용자가 Medium을 선택하면 필터 변수에는 그 조건이 들어가고, 이를 적용한 테이블에는 A-101이 표시됩니다. A-102의 데이터는 그대로 유지되며 화면에 표시할 대상에서만 제외됩니다.
4. 선택한 경보의 객체 뷰 구성
객체 뷰(Object View)를 테이블의 활성 객체에 연결하여 경보 상세 정보를 표시합니다.
- 객체 테이블의 오른쪽 영역을 구성할 수 있도록 해당 섹션을 선택합니다.
- 위쪽에 나타난
Section toolbar에서Add의Right를 선택합니다. - 새 섹션을 선택하고 오른쪽의
Section configuration panel을 엽니다. Section Header와Collapsible을 켭니다.- 너비를
Absolute방식의500픽셀로 지정합니다. - 이 섹션 안에서
+ Add widget을 선택하고Object View를 추가합니다. Object to display에서Object Table 1 Active Object를 선택합니다.Display & formatting에서Form factor를full로 설정합니다.
섹션에 헤더가 있으므로 위젯 헤더까지 표시할 필요가 없다면 Hide header를 켤 수 있습니다. full 대신 Panel 형식을 선택하는 경우에는 Panel behavior를 Object instance로 설정하여 테이블에서 활성화된 객체가 표시되도록 합니다.
테이블의 활성 객체가 바뀌면 객체 뷰가 읽는 입력도 바뀌어, 같은 위젯에 새로 전달받은 경보가 표시됩니다.
Object Table은 기본적으로 첫 행을 활성 객체로 자동 선택합니다. Disable active object auto-selection을 켜면 이 자동 선택을 중지할 수 있습니다. 화면을 처음 열었을 때 상세 영역이 비어 있다면 데이터 존재 여부와 활성 객체 선택 설정을 함께 확인합니다.
5. 액션 버튼을 연결하여 쓰기 반영하기
액션 유형과 버튼의 역할
이 단계에서는 대상 경보와 Comment를 입력으로 받는 [Example Data] De-escalate Flight Alert 액션 유형이 준비되어 있어야 합니다. 버튼 그룹(Button Group)을 사용해 이 액션을 화면에 연결합니다.
버튼의 표시 이름은 Resolve Alert로 지정합니다. 실제로 어떤 객체의 어느 속성을 어떤 값으로 변경할지는 액션 유형의 규칙에 따라 결정됩니다. 이를 확인하려면 Ontology Manager에서 해당 액션 유형의 Rules와 Parameters 설정을 확인합니다. 버튼의 표시 이름을 바꾸어도 액션의 변경 규칙은 바뀌지 않습니다.
버튼 표시 설정
- 새로 만든 객체 뷰 영역의 섹션 헤더를 선택합니다.
- 헤더 오른쪽의
+를 누르고Button Group을 추가합니다. Button Configuration에서 기본 버튼인Button 1을 선택합니다.Text를Resolve Alert로 변경합니다.Intent를Success로 지정합니다.Left icon을Small tick으로 지정합니다.
이 설정은 버튼의 이름과 모양을 정합니다. 실제 변경 동작은 다음 단계에서 연결합니다.
액션 유형과 입력 매개변수 연결
- 같은 버튼의
Item설정에서On click을Action으로 바꿉니다. Select an action...에서[Example Data] De-escalate Flight Alert를 선택합니다.Parameter Defaults에서[Example Data] Flight Alert매개변수의 기본값을 테이블의 현재 대상 객체에 연결합니다.Comment에는 기본값을 지정하지 않습니다. 사용자가 경보를 어떻게 처리했는지 직접 입력하도록 둡니다.[Example Data] Flight Alert매개변수의Visibility in form을Hidden으로 설정합니다.
액션 대상의 기본값에는 Object Table의 Active object 출력을 연결합니다. 모듈에서 사용할 변수 이름이 Object table 1 Action object 등으로 지정되어 있다면, 변수 정의에서 현재 활성 객체를 제공하는 출력인지 확인합니다. 객체 뷰에 표시되는 경보와 액션에 전달할 경보가 같은 대상이어야 합니다. 여러 행을 체크한 Selected objects를 현재 활성 객체와 혼동하지 않도록 구분합니다.
Hidden은 폼에서 대상 객체 입력을 보이지 않게 하는 UI 설정입니다. 숨겨진 매개변수에도 기본값이 전달되어야 하며, 이 설정이 데이터 접근 권한이나 액션 제출 조건을 대신하지는 않습니다. 변경을 허용하는 조건은 액션 유형과 실행 사용자의 권한에서 판단합니다.
사용자가 변경을 제출하는 과정
설정이 끝나면 사용자는 경보를 선택하고 Resolve Alert 버튼을 누릅니다. 액션 폼에는 대상 경보의 기본값이 전달되며, 해당 입력은 숨겨져 있습니다. 사용자는 Comment를 입력하고 액션을 제출합니다.
버튼을 선택해 폼을 여는 것과 액션을 제출하는 것은 별개의 단계입니다. 입력이 유효하고 제출 조건을 충족해야 제출할 수 있으며, 제출이 성공하면 설정된 변경이 객체에 반영됩니다.
제출 후 새로고침이나 화면 이동이 필요하면 액션 수명주기의 이벤트를 사용할 수 있습니다. On start of Action submission은 제출 시작 시, On successful completion of Action submission은 제출 성공 후에 실행됩니다. 성공 이후에만 실행해야 하는 화면 동작은 두 번째 시점에 연결합니다.
6. 모듈과 섹션의 헤더 정리
마지막으로 화면의 제목과 섹션 표시를 구성합니다.
- 모듈 맨 위의 아직 구성하지 않은 헤더를 선택합니다.
- 오른쪽 설정 패널에서
Icon을Airplane으로, 색상을Red 3으로 지정합니다. Title을Flight Alert Inbox로 입력합니다.- 필터, 객체 테이블, 객체 뷰의 각 섹션 헤더를 차례로 선택합니다.
- 각 섹션 설정에서 제목과 Blueprint 아이콘을 지정합니다. 필터 영역에는
Filters라는 제목과filter아이콘을 사용할 수 있습니다.
모듈의 리소스 이름 Flight Inbox Tutorial과 화면 헤더의 제목 Flight Alert Inbox는 다른 설정입니다. 전자는 프로젝트에서 모듈을 식별할 때 사용하는 이름이고, 후자는 사용자가 애플리케이션 안에서 보는 제목입니다.
구성이 기대와 다를 때 확인할 연결
| 화면에서 보이는 현상 | 먼저 확인할 설정 |
|---|---|
| 예제 객체 유형을 찾을 수 없음 | 현재 온톨로지에 [Example Data] Flight Alert가 존재하고 접근할 수 있는지 확인한다. |
| 필터를 선택해도 테이블이 바뀌지 않음 | 테이블 입력 객체 집합에 Filter list 1 Filter output이 적용되어 있는지 확인한다. |
| 필터 목록의 기준이 함께 좁아짐 | 필터 목록이 테이블과 별도의 시작 객체 집합 변수를 사용하는지 확인한다. |
| 상세 영역에 다른 경보가 표시됨 | Object to display가 의도한 테이블의 활성 객체 출력에 연결되었는지 확인한다. |
| 버튼에서 다른 경보를 대상으로 삼음 | 액션 대상 매개변수의 기본값과 객체 뷰의 표시 대상이 같은 객체를 가리키는지 확인한다. |
| 버튼은 보이지만 액션을 제출할 수 없음 | 액션 입력값, 제출 조건과 실행 사용자의 권한을 확인한다. |
화면 증상에 해당하는 변수와 설정을 확인하여 위젯의 입출력이 올바르게 연결되었는지 조사합니다.