18. n8n으로 문의 내용을 구글시트에 자동 기록하는 방법

랜딩페이지 신청자 연락처를 손으로 옮기다가 숫자 하나를 잘못 적은 적이 있었어요. 전화를 걸어도 연결이 안 돼서 확인해보니 입력 실수였어요. 그날부터 구글시트 자동 기록을 만들었어요.

이번 글에서 다루는 자동화는 "외부 문의가 들어오면 n8n이 데이터를 받아 구글시트에 새 행으로 자동 기록하는" 구조예요. 이전 화에서 다룬 Webhook·Set 노드·Google Sheets 노드를 모두 활용하는 흐름이에요.

이번 글에서 특히 집중하는 부분은 두 가지예요. Webhook Output에서 실제 필드명을 확인하는 것, 그리고 단순 기록표가 아니라 status(처리 상태)를 포함한 문의 관리표로 만드는 것이에요.

이번 자동화 전체 구조

Webhook 노드 → Set 노드 → Google Sheets 노드

각 화에서 이미 다룬 내용이에요. Webhook은 13화, Set 노드는 10화, Google Sheets Append Row는 14화에서 살펴봤어요. 이번 글에서는 그 세 가지를 문의 관리 목적으로 연결하는 흐름과 설계 포인트에 집중할게요.

구글시트 문의 관리표 설계하기

구글시트 열 이름 없이 바로 연결했더니 Google Sheets 노드에서 열 목록이 안 불려왔어요. 첫 행에 열 이름을 만들고 나서야 정상적으로 됐어요.

자동화 전에 구글시트 첫 행에 열 이름을 먼저 만들어요.

[구글시트 첫 행 열 이름]

received_at | customer_name | customer_phone | customer_email | inquiry_type | inquiry_message | lead_source | status

이 8개 열이면 기본적인 문의 관리가 가능해요. 업무에 따라 열을 추가하거나 제거해도 돼요.

status 열을 꼭 넣어야 하는 이유

status 열을 넣고 나서 구글시트가 단순 기록표가 아니라 문의 관리표가 됐어요. "대기" 상태인 것만 필터로 보면 처리 안 된 문의를 빠뜨리는 일이 줄었어요.

Set 노드에서 status = "대기"로 새 값을 추가하면, 처음 접수된 문의는 모두 대기 상태로 저장돼요. 이후 사람이 확인하면서 처리중·완료·보류로 수동 변경할 수 있어요.

received_at customer_name customer_phone inquiry_type status
2026-05-21 09:02 홍길동 010-1234-5678 자동화 상담 대기
2026-05-21 11:30 김영희 010-9876-5432 견적 문의 완료

가장 중요한 단계 — Webhook Output에서 필드명 확인

name이라고 생각했는데 Webhook Output을 열어보니 full_name으로 들어왔어요. Set 노드에서 name으로 참조했으니 당연히 값이 비어 있었어요. Output 먼저 확인하는 게 핵심이에요.

외부 폼이나 랜딩페이지마다 필드 이름이 달라요. 반드시 Webhook Output 탭에서 실제 이름을 확인하고 나서 Set 노드를 설정해야 해요.

[Webhook Output 예시 — 실제 필드명 확인]

name → "홍길동"
phone → "010-0000-0000"
email → "test@example.com"
message → "자동화 상담을 받고 싶습니다."
source → "landing_page"
product → "n8n 자동화 상담"

Set 노드 — Webhook 필드를 구글시트 열 이름으로 정리

Webhook Output 필드 이름을 확인했으면 Set 노드에서 구글시트 열 이름과 맞게 정리해요.

[Set 노드 설정]

customer_name   ← Webhook의 name
customer_phone  ← Webhook의 phone
customer_email  ← Webhook의 email
inquiry_type    ← Webhook의 product
inquiry_message  ← Webhook의 message
lead_source     ← Webhook의 source
status          ← 직접 입력: "대기"
received_at(접수 시간)은 Set 노드에서 n8n의 현재 시간 표현식을 사용해 자동으로 넣을 수 있어요. 외부 폼이 접수 시간을 따로 보내지 않는 경우 유용해요.

Google Sheets 노드 — Append Row로 새 행 추가

Set 노드 뒤에 Google Sheets 노드를 연결하고 Operation을 Append Row로 설정해요. 그런 다음 구글시트 열 이름과 Set 노드 필드를 매칭해요.

실제 기록표에 바로 연결했다가 테스트 데이터가 10줄이나 쌓인 적이 있었어요. 테스트용 시트를 따로 만들어서 검증하고 나서야 실제 기록표에 연결하는 게 안전해요.

처음 연결할 때는 반드시 테스트용 구글시트를 따로 만들어서 사용하세요. 실제 문의 기록표에 테스트 데이터가 섞이면 정리하기 번거로워요.

처음 만들 때 순서

1
구글시트 먼저 준비 첫 행에 8개 열 이름 만들기. n8n을 열기 전에 이 작업을 먼저 해야 Google Sheets 노드에서 열 목록이 불려와요.
2
Webhook 노드 추가 → Test URL로 샘플 데이터 보내기 외부 폼이나 curl 등으로 Test URL에 샘플 데이터를 보내요. 편집 화면이 열려 있어야 받아요.
3
Webhook Output에서 실제 필드명 확인 이 단계가 핵심이에요. name인지 full_name인지, phone인지 mobile인지 Output 탭에서 확인해야 해요.
4
Set 노드 추가 → 필드 매핑 확인한 필드명으로 Set 노드를 설정해요. status = "대기"도 이 단계에서 추가해요.
5
Google Sheets 노드 추가 → Append Row 설정 테스트용 시트를 선택하고 열 매칭 설정해요. 실행 후 시트에 행이 추가되는지 확인해요.
6
저장 후 Active 켜기 → Production URL 등록 테스트가 정상이면 저장하고 Active를 켜요. 랜딩페이지에는 Production URL을 등록해요.

구글시트 저장 후 담당자 알림까지 연결하면

문의가 저장되는 것과 동시에 담당자에게 텔레그램으로 알림이 가도록 노드를 하나 더 붙일 수 있어요.

Webhook → Set → Google Sheets → Telegram (새 문의 알림)

구글시트 저장이 안정적으로 작동하는 걸 확인한 뒤 Telegram 노드를 추가하는 순서가 좋아요. 처음부터 모두 연결하면 어디서 문제가 생겼는지 찾기 어려워요.

문의가 이메일로 온다면? Gmail Trigger로 확장하기

랜딩페이지가 아니라 이메일로 문의가 들어온다면 Webhook 대신 Gmail Trigger를 첫 노드로 쓰면 돼요. 나머지 구조는 동일해요.

Gmail Trigger → Set 노드 → IF 노드(문의 여부 확인) → Google Sheets 노드

Gmail Trigger·Set 노드·IF 노드 설정 방법은 15화에서 자세히 다뤘어요. 이번 글에서는 구글시트 기록 부분에 집중할게요.

초보자가 자주 막히는 4가지

1. Webhook Output 확인 없이 Set 노드를 설정한다

외부 폼의 필드명은 서비스마다 달라요. name, phone이라고 가정하지 말고 Output 탭에서 실제 이름을 먼저 확인해야 해요.

2. 구글시트 열 이름을 나중에 만든다

Google Sheets 노드는 시트 첫 행을 열 이름으로 인식해요. 자동화 설정 전에 먼저 만들어야 열 목록이 제대로 불려와요.

3. 실제 기록표에 바로 테스트 데이터를 넣는다

테스트 중 같은 데이터가 여러 줄 쌓이면 정리가 번거로워요. 테스트용 시트를 따로 만들어서 검증한 뒤 실제 시트로 전환해요.

4. Test URL을 랜딩페이지에 등록한다

Test URL은 편집 화면이 열려 있을 때만 작동해요. 실제 신청 폼에는 Production URL을 등록해야 해요. 워크플로우가 Active 상태인지도 확인해야 해요.

제대로 안 될 때 확인 순서

  • Webhook Output 탭에서 데이터가 실제로 들어왔는지 확인하기
  • Set 노드 Output의 필드 이름이 Webhook Output과 일치하는지 확인하기
  • Google Sheets 노드 Credentials에 연결된 계정이 해당 시트에 편집 권한이 있는지 확인하기
  • Operation이 Append Row로 설정되어 있는지 확인하기
  • 랜딩페이지에 등록한 URL이 Production URL인지 확인하기
  • 워크플로우가 Active 상태인지 확인하기

문의 데이터 보안 — 꼭 지켜야 할 원칙

이름·전화번호·이메일·상담 내용은 모두 개인정보예요. 구글시트 공유 권한 설정과 Webhook URL 노출 방지에 특히 주의해야 해요.
  • 처음 테스트는 샘플 데이터로만 진행하기
  • Webhook URL을 블로그·캡처 이미지에 노출하지 않기
  • 구글시트 공유는 꼭 필요한 사람에게만 부여하기
  • 전화번호·이메일이 있는 시트는 전체 공개 공유하지 않기
  • 필요 없는 항목은 저장하지 않기 (최소 수집 원칙)

마무리: 열 이름 먼저, Output 확인 다음, 테스트 시트 따로

이번 자동화에서 기억해야 할 세 가지예요.

  • 구글시트 열 이름을 먼저 만들어두기 (자동화 설정 전에)
  • Webhook Output에서 실제 필드명을 확인한 뒤 Set 노드 설정하기
  • 실제 기록표와 연결하기 전에 테스트용 시트에서 검증하기

이 자동화를 익히면 상담 신청, 견적 문의, 교육 신청, 이메일 문의 관리까지 다양한 업무로 확장할 수 있어요. status 열을 활용해 처리 상태까지 관리하면 단순 기록을 넘어 문의 관리 시스템으로 발전시킬 수 있어요.

다음 글에서는 n8n 자동화가 실패했을 때 확인해야 할 5가지를 살펴볼게요. Execution 기록을 어떻게 읽는지, 어느 노드에서 오류가 났는지 찾는 방법을 정리해볼게요.


※ 이 글은 n8n 비개발자 자동화 시리즈 18화입니다. n8n의 기능과 화면은 버전에 따라 달라질 수 있으며, 실제 사용 전에 공식 문서를 함께 확인해주세요.

참고자료

  • n8n Docs, Webhook node
  • n8n Docs, Webhook node workflow development
  • n8n Docs, Webhook node common issues
  • n8n Docs, Edit Fields (Set) node
  • n8n Docs, Approaches for transforming data
  • n8n Docs, Google Sheets node
  • n8n Docs, Google Sheets Sheet Within Document operations
  • n8n Docs, Google Sheets node common issues
  • Google Developers, Google Sheets API spreadsheets.values.append
  • n8n Docs, Executions
  • n8n Docs, Execution data redaction
  • n8n Docs, Securing n8n
  • 찾기쉬운 생활법령정보, 개인정보의 수집·이용
  • Google Docs Help, 파일 공유 중지·제한·변경