Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Workshop 모듈 재사용과 삽입

Workshop은 Embedded Module 위젯으로 다른 모듈을 넣거나, Loop layout으로 객체와 배열 원소마다 모듈을 반복 표시할 수 있습니다. 삽입하는 쪽을 부모, 삽입되는 쪽을 자식 모듈이라고 부릅니다.

자식에서도 Workshop의 기능을 사용할 수 있지만 모듈 사이의 상태 전달, 설정과 권한에는 아래 조건이 적용됩니다.

재사용할 범위

여러 부모 모듈에서 같은 자식을 사용할 수 있습니다. 미리 구성한 객체 뷰, 복잡한 설정의 단일 위젯, 여러 위젯과 변수 로직의 묶음 또는 위젯 없이 변수 로직만 있는 모듈을 재사용하는 방식입니다.

한 부모 안에서도 여러 Embedded Module 위젯 또는 Loop로 같은 자식을 반복할 수 있습니다. 전달한 값에 따른 카드, 각 탭이나 페이지에서 반복할 위젯 구성이 예입니다.

큰 앱을 여러 자식으로 나누면 각 자식의 변수 범위를 분리하고 서로 다른 작성자가 동시에 편집할 수 있습니다.

Marketplace와 기존 자원 유지

Marketplace로 부모를 패키징하면 자식은 의존성으로 포함됩니다. 설치하는 사용자는 같은 모듈 interface 변수 타입 시그니처를 가진 다른 모듈을 선택하여 해당 영역을 맞춤화할 수 있습니다.

기존 Workshop 자원을 유지하면서 구현을 바꾸려면 원래 모듈에 Embedded Module 위젯 하나만 두고 새 구현을 자식으로 넣는 방식도 사용할 수 있습니다. 사용자가 접근하던 자원을 바꾸지 않고 내부 화면을 교체합니다.

모듈 사이의 상태 전달

모듈 interface로 선택 객체, 탭 선택과 overlay 상태를 공유합니다. 매핑한 변수에는 부모의 정의를 사용하고 자식의 해당 정의는 사용하지 않습니다.

매핑된 변수는 같은 참조이므로 위젯 출력이나 이벤트로 값을 바꾸면 모든 연결된 모듈에 반영합니다. 자식의 매핑되지 않은 로컬 변수는 자동으로 부모의 변수가 되지 않습니다. 그 값을 전달하려면 자식에서 공유 interface 변수를 대상으로 Set variable value 이벤트를 구성합니다.

Embedded Module 위젯이나 Loop 인스턴스의 Open referenced module로 자식을 별도 편집기에서 열면 현재 매핑값을 적용합니다. 부모에서 보던 입력 상태로 자식을 살펴볼 수 있습니다.

모듈 설정과 이벤트

자식에 설정한 Routing, State saving과 Auto-refresh 같은 모듈 수준 설정은 삽입 문맥에서 사용하지 않습니다. 필요한 설정은 부모에서 구성하고 상태를 interface 변수로 자식에 전달합니다.

부모가 자동 새로고침하지 않으면서 자식만 독립적으로 새로고침해야 한다면 iframe 위젯으로 별도 모듈 실행 문맥을 삽입하는 경로가 있습니다. 그 독립 모듈에 자동 새로고침을 구성하며 URL query parameter의 embedded=true로 Foundry 사이드바를 숨길 수 있습니다.

부모의 이벤트 설정 자체를 자식에게 넘겨 호출하게 하는 Event passing은 지원하지 않습니다. 자식에서 부모 overlay를 제어하려면 레이아웃을 제어하는 변수를 interface로 전달하고 자식이 그 값을 바꾸도록 구성합니다.

지도 템플릿과 파생 속성

자식을 삽입하면 파생 속성 ID에 접두어를 붙여 부모에 다시 등록하므로 다른 자식의 ID와 충돌하지 않습니다. 일반 위젯의 설정은 ID 치환을 거치지만 지도 설정은 템플릿에 원래 ID를 유지할 수 있습니다. 이 경우 표에는 값이 보이더라도 부모의 지도 hover card에는 나타나지 않을 수 있습니다.

이 제한에 해당하면 파생 속성을 부모에 직접 복사하여 원래 ID로 등록하고 지도 템플릿의 참조 ID와 맞춥니다. 파생 속성의 계산과 한도도 함께 적용됩니다.

의존 관계와 권한

Data Lineage는 Workshop 모듈 사이의 삽입 관계를 보고하지 않습니다.

부모와 자식은 별도 자원이며 각각의 권한이 필요합니다. 부모를 볼 수 있어도 자식을 볼 권한이 없으면 failed to load module 오류가 나타납니다. 모듈과 실제 데이터 및 기능의 권한을 나누어 확인합니다.

자기 참조

기본적으로 모듈은 직접 또는 여러 자식을 거쳐 자신을 다시 삽입할 수 없습니다. 기능을 활성화하지 않고 자기 참조를 구성하면 작성자에게 경고하고 일반 사용자에게는 아무 내용도 렌더링하지 않습니다.

자기 참조를 허용하는 구성을 사용할 때도 잘못된 계층과 순환 참조는 무한 재귀를 만들어 모듈을 사용할 수 없게 할 수 있습니다.

초기화와 성능

기본적으로 삽입 모듈은 표시하는 시점까지 초기화를 미룹니다. 처음에 보이지 않는 큰 영역을 자식으로 나누면 초기 로드 작업을 줄일 수 있습니다. 반대로 처음부터 보이는 화면에서 여러 단계로 중첩하면 각 단계의 순차 로드 때문에 waterfall 지연이 생길 수 있습니다.

같은 자식을 여러 번 사용하면 구성 자체는 한 번 로드하지만 각 인스턴스의 변수는 별도로 초기화합니다. 동시에 보여 주는 위젯과 변수의 총수, 특히 비용이 큰 계산의 수를 확인합니다.

부모를 편집하면서 모든 자식 탭을 차례로 열면 남은 편집 세션의 성능에 부담이 됩니다. 특정 자식을 조사하거나 수정할 때는 그 모듈을 직접 여는 방식을 검토합니다.

초기화와 상태 유지의 세부 옵션은 위젯 생명주기에서 정하고 Performance Profiler로 로드와 재로드를 살펴봅니다. 자식 overlay의 조회는 사용량 지표에서 자식 모듈에 귀속됩니다.

모바일

부모가 mobile mode일 때 Embedded Module 위젯과 Loop는 다른 모바일 모듈만 삽입할 수 있습니다.