> ## Documentation Index
> Fetch the complete documentation index at: https://docs.alforse.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 워크플로우

> Alforse 이벤트나 일정에 대한 반응을 자동화합니다. 캔버스에서 하나의 트리거를 조건과 작업에 연결하고, 게시하며, 모든 실행을 단계별로 확인합니다.

워크플로우를 사용하면 무슨 일이 일어났을 때 Alforse가 스스로 반응하게 할 수 있습니다. 수주가 담당자 이름으로 접수되는 즉시 영업 담당자에게 알리거나, 작업이 보류될 때마다 이슈를 열거나, 출하가 전기되면 다른 시스템에 알릴 수 있습니다. 워크플로우 권한이 있는 사용자는 **자동화 → 워크플로우**에서 이러한 자동화를 설계하고 **자동화 → 실행**에서 수행된 작업을 감사합니다.

## 개요

각 워크플로우는 캔버스에 그려집니다. 맨 위에 트리거 카드가 하나 있고 조건 및 작업 카드가 그 아래에 이어지며, 하나의 트리거가 독립된 여러 경로로 분기할 수 있습니다. **"게시"**를 선택하기 전에는 아무것도 실행되지 않습니다. 그 이후 각 실행은 기록된 실행이 되며 모든 단계를 열어 확인할 수 있습니다. [실행과 이력](#runs-and-history)을 참조하십시오.

Alforse screenshot**자동화 → 워크플로우 아래의 워크플로우 빌더 캔버스: 조건 및 작업 단계에 연결된 트리거 카드, 팔레트, 게시 버튼**

하나의 트리거가 각각 고유한 종료 지점을 가진 분기로 나뉩니다.

## 워크플로우를 시작하는 것

워크플로우에는 항상 정확히 하나의 **트리거** 단계가 있습니다. 여기서 **"트리거 유형"** 토글은 **"이벤트"** 또는 **"일정"**을 제공하며, 하나를 선택하면 다른 쪽에 구성한 내용이 지워집니다.

### 레코드 이벤트

이벤트는 하나의 레코드 유형에 대한 하나의 변경 종류를 지정합니다. 세 가지 형태가 있습니다.

| 이벤트 형태 | 예 | 워크플로우에 전달되는 데이터 |
| - | - | - |
| 생성됨 | `job.created` | 새로 생성된 레코드 |
| 삭제됨 | `purchaseOrder.deleted` | 제거되기 전 레코드의 스냅샷 |
| 열이 변경됨 | `customer.assignee.changed` | 레코드와 함께 필드의 `before` 및 `after` 값 |

NOTE

**일반적인 “업데이트됨” 이벤트는 없습니다**

"무엇이든 변경됨" 대신 관심 있는 필드를 지정합니다. 감시할 수 있는 레코드 유형은 열 가지입니다. 발주서, 수주, 작업, 품목, 입고, 출하, 견적, 공급업체, 고객, 이슈입니다. 각각 감시 필드의 짧은 목록을 제공하며 그 외의 필드를 편집해도 워크플로우가 시작되지 않습니다.

### 비즈니스 순간

선택기 아래쪽의 **"비즈니스 순간들"** 제목 아래에는 Alforse의 기본 제공 프로세스에 있는 아홉 개의 마일스톤이 있습니다.

| 영역 | 순간 |
| - | - |
| 생산 | 작업 릴리즈됨 · 작업 보류됨 · 작업 공정작업 완료됨 |
| 영업 | 견적 발송됨 · 견적 수락됨 |
| 물류 | 입고 전기됨 · 출하 전기됨 |
| 송장 관리 | 매출 송장 전기됨 · 매입 송장 전기됨 |

비즈니스 순간은 필드를 복사하지 않고 *어떤* 레코드가 관련되었는지, 즉 레코드의 식별 정보를 워크플로우에 알립니다. 이후 단계에서 순간이 제공하지 않은 값이 필요하면 그 앞에 **찾기**(Find) 단계를 넣으십시오.

### 일정

시간에 따라 실행하려면 **"일정"**을 선택합니다. **"빈도"**를 매일, 매주, 매월 중에서 설정하고, 적용되는 날을 선택한 다음 **"하루 중 시간"**과 **"시간대"**를 입력합니다. 편집하는 동안 **"Next fires at:"**(다음 실행 시각:) 줄이 다음 실행을 미리 보여 줍니다.

HEADS UP

**일정은 따라잡지 않습니다**

Alforse는 시계 시각과 시간대를 분리하여 보관하므로 09:00 일정은 시간이 변경된 후에도 09:00에 실행됩니다. 31일에 고정된 월별 일정은 더 짧은 달을 단순히 **건너뜁니다**. 실행 시점에 Alforse를 사용할 수 없었더라도 소급하여 채우지 않고 다음 시점을 기다리며, 한 시간 넘게 지연된 실행은 건너뜀으로 기록됩니다. 각 일정에는 부하를 분산하기 위해 최대 5분의 고정 지터도 있으므로 09:00은 실제로 09:00에서 09:05 사이를 의미합니다.

### 누구의 변경을 인정할지 제한

이벤트 트리거의 경우 **"트리거된 사람/것"**이 **"인원"**, **"워크플로우"** 또는 **"모두"**의 편집이 워크플로우를 실행할 수 있는지를 결정합니다. 새 트리거의 기본값은 **"인원"**이며, 이는 이 워크플로우를 포함해 모든 워크플로우가 한 변경을 무시하므로 안전한 설정입니다. 하나의 자동화가 다른 자동화를 구동하도록 의도할 때만 의도적으로 **"모두"**로 전환하십시오.

## 워크플로우 작성

### 여섯 가지 단계 유형

단계는 팔레트에 다음 순서로 나열됩니다.

| 단계 | 캔버스에서의 역할 |
| - | - |
| **트리거** | 유일한 진입점. 다른 단계가 연결될 수 없습니다. |
| **조건** | 실행이 따를 하나의 경로를 선택합니다. 경로는 절의 집합이며 **"그 외에"** 경로는 선택 사항입니다. |
| **작업** | 알림, 생성, 업데이트, 외부 호출 같은 일을 수행하며 별도의 **성공** 및 **실패** 핸들을 제공합니다. |
| **계산**(Compute) | 아무것도 변경하지 않고 주문 합계나 스크랩 비율처럼 레코드에서 숫자를 도출합니다. |
| **찾기**(Find) | 이후에 사용할 레코드를 가져옵니다. |
| **필터** | 목록을 규칙을 충족하는 항목으로 좁힙니다. |

### 작업이 할 수 있는 일

열여섯 개의 작업이 세 가지 계열로 묶입니다.

1. **생성(4).** 작업, 이슈, 발주서 또는 수주. 이는 Alforse 자체 화면 뒤의 바로 그 서비스를 호출하므로, 채번 시퀀스, 기본값, 필수 필드가 사람이 할 때와 똑같이 적용됩니다.
2. **업데이트(10).** 감시 가능한 레코드 유형마다 하나씩이며 기존 레코드를 편집합니다.
3. **알림 및 외부 호출(2).** **"누군가에게 알림"**과 **"외부 URL 호출"**.

NOTE

**업데이트는 의도적으로 좁게 제한됩니다**

각 업데이트 작업은 담당자, 마감일, 참조, 우선순위처럼 Alforse가 정의한 짧은 필드 집합만 제공합니다. 워크플로우에서 상태를 변경할 수 없으며 삭제하는 작업은 없습니다. 워크플로우가 *감시*할 수 있는 필드와 *쓸* 수 있는 필드는 별도의 목록으로 관리됩니다.

### 단계에 값 제공

필드는 직접 입력한 리터럴 또는 앞 단계에서 생성된 값을 담을 수 있습니다. 텍스트 필드에 `{`를 입력하면 이전 단계, 그 출력, 두 단계 깊이까지의 속성을 나열하는 변수 메뉴가 열립니다.

현재 단계보다 앞서 실행되는 것이 *확실한* 단계만 거기에 나타납니다. 조건 분기 반대편의 값은 제외되며 이를 참조하면 게시할 때 거부됩니다.

### 목록 항목당 한 번 단계 실행

단일 값을 기대하는 필드에 목록을 연결하면 단계가 항목마다 한 번씩, 최대 100번 반복합니다. 양식에서 이를 알려 줍니다. 하나의 단계에 서로 다른 두 목록을 연결하면 반복에 단일 출처가 없으므로 게시 시 거부됩니다.

## 외부 URL 호출

**"외부 URL 호출"**은 HTTP 요청, 즉 웹훅을 보내 다른 시스템이 Alforse의 이벤트에 응답할 수 있게 합니다.

FieldType

<details>
  <summary>**URL**required`text`</summary>

  `https` 엔드포인트입니다. 경로에 레코드의 id 같은 변수를 포함할 수 있습니다.
</details>

<details>
  <summary>**메서드**required`choice`</summary>

  `GET`, `POST`, `PUT`, `PATCH` 또는 `DELETE`. 새 단계의 기본값은 `GET`입니다.
</details>

<details>
  <summary>**헤더**`name/value rows`</summary>

  인증 키 같은 추가 요청 헤더입니다. 변수를 사용할 수 있으며 실행 이력은 모든 헤더 *값*을 마스킹합니다.
</details>

<details>
  <summary>**본문**`text`</summary>

  변수가 채워진 페이로드입니다. `POST`, `PUT`, `PATCH`에서만 사용할 수 있고 전송됩니다.
</details>

HEADS UP

**웹훅 단계의 제한**

* `https`만 허용됩니다. 사설 또는 링크 로컬 범위로 확인되는 주소도 거부되며, `localhost`와 클라우드 메타데이터 엔드포인트가 이에 해당합니다.
* 리디렉션은 따라가지 않습니다. 10초 후에도 응답이 없는 요청은 폐기됩니다.
* 성공 범위를 벗어난 응답은 단계를 실패로 표시합니다.
* Alforse가 여덟 개의 헤더를 소유하며 이를 대체할 수 없습니다.
* 요청에는 서명이 없습니다. 수신자가 발신자를 인증해야 한다면 헤더에 공유 비밀 값을 포함하십시오.

## 저장, 게시, 버전

### 자동 저장

저장 버튼은 없습니다. 편집은 지속적으로 저장되며 제목 옆의 상태가 **"저장 중…"**, **"저장됨"** 또는 **"저장할 수 없습니다"**로 표시됩니다. 검증은 게시할 때까지 미뤄지므로 불완전한 초안도 정상적으로 저장됩니다.

### 게시

**"게시"**는 완전히 성공하거나 아무것도 변경하지 않습니다. 운영을 시작하기 전에 Alforse는 트리거가 있는지, 앞 단계로 되돌아가는 단계가 없는지, 필수 필드가 채워져 있는지, 모든 변수가 앞 단계를 가리키는지 확인합니다. 실패는 패널에 모이며 항목을 선택하면 캔버스가 해당 단계로 스크롤됩니다.

게시는 전원 스위치 역할도 합니다. 게시된 버전이 실행되는 버전이며 **"게시 취소"**는 워크플로우를 중단하지만 아무것도 삭제하지 않고, 다시 게시하면 복귀합니다. 게시된 버전이 없는 워크플로우에는 **초안** 라벨이 붙습니다.

### 버전

게시되면 버전은 잠깁니다. 버전 메뉴에서 새 버전을 만들어 편집을 계속합니다. 새 버전은 게시된 버전의 사본으로 시작하며 다음 번호를 받습니다. 이미 진행 중인 실행은 그동안 다른 버전이 게시되더라도 시작된 버전에서 끝납니다.

### 테스트 실행

워크플로우의 소유자는 트리거 카드에서 **"테스트 실행"**을 선택할 수 있습니다. 이는 실제 실행이며 어떤 작업이든 실제로 일어나지만 실행 이력에는 항목이 남지 않습니다.

## 권한

워크플로우는 모든 경로에 필요한 직원 계정 위에 전용 권한 모듈로 제어됩니다.

| 권한 | 부여하는 것 |
| - | - |
| **보기** | 워크플로우 목록, 빌더, 실행 이력. |
| **생성** | 새 워크플로우와 새 버전. |
| **업데이트** | 편집, 게시, 테스트 실행. |
| **삭제** | 버전 및 이력과 함께 워크플로우 제거. |

NOTE

**워크플로우는 트리거한 사람이 아니라 소유자로 실행됩니다**

모든 단계는 단계마다 새로 확인되는 소유자의 권한으로 동작합니다. 소유자가 어떤 영역에 대한 액세스를 잃으면 실행은 해당 영역을 명시하는 메시지와 함께 중단됩니다. 워크플로우는 자신의 회사로 한정되며 실행 이력은 데이터베이스 수준에서 쓰기 보호되므로, 아무리 권한이 높아도 실행 로그를 변경하거나 위조할 수 없습니다.

## 실행과 이력

각 실행은 워크플로우 실행을 생성합니다. 실행 하나의 레코드와 단계마다 하나씩의 레코드로, 입력된 것, 출력된 것, 그렇게 끝난 이유를 담습니다.

### 실행 목록

**자동화 → 실행**에서 각 행은 상태, 워크플로우, 트리거, 소요 시간, 소유자, 원본 레코드를 표시합니다. 원본 레코드는 이름이나 번호로 표시되고 빠른 접근을 위해 링크됩니다. 다른 실행이 이 실행을 일으켰다면 **체인** 열에 **"홉 2"** 이후가 표시됩니다. 실행이 대기 중이거나 진행 중인 동안 목록이 실시간으로 갱신됩니다.

<details>
  <summary>**Queued**</summary>

  수락되어 작업자를 기다리는 중입니다.
</details>

<details>
  <summary>**Running**</summary>

  작업자가 확보하여 지금 단계를 실행하고 있습니다.
</details>

<details open>
  <summary>**Succeeded**</summary>

  실행된 모든 단계가 오류 없이 완료되었습니다.
</details>

<details>
  <summary>**Failed**</summary>

  단계가 실패했거나 실행이 500단계 상한에 도달했습니다.
</details>

<details>
  <summary>**Blocked**</summary>

  단계가 실행되기 전에 루프 가드에 의해 중단되었습니다. 실행이 이유를 알려 줍니다.
</details>

<details>
  <summary>**Skipped**</summary>

  워크플로우가 게시 취소되었거나, 예약된 실행이 지연되었거나, 이전 실행이 끝나지 않았기 때문에 시작되지 않았습니다.
</details>

### 실행 읽기

행을 열면 *"Failed at 'notify the buyer': The address answered 500."*(「구매 담당자에게 알림」에서 실패: 주소가 500으로 응답했습니다.)과 같은 평이한 영어 한 문장의 판정이 머리에 표시되는 **"실행 세부 정보"** 서랍이 나타납니다.

Alforse screenshot**자동화 → 실행의 실행 세부 정보 서랍: 결과 문장, 워크플로우 순서의 단계 목록(건너뛴 분기는 회색), 입력과 출력을 보여 주는 펼쳐진 단계 하나**

판정 문장에서 시작하고, 세부 사항이 필요할 때만 단계를 펼치십시오.

단계는 실행된 순서가 아니라 워크플로우에 놓인 순서대로 나열됩니다. 따라서 실행되지 않은 단계는 제자리에 남아 **"도달하지 않음"**으로 회색 처리되거나 이유와 함께 건너뜀으로 표시됩니다. 단계를 펼치면 **입력**과 **출력**이 표시되며, 조건의 경우 **이유**(Why) 섹션이 각 절을 안내하고 선택된 경로를 강조합니다.

반복 단계는 모든 항목을 기록하고 집계를 추가합니다. *"Ran 100 of 150; 50 were not used"*(150개 중 100개 실행, 50개는 사용되지 않음)는 오류가 아니라 100개 항목 한도를 의미합니다.

NOTE

**아무것도 하지 않고도 실행이 성공할 수 있습니다**

조건의 어떤 경로도 일치하지 않고 \*\*"그 외에"\*\*가 없으면 조건은 *성공*한 것입니다. 중단하기로 올바르게 판단한 것입니다. 그러면 대부분의 단계에 도달하지 않았는데도 실행이 녹색으로 표시되며, 판정 문장이 결과를 말로 설명하는 이유가 바로 여기에 있습니다. 없는 데이터도 마찬가지로 실패가 아니라 건너뜀을 일으킵니다. 그리고 입력을 읽을 수 없는 조건은 **"그 외에"** 경로를 따르지 **않습니다**. 모르는 것과 아닌 것은 다릅니다.

### 실패가 전파되는 방식

단계가 실패하면 해당 분기만 멈추고 형제 분기는 계속되며 연결된 **실패** 핸들은 여전히 따라가지만, 실행은 끝나면 실패로 보고됩니다. 권한 실패는 더 엄격합니다. 실패 경로가 연결되어 있어도 분기를 종료합니다.

### 워크플로우 체인

한 워크플로우가 수행한 쓰기가 다른 워크플로우를 일으키면 Alforse는 실행들을 묶어 전체 체인을 표시합니다. 한 체인에 두 번 나타나는 워크플로우나 10홉보다 긴 체인은 **차단됨** 실행을 만듭니다. 체인을 애초에 방지하려면 [**"트리거된 사람/것"**](#what-starts-a-workflow)을 조정하십시오.

HEADS UP

**재시도 버튼은 없습니다**

완료된 실행은 실행 페이지에서 다시 재생할 수 없습니다. 외부 문제를 해결하고 트리거가 다시 실행되게 하거나 빌더에서 \*\*"테스트 실행"\*\*을 시작하십시오. 중간에 중단된 실행은 대기열이 자동으로 재시도하며, 모든 단계는 무언가를 하기 전에 먼저 확보되므로 재시도가 완료된 단계를 반복하지 않습니다.

### 보존과 마스킹

매일 밤 정리 작업이 실행 이력을 네 단계로 오래된 순으로 처리합니다. 진행 중인 실행은 절대 건드리지 않습니다.

| 경과 기간 | 효과 |
| - | - |
| 24시간 | 대기 중 또는 실행 중으로 멈춘 실행이 실패로 종료됩니다. |
| 7일 | 저장된 값이 요약으로 압축됩니다. |
| 30일 | 단계 행이 제거되고 실행 헤더는 유지됩니다. |
| 90일 | 실행 전체가 제거됩니다. |

이름이 자격 증명과 유사한 항목은 `[REDACTED]`로 저장되며 웹훅 헤더 값은 항상 마스킹됩니다. 품목 키나 승인한 사람처럼 민감하게 들리기만 하는 필드는 유지됩니다. 너무 많이 가리는 로그는 너무 적게 가리는 로그만큼이나 디버깅에 쓸모가 없기 때문입니다.

## 문제 해결

| 증상 | 가능한 원인 | 대처 방법 |
| - | - | - |
| 예상한 실행이 **자동화 → 실행**에 없습니다. | 테스트 실행은 기록되지 않고, 지연된 예약 실행은 **건너뜀**으로 표시되며, 90일이 지난 실행은 삭제됩니다. | 기한 시점의 **건너뜀** 행을 찾거나 테스트 실행 대신 실제 트리거를 사용하십시오. |
| 워크플로우가 두 번 실행되었거나 자신의 편집에 반응했습니다. | **"트리거된 사람/것"**이 **"모두"** 또는 **"워크플로우"**입니다. | **"인원"**으로 변경하십시오. |
| 상태가 **성공**인데 아무것도 변경되지 않았습니다. | 조건이 어떤 경로와도 일치하지 않았고 **"그 외에"**가 없었습니다. | 판정 문장이 해당 조건을 명시합니다. 절을 조정하거나 **"그 외에"**를 추가하십시오. |
| 오래된 실행에 단계가 없습니다. | 단계 행은 30일 후 삭제됩니다. | 수정할 것이 없습니다. 서랍의 배너가 이를 설명합니다. |
| **"게시"**가 문제를 보고합니다. | 필수 필드가 비어 있거나, 단계가 루프를 이루거나, 변수가 항상 먼저 실행되지는 않는 단계를 참조합니다. | 나열된 각 문제를 선택하여 해당 단계로 이동하십시오. |

## 관련 문서

**알림**

"누군가에게 알림" 단계의 메시지가 도착하는 곳과 각 사람이 토픽을 음소거하는 방법입니다.

[Open](https://docs.alforse.com/ko/docs/reference/notifications.md)

**승인**

자동화의 다른 절반: 문서에 대한 규칙 기반 승인 게이트입니다.

[Open](https://docs.alforse.com/ko/docs/reference/approvals.md)

**감사 로그**

누가 어떤 필드를 언제 변경했는지를 레코드별로 정리한 별도의 이력입니다.

[Open](https://docs.alforse.com/ko/docs/reference/audit-log.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.