n8n 롱폼 블로그 작성 자동화 #3 - (Apps Script + Webhook 기반 실시간) 유튜브 요약 보고 'Yes' 클릭 시 블로그 생성 워크플로우 ⚡

소개

지난 #2 사례에서는 Schedule Trigger를 활용해 Google Sheet에서 사용자가 'blogYes' 컬럼을 Yes로 변경했는지 여부를 주기적으로 조회했지만, 이번에는 사용자가 'blogYes'를 Yes로 변경하는 즉시 블로그 글을 생성하는 실시간 자동화를 구현했습니다.

이 흐름은 Google Apps Script로 Google Sheet 편집 이벤트를 감지해 n8n Webhook에 데이터를 POST하는 구조이며, blogYes == "Yes" && blogDone == "No" 조건을 만족하는 영상에 대해서만 동작합니다. 덕분에 수동/일정 트리거(Manual/Schedule Trigger) 없이도 블로그 생성이 즉시 실행됩니다 🪄

Webhook 방식을 사용하면 Google Sheet의 변경 이벤트에 즉각 반응할 수 있어, 반복적인 조회 없이도 필요한 작업을 빠르고 효율적으로 처리할 수 있다는 큰 장점이 있습니다. 또한 외부 시스템과의 연결에서 즉시성, 효율성, 리소스 절약 측면에서 매우 유리하며, polling 기반보다 더 정교한 제어가 가능합니다.

n8n 입장에서도 polling 방식(Schedule Trigger를 이용한 주기적 조회)은 반복적으로 API 호출 및 시트 스캔을 해야 하기 때문에 서버 리소스가 꾸준히 소모됩니다. 반면 Webhook 방식은 필요할 때만 동작하기 때문에 n8n 서버에 불필요한 부하가 줄고, 실행 기록(history) 관리도 더 깔끔해지는 이점이 있습니다.

현재 다른 분 서버에 기생(?)하고 있는 라이언이기 때문에, 부하를 드리고 싶지 않아서 Webhook 방식 구현에 도전해 보았습니다.

[n8n 롱폼 블로그 작성 자동화 #2 - 유튜브 요약 보고 'Yes' 클릭 시 블로그 생성 워크플로우]

https://www.gpters.org/nocode/post/n8n-long-foam-blog-XgbIncepapH1F0H

[n8n 롱폼 블로그 작성 자동화 #1 - 키워드 검색으로 유튜브 인기 영상 요약]

https://www.gpters.org/nocode/post/n8n-rongpom-beulrogeu-jagseong-jadonghwa-1---kiweodeu-geomsaegeuro-yutyubeu-0pVzrr39xPsADfY

진행 방법

🔁 핵심 흐름 요약

  1. Google Sheet 편집 → Apps Script → n8n Webhook 호출

  2. n8n은 해당 영상 row 데이터 수신

  3. 자막 수집 및 블로그 본문 생성

  4. Google Sheet에 본문 추가 + blogDone = Yes로 완료 표시

비디오 생성 과정을 보여주는 다이어그램

🧩 주요 노드 요약 (중복 제외)

📌 Google Apps Script 역할

  • Google Sheet에서 편집이 일어날 때 실행되는 onEdit(e) 함수를 활용해, 실시간으로 특정 조건을 감지할 수 있습니다.

    한국어를 가진 한국 웹 사이트의 스크린 샷
      /**
     * 설치형 트리거(onEdit) 에 바인딩하세요.
     * blogYes 열(G 열)이 "Yes" 로 바뀌면 webhook 호출.
     */
    function onEditPush(e) {
      const sheet = e.range.getSheet();
      if (sheet.getName() !== '시트1') return;            // 모니터링할 시트명
      const col = e.range.getColumn();
      const row = e.range.getRow();
      const headerRow = 1;                                // 헤더가 1행이라면
      // blogYes 열이 G(7)번이라고 가정
      if (col === 7 && e.value === 'Yes' && row > headerRow) {
        const payload = {
          rowNumber: row,
        };
        const options = {
          method: 'post',
          contentType: 'application/json',
          payload: JSON.stringify(payload),
        };
        UrlFetchApp.fetch('사용자 워크플로우 webhook의 production url 복붙하기', options);
      }
    }
  • 위와 같이 구성하면 사용자가 'blogYes'를 'Yes'로 바꾸는 순간 해당 row의 데이터가 n8n Webhook으로 전송되어 자동화가 즉시 시작됩니다.

  • Webhook

    • Google Apps Script로부터 POST 요청을 받아 해당 영상 row 정보를 수신합니다.

    • 수신된 데이터에는 row number, videoId, title 등이 포함됩니다.

      웹 북 설정을 보여주는 화면
  • Update row in sheet1

    • row number 기준으로 정확히 대상 행을 찾아 업데이트합니다.

    • '블로그본문' 컬럼에 작성된 글을 추가하고, 'blogDone' 값을 'Yes'로 변경해 완료 표시합니다.

      게임 설정의 스크린 샷

결과와 배운 점

  • 이 구조를 구현하면서 가장 핵심이었던 부분은 Google Sheet 변경을 트리거로 활용하는 방법이었습니다. Apps Script의 onEdit(e) 트리거를 통해 blogYes == "Yes" && blogDone != "Yes" 조건을 만족할 때만 n8n으로 데이터를 전송하는 방식은 매우 직관적이면서도 강력했습니다.

  • 다만 Apps Script가 잘 동작하는지 Test 하는 과정에서 ChatGPT와 Claude, Gemini의 설명 및 디버깅 내용이 모두 달라서 한참의 시행착오를 겪어야 했습니다.

  • 또 한 가지 어려웠던 점은 Webhook으로 전달된 JSON에서 어떤 key를 기준으로 n8n에서 처리해야 하는지를 명확히 매핑하는 부분이었습니다. rowNumber, videoId 등 필요한 필드를 누락하지 않도록 설계하고, 이후 노드에서 이 값을 그대로 활용할 수 있도록 흐름을 잘 연결해야 했습니다.

  • 기존 Schedule 방식과 비교할 때, 이 흐름은 거의 실시간 반응이 가능하며, 작성자의 클릭 한 번으로 전체 블로그 생성 자동화가 이루어지는 점이 가장 큰 장점이며,

    • n8n 서버에 부하를 주지 않고자 하는 제 의도가 실현되어서 좋았습니다.

[아래는 "n8n 롱폼 블로그 작성 자동화 #1,2,3" 모음]

게임 생성 프로세스를 보여주는 유량 차트
3
1개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요