소개
지난 #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 - 키워드 검색으로 유튜브 인기 영상 요약]
진행 방법
🔁 핵심 흐름 요약
Google Sheet 편집 → Apps Script → n8n Webhook 호출
n8n은 해당 영상 row 데이터 수신
자막 수집 및 블로그 본문 생성
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" 모음]