구글 스프레드시트 다운로드는 수동 작업에서는 아무 문제가 없다. 그런데 Zapier, Make, n8n 같은 자동화 도구와 연결하는 순간 파일이 내려오지 않거나, 빈 파일이 저장되거나, 인증 오류가 반복된다. 이 현상은 설정 실수가 아니라 구조적 원인에서 비롯된다.
왜 자동화 환경에서 다운로드가 다르게 작동하는가
브라우저에서 직접 파일을 내려받을 때는 사용자 세션과 OAuth 토큰이 자동으로 붙는다. 자동화 도구는 이 세션을 공유하지 않는다. 별도의 서비스 계정이나 OAuth 2.0 토큰을 직접 발급받아 요청에 포함해야 한다.
문제는 여기서 끝나지 않는다. 구글 스프레드시트는 .xlsx나 .csv 같은 정적 파일이 아니다. 실제로 존재하는 것은 Google Sheets 형식의 문서이고, 다운로드 가능한 파일 형식으로 변환하려면 Google Drive Export API를 별도로 호출해야 한다. 많은 자동화 워크플로우가 Drive 파일 다운로드 노드를 그대로 쓰다가 빈 파일을 받는 이유가 바로 이것이다.
핵심 구분은 다음과 같다. Drive API의 files.get 엔드포인트는 바이너리 파일을 내려받는다. Sheets 문서를 내려받으려면 files.export 엔드포인트를 써야 하고, MIME 타입을 명시해야 한다. CSV는 text/csv, Excel은 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet다.
자동화 연결이 끊기는 세 가지 구조적 지점
인증 토큰 만료와 갱신 실패
OAuth 토큰은 기본적으로 1시간 후 만료된다. 자동화 시나리오가 1시간 이상 간격으로 실행되거나, 리프레시 토큰이 올바르게 저장되지 않으면 두 번째 실행부터 인증 오류가 발생한다. 서비스 계정 방식은 토큰 만료 문제를 우회하는 대신 JSON 키 파일 관리와 권한 설정이 별도로 필요하다.
공유 설정과 API 권한의 불일치
스프레드시트를 "링크가 있는 모든 사용자"로 공유했다고 해서 API 요청이 자동으로 통과되지 않는다. API는 공유 링크 권한을 인식하지 않고, 요청 주체인 서비스 계정이나 OAuth 사용자에게 명시적으로 편집자 또는 뷰어 권한이 부여되어 있어야 한다. 이 설정을 빠뜨리면 403 Forbidden 오류가 반환된다.
시트 범위와 Export 파라미터 누락
다중 시트 문서를 CSV로 내보낼 때 gid 파라미터를 지정하지 않으면 첫 번째 시트만 내려온다. 특정 시트를 대상으로 하는 자동화라면 시트 ID를 URL에서 확인해 파라미터로 명시해야 한다. 시트 ID는 스프레드시트 URL의 #gid= 이후 숫자다.

업종별 실제 연결 패턴
자사몰 운영사의 주문 데이터 연동
카페24 또는 아임웹 기반 자사몰을 운영하는 경우, 주문 데이터를 구글 스프레드시트로 집계한 뒤 물류 시스템에 CSV로 전달하는 구조를 많이 쓴다. 이 경우 Make의 Google Sheets 모듈 대신 HTTP 모듈로 files.export 엔드포인트를 직접 호출하고, 응답 바이너리를 다음 모듈로 넘기는 방식이 안정적이다. OAuth 연결은 Make 내부 연결 대신 서비스 계정 JSON 키를 사용하면 토큰 만료 이슈를 제거할 수 있다.
부동산 중개사무소의 매물 현황 공유
매물 정보를 시트로 관리하고, 매일 오전 특정 시각에 CSV를 뽑아 사내 메신저나 메일로 발송하는 자동화를 구성한다고 가정하면, 트리거 시각과 토큰 발급 시각 사이의 간격이 1시간을 넘지 않도록 스케줄을 설계해야 한다. 리프레시 토큰이 제대로 동작하는지 초기 테스트 단계에서 반드시 확인한다.
학원의 수강생 명단 관리
수강 신청 폼 응답이 시트에 쌓이고, 이를 정기적으로 내려받아 출결 시스템에 업로드하는 흐름이라면 다중 시트 구조에서 gid 파라미터 누락이 자주 발생한다. 신청 폼 응답 시트와 정리 시트가 분리되어 있을 때, 자동화가 항상 첫 번째 시트를 내려받아 엉뚱한 데이터가 전달되는 사례가 반복된다. 시트 ID를 워크플로우 변수로 고정해두는 것이 이 문제를 막는 가장 단순한 방법이다.
연결 전 점검 프레임워크
자동화를 구성하기 전에 다음 네 가지를 순서대로 확인한다.
1. 인증 방식 결정: 서비스 계정 JSON 키 방식과 OAuth 2.0 방식 중 하나를 선택한다. 정기 실행 자동화라면 서비스 계정이 토큰 관리 부담을 줄인다.
2. 스프레드시트에 인증 주체가 명시적으로 공유되어 있는지 확인한다. 서비스 계정 이메일을 뷰어로 추가해야 한다.
3. 다운로드 엔드포인트가 files.export인지 확인하고, MIME 타입과 gid 파라미터를 명시한다.
4. 워크플로우를 저장한 뒤 즉시 테스트 실행해 응답 바이너리가 비어 있지 않은지 확인한다.
FAQ
Q. 구글 스프레드시트 다운로드 시 빈 파일이 저장되는 원인은 무엇인가
Drive API의 files.get 엔드포인트를 Sheets 문서에 사용했을 때 발생한다. Sheets 문서는 바이너리 파일이 아니므로 이 엔드포인트로는 콘텐츠를 가져올 수 없다. files.export 엔드포인트로 변경하고 MIME 타입을 지정해야 실제 데이터가 담긴 파일이 반환된다.
Q. 서비스 계정과 OAuth 중 어떤 인증 방식을 선택해야 하는가
정기 실행 자동화에는 서비스 계정이 적합하다. OAuth 토큰은 1시간마다 갱신이 필요하고, 리프레시 토큰 관리가 자동화 플랫폼마다 다르게 구현되어 있어 장기 운영 시 인증 오류가 발생하기 쉽다. 서비스 계정은 JSON 키 파일을 한 번 등록하면 별도 갱신 없이 작동한다. 단, 해당 서비스 계정에 스프레드시트 접근 권한을 명시적으로 부여해야 한다.
Q. 특정 시트만 선택해서 다운로드하려면 어떻게 해야 하는가
files.export 요청 URL에 gid 파라미터를 추가한다. 시트 ID는 스프레드시트를 브라우저에서 열었을 때 URL 끝의 #gid= 뒤에 오는 숫자다. 예를 들어 gid=0은 첫 번째 시트, gid=1234567890은 해당 ID를 가진 시트를 지정한다. 이 파라미터를 생략하면 항상 첫 번째 시트가 내려온다.
다음 글에서는 서비스 계정 JSON 키를 Make와 n8n에 각각 등록하는 구체적인 절차와, files.export 호출 시 자주 발생하는 오류 코드별 대응 방법을 다룬다.
지금 우리 팀의 그로스 구조를 점검할 시점인가요?
Reinventing은 마케팅 구조를 진단하고, 유입·유지·매출이 실제로 작동하는 성장 시스템을 설계합니다.
플라이휠 그로스 진단 문의하기 →