Azure Logic Apps에서 워크플로 작업을 반복하거나 배열을 처리하는 루프를 만듭니다.

적용 대상: Azure Logic Apps(소비)

논리 앱에서 배열을 처리하려면 "Foreach" 루프를 만들 수 있습니다. 이 루프는 배열의 각 항목에 대해 하나 이상의 작업을 반복합니다. "Foreach" 루프에서 처리할 수 있는 배열 항목 수에 대한 제한은 동시성, 반복 및 분리 제한을 참조하세요.

조건이 충족되거나 상태가 변경될 때마다 작업을 반복하려면 "Until" 루프를 만들 수 있습니다. 논리 앱은 먼저 루프 내부의 모든 작업을 실행한 다음, 조건 또는 상태를 확인합니다. 조건이 충족되면 루프가 중지됩니다. 그렇지 않으면 루프가 반복됩니다. 논리 앱 실행에 포함될 수 있는 "Until" 루프 수에 대한 기본 및 최대 제한은 동시성, 반복 및 분리 제한을 참조하세요.

배열을 받는 트리거가 있고 각 배열 항목에 대한 워크플로를 실행하려는 경우, SplitOn 트리거 속성을 사용하여 해당 배열을 분리 처리(debatch) 할 수 있습니다.

사전 요구 사항

"Foreach" 루프

"Foreach" 루프는 각 배열 항목에 대해 하나 이상의 작업을 반복하고 배열에만 작동합니다. "Foreach" 루프를 사용하는 경우 다음과 같은 몇 가지 사항을 고려해야 합니다.

  • "Foreach" 루프는 제한된 수의 배열 항목을 처리할 수 있습니다. 이 제한에 대해서는 동시성, 반복 및 분리 제한을 참조하세요.

  • 기본적으로 "Foreach" 루프의 반복은 동시에 실행되거나 병렬로 실행됩니다. 이 동작은 Power Automate의 각 루프에 대한 적용과 다릅니다. 여기서는 반복이 한 번에 하나씩 또는 순차적으로 실행됩니다. 그러나 순차적 "Foreach" 루프 반복을 설정할 수 있습니다. 예를 들어 지연 작업을 사용하여 "Foreach" 루프의 다음 반복을 일시 중지하려면 루프가 순차적으로 실행되도록 설정해야 합니다.

    기본 동작에 대한 예외는 반복이 병렬로 실행되지 않고 항상 순차적으로 실행되는 중첩된 루프입니다. 중첩된 루프의 항목에 대해 작업을 병렬로 실행하려면 자식 논리 앱을 만들고 호출합니다.

  • 각 루프 반복 동안 변수 작업에서 예측 가능한 결과를 얻으려면 해당 루프를 순차적으로 실행합니다. 예를 들어, 동시에 실행 중인 루프가 종료될 때 변수에 대해 증가, 감소 및 추가 작업을 수행하면 예측 가능한 결과가 반환됩니다. 그러나 동시 실행 루프에서 각 반복이 수행되는 동안 이러한 작업을 수행하면 예기치 않은 결과가 반환될 수 있습니다.

  • "Foreach" 루프의 작업은 @item() 식을 사용하여 배열의 각 항목을 참조 및 처리합니다. 배열에 없는 데이터를 지정하면 논리 앱 워크플로가 실패합니다.

이 예제의 논리 앱은 웹 사이트 RSS 피드에 대한 일별 요약을 보냅니다. 앱은 각각의 새 항목에 대한 이메일을 보내는 "Foreach" 루프를 사용합니다.

  1. Outlook.com 계정 또는 회사나 학교 계정을 사용하여 이 샘플 논리 앱을 만듭니다.

  2. RSS 트리거와 이메일 보내기 작업 사이에 "Foreach" 루프를 추가합니다.

    1. 단계 사이에서 루프를 추가하려면 해당 단계 사이에 있는 화살표 위로 포인터를 이동합니다. 표시되는 더하기 기호( + )를 선택한 다음, 작업 추가를 선택합니다.

      “작업 추가” 선택

    2. 검색 상자에서 모두를 선택합니다. 검색 상자에서 필터로 “for each”를 입력합니다. 작업 목록에서 다음 작업을 선택합니다. For each - 컨트롤

  3. 이제 루프를 작성합니다. 동적 콘텐츠 추가 목록이 표시되면 이전 단계의 출력 선택 아래에서 RSS 트리거에서 출력된 피드 링크 배열을 선택합니다.

    동적 콘텐츠 목록에서 선택

    참고

    이전 단계의 배열 출력만 선택할 수 있습니다.

    선택한 배열이 다음과 같이 표시됩니다.

    배열 선택

  4. 각 배열 항목에 대한 작업을 실행하려면 이메일 보내기 작업을 이 루프로 끕니다.

    논리 앱은 다음 예와 같을 수 있습니다.

  5. 논리 앱을 저장합니다. 논리 앱을 수동으로 테스트하려면 디자이너 도구 모음에서 실행을 선택합니다.

"Foreach" 루프 정의(JSON)

논리 앱에 대한 코드 뷰에서 작업하는 경우 논리 앱의 JSON 정의에서 Foreach 루프를 대신 정의할 수 있습니다. 예를 들어 다음과 같습니다.

"actions": {
   "myForEachLoopName": {
      "type": "Foreach",
      "actions": {
         "Send_an_email": {
            "type": "ApiConnection",
            "inputs": {
               "body": {
                  "Body": "@{item()}",
                  "Subject": "New CNN post @{triggerBody()?['publishDate']}",
                  "To": "me@contoso.com"
               },
               "host": {
                  "api": {
                     "runtimeUrl": "https://logic-apis-westus.azure-apim.net/apim/office365"
                  },
                  "connection": {
                     "name": "@parameters('$connections')['office365']['connectionId']"
                  }
               },
               "method": "post",
               "path": "/Mail"
            },
            "runAfter": {}
         }
      },
      "foreach": "@triggerBody()?['links']",
      "runAfter": {}
   }
}

"Foreach" 루프: 순차

기본적으로 “Foreach” 루프의 주기는 병렬로 실행됩니다. 각 주기를 순차적으로 실행하려면 루프의 순차 옵션을 설정합니다. "Foreach" 루프는 예측 가능한 결과를 예상할 경우 루프 내에 중첩된 루프 또는 변수가 있으면 순차적으로 실행되어야 합니다.

  1. 루프의 오른쪽 위 모서리에서 줄임표(...) >설정을 선택합니다.

  2. 동시성 제어 아래에서 동시성 제어 설정을 켜기로 지정합니다. 병렬도 슬라이더를 1로 이동한 후 완료를 선택합니다.

    동시성 제어 켜기

논리 앱의 JSON 정의를 사용하는 경우 operationOptions 매개 변수를 추가하여 Sequential 옵션을 사용할 수 있습니다. 예:

"actions": {
   "myForEachLoopName": {
      "type": "Foreach",
      "actions": {
         "Send_an_email": { }
      },
      "foreach": "@triggerBody()?['links']",
      "runAfter": {},
      "operationOptions": "Sequential"
   }
}

"Until" 루프

조건이 충족되거나 상태가 변경될 때마다 작업을 실행하고 반복하려면 "Until" 루프에 해당 작업을 추가합니다. 논리 앱은 먼저 루프 내부의 작업을 모두 실행한 다음, 조건 또는 상태를 확인합니다. 조건이 충족되면 루프가 중지됩니다. 그렇지 않으면 루프가 반복됩니다. 논리 앱 실행에 포함될 수 있는 "Until" 루프 수에 대한 기본 및 최대 제한은 동시성, 반복 및 분리 제한을 참조하세요.

"Until" 루프를 사용할 수 있는 몇 가지 일반적인 시나리오는 다음과 같습니다.

  • 원하는 응답을 받을 때까지 엔드포인트를 호출합니다.

  • 데이터베이스에 레코드를 만듭니다. 해당 레코드의 특정 필드가 승인될 때까지 기다립니다. 처리를 계속합니다.

이 예제 논리 앱은 매일 오전 8시에, 변수의 값이 10이 될 때까지 변수를 증가시킵니다. 그런 다음, 논리 앱에서 현재 값을 확인하는 이메일을 보냅니다.

참고

이러한 단계는 Office 365 Outlook을 사용하지만 Logic Apps에서 지원하는 이메일 공급자를 사용할 수 있습니다. 여기에 있는 커넥터 목록을 확인합니다. 다른 이메일 계정을 사용하는 경우 일반적인 단계는 동일하지만 UI가 약간 다르게 표시될 수 있습니다.

  1. 빈 논리 앱을 만듭니다. Logic Apps 디자이너의 검색 상자에서 모두를 선택합니다. "되풀이"를 검색합니다. 트리거 목록에서 다음 트리거를 선택합니다. 되풀이 - 일정

  2. 간격, 빈도 및 하루 중의 시간을 설정하여 트리거가 실행되는 시기를 지정합니다. 시간을 설정하려면 고급 옵션 표시를 선택합니다.

    되풀이 일정 설정

    속성
    간격 1
    빈도
    시간 선택 8
  3. 트리거 아래에서 새 단계를 선택합니다. "변수"를 검색하고 다음 작업을 선택합니다. 변수 초기화 - 변수

  4. 다음 값을 사용하여 변수를 설정합니다.

    변수 속성 설정

    속성 설명
    이름 제한 변수의 이름
    형식 정수 변수의 데이터 형식
    0 변수의 시작 값
  5. 변수 초기화 작업 아래에서 새 단계를 차례로 선택합니다.

  6. 검색 상자에서 모두를 선택합니다. "Until"을 검색하고 다음 작업을 선택합니다. Until - 컨트롤

  7. Limit 변수 및 같음 연산자를 선택하여 루프의 종료 조건을 작성합니다. 비교 값으로 10을 입력합니다.

    루프를 중지하기 위한 종료 조건 작성

  8. 루프 내부에서 작업 추가를 선택합니다.

  9. 검색 상자에서 모두를 선택합니다. "변수"를 검색하고 다음 작업을 선택합니다. 변수 증가 - 변수

    변수를 증가시키기 위한 작업 추가

  10. 이름에 대해 Limit 변수를 선택합니다. 에 대해 "1"을 입력합니다.

  11. 루프 외부 및 아래에서 새 단계를 선택합니다.

  12. 검색 상자에서 모두를 선택합니다. 이메일을 보내는 작업을 찾아서 추가합니다. 예를 들면 다음과 같습니다.

    이메일을 보내는 작업 추가

  13. 메시지가 표시되면 이메일 계정에 로그인합니다.

  14. 이메일 작업의 속성을 설정합니다. Limit 변수를 제목에 추가합니다. 이렇게 하면 변수의 현재 값이 지정된 조건을 충족하는지 확인할 수 있습니다. 예를 들어 다음과 같습니다.

    이메일 속성 설정

    속성 Description
    수행할 작업 <email-address@domain> 받는 사람의 이메일 주소입니다. 테스트를 위해 자신의 이메일 주소를 사용합니다.
    Subject "제한"에 대한 현재 값은 Limit입니다. 이메일 제목을 지정합니다. 이 예에서는 Limit 변수를 포함해야 합니다.
    본문 <email-content> 보내려는 이메일 메시지의 내용을 지정합니다. 이 예에서는 텍스트를 원하는 대로 입력합니다.
  15. 논리 앱을 저장합니다. 논리 앱을 수동으로 테스트하려면 디자이너 도구 모음에서 실행을 선택합니다.

    논리 앱이 실행되기 시작하면 지정한 내용이 포함된 이메일을 받습니다.

    받은 이메일

무한 루프 방지

"Until" 루프는 이러한 속성을 기반으로 실행을 중지하므로 적절하게 해당 값을 설정해야 합니다.

  • 개수:루프가 종료되기 전에 실행되는 최대 루프 수입니다. 논리 앱 실행에 포함될 수 있는 "Until" 루프 수에 대한 기본 및 최대 제한은 동시성, 반복 및 분리 제한을 참조하세요.

  • 시간 제한: 이 값은 모든 루프를 포함하는 "Until" 작업이 종료 전에 실행되는 최대 시간이고 ISO 8601 형식으로 지정됩니다. 제한 시간 값에 대한 기본 및 최대 제한은 동시성, 반복 및 분리 제한을 참조하세요.

    시간 제한 값은 각 루프 주기에 대해 평가됩니다. 루프의 작업이 시간 제한보다 오래 걸리면 현재 주기가 중지되지 않습니다. 그러나 제한 조건이 충족되지 않으면 다음 주기가 시작되지 않습니다.

이러한 한도를 변경하려면 루프 작업에서 제한 변경을 선택합니다.

"Until" 정의(JSON)

논리 앱에 대한 코드 뷰에서 작업하는 경우 논리 앱의 JSON 정의에서 Until 루프를 대신 정의할 수 있습니다. 예를 들어 다음과 같습니다.

"actions": {
   "Initialize_variable": {
      // Definition for initialize variable action
   },
   "Send_an_email": {
      // Definition for send email action
   },
   "Until": {
      "type": "Until",
      "actions": {
         "Increment_variable": {
            "type": "IncrementVariable",
            "inputs": {
               "name": "Limit",
               "value": 1
            },
            "runAfter": {}
         }
      },
      "expression": "@equals(variables('Limit'), 10)",
      // To prevent endless loops, an "Until" loop 
      // includes these default limits that stop the loop. 
      "limit": { 
         "count": 60,
         "timeout": "PT1H"
      },
      "runAfter": {
         "Initialize_variable": [
            "Succeeded"
         ]
      }
   }
}

이 제 "Until" 루프는 리소스를 만드는 HTTP 엔드포인트를 호출합니다. HTTP 응답 본문이 Completed 상태로 반환되면 루프가 중지됩니다. 또한 무한 루프를 방지하기 위해 다음 조건 중 하나라도 발생하면 루프가 중지됩니다.

  • 루프가 count 특성에 지정한 대로 10회 실행되었습니다. 기본값은 60회입니다.

  • 루프가 ISO 8601 형식의 timeout 특성에 지정한 대로 2시간 동안 실행되었습니다. 기본값은 1시간입니다.

"actions": {
   "myUntilLoopName": {
      "type": "Until",
      "actions": {
         "Create_new_resource": {
            "type": "Http",
            "inputs": {
               "body": {
                  "resourceId": "@triggerBody()"
               },
               "url": "https://domain.com/provisionResource/create-resource",
               "body": {
                  "resourceId": "@triggerBody()"
               }
            },
            "runAfter": {},
            "type": "ApiConnection"
         }
      },
      "expression": "@equals(triggerBody(), 'Completed')",
      "limit": {
         "count": 10,
         "timeout": "PT2H"
      },
      "runAfter": {}
   }
}

지원 받기

다음 단계