18. n8n으로 문의 내용을 구글시트에 자동 기록하는 방법
이번에는 하나의 자동화를 끝까지 완성해봅니다
앞선 글에서 Webhook, Set, Google Sheets 노드를 각각 사용해봤다면 이번에는 세 노드를 하나의 업무 흐름으로 연결해볼게요.
문의 접수 → 데이터 정리 → Google Sheets 저장 → 처리 상태 관리
최종 워크플로우는 다음과 같습니다.
Webhook
↓
Set
↓
Google Sheets
단순히 신청 정보를 한 줄 저장하는 것에서 끝내지 않고 status 필드를 추가해 실제 문의 관리표처럼 사용하는 것이 이번 실습의 목표예요.
완성 결과부터 보면 이런 모습입니다
| 접수시간 | 이름 | 문의유형 | 상태 |
|---|---|---|---|
| 09:02 | 테스트 고객1 | 자동화 상담 | 대기 |
| 11:30 | 테스트 고객2 | 견적 문의 | 완료 |
새 문의가 들어오면 처음에는 자동으로 대기 상태로 저장하고, 이후 사람이 처리하면서 처리중·완료·보류 등으로 변경하는 구조예요.
이 status 열 하나만 있어도 구글시트가 단순 저장 목록에서 간단한 문의 관리표로 바뀝니다.
1단계 — Google Sheets부터 설계합니다
n8n을 먼저 만드는 것보다 저장할 데이터 구조부터 정하는 게 좋습니다.
첫 행에는 아래처럼 열 이름을 만들어둡니다.
received_at
customer_name
customer_phone
customer_email
inquiry_type
inquiry_message
lead_source
status
Google Sheets 노드는 첫 행의 값을 열 이름으로 사용하므로 자동화를 연결하기 전에 미리 만들어두는 편이 안전해요.
2단계 — 실제 문의 대신 샘플 데이터를 보냅니다
테스트 단계에서는 고객의 실제 이름이나 전화번호를 사용하지 않는 것이 좋습니다.
name: 테스트 고객
phone: 010-0000-0000
email: test@example.com
message: 자동화 상담을 받고 싶습니다.
source: test_form
product: n8n 자동화 상담
이 데이터를 Webhook Test URL로 보내고 Output을 확인합니다.
3단계 — 여기서 바로 Set 노드를 만들지 마세요
Webhook을 사용할 때 초보자가 자주 하는 실수는 입력 필드 이름을 예상해서 바로 Set 노드를 만드는 것입니다.
예를 들어 외부 폼에서 이름을 입력했다고 해서 반드시 name이라는 필드로 들어오는 것은 아니에요.
예상
name
실제 Output
full_name
이 상황에서 {{$json.name}}을 사용하면 값이 비어 저장될 수 있습니다.
따라서 Webhook을 실행한 뒤에는 반드시 Output을 열어서 실제 필드명을 먼저 확인합니다.
확인할 항목
- 이름이 name인지 full_name인지
- 전화번호가 phone인지 mobile인지
- 문의 내용이 message인지 inquiry인지
- 신청 상품 값이 어떤 이름으로 들어오는지
4단계 — Set 노드에서 저장용 필드로 다시 정리
Webhook 필드명을 확인했다면 이제 구글시트 구조에 맞춰 이름을 정리합니다.
customer_name ← {{$json.name}}
customer_phone ← {{$json.phone}}
customer_email ← {{$json.email}}
inquiry_type ← {{$json.product}}
inquiry_message ← {{$json.message}}
lead_source ← {{$json.source}}
status ← 대기
received_at은 n8n의 현재 시간 표현식을 사용해서 자동으로 넣을 수도 있어요.
Set 노드를 실행한 뒤 Output에서 최종 필드가 정상적으로 만들어졌는지 확인합니다.
5단계 — Google Sheets Append Row 연결
Set 노드 뒤에 Google Sheets 노드를 추가하고 새 행을 추가하는 작업을 선택합니다.
그리고 Set 노드의 각 필드를 Google Sheets 열과 연결합니다.
여기서는 실제 문의 시트가 아니라 테스트용 시트를 먼저 사용하세요.
테스트 과정에서는 같은 데이터를 여러 번 전송하게 됩니다. 실제 기록표에 바로 연결하면 테스트 데이터가 섞여 나중에 정리하기 번거로워질 수 있어요.
실습 성공 여부는 세 화면으로 확인할 수 있어요
Webhook Output
외부에서 보낸 데이터가 실제로 들어왔는지 확인합니다.
Set Output
Webhook의 원본 필드가 Google Sheets용 이름으로 정상적으로 바뀌었는지 확인합니다.
Google Sheets
마지막으로 새 행이 실제로 추가됐는지 확인합니다.
이 세 화면을 순서대로 보면 어디에서 값이 사라졌는지 찾기가 쉬워집니다.
실전에서는 Test URL과 Production URL을 구분해야 합니다
Webhook Test URL로 실습이 성공했다고 해서 그대로 실제 랜딩페이지에 넣으면 안 됩니다.
테스트가 끝나면 워크플로우를 활성화하고 실제 서비스에는 Production URL을 사용합니다.
| 구분 | 사용 목적 |
|---|---|
| Test URL | 편집 중 테스트 |
| Production URL | 실제 운영 |
문의가 들어오면 담당자에게 바로 알려주고 싶다면
Google Sheets 뒤에 Telegram 노드를 하나 더 연결할 수 있습니다.
Webhook → Set → Google Sheets → Telegram
처음부터 모든 기능을 한 번에 붙이기보다는 Google Sheets 저장이 안정적으로 되는 것을 확인한 뒤 알림 기능을 추가하는 편이 문제를 찾기 쉽습니다.
문의가 이메일로 들어오는 경우도 구조는 비슷합니다
외부 폼 대신 Gmail로 문의를 받는다면 첫 번째 노드만 바꿀 수 있어요.
Gmail Trigger → Set → IF → Google Sheets
입력 방식은 달라도 결국 핵심은 원본 데이터 확인 → 필요한 필드만 정리 → 저장이라는 점은 같습니다.
문제가 생겼다면 이 네 곳부터 확인하세요
-
Webhook Output
실제 데이터가 들어왔는지 확인 -
Set Output
필드 이름과 값이 정상인지 확인 -
Google Sheets Credentials
연결 계정에 해당 시트 편집 권한이 있는지 확인 -
Webhook URL
실제 페이지에서 Production URL을 사용하는지 확인
실제 고객 데이터를 다룰 때는 테스트보다 보안이 먼저입니다
문의 데이터에는 이름, 전화번호, 이메일, 상담 내용 등이 포함될 수 있습니다.
- 테스트는 가상 데이터로 진행하기
- Webhook URL을 블로그나 캡처 이미지에 공개하지 않기
- Google Sheets 공유 대상을 최소화하기
- 전화번호와 이메일이 포함된 시트를 전체 공개하지 않기
- 업무에 필요하지 않은 정보는 저장하지 않기
이 자동화의 핵심은 저장보다 데이터 흐름입니다
이번 실습에서 기억해야 할 순서는 다음과 같습니다.
1. Google Sheets 열 구조 만들기
2. Webhook으로 샘플 데이터 받기
3. Output에서 실제 필드명 확인
4. Set 노드에서 저장용 이름으로 정리
5. 테스트용 시트에 Append Row
6. 정상 확인 후 Production URL로 전환
이 흐름을 이해하면 문의뿐 아니라 상담 신청, 이벤트 신청, 교육 접수, 견적 요청 등 여러 형태의 데이터를 같은 방식으로 처리할 수 있습니다.
다음 글에서는 자동화가 정상적으로 실행되지 않을 때 Execution 기록을 이용해 어느 노드에서 문제가 생겼는지 찾는 방법을 살펴볼게요.
※ 이 글은 n8n 비개발자 자동화 시리즈 18화입니다. n8n과 Google Sheets의 기능 및 화면은 버전에 따라 달라질 수 있으므로 실제 사용 시 공식 문서를 함께 확인해주세요.
참고자료
- n8n Docs, Webhook node
- n8n Docs, Edit Fields (Set) node
- n8n Docs, Google Sheets node
- n8n Docs, Executions
- Google Developers, Google Sheets API
- Google Docs Help, 파일 공유 설정