14. n8n으로 구글시트에 데이터 자동 저장하는 방법

매일 문의 이메일을 손으로 구글시트에 옮기다가 전화번호를 한 자리 잘못 복사한 적이 있었어요. 고객이 연락이 없다고 다시 문의를 해왔고, 그때부터 구글시트 자동 저장을 만들어야겠다고 생각했어요.

Google Sheets 노드를 처음 설정할 때는 연결보다 "열 매칭"에서 가장 많이 막혀요. 구글시트 열 이름과 n8n 필드 이름을 어떻게 맞추는지를 모르면 값이 비거나 엉뚱한 열에 들어가거든요.

이번 글에서는 구글시트 자동 저장의 전체 흐름과 함께, 열 매칭에서 자주 막히는 부분을 중심으로 정리해볼게요.



구글시트 자동 저장이 어울리는 업무

"어딘가에서 데이터가 들어오면 표 형태로 계속 쌓아야 하는 업무"에 잘 맞아요. 구체적으로는 이런 것들이에요.

  • 랜딩페이지 상담 신청 → 이름·연락처·문의 내용 자동 기록
  • 이메일 문의 → 보낸 사람·제목·본문 시트 저장
  • 블로그 글감 수집 → RSS 제목·링크·수집일 누적
  • 업무 체크리스트 → 매일 항목 기록
  • 광고 성과 → 날짜별 클릭수·전환수 누적

구글시트는 자동화 결과를 눈으로 확인하기 좋아요. 워크플로우가 실행된 뒤 실제로 행이 추가되는 걸 보면 자동화 구조가 훨씬 실감나게 이해돼요.

이번 실습 구조

처음에는 Webhook이나 Gmail 없이, Set 노드 샘플 데이터로만 연습하는 게 안전해요.

Manual Trigger → Set 노드 → Google Sheets 노드

이 구조를 익히면 나중에 Manual Trigger 자리에 Webhook이나 Gmail Trigger를 넣기만 해도 실무 자동화로 확장돼요.

시작 전: 구글시트 열 이름을 먼저 만들어야 한다

처음엔 구글시트에 열 이름 없이 바로 n8n을 연결했는데, Google Sheets 노드 설정에서 열 목록이 제대로 불려오지 않아서 한참 헤맸어요. 첫 행에 열 이름을 만들고 나서야 깔끔하게 됐어요.

n8n Google Sheets 노드는 시트의 첫 행을 열 이름으로 인식해요. 그래서 데이터를 저장하기 전에 구글시트 첫 행에 열 이름을 미리 만들어둬야 해요.

[구글시트 첫 행 예시]

created_at      | customer_name | customer_email | inquiry_title | inquiry_message | status
열 이름은 한글로 만들어도 되지만, n8n 필드 이름과 맞추기 쉽도록 영문 소문자 + 밑줄 조합을 쓰는 게 좋아요. "고객 이메일" 대신 customer_email처럼요. 나중에 자동화 구조를 읽기도 훨씬 편해요.

Google Sheets 노드 설정, 실제로 어떻게 하나?

1
Credentials 연결 Google Sheets 노드를 클릭하면 Credentials 선택창이 나와요. 구글 계정을 연결해요. Google Sheets 노드를 연결했는데 시트 파일이 목록에 안 보인 적이 있었는데, 연결한 계정이 그 파일에 접근 권한이 없었던 거였어요.
2
문서 선택 저장할 구글시트 파일을 선택해요. 목록에 안 보이면 파일 URL이나 ID를 직접 입력할 수 있어요.
3
시트 탭 선택 파일 안의 시트 탭을 선택해요. 탭이 여러 개라면 저장할 탭을 정확히 골라야 해요.
4
Operation을 Append Row로 설정 실행할 때마다 새 행이 추가되는 방식이에요. 처음 실습엔 이게 가장 이해하기 쉬워요.
5
열 매칭 설정 구글시트의 각 열에 어떤 값을 넣을지 연결해요. 이 부분이 핵심이에요.

열 매칭 — 이 부분이 가장 중요하다

Google Sheets 노드에서 가장 많이 막히는 부분이에요. 구글시트의 각 열에 n8n에서 넘어온 어떤 값을 넣을지 지정해야 해요.

n8n 필드 이름을 customer_email로 만들었는데 구글시트 열 이름을 email로 설정해서 값이 저장이 안 된 적이 있었어요. 이름을 정확히 맞춰주고 나서야 해결됐어요.

[열 매칭 예시]

구글시트 열: created_at      ← Set 노드 필드: created_at
구글시트 열: customer_name  ← Set 노드 필드: customer_name
구글시트 열: customer_email  ← Set 노드 필드: customer_email
구글시트 열: inquiry_title   ← Set 노드 필드: inquiry_title
구글시트 열: inquiry_message ← Set 노드 필드: inquiry_message
구글시트 열: status          ← Set 노드 필드: status
구글시트 열 이름을 나중에 바꾸면 n8n 설정도 갱신해야 해요. 이름을 변경한 뒤 설정을 그대로 두면 "열을 찾을 수 없다"는 오류가 발생할 수 있어요.

Append Row vs Append or Update Row — 무엇을 쓸까?

APPEND ROW
무조건 새 행 추가
실행할 때마다 새 줄이 추가돼요. 상담 신청, 문의 접수, 로그 기록처럼 계속 쌓는 데 써요. 처음 실습엔 이걸 먼저.
APPEND OR UPDATE ROW
있으면 업데이트, 없으면 추가
이메일이나 주문번호처럼 기준값으로 중복을 확인해요. 처리 상태 갱신 등에 써요. 설정이 조금 더 복잡해요.

처음엔 Append Row가 훨씬 이해하기 쉬워요. 그런데 Append Row로 테스트를 10번 눌렀더니 구글시트에 똑같은 행이 10줄 생겼어요. 실습 중 실행 횟수에 주의해야 하고, 실습용 시트를 따로 만들어서 쓰는 게 좋아요.

실행 후 확인해야 할 것들

워크플로우를 실행하고 구글시트를 열어보면 새 행이 추가되어 있을 거예요. 이때 확인해야 할 것들이에요.

  • 새 행이 실제로 추가됐는가
  • 각 열에 값이 올바르게 들어갔는가 (비어 있는 열 없는지)
  • created_at이 의도한 형식으로 저장됐는가
  • 엉뚱한 열에 값이 들어가지 않았는가
  • 테스트 데이터가 실수로 중복 추가되지 않았는가

이 구조, 어떻게 실무로 확장하나?

Manual Trigger + Set 노드 + Google Sheets 구조를 익히면, Manual Trigger 자리만 바꾸면 실무 자동화로 이어져요.

트리거 교체자동화 내용
Webhook → Set → Sheets랜딩페이지 상담 신청 자동 저장
Gmail Trigger → Set → Sheets이메일 문의 자동 정리
Schedule + RSS → IF → Set → Sheets매일 블로그 글감 수집
Schedule → Set → Sheets업무 체크리스트 매일 기록

처음엔 샘플 데이터로 구조를 만들고, 트리거만 교체하면 돼요. 데이터 출처가 달라져도 Set 노드에서 정리하고 Google Sheets로 저장하는 흐름은 같아요.

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

1. 구글시트 열 이름을 먼저 안 만든다

열 이름이 없으면 Google Sheets 노드 설정에서 열 목록이 제대로 안 불려와요. n8n을 열기 전에 구글시트 첫 행에 열 이름을 반드시 만들어두세요.

2. Credentials 연결 계정이 해당 파일에 접근 권한이 없다

파일이 목록에 안 보이는 경우, 연결한 구글 계정에 그 파일의 접근 권한이 없는 거예요. 공유 문서라면 해당 계정에 편집 권한이 있는지 확인해야 해요.

3. 열 이름과 필드 이름이 달라서 값이 안 들어간다

구글시트 열은 customer_email인데 Set 노드 필드를 email로 만들면 매칭이 안 돼요. 열 이름과 필드 이름을 동일하게 맞춰두는 게 제일 안전해요.

4. 열 이름을 바꾸고 n8n 설정을 갱신 안 한다

구글시트에서 열 이름을 바꾸면 n8n의 Google Sheets 노드 설정도 갱신해야 해요. 그렇지 않으면 열을 찾지 못한다는 오류가 발생해요.

오류가 생겼을 때 확인 순서

  • 구글시트 첫 행에 열 이름이 있는지 확인하기
  • Credentials에 연결된 계정이 해당 파일에 편집 권한이 있는지 확인하기
  • Set 노드 Output 탭에 값이 제대로 있는지 먼저 확인하기
  • Google Sheets 노드의 열 매칭이 구글시트 열 이름과 일치하는지 확인하기
  • Operation이 Append Row로 설정되어 있는지 확인하기

구글시트에 개인정보 저장할 때 주의할 것들

구글시트 자동 저장은 이름·연락처·이메일·문의 내용 같은 개인정보와 연결될 가능성이 높아요. 처음 실습할 때는 반드시 샘플 데이터와 테스트용 시트를 따로 만들어서 써야 해요.
  • 실습 중엔 실제 고객 정보 대신 샘플 데이터 사용하기
  • 구글시트 공유 권한은 꼭 필요한 사람에게만 부여하기
  • 전화번호·이메일이 있는 시트를 공개 공유하지 않기
  • API 키·토큰은 구글시트 셀에 저장하지 않기
  • Execution 기록에 개인정보가 남을 수 있다는 점 인식하기

마무리: 열 매칭만 잘 되면 구글시트 자동 저장은 어렵지 않다

Google Sheets 노드 설정에서 기억해야 할 것 세 가지예요.

  • 구글시트 첫 행에 열 이름을 미리 만들어두기
  • Credentials로 연결된 계정이 해당 파일에 편집 권한이 있는지 확인하기
  • 열 이름과 n8n 필드 이름을 동일하게 맞추면 매칭이 단순해진다

이 구조를 익히면 Manual Trigger 자리에 Webhook이나 Gmail Trigger를 넣기만 해도 상담 신청 자동 저장, 이메일 문의 정리, 블로그 글감 수집 자동화로 이어져요. 데이터 출처가 달라져도 Set 노드로 정리하고 Google Sheets에 저장하는 흐름은 그대로예요.

다음 글에서는 n8n과 Gmail을 연동해 특정 조건의 이메일을 자동 처리하는 방법을 살펴볼게요. Gmail에서 문의 메일을 가져오고 구글시트에 저장하거나, 중요한 메일만 알림으로 보내는 흐름을 만들어볼 거예요.


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

참고자료

  • n8n Docs, Manual Trigger node
  • n8n Docs, Edit Fields (Set) node
  • n8n Docs, Google Sheets node
  • n8n Docs, Google Sheets Sheet Within Document operations
  • n8n Docs, Google Sheets node common issues
  • n8n Docs, Google credentials
  • Google Developers, Google Sheets API spreadsheets.values.append
  • Google Docs Help, Stop, limit, or change sharing
  • n8n Docs, Execution data redaction
  • n8n Docs, Securing n8n
  • 국가법령정보센터, 개인정보 보호법 제3조