[Debug] WF1은 돌았는데 WF2에 대본이 없던 이유

조선야사 롱폼 자동화 – 실행 순서 오류처럼 보였던 진짜 원인


작업 목적

  • 조선야사 롱폼 자동화 워크플로우
  • WF1에서 롱폼 대본(script_text) 생성
  • WF2에서 해당 대본을 기반으로:
    • 롱폼 메타데이터
    • 쇼츠 스크립트
    • 썸네일 문구
      자동 생성

발생한 문제

WF2가 실행될 때
대본이 없는 상태로 LLM이 호출되는 현상 발생


1️⃣ 문제 상황 (초기 증상)

  • 구조: WF0 → WF1 → WF2
  • WF1:
    • 정상적으로 대본 생성
  • WF2 실행 시 아래 메시지 발생

조선 야사 롱폼 대본 요청 확인
현재 상태:
지시문은 정상적으로 입력되었으나,
대본 원문이 누락되었습니다.

겉으로 보면:

  • WF2가 WF1보다 먼저 실행되는 것처럼 보였고
  • 폴링 / Wait / 순서 제어 문제처럼 보이는 상황이었다

2️⃣ 1차 시도 (실패한 접근)

시도한 것들

  • WF0에서 WF1 → WF2 실행 순서 강제
  • WF1 / WF2 완전 분리
  • WF1 마지막에 HTTP Request로 WF2 호출
  • Body 없는 호출 / Query 파라미터 전달
  • Wait / 폴링 구조 검토

결과

  • 문제 지속
  • WF2는 실행되지만 여전히 “대본 누락” 발생

👉 이 시점에서 결론:

문제는 실행 순서가 아니라
WF2가 읽는 ‘입력 데이터’ 자체
였다.


3️⃣ 원인 분석 (핵심)

실제 원인

  • WF2는 Webhook으로:
    • row_number 또는 ep_id만 전달받음
  • WF2 내부에서:
    • 대본(script_text)을 직접 전달받지 않음
    • 그런데도 프롬프트에 대본을 주입하지 않음

결과적으로 WF2의 LLM 프롬프트에는:

  • 규칙 / 지시문만 있고
  • 실제 대본 원문이 없는 상태

즉,

  • ❌ WF2가 먼저 실행된 문제가 아니라
  • ✅ WF2가 대본 없는 상태로 LLM을 호출한 구조적 문제였다

4️⃣ 구조적 해결 전략 (정답 설계)

핵심 원칙

  • WF1 → WF2로 대본 전체를 전달하지 않는다
  • 대신:
  1. WF1이 시트에 대본 저장
  2. WF2는 식별자(ep_id)만 전달받음
  3. WF2 내부에서 시트를 다시 조회
  4. 조회된 script_text를 프롬프트에 명시적으로 주입

5️⃣ 최종 워크플로우 구조

WF0 (오케스트레이터)

  • 처리 대상 1건 선택
  • LOCK 처리
  • WF1만 호출
  • WF2 직접 호출 제거

WF1 (대본 생성)

  1. Google Sheets에서 대상 row 선택
  2. 롱폼 대본 생성
  3. script_text 컬럼에 저장
  4. 상태 업데이트 (SCRIPT_DONE)
  5. HTTP Request → WF2 호출
    • Query Parameter:
      • ep_id = 해당 행의 ep_id

WF2 (메타데이터 생성)

Webhook
 → SET_INPUT (ep_id)
 → GS_GET_BY_ROW_NUMBER
 → SET_PROMPT_METADATA
 → LLM
 → 결과 저장

6️⃣ WF2 핵심 설정 (결정적 포인트)

1) Google Sheets Read

  • 노드명: GS_GET_BY_ROW_NUMBER
  • 조회 조건:
    • Column: ep_id
    • Value: {{$node["SET_INPUT"].json.ep_id}}
  • Limit: 1

➡️ 이 노드 출력에 script_text 포함


2) 프롬프트에 대본 명시적 주입 (가장 중요)

[조선 야사 롱폼 대본 원문 전체]
{{$node["GS_GET_BY_ROW_NUMBER"].json.script_text}}

➡️ 이 줄이 없으면 WF2는 절대 정상 동작하지 않음


7️⃣ 최종 결과

  • WF1에서 생성한 대본이
  • WF2에서 정확히 다시 로드됨
  • 메타데이터 / 쇼츠 / 썸네일 정상 생성
  • “대본 누락” 메시지 완전 해결
  • 순서 제어 / Wait / 폴링 전부 불필요

8️⃣ 재사용 가능한 운영 원칙

  1. 순서 문제처럼 보여도 원인은 입력 데이터 누락일 수 있다
  2. Webhook은 트리거 + 식별자 전달만 담당
  3. 실제 데이터는 각 WF 내부에서 다시 조회
  4. LLM 프롬프트에는
    “있을 거라 가정”하지 말고
    반드시 필요한 입력을 명시적으로 주입
  5. Google Sheets 자동화는
    상태 기반보다 식별자 기반 단건 조회가 안정적이다

9️⃣ 현재 상태

  • 조선야사 롱폼:
    • 대본 → 메타 → 쇼츠 → 썸네일
      완전 자동 파이프라인 정상 동작
  • 이 구조는:
    • 다른 채널
    • 다른 언어
    • 워드프레스 자동 포스팅
      그대로 재사용 가능

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *