제어 작업을 사용하여 제어 흐름 변경

완료됨

컨트롤 동작은 논리 앱 워크플로가 결정을 내리는 데 도움이 됩니다. 소셜 미디어 모니터링 앱은 컨트롤 동작을 사용하여 트윗의 감정 점수를 테스트하고 점수가 긍정적인지 부정적인지에 따라 워크플로 경로를 분기합니다. 이 단원에서는 워크플로를 통해 실행 경로를 관리하는 데 도움이 되는 네 가지 컨트롤 동작을 살펴보겠습니다. 워크플로 디자이너를 사용하여 컨트롤 동작을 추가하고 구성하는 방법도 살펴보겠습니다.

Condition 작업

condition 컨트롤 동작은 if 문으로, 처리 중인 데이터를 기반으로 하는지 여부에 따라 워크플로를 두 경로로 분할할 수 있게 해줍니다. 부울 식과 두 개의 동작으로 구성됩니다. 런타임 시 실행 엔진은 식을 평가하여 식의 true 또는 false 여부에 따라 동작을 선택합니다.

예를 들어 경비 보고서를 금액에 따라 다른 관리자에게 라우팅할 수 있습니다. 메일을 처리하는 경우 메시지에 높은 우선 순위 플래그가 지정되어 있는지 테스트해야 합니다. 소셜 미디어 모니터링 앱에서는 condition 문을 사용하여 트윗의 감정 점수에 따라 분기합니다. 다음 다이어그램에서는 워크플로에서 condition 컨트롤 동작을 사용하는 방법을 보여 줍니다.

Diagram shows a conceptual view for the entire social media monitoring app. The *condition* control action appears highlighted.

형식 및 연산자

Condition 컨트롤 작업에서 숫자, 문자열, 부울 및 JSON 개체를 테스트할 수 있습니다. 다음 의사 코드는 각 단순 형식의 예를 보여 줍니다.

if (score is-greater-than 0.7)              ... // Numeric
if (TweetedBy does-not-contain "MyCompany") ... // String
if (Favorited is-equal-to true)             ... // Boolean

각 형식의 연산자 세트를 비교에 사용할 수 있습니다. 다음 표에는 각 형식의 연산자가 나열되어 있습니다.

숫자 문자열 부울 JSON 개체
is-equal-to is-equal-to is-equal-to is-equal-to
is-not-equal-to is-not-equal-to is-not-equal-to is-not-equal-to
is-greater-than contains
is-greater-than-or-equal-to does-not-contain
is-less-than starts-with
is-less-than-or-equal-to does-not-start-with
ends-with
does-not-end-with

대부분의 작업이 직관적이지만, 다음 두 가지 사항에 주의해야 합니다.

  • 문자열 비교는 대/소문자를 구분합니다.
  • JSON 비교는 deep equals를 사용합니다. 이 비교는 같음 연산자가 복합 개체 내부의 하위 토큰을 비롯한 전체 개체를 비교한다는 뜻입니다.

ANDOR를 사용하여 식 결합

Azure Logic Apps는 AND 또는 OR를 통해 조건을 결합하여 복합 식을 만들 수 있습니다. 점수가 0.5에 가까우면 중립인 경우 감정이 중립인 트윗을 식별하려 한다고 가정해 봅시다. 이 경우 다음 의사 코드와 비슷한 식을 작성할 수 있습니다.

if (score is-greater-than 0.4 AND score is-less-than 0.6)

데이터 가용성

Azure Logic Apps를 사용하면 이전 단계의 모든 데이터를 후속 단계에 사용할 수 있습니다. 이전 단계에서 생성된 값을 식에 사용할 수 있다는 의미입니다. 여러 단계의 값을 식 하나에 결합할 수도 있습니다. 예를 들어 다음 의사 코드는 여러분의 회사에서 보내지 ‘않은’ 긍정적 감정의 트윗을 찾습니다. 점수감정 검색 작업에서 나오고, TweetedBy 값은 새 트윗이 게시될 때 트리거에서 나옵니다.

if (score is-greater-than 0.7 AND TweetedBy does-not-contain "MyCompany")

그룹을 사용하여 복합 식 만들기

영향력이 큰 트윗을 식별하는 식을 작성하려 한다고 가정해 봅시다. 영향력의 기준이 되는 두 가지 조건은 다음과 같습니다.

  • 감정 점수가 0.9보다 크고 트윗이 즐겨찾기로 표시되어 있습니다.
  • 리트윗 횟수가 1000보다 큽니다.

이 아이디어를 구현하려면 다음 의사 코드와 비슷한 식을 작성해야 합니다.

if (score is-greater-than 0.9 AND Favorited is-equal-to true OR RetweetCount is-greater-than 1000) // Error, cannot mix AND and OR

Azure Logic Apps는 간접적으로 이 식을 지원하며 groups라는 기능을 사용하여 이 지원을 사용하도록 설정할 수 있습니다. 그룹은 식과 AND 또는 OR가 결합된 시퀀스입니다. 그룹 내에서 ANDOR를 혼합할 수 없습니다.

의사 코드로 표현된 몇 가지 예를 살펴보겠습니다. 예제가 읽기 편하도록 우리가 결합할 식을 소문자로 표시하겠습니다. 아래의 첫 번째 예제는 이 형식에 부합하지만 두 번째는 부합하지 않습니다.

if (a AND b AND c) // OK
if (a AND b OR  c) // Error, cannot mix AND and OR

그 대신 이전 예제에서 AND로 연결된 식의 그룹을 만들어야 합니다. 그리고 OR를 사용하여 그룹을 다른 식에 연결합니다. 다음 의사 코드에서는 그룹임을 표시하기 위해 대괄호를 사용합니다.

if ([a AND b] OR c) // OK

Switch 작업

switch 컨트롤 작업은 한 값을 여러 사례와 비교하여 일치하는 사례만 실행합니다. switch 식을 지원하는 형식은 문자열정수입니다. switch는 일치하는 항목이 없을 때 실행되는 기본 작업을 포함할 수 있습니다.

예를 들어 여러분이 이메일 메시지를 처리하는데, 메시지의 중요도에 따라 다르게 대응하려 한다고 가정해 봅시다. Outlook 이메일의 중요도는 0~2 사이의 정수입니다. 다음 의사 코드는 메일 중요도에 대한 switch 작업을 작성하는 방법을 보여줍니다.

switch (Importance)
  case 0: ... // action(s) for low importance
  case 1: ... // action(s) for medium importance
  case 2: ... // action(s) for high importance
  default: ...

Foreach 루프

foreach 루프 컨트롤 작업은 배열을 처리합니다. 루프는 각 배열 항목에 대해 동일한 동작을 수행합니다. 기본적으로 각 배열 요소에 대한 작업은 병렬로 실행되지만, 루프의 구성에서 이 동작을 제어할 수 있습니다.

예를 들어 새 트윗이 게시될 때 트리거가 반환한 트윗 데이터의 일부는 트윗에 포함된 미디어의 URL 배열입니다. 각 URL을 데이터베이스의 자체 행에 삽입하려 한다고 가정해 봅시다. 이 경우 다음 의사 코드와 비슷한 foreach 작업을 사용하여 처리할 수 있습니다.

foreach url in MediaUrls
    insert-row

Until 루프

until 루프 컨트롤 작업은 작업 그룹을 여러 번 실행합니다. 다음과 같은 세 가지 중지 조건을 설정할 수 있으며, 세 조건 중 하나가 참이 될 때까지 루프가 실행됩니다.

  • 조건: 매 반복 이후 평가되는 식
  • 개수: 최대 반복 횟수. 기본값은 60입니다.
  • 시간 제한: ISO 8601 형식을 사용하여 지정하는 최대 허용 시계 시간. 기본값은 1시간입니다.

이 루프를 사용하면 데이터를 처리할 수 있지만 이 루프는 네트워킹 작이 성공하거나 시간 초과될 때까지 재시도해야 할 때 좋은 옵션이기도 합니다. 예를 들어 워크플로가 HTTP 요청을 하는 동작을 실행한다고 가정해보겠습니다. 이 경우 다음 예제의 의사 코드(시간 값 PT5M이 5분과 같음)와 비슷한 방법으로 until 루프를 사용할 수 있습니다.

repeat
    HTTP Get
until (StatusCode is-equal-to 200 OR Count is-greater-than 3 OR Timeout is-greater-than PT5M)

디자이너를 사용하여 제어 작업 추가

워크플로 디자이너는 컨트롤 동작을 추가 및 구성하는 시각적 방법을 제공합니다. 모든 컨트롤 동작은 Control 커넥터 내에 패키지되므로 첫 번째 단계는 이 커넥터를 찾는 것입니다. 커넥터를 찾은 후에는 앞서 언급한 컨트롤 동작 및 컨트롤 흐름 관리라는 목표와 직접 관련은 없지만 유용한 몇 가지 다른 동작을 선택할 수 있습니다. 다음 스크린샷은 디자이너에 표시된 사용 가능한 컨트롤 동작을 보여 줍니다.

Screenshot shows the actions in the **Control** connector in the workflow designer. The list includes the following control flow actions: **Condition**, **For each**, **Switch**, and **Until**.

또한 디자이너는 그룹을 포함하여 복잡한 식을 작성할 수 있는 시각적 방법도 제공합니다. 다음 스크린샷은 디자이너에 표시된 condition 동작을 보여 줍니다.

Screenshot shows a configured **Condition** action in the workflow designer. The image contains a **Sentiment** action followed by a **Condition** action. The **Condition** action has a simple expression that tests whether the sentiment score is greater than 0.7.

소셜 미디어 모니터링 앱에서 Condition 컨트롤 동작을 사용하여 감정 점수를 테스트하는 if 문을 추가하겠습니다.