13. 문제 해결¶
에러 메시지로 바로 찾아보세요.
먼저 여기부터¶
문제가 생기면 워크플로우 상세 → Overview → 실행 이력에서 실패한 실행을 클릭하세요.
- 어느 노드가
FAILED인지 - 그 노드가 받은 입력은 무엇이었는지
- 바로 앞 노드의 출력은 어떤 모양이었는지
이 세 가지만 보면 대부분 원인이 드러납니다.
CANCELLED노드는 원인이 아닙니다. 다른 노드가 실패해서 정리된 것뿐입니다.FAILED노드를 보세요.
저장할 때 나는 에러¶
저장 시점에는 그래프 구조를 검사합니다. 표현식은 검사하지 않습니다.
workflow must have exactly one ENTRYPOINT¶
시작점이 없거나 둘 이상입니다. type: ENTRYPOINT 노드가 정확히 하나 있어야 합니다.
only JOINT nodes may have multiple inbound edges¶
한 노드에 선이 두 개 이상 들어갑니다. 그 자리에 JOINT 노드를 놓고 거기로 모으세요.
# ❌ notify로 두 선이 들어감
edges:
- from: fetch-a
to: notify
- from: fetch-b
to: notify
# ✅ JOINT를 거쳐서
edges:
- from: fetch-a
to: join
- from: fetch-b
to: join
- from: join
to: notify
cycle detected¶
화살표를 따라가다 제자리로 돌아옵니다. 되돌아가는 엣지를 찾아 지우세요.
반복이 필요한 거라면 LOOP_START / LOOP_END를 쓰세요.
edge references unknown node¶
엣지의 from 또는 to에 적힌 id가 없습니다. 노드 id 오타를 확인하세요.
duplicate node id¶
같은 id를 가진 노드가 둘 이상입니다. 노드 id는 워크플로우 안에서 고유해야 합니다.
condition label has no matching edge¶
CONDITIONAL의 label마다 나가는 엣지가 하나씩 있어야 합니다.
execution-info:
conditions:
- label: vip # ← 이 label에
expression: "amount >= 100000"
edges:
- from: route
to: vip-handler
label: vip # ← 이 엣지가 짝
LOOP_START has no matching LOOP_END¶
둘은 반드시 짝입니다. LOOP_END의 execution-info.loop-start에 짝이 되는 LOOP_START의 id가 정확히 적혀 있는지 확인하세요.
CONDITIONAL is not allowed inside a loop body¶
루프 안에는 조건 분기를 넣을 수 없습니다. → 대안 보기
workflow has N nodes — the maximum is 200¶
워크플로우를 나누세요. 한 워크플로우가 다른 워크플로우의 웹훅을 http_request로 호출하는 방식으로 이을 수 있습니다.
저장은 되는데 slug 충돌¶
id가 워크스페이스 안에서 이미 쓰이고 있습니다. 다른 id로 바꾸거나, 기존 워크플로우를 수정하세요.
실행할 때 나는 에러¶
ExpressionResolveException¶
가장 흔한 에러입니다. ${...} 안의 경로가 실제 데이터와 맞지 않습니다.
확인 순서:
- 실행 이력에서 바로 앞 노드의 실제 출력을 봅니다.
- 표현식 경로가 그 모양과 맞는지 대조합니다.
- 노드 id 오타를 확인합니다 (
${nodes.fetch-order...}vs 실제 idfetch-orders).
자주 틀리는 것들:
| 잘못된 표현식 | 문제 |
|---|---|
${nodes.join.response.body.x} |
JOINT는 출력이 없습니다. 앞 노드를 직접 참조하세요 |
${nodes.trigger.response.body.windowStart} |
스케줄 트리거에 lookback을 설정해야 생깁니다 |
${secrets.MY_KEY} |
그 이름의 시크릿이 없거나, 일반 변수로 등록했습니다 |
${vars.MY_KEY} |
반대로 시크릿으로 등록해두고 vars로 부르고 있습니다 |
${item.id} |
루프 밖에서는 쓸 수 없습니다 |
${input.amount} |
들어오는 엣지에 request.data 매핑이 없습니다 |
값이 {a=1, b=2} 같은 이상한 문자열로 넘어감¶
| raw 를 빠뜨렸습니다. 배열이나 객체를 넘길 때는 붙여야 합니다.
→ 자세히
Transform 노드가 실패함¶
CALL 노드의 출력은 JSON 객체여야 합니다. 배열이나 숫자를 그대로 내보내면 실패합니다.
expression: "items[*].id" # ❌ 배열
expression: "{ids: items[*].id}" # ✅ 객체로 감싸기
expression: "length(items)" # ❌ 숫자
expression: "{count: length(items)}" # ✅
조건 분기가 항상 같은 쪽으로만 감¶
조건이 볼 값이 안 넘어오고 있습니다. 들어오는 엣지에 request.data 를 추가하세요.
그리고 조건식에서는 ${} 없이 이름만 씁니다: amount >= 100000
Slack: not_in_channel¶
채널에 봇을 초대하지 않았습니다. 해당 채널에서:
Slack: channel_not_found¶
채널 ID가 틀렸거나 비공개 채널입니다. 채널 ID는 Slack에서 채널 우클릭 → 채널 세부정보 → 맨 아래에서 확인합니다. 비공개 채널이면 봇을 먼저 초대해야 보입니다.
Slack: invalid_auth¶
연결이 만료·해지되었습니다. Connections 화면에서 재연결하세요.
LLM: 400 Bad Request¶
흔한 원인 두 가지입니다.
temperature— 최신 Claude 모델 등 일부는 이 값을 받지 않습니다. 빼보세요.model오타 — 엔드포인트가 아는 모델 id인지 확인하세요.
LLM: 401 Unauthorized¶
API 키가 틀렸거나 만료되었습니다. ${secrets.*}에 등록한 값을 확인하세요.
apiContract와 키가 맞는지도 보세요 — OpenAI 키로 ANTHROPIC_MESSAGES를 부르면 실패합니다.
타임아웃으로 실패함¶
timeout 값을 늘리거나, 조회 범위를 줄이세요.
AI 호출은 30s ~ 2m, 무거운 조회 API는 30s ~ 1m 정도가 무난합니다.
워크플로우를 수정할 수 없음 (MCP)¶
실행 중인 게 있습니다. 끝나기를 기다리거나 취소한 뒤 다시 시도하세요.
자주 묻는 질문¶
스케줄이 원하는 시각에 안 돌아요¶
timezone을 확인하세요. 안 적으면 UTC입니다.
cron: "0 0 9 * * ?" 만 적으면 한국 시간 오후 6시에 돕니다.
cron이 6자리인 것도 확인하세요. 맨 앞이 초입니다. → 자세히
웹훅을 불렀는데 200이 왔는데 아무 일도 안 일어나요¶
200은 "잘 접수했다"는 뜻이고, 워크플로우는 뒤에서 비동기로 돕니다.
실제 결과는 실행 이력에서 확인하세요. 십중팔구 거기에 FAILED가 남아 있습니다.
웹훅으로 보낸 필드가 다음 노드에 안 넘어와요¶
트리거의 input-schema는 화이트리스트입니다.
properties에 적지 않은 필드는 조용히 버려집니다. 쓰려는 필드를 전부 properties에 추가하세요.
실행이 실패했는데 아무도 몰랐어요¶
Notifications 화면에서 실패 알림 웹훅을 설정하세요. → 10. 실행과 모니터링
워크플로우를 고치는 중인데 저장이 안 돼요¶
그래프 구조가 아직 안 맞을 수 있습니다. 에러 메시지가 무엇이 문제인지 알려줍니다. 표현식은 저장 시점에 검사하지 않으므로, 표현식 때문에 저장이 막히지는 않습니다.
AI가 만든 워크플로우가 실행하면 실패해요¶
validate_workflow는 그래프 구조만 검사합니다. ${...} 경로 오류는 실행해봐야 드러납니다.
AI에게 "실행해보고 실패하면 고쳐줘"까지 시키면 알아서 반복합니다.
워크스페이스를 옮기면 설정도 따라가나요¶
아니요. 연결·변수·데이터셋은 워크스페이스마다 따로입니다. 새 워크스페이스에서는 다시 등록해야 합니다.
요금은 어떻게 되나요¶
베타 기간의 이용 조건은 app.eeumsae.com과 서비스 약관을 확인하세요. AI 호출 비용은 별도입니다 — 이음새는 여러분의 API 키로 대신 호출할 뿐이고, 요금은 OpenAI·Anthropic 등에 직접 청구됩니다.
실행 중인 워크플로우를 수정하면 어떻게 되나요¶
실행이 시작될 때 그 시점의 모양이 저장되므로, 이미 도는 실행은 영향받지 않습니다. 수정 내용은 다음 실행부터 적용됩니다.
그래도 안 되면¶
[email protected]으로 문의하세요. 아래를 함께 보내주시면 훨씬 빠릅니다.
- 워크플로우 이름 또는 slug
- 실패한 실행 시각
- 실행 이력에 나온 에러 메시지 원문
- (가능하면) 워크플로우 YAML — API 키와 토큰은 지우고 보내주세요
돌아가기 → 목차