EPIX 업무자동화
업무자동화

구글 스프레드시트 자동화 오류 점검

Apps Script 트리거가 실행 안 될 때 확인할 것: 구글 스프레드시트 자동화 체크리스트

구글 스프레드시트 자동화는 처음 만들 때보다 “어느 날 갑자기 안 돌 때”가 더 어렵습니다. 버튼으로 실행하면 되는데 시간 트리거는 안 돌거나, 구글폼 응답은 들어왔는데 알림이 안 가거나, 어제까지 되던 백업이 조용히 멈추는 식입니다. 이 글은 Apps Script 트리거가 실행되지 않을 때 확인할 순서를 정리한 체크리스트입니다.

핵심부터: Apps Script 트리거 문제는 대개 코드 자체보다 트리거 등록, 권한 승인, 함수명 변경, 시간대, 중복 실행, 실행 제한, 외부 API 실패에서 생깁니다. 그래서 코드를 고치기 전에 실행 기록과 트리거 설정을 먼저 봐야 합니다.

1. 트리거가 실제로 등록되어 있는지 확인한다

가장 먼저 볼 것은 Apps Script 에디터의 왼쪽 시계 아이콘, 즉 트리거 메뉴입니다. 코드에 함수가 있어도 설치형 트리거가 등록되어 있지 않으면 정해진 시간에 자동 실행되지 않습니다.

  • 시간 기반 트리거라면 이벤트 소스가 시간 기반인지 확인합니다.
  • 구글폼 응답 기반이라면 이벤트 유형이 양식 제출 시 또는 스프레드시트의 변경 시 중 무엇인지 확인합니다.
  • 함수명이 바뀌었는데 트리거는 옛 함수명을 바라보고 있지 않은지 봅니다.
  • 같은 함수가 여러 개 등록되어 중복 실행되고 있지 않은지도 확인합니다.

2. 단순 트리거와 설치형 트리거를 구분한다

onEdit(e), onOpen(e)처럼 이름만 맞으면 동작하는 단순 트리거가 있습니다. 하지만 외부 API 호출, 메일 발송, 다른 파일 접근, 권한이 필요한 작업은 단순 트리거만으로 막힐 수 있습니다. 이때는 설치형 트리거를 써야 합니다.

상황 가능성이 큰 원인 확인할 것
셀 색상 변경은 되는데 메일 발송은 안 됨 권한이 필요한 작업을 단순 트리거에서 실행 설치형 편집 트리거로 바꾸기
버튼 실행은 되는데 자동 실행은 안 됨 트리거 미등록 또는 함수명 불일치 트리거 메뉴에서 대상 함수 확인
처음에는 됐는데 계정 변경 후 멈춤 승인 계정 또는 파일 권한 문제 트리거 소유자와 파일 접근 권한 확인

3. 권한 승인이 풀렸거나 막혀 있지 않은지 본다

Apps Script 자동화는 처음 실행할 때 권한 승인을 요구합니다. 파일 읽기, 메일 발송, 외부 URL 호출 같은 기능을 추가하면 승인 범위가 바뀔 수 있습니다. 회사나 학교 계정에서는 관리자가 특정 권한을 제한해 실행이 막히기도 합니다.

이때는 스크립트 편집기에서 함수를 직접 한 번 실행해보는 것이 빠릅니다. 수동 실행에서 권한 승인 화면이 뜨거나 오류가 보이면, 트리거 문제처럼 보였던 것이 사실은 권한 문제일 수 있습니다.

4. 시간대와 실행 시간을 확인한다

시간 기반 트리거는 사용자가 생각한 정확한 분초에 실행되지 않을 수 있습니다. 또한 프로젝트 시간대가 한국이 아니면 새벽이나 오전 실행 시간이 엉뚱하게 보일 수 있습니다.

시간 트리거 체크:

  • 프로젝트 설정의 시간대가 Asia/Seoul인지 확인합니다.
  • 일일 타이머는 선택한 시간 범위 안에서 실행될 수 있다는 점을 감안합니다.
  • 날짜 비교 코드는 Utilities.formatDate로 시간대를 명시합니다.
  • 매일 한 번만 실행해야 한다면 마지막 실행일을 Script Properties에 저장합니다.

5. 실행 로그에서 실패 지점을 본다

자동화가 안 돌 때 가장 위험한 판단은 “아무 일도 안 일어났다”고 생각하는 것입니다. 실제로는 실행됐지만 중간에 실패했을 수 있습니다. Apps Script의 실행 기록에서 실패 시간, 오류 메시지, 대상 함수명을 확인해야 합니다.

로그를 남기는 습관도 중요합니다. console.log()Logger.log()로 처리한 행 수, 대상 시트 이름, 외부 API 응답 상태를 남기면 다음 장애 때 훨씬 빠르게 원인을 찾을 수 있습니다.

6. 외부 API와 알림 발송은 따로 의심한다

구글폼 응답은 들어왔고 시트 처리도 됐는데 슬랙, 카카오 알림톡, 메일만 안 가는 경우가 있습니다. 이때는 트리거보다 외부 API 실패를 의심해야 합니다. 토큰 만료, 템플릿 불일치, Webhook URL 변경, 발송 한도, 응답 코드 오류가 흔한 원인입니다.

  • 외부 API 호출 결과의 상태 코드와 응답 본문을 로그로 남깁니다.
  • 알림 템플릿 문구가 승인된 템플릿과 정확히 일치하는지 봅니다.
  • Webhook URL이나 API 키가 바뀌지 않았는지 확인합니다.
  • 한 번 실패한 행을 다시 발송할 수 있도록 상태 열을 둡니다.

7. 자동화를 오래 쓰려면 상태 열을 둔다

스프레드시트 자동화는 “한 번 실행”보다 “중복 없이 오래 실행”이 어렵습니다. 특히 구글폼 응답, 주문 데이터, 상담 신청처럼 행이 계속 늘어나는 구조라면 처리 상태를 기록하는 열이 필요합니다.

추천 구조는 단순합니다. 원본 응답 열은 그대로 두고, 오른쪽에 처리상태, 처리일시, 오류메시지, 재시도필요 열을 둡니다. 트리거는 처리상태가 빈 행만 실행하고, 성공하면 완료로 표시합니다.

문제가 생겼을 때의 빠른 순서

  1. 트리거 메뉴에서 대상 함수와 이벤트 유형을 확인한다.
  2. 해당 함수를 수동 실행해서 권한 오류가 뜨는지 본다.
  3. 실행 기록에서 실패 시간과 오류 메시지를 확인한다.
  4. 프로젝트 시간대와 날짜 비교 코드를 확인한다.
  5. 외부 API 호출이 있다면 응답 코드와 토큰을 확인한다.
  6. 중복 실행이나 누락을 막기 위해 상태 열을 추가한다.

관련해서 이어 읽기: 자동화 기본 구조는 Apps Script 시간 트리거와 편집 트리거 활용법에서, 입력 창구는 구글폼과 스프레드시트 연동에서, 알림 발송은 스프레드시트에서 슬랙으로 메시지 보내기구글폼 카카오 알림톡 연동으로 이어서 볼 수 있습니다.

FAQ

Apps Script 트리거가 갑자기 안 돌면 제일 먼저 뭘 봐야 하나요?

트리거 메뉴와 실행 기록을 먼저 봐야 합니다. 대상 함수가 등록되어 있는지, 최근 실행에서 오류가 났는지 확인하면 권한 문제인지 코드 문제인지 방향이 잡힙니다.

버튼으로 실행하면 되는데 시간 트리거만 안 됩니다.

트리거 등록이 빠졌거나, 트리거가 옛 함수명을 보고 있거나, 권한 승인 계정이 파일에 접근하지 못할 수 있습니다. 시간대 설정도 함께 확인하는 것이 좋습니다.

onEdit 함수 안에서 메일이나 외부 API를 호출해도 되나요?

권한이 필요한 작업은 단순 트리거에서 제한될 수 있습니다. 메일 발송, 외부 URL 호출, 다른 파일 접근이 필요하면 설치형 트리거를 쓰는 편이 안전합니다.

자동화가 두 번씩 실행됩니다.

같은 함수가 여러 트리거에 중복 등록되어 있거나, 처리 상태를 기록하지 않아 같은 행을 반복 처리하는 경우가 많습니다. 트리거 목록을 정리하고 상태 열을 추가하는 것이 좋습니다.