PostgreSQL을 띄우기엔 팀이 준비 안 됐고, 그렇다고 데이터를 종이에 적어 둘 순 없을 때. Google Sheets는 놀랍도록 잘 버티는 '가벼운 DB'가 됩니다. 5,000행 이하, 초당 쓰기 3건 이하라는 조건만 지키면요.
이 튜토리얼은 문의 접수 폼을 예시로, n8n의 Google Sheets 노드 세 가지 동작만으로 Append / Lookup / Update가 모두 되는 미니 CRM을 만듭니다. 30분이면 끝납니다.
1. 시트 설계 — 헤더 한 줄이 스키마다
시트를 DB처럼 쓰려면 첫 행이 '컬럼 정의'라는 마음가짐이 필요합니다. 사람이 읽기 편한 한글 헤더 대신 영문 snake_case를 쓰세요. n8n 표현식에서 {{$json.customer_email}}로 바로 쓸 수 있습니다.
// 시트 A1:H1 헤더
id | created_at | customer_name | customer_email | subject | body | status | assigned_to
// 예시 데이터 A2
INQ-20260710-001 | 2026-07-10T10:23:00Z | 김민수 | kim@ex.co | 견적 문의 | ... | new | (empty)id 컬럼은 반드시 고유해야 합니다. 자동증가는 없지만 INQ-{{$now.toFormat('yyyyMMdd')}}-{{$itemIndex}} 같은 표현식으로 충분히 유일한 키를 만들 수 있습니다.2. Append — 새 문의를 받아 적재
웹사이트 문의 폼에서 온 데이터를 시트 맨 아래에 한 줄 추가하는 흐름입니다. n8n Webhook → Google Sheets (Append) 두 노드로 끝납니다.
- n8n에서
Webhook노드 추가, POST 메서드, path는/inquiry Set노드로id,created_at,status: 'new'필드 생성Google Sheets노드 → Operation:Append, Range:Inquiries!A:H- Column Mapping을 시트 헤더와 1:1 매칭
- 마지막에
Gmail또는Send Email노드로 접수 확인 메일 발송
3. Lookup — 상태 조회 API 만들기
고객이 '내 문의 어떻게 됐어요?' 물어볼 때 답할 수 있어야 합니다. Google Sheets 노드의 Lookup 오퍼레이션이 정확히 이걸 위해 있습니다.
// Google Sheets 노드 설정 (Lookup)
Operation: Lookup Row(s)
Range: Inquiries!A:H
Lookup Column: id
Lookup Value: {{ $json.query.id }}
Return All Matches: false이 노드 앞에 Webhook (GET /inquiry/status)을 붙이면, 5분 만에 조회 API가 됩니다. 응답은 Respond to Webhook 노드로 JSON 그대로 던지세요.
4. Update — 담당자 배정과 상태 변경
가장 헷갈리는 부분이 여기입니다. Google Sheets에는 '주키(primary key)' 개념이 없어서, n8n은 '매칭 컬럼(Matching Column)' 값을 기준으로 행을 찾아 갱신합니다. 우리가 id 컬럼을 유일하게 만들어 둔 이유가 이겁니다.
// Update 설정
Operation: Update Row
Range: Inquiries!A:H
Matching Column: id
Values to Send:
status: 'assigned'
assigned_to: 'hans@synact.ai'
// id는 넣지 않음 — 매칭에만 사용If 노드로 {{$json.updatedRows}} > 0을 검사해 실패 시 슬랙 알림을 보내는 게 안전합니다.5. 동시성 — 시트가 무너지는 지점
Google Sheets API는 프로젝트당 분당 300 요청 제한이 있습니다. 웹훅 트래픽이 폭주하면 429 에러가 쏟아지고, 최악의 경우 Append가 같은 행에 겹쳐 쓰기까지 합니다. 다음 세 가지를 지키면 대부분 커버됩니다.
Google Sheets노드에Retry On Fail3회, 간격 2초 설정- 고빈도 워크플로우엔
Queue Mode로 n8n 자체를 큐잉 - 쓰기 스파이크가 잦다면
Redis큐를 앞단에 두고 초당 5건 이하로 흘리기
언제 진짜 DB로 옮길까
다음 신호 중 두 개 이상이 보이면 이사할 때입니다. PostgreSQL 노드로 바꾸는 건 30분 작업이고, 워크플로우 구조는 거의 그대로 둡니다.
시트로 시작해서, 아플 때 옮기세요. '처음부터 제대로'를 고민하느라 시작을 3개월 미루는 게 가장 큰 손해입니다.— SynAct.ai 컨설팅팀
정리
Google Sheets를 DB로 쓰는 건 '임시방편'이 아니라 정당한 아키텍처 선택입니다. 팀이 시트를 편하게 편집할 수 있다는 점, 백업이 자동이라는 점, 무료라는 점 — 이 세 가지 이점을 저평가하지 마세요. 대신 위의 한계선은 정확히 알고 쓰세요. 넘어가는 순간 옮기면 됩니다.