워크플로의 실행 순서 제어

이 페이지에서는 점프 또는 루프를 사용하여 워크플로 단계가 실행되는 순서를 제어하는 방법을 보여줍니다. 기본 점프를 사용하면 워크플로의 다음 실행 단계를 정의할 수 있습니다. 조건부 점프는 기본 점프를 기반으로 작성되며 조건부 표현식을 사용하여 워크플로의 실행 순서를 제어할 수 있습니다. 예를 들어 다른 워크플로 단계의 변수 또는 응답이 특정 기준을 충족하는 경우에만 특정 단계를 실행할 수 있습니다.

이 페이지의 예시에서는 요일을 반환하는 샘플 API를 사용합니다.

시작하기 전에

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  6. 실행 순서를 변경할 기존 워크플로가 이미 존재하는 상태여야 합니다. 워크플로를 만들고 배포하는 방법을 알아보려면 워크플로 생성 및 업데이트를 참조하세요.

점프를 사용하여 실행 순서 변경

기본적으로 모든 워크플로는 워크플로의 소스 코드에서 정의하는 순서에 따라 모든 단계가 실행되는 순서가 지정된 목록입니다. 점프를 사용하면 이러한 기본 순서를 재정의할 수 있습니다.

기본 점프

워크플로에서 기본 점프를 사용해 다음에 실행할 단계를 지정할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 워크플로 페이지를 엽니다.
    워크플로로 이동

  2. 기존 단계의 실행 순서를 변경할 워크플로의 이름을 선택합니다.

  3. 워크플로 수정 페이지에서 다음을 선택하여 워크플로 편집기로 이동합니다.

  4. 단계 끝에 next 필드를 추가하여 워크플로가 특정 단계로 점프하도록 지정합니다.

    YAML

         - step_a:
             ...
             next: STEP_NAME_TO_JUMP_TO
         - step_b:
             ...
         - next_step:
             ...

    JSON

        [
          {
            "step_a": {
              ...
              "next": "STEP_NAME_TO_JUMP_TO"
            }
          }
          {
            "step_b": {
              ...
            }
          }
          {
            "next_step": {
              ...
            }
          }
        ]

    STEP_NAME_TO_JUMP_TO을 워크플로가 다음에 실행할 단계의 이름으로 바꿉니다. 예: next_step

  5. 배포를 선택합니다.

gcloud

  1. 원하는 텍스트 편집기로 워크플로 정의 파일을 엽니다.

  2. 단계 끝에 next 필드를 추가하여 워크플로가 특정 단계로 점프하도록 지정합니다.

    YAML

         - step_a:
             ...
             next: STEP_NAME_TO_JUMP_TO
         - step_b:
             ...
         - next_step:
             ...

    JSON

      [
        {
          "step_a": {
            ...
            "next": "STEP_NAME_TO_JUMP_TO"
          }
        }
        {
          "step_b": {
            ...
          }
        }
        {
          "next_step": {
            ...
          }
        }
      ]

    STEP_NAME_TO_JUMP_TO을 워크플로가 다음에 실행할 단계의 이름으로 바꿉니다. 예를 들면 next_step입니다.

  3. 워크플로 파일을 저장합니다.

  4. 워크플로를 배포하려면 다음 명령어를 입력합니다.

    gcloud workflows deploy WORKFLOW_NAME \
    --source=WORKFLOW_FILE.YAML

    다음을 바꿉니다.

    • WORKFLOW_NAME: 필수 항목입니다. 워크플로의 이름입니다.

    • WORKFLOW_FILE.YAML: 필수 항목입니다. 워크플로의 소스 파일입니다.

예를 들어 다음 워크플로는 단계 순서가 맞지 않습니다.

YAML

  - get_time:
     call: http.get
     args:
         url:  https://us-central1-workflowsample.cloudfunctions.net/datetime
     result: currentTime
  - return_daylight_savings_bool:
     return: ${daylightSavings}
  - get_daylight_savings_bool:
     assign:
         - daylightSavings: ${currentTime.body.isDayLightSavingsTime}

JSON

    [
      {
        "get_time": {
          "call": "http.get",
          "args": {
            "url": "https://us-central1-workflowsample.cloudfunctions.net/datetime"
          },
          "result": "currentTime"
        }
      },
      {
        "return_daylight_savings_bool": {
          "return": "${daylightSavings}"
        }
      },
      {
        "get_daylight_savings_bool": {
          "assign": [
            {
              "daylightSavings": "${currentTime.body.isDayLightSavingsTime}"
            }
          ]
        }
      }
    ]

이 예시에서는 단계가 올바른 순서로 실행되도록 next 필드를 get_daylight_savings_boolreturn_daylight_savings_bool 단계에 추가했습니다.

YAML

  - get_time:
     call: http.get
     args:
         url:  https://us-central1-workflowsample.cloudfunctions.net/datetime
     result: currentTime
     next: get_daylight_savings_bool
  - return_daylight_savings_bool:
     return: ${daylightSavings}
  - get_daylight_savings_bool:
     assign:
         - daylightSavings: ${currentTime.body.isDayLightSavingsTime}
     next: return_daylight_savings_bool

JSON

    [
      {
        "get_time": {
          "call": "http.get",
          "args": {
            "url": "https://us-central1-workflowsample.cloudfunctions.net/datetime"
          },
          "result": "currentTime",
          "next": "get_daylight_savings_bool"
        }
      },
      {
        "return_daylight_savings_bool": {
          "return": "${daylightSavings}"
        }
      },
      {
        "get_daylight_savings_bool": {
          "assign": [
            {
              "daylightSavings": "${currentTime.body.isDayLightSavingsTime}"
            }
          ],
          "next": "return_daylight_savings_bool"
        }
      }
    ]

조건부 점프

조건부 점프를 사용하여 워크플로에서 다음에 실행할 단계를 결정할 수 있습니다. 조건부 점프에는 switch 블록이 사용되며, 특정 조건이 충족되면 지정된 단계로 점프합니다. 각 switch 블록에는 최대 50개의 조건이 포함될 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 워크플로 페이지를 엽니다.
    워크플로로 이동

  2. switch 블록을 추가하려는 워크플로의 이름을 선택합니다.

  3. 워크플로 수정 페이지에서 다음을 선택하여 워크플로 편집기로 이동합니다.

  4. 워크플로 정의 페이지에 워크플로의 현재 정의가 표시됩니다. 조건문에 따라 특정 단계가 실행되도록 워크플로를 수정하려면 switch 블록을 사용하는 단계를 추가합니다.

    YAML

         - SWITCH_STEP_NAME:
             switch:
                 - condition: ${EXPRESSION_ONE}
                   next: STEP_A
                 - condition: ${EXPRESSION_TWO}
                   next: STEP_B
                 ...
             next: STEP_C
         - STEP_A
             ...
         - STEP_B
             ...
         - STEP_C
             ...

    JSON

        [
          {
            "SWITCH_STEP_NAME": {
              "switch": [
                {
                  "condition": "${EXPRESSION_ONE}",
                  "next": "STEP_A"
                },
                {
                  "condition": "${EXPRESSION_TWO}",
                  "next": "STEP_B"
                }
              ],
              "next": "STEP_C"
            }
            "STEP_A": {
              ...
            }
            "STEP_B": {
              ...
            }
            "STEP_C": {
              ...
            }
          }
        ]

    다음을 바꿉니다.

    • SWITCH_STEP_NAME: switch 블록을 포함하는 단계의 이름입니다.

    • EXPRESSION_ONE: 평가할 첫 번째 표현식입니다. 이 표현식이 true로 평가되면 워크플로가 다음에 STEP_A를 실행합니다. 이 표현식이 false로 평가되면 워크플로가 다음 표현식을 평가합니다.

    • EXPRESSION_TWO: 평가할 두 번째 표현식입니다. 이 표현식이 true로 평가되면 워크플로가 다음에 STEP_B를 실행합니다. 이 표현식이 false로 평가되면 워크플로가 STEP_C를 실행합니다.

    • STEP_A, STEP_B, STEP_C: 자리표시자 단계 이름입니다.

  5. 배포를 선택합니다.

gcloud

  1. 원하는 텍스트 편집기로 워크플로 정의를 엽니다.

  2. 조건문에 따라 특정 단계가 실행되도록 워크플로를 수정하려면 switch 블록을 사용하는 단계를 추가합니다.

    YAML

     - SWITCH_STEP_NAME:
         switch:
             - condition: ${EXPRESSION_ONE}
               next: STEP_A
             - condition: ${EXPRESSION_TWO}
               next: STEP_B
             ...
         next: STEP_C
     - STEP_A
         ...
     - STEP_B
         ...
     - STEP_C
         ...

    JSON

    [
      {
        "SWITCH_STEP_NAME": {
          "switch": [
            {
              "condition": "${EXPRESSION_ONE}",
              "next": "STEP_A"
            },
            {
              "condition": "${EXPRESSION_TWO}",
              "next": "STEP_B"
            }
          ],
          "next": "STEP_C"
        }
        "STEP_A": {
          ...
        }
        "STEP_B": {
          ...
        }
        "STEP_C": {
          ...
        }
      }
    ]
      

    다음을 바꿉니다.

    • SWITCH_STEP_NAME: switch 블록을 포함하는 단계의 이름입니다.

    • EXPRESSION_ONE: 평가할 첫 번째 표현식입니다. 이 표현식이 true로 평가되면 워크플로가 다음에 STEP_A를 실행합니다. 이 표현식이 false로 평가되면 워크플로가 다음 표현식을 평가합니다.

    • EXPRESSION_TWO: 평가할 두 번째 표현식입니다. 이 표현식이 true로 평가되면 워크플로가 다음에 STEP_B를 실행합니다. 이 표현식이 false로 평가되면 워크플로가 STEP_C를 실행합니다.

    • STEP_A, STEP_B, STEP_C: 자리표시자 단계 이름입니다.

  3. 워크플로 파일을 저장합니다.

  4. 워크플로를 배포하려면 다음 명령어를 입력합니다.

    gcloud workflows deploy WORKFLOW_NAME \
    --source=WORKFLOW_FILE.YAML

    다음을 바꿉니다.

    • WORKFLOW_NAME: 필수 항목입니다. 워크플로의 이름입니다.

    • WORKFLOW_FILE.YAML: 필수 항목입니다. 워크플로의 소스 파일입니다.

예를 들어 이 워크플로는 스위치 블록을 사용하여 워크플로의 실행 순서를 제어합니다.

YAML

  - getCurrentTime:
      call: http.get
      args:
          url:  https://us-central1-workflowsample.cloudfunctions.net/datetime
      result: currentTime
  - conditionalSwitch:
      switch:
          - condition: ${currentTime.body.dayOfTheWeek == "Friday"}
            next: friday
          - condition: ${currentTime.body.dayOfTheWeek == "Saturday" OR currentTime.body.dayOfTheWeek == "Sunday"}
            next: weekend
      next: workWeek
  - friday:
      return: "It's Friday! Almost the weekend!"
  - weekend:
      return: "It's the weekend!"
  - workWeek:
      return: "It's the work week."
    

JSON

    [
      {
        "getCurrentTime": {
          "call": "http.get",
          "args": {
            "url": "https://us-central1-workflowsample.cloudfunctions.net/datetime"
          },
          "result": "currentTime"
        }
      },
      {
        "conditionalSwitch": {
          "switch": [
            {
              "condition": "${currentTime.body.dayOfTheWeek == "Friday"}",
              "next": "friday"
            },
            {
              "condition": "${currentTime.body.dayOfTheWeek == "Saturday" OR currentTime.body.dayOfTheWeek == "Sunday"}",
              "next": "weekend"
            }
          ],
          "next": "workWeek"
        }
      },
      {
        "friday": {
          "return": "It's Friday! Almost the weekend!"
        }
      },
      {
        "weekend": {
          "return": "It's the weekend!"
        }
      },
      {
        "workWeek": {
          "return": "It's the work week."
        }
      }
    ]
      

이 예시에서는 switch 블록에 두 개의 조건이 포함됩니다. 파서가 각 조건을 순서대로 평가하고, 조건 표현식의 결과가 true이면 해당 조건의 next 단계가 호출됩니다. 어떠한 조건도 충족되지 않으면 워크플로가 switch 블록 외부의 next 필드에 지정된 단계를 호출합니다. 이 예시에서는 workWeek 단계입니다.

예를 들어 요일이 "Saturday"이면 워크플로가 weekend 단계로 점프하고 "It's the weekend!" 메시지를 반환합니다. 조건부 점프가 생략되기 때문에 워크플로에서 friday 단계는 실행되지 않으며, weekend 단계 끝에 return으로 워크플로 실행이 중지되기 때문에 워크플로에서 workWeek 단계가 실행되지 않습니다.

for 루프를 사용하여 반복

for 루프를 사용하여 일련의 숫자 또는 목록 또는 지도와 같은 데이터 컬렉션을 반복할 수 있습니다.

항목 기반 반복을 사용하여 목록 또는 지도의 모든 항목을 살펴볼 수 있습니다. 반복할 숫자 값의 특정 범위가 있는 경우, 범위 기반 반복을 사용할 수 있습니다.

자세한 내용 및 예시는 iteration의 문법 참조를 확인하세요.

다음 단계