여러 시나리오를 함께 연결
시나리오를 서로 연결하여 한 시나리오가 다른 시나리오를 트리거하고 두 번째 시나리오의 데이터 출력을 첫 번째 시나리오로 반환할 수 있습니다. 이렇게 하면 여러 시나리오에서 시나리오 섹션을 복제할 필요가 없는 보다 모듈식 시나리오 생성을 수행할 수 있습니다.
상위 시나리오에서 여러 하위 시나리오를 호출할 수 있고 여러 상위 시나리오에서 하위 시나리오를 호출할 수 있습니다. 하위 시나리오를 중첩하여 다른 시나리오에서 호출할 수도 있습니다.
상위 시나리오가 하위 시나리오가 데이터를 반환하기를 기다리는 경우 해당 시간은 상위 시나리오의 시간 제한에 포함되지 않습니다. 예를 들어 상위 시나리오는 5개의 하위 시나리오를 호출하며, 각 시나리오가 실행되는 데 총 50분 동안 10분이 소요됩니다. 상위 시나리오의 모듈 자체는 실행하는 데 15분이 소요됩니다. 총 65분이 경과하여 시간 제한 40분을 초과하더라도 상위 시나리오는 시간 초과되지 않습니다.
시간 초과를 포함하여 Fusion의 성능 보호 기능에 대한 자세한 내용은 Fusion 성능 보호 기능을 참조하십시오.
체인 모듈 구성에 대한 지침은 체인 모듈을 참조하십시오.
상위 및 하위 시나리오
- 상위 시나리오가 다른 시나리오를 호출합니다. 체인 > 하위 시나리오 호출 모듈을 사용합니다. 이후 시나리오 모듈에서 처리할 수 있는 하위 시나리오의 출력을 받습니다.
- 자식 시나리오는 부모 시나리오에서 호출됩니다. 해당 트리거 모듈은 상위 시나리오로부터 데이터를 수신하고 출력을 상위 시나리오로 반환합니다.
상위 시나리오에는 하위 시나리오의 응답이 필요합니다. 데이터를 반환하지 않는 하위 시나리오는 현재 지원되지 않습니다.
체인 시나리오의 데이터 구조
Workfront Fusion은 데이터 구조를 사용하여 상위 시나리오에서 하위 시나리오로 정보를 전송합니다. 데이터 구조는 하위 시나리오에 구성됩니다. 상위 시나리오에서 하위 시나리오가 선택되면 하위 시나리오의 입력으로 사용되는 데이터 구조의 필드가 상위 시나리오에 나타납니다. 이러한 필드에 값을 매핑할 수 있으며, 이 필드는 하위 시나리오가 트리거될 때 전달됩니다.
상위 및 하위 시나리오에서 구성할 모듈에 대한 자세한 내용은 체인 모듈을 참조하세요.
데이터 구조에 대한 자세한 내용은 데이터 구조를 참조하십시오.
데이터 흐름
- 데이터는 상위 시나리오를 통해 흐릅니다.
- 데이터가 하위 시나리오 호출 모듈에 도달합니다. 데이터는 하위 시나리오 호출 모듈의 필드에 매핑되며, 이 필드는 하위 시나리오의 트리거 모듈에 사용된 데이터 구조의 필드와 일치합니다.
- 하위 호출 시나리오의 데이터가 하위 시나리오에 전달됩니다.
- 하위 시나리오는 데이터를 처리하고 작업을 수행합니다.
- 하위 시나리오는 상위 모듈에 대한 반환 응답으로 끝납니다.
- 상위 모듈에 대한 반환 응답의 출력이 상위 시나리오에 전달됩니다.
- 하위 시나리오 호출 시나리오의 출력은 하위 시나리오의 출력입니다. 이 출력은 나중에 상위 시나리오에서 처리할 수 있습니다.
사용 사례
체인 시나리오에 대한 다음 사용 사례를 고려하십시오.
-
재사용 가능한 논리: 여러 시나리오에 사용된 반복된 작업에 대해 시나리오를 연결할 수 있습니다. 예를 들어 콘텐츠를 보관하는 시나리오가 여러 개 있는 경우 "콘텐츠 보관"이라는 단일 하위 시나리오를 만들어 콘텐츠를 보관하는 모든 워크플로우에 대해 하위 시나리오로 사용할 수 있습니다.
-
오류 처리: 조직에서 여러 시나리오(예: 데이터 저장소에 오류 로그를 보내고 Slack 알림을 만드는 오류 처리 경로)에서 동일한 오류 처리 작업을 수행하는 것이 일반적입니다. 이러한 작업으로 하위 시나리오를 만들고 여러 시나리오의 오류 처리 경로에서 해당 시나리오를 연결할 수 있습니다.
-
시간 연장: 총 처리 시간이 단일 시나리오의 40분 실행 제한을 초과하는 대규모 일괄 처리 작업에 대해 체인 기능을 사용할 수 있습니다. 그러나 이 패턴은 주의해서 다룹니다. 오래 실행되는 여러 하위 시나리오에 연결하는 상위 시나리오에는 전체 시간 초과 경계가 없습니다. 하위 시나리오가 중단되거나 플랫폼 문제가 발생하면 상위 시나리오가 오류를 표시하지 않고 무기한 대기합니다.
체인 기능을 사용하여 실행 시간을 연장하기 전에 배치 크기를 줄이거나, 빈도를 늘리거나, 긴 순차적 체인을 방지하도록 디자인을 재구성할 수 있는지 고려하십시오. 아래의 모범 사례를 참조하세요.
-
반복기를 바꿀 경우 반복기를 하위 시나리오로 바꾸면 메모리 부족 오류가 발생하는 반복의 복잡한 작업과 같이 메모리 사용량이 줄어들 수 있습니다. 복잡한 작업에 대해 별도의 시나리오를 만들고 반복기를 하위 시나리오 호출 모듈로 바꿀 수 있습니다
-
레코드를 검색하고 만들기: 예를 들어 사용자를 검색하는 시나리오를 만들 수 있습니다. 이러한 사용자가 존재하는 경우, 스케줄러는 이 사용자를 검토 및 승인해야 하는 액세스 권한이 있는 승인자로 추가합니다. 존재하지 않는 경우 시나리오에서는 관리자가 새 사용자를 온보딩하도록 요청을 만듭니다.
체인 시나리오에 대한 실행 내역 보기
체인에 포함된 각 시나리오의 내역을 보고 연결된 시나리오의 실행 내역을 볼 수 있습니다. 예를 들어 상위 시나리오의 실행 내역에는 상위 시나리오에서 직접 처리된 모듈 및 데이터에 대한 정보가 포함됩니다. 하위 시나리오에서 처리된 모듈 및 데이터의 실행 기록을 보려면 하위 시나리오를 열고 여기에서 실행 기록을 보십시오.
하위 시나리오 호출 모듈의 하위 시나리오로 이동 단추를 사용하여 실행 기록을 볼 수 있는 하위 시나리오로 빠르게 이동하는 것이 좋습니다. 하위 시나리오가 다른 브라우저 창에서 열리면 상위 시나리오와 하위 시나리오를 동시에 볼 수 있습니다.
오류 및 불완전한 실행
오류 처리
하위 시나리오가 오류일 경우 데이터를 다시 상위로 가져오는 데 영향을 줄 수 있습니다.
하위 시나리오에서 문제가 발생할 경우 상위 시나리오가 하위 시나리오의 응답을 기다리는 동안 중단되지 않도록 하위 시나리오에서 오류 처리를 구성하는 것이 좋습니다.
모범 사례
시나리오를 연결할 때 다음 모범 사례를 고려하십시오.
시나리오를 연결할 때 재귀 방지
재귀는 시나리오가 자체적으로 새로운 실행을 트리거할 때 발생하며, 이는 무한 루프에서 새로운 실행을 트리거합니다.
재귀는 재귀 시나리오를 소유한 조직과 다른 조직 모두에게 성능 문제를 일으킬 수 있습니다.
시나리오를 연결할 때 재귀를 방지하려면 다음 방법을 따르십시오.
- 하위 시나리오가 상위 시나리오를 트리거할 수 없는지 확인. 예를 들어 요청이 생성될 때 상위 시나리오가 트리거되는 경우 하위 시나리오가 요청을 생성하지 않는지 확인하십시오.
- 하위 시나리오가 서로 호출하지 않는지 확인. 예를 들어 하위 시나리오 A가 하위 시나리오 B를 호출하는 경우 하위 시나리오 B가 하위 시나리오 A를 호출하지 않는지 확인합니다.
- 시나리오가 자신을 호출할 수 없는지 확인합니다. 예를 들어, 작업을 만들 때 시나리오가 트리거되고, 그 시나리오는 두 개의 작업을 만듭니다. 새로 만든 작업은 모두 시나리오를 다시 트리거하여 4개의 새로운 작업을 만듭니다. 작업을 만들 때마다 시나리오가 트리거되고, 시나리오가 실행될 때마다 작업 수가 두 배로 증가합니다. 작업의 수가 기하급수적으로 증가합니다.
- 시나리오가 재귀되면, 추가 성능 문제를 방지하기 위해 Fusion 엔지니어링 팀에서 비활성화합니다.
- 재귀는 시나리오 설계의 결과이므로 시나리오를 트리거하는 액션이 시나리오에 포함되지 않도록 시나리오를 설계해야 합니다.
- 상위 시나리오와 하위 시나리오 간의 관계에 대한 다이어그램을 볼 수 있습니다.
지침은 연결된 시나리오 관계 보기를 참조하십시오.
오류 처리를 사용하여 응답 확인
상위 시나리오가 계속하기 전에 하위 시나리오의 응답을 기다리고 있으므로 오류가 발생하더라도 응답을 제공하도록 하위 시나리오가 빌드되었는지 확인해야 합니다.
“Commit Trigger Last (CTL)” 설정을 사용하지 않음
체인 시나리오와 함께 시나리오 설정 "Commit Trigger Last (CTL)"를 사용하지 않는 것이 좋습니다. 체인 기능을 사용하는 시나리오에서 다시 시도 동작이 필요한 경우 정의된 최대 다시 시도 횟수로 오류 처리 경로를 사용하여 명시적으로 구현하십시오.
중첩 깊이 제한
체인 네트워크를 두 수준의 깊이(상위 → 하위)로 제한합니다. 3개 이상의 수준을 심층(부모 → 자식 → 손자)으로 중첩된 시나리오는 복잡성을 크게 증가시키고, 가시성을 줄이며, 엔지니어링 지원 없이는 장애 진단을 어렵게 만듭니다.
설계에 더 자세한 중첩이 필요한 경우 프로덕션에 배포하기 전에 전체 체인 맵을 문서화하고 모니터링이 제대로 수행되었는지 확인하십시오.
불을 사용하고 주의해서 잊어라
하위 시나리오 호출 모듈에서 실행 및 삭제이(가) 활성화되면 상위 시나리오는 하위 시나리오를 발송하고 응답을 기다리지 않고 즉시 계속합니다. 상위 시나리오에 하위 시나리오의 실행, 성공 또는 실패 여부에 대한 가시성이 없습니다.
다음 경우에만 실행 및 무시:
- 하위 시나리오는 상위 시나리오의 논리에 영향을 주지 않는 로깅, 알림 또는 감사 쓰기를 수행합니다
- 무증상 소아 장애를 감지하기 위한 독립적인 모니터링을 갖추고 있습니다
Fire를 사용하지 말고 다음의 경우 잊으십시오.
- 하위 시나리오는 상위 시나리오가 종속된 쓰기를 수행합니다
- 상위 시나리오가 계속되기 전에 하위 시나리오가 성공했는지 여부를 알아야 합니다.
- 워크플로우가 트랜잭션이거나 정확히 한 번만 처리되어야 합니다.
많은 양의 반복기 내에서 하위 시나리오를 호출하지 마십시오.
BasicFeeder 또는 다른 반복기 내에 하위 시나리오 호출 모듈을 배치하면 처리된 모든 항목에 대해 하위 시나리오가 발송됩니다. 높은 항목 수(실행당 수백 개 이상)가 발생할 경우 디스패치 오버헤드가 크게 발생하고 플랫폼 안정성 문제에 대한 노출이 증가합니다.
이 패턴을 사용하기 전에:
- 하위 시나리오의 논리를 상위 시나리오에 모듈로 직접 인라인할 수 있는지 여부를 고려합니다.
- 항목별 체인 호출을 발송하지 않고 반복기 외부의 모든 반복에 대해 동일한 값을 반환하는 모든 조회를 미리 계산합니다.
- 실제 최대 항목 수를 확인하고 프로덕션에 배포하기 전에 관리자에게 문의하십시오