Google Apps Script 트리거 오류와 자동 실행 점검 순서를 설명하는 안내 이미지

Apps Script 자동 실행 오류는 권한 승인, 트리거 등록, 함수명, 실행 계정 순서로 확인하면 원인을 좁히기 쉽습니다.


Google Apps Script 트리거가 자동으로 실행되지 않는다면 코드를 바로 고치기보다 먼저 권한 승인, 트리거 등록 여부, 함수명 변경, 실행 계정, 시간 기반 트리거 주기를 차례대로 확인해야 합니다. 특히 Gmail, Google Sheets, Forms처럼 사용자 데이터에 접근하는 자동화는 권한 승인이 끝나지 않았거나 실행 계정이 달라지면 정상 코드도 멈출 수 있습니다.


오류를 해결할 때는 트리거를 삭제하거나 스크립트를 새로 만들기 전에 실행 기록을 먼저 확인합니다. Apps Script 편집기 왼쪽의 실행 기록과 트리거 메뉴에서 실패한 시간, 오류 메시지, 실행된 함수명을 보면 불필요한 재설정을 줄일 수 있습니다.


먼저 확인할 결론
자동 실행이 안 될 때는 코드보다 트리거 상태를 먼저 봐야 합니다. 실행할 함수명이 실제 코드와 같은지, 권한 승인이 완료됐는지, 시간 기반 트리거가 등록되어 있는지, 어떤 계정으로 실행되는지 확인하는 순서가 가장 안전합니다.


Apps Script 트리거 오류가 나는 대표 상황

Apps Script 트리거 오류는 대부분 “코드는 맞는 것 같은데 자동으로 실행되지 않는 상황”에서 발견됩니다. 수동 실행은 되는데 예약 실행이 안 되거나, 처음에는 되다가 함수명을 바꾼 뒤 멈추는 경우가 많습니다.


증상 가능한 원인 먼저 볼 곳
예약 실행이 안 됨 시간 기반 트리거 미등록 또는 주기 설정 문제 트리거 메뉴
Authorization required 메시지 Gmail, Sheets, Drive 접근 권한 미승인 수동 실행과 권한 승인 화면
함수를 찾을 수 없음 트리거에 연결된 함수명을 변경함 트리거의 실행 함수명
내 계정에서는 되지만 다른 계정은 안 됨 실행 계정, 파일 권한, Workspace 정책 차이 파일 공유 권한과 관리자 설정

먼저 확인할 5가지

트리거 오류는 한 번에 여러 원인이 겹칠 수 있습니다. 아래 순서대로 확인하면 가장 흔한 원인부터 빠르게 걸러낼 수 있습니다.


트리거 오류 점검 순서
1. 함수명이 바뀌었는지 확인합니다.
2. 트리거가 실제로 등록되어 있는지 확인합니다.
3. 권한 승인을 완료했는지 확인합니다.
4. 실행 계정과 파일 접근 권한이 맞는지 확인합니다.
5. 시간 기반 트리거 주기가 너무 촘촘하지 않은지 확인합니다.


함수명이 바뀌었는지 확인하기

트리거는 특정 함수명을 기준으로 실행됩니다. 예를 들어 처음에는 sendEmailReport 함수에 트리거를 연결했는데 나중에 함수명을 sendDailyEmailReport로 바꾸면 기존 트리거는 바뀐 이름을 자동으로 따라가지 못할 수 있습니다.


function sendDailyEmailReport() {
  // 매일 실행할 자동화 코드
}

이 경우 트리거 메뉴에서 기존 트리거를 수정하거나 새 함수명으로 다시 연결해야 합니다. 함수명은 대소문자까지 정확히 맞아야 하므로 코드의 함수명과 트리거의 실행 함수명을 함께 확인합니다.


트리거가 실제로 등록되어 있는지 확인하기

코드를 저장했다고 해서 자동 실행 트리거가 자동으로 생기지는 않습니다. 시간 기반 실행, 특정 시트 열기, 양식 제출 같은 자동 실행은 트리거 메뉴에서 별도로 등록해야 합니다.


Apps Script 편집기에서 왼쪽 메뉴의 트리거를 열고, 실행할 함수와 이벤트 소스, 이벤트 유형이 맞는지 확인합니다. 트리거 목록이 비어 있다면 자동 실행 설정이 아직 없는 상태입니다.


권한 승인을 완료했는지 확인하기

Gmail 메일 읽기, Google Sheets 수정, Drive 파일 접근처럼 사용자 데이터에 접근하는 스크립트는 권한 승인이 필요합니다. 처음 실행하는 함수라면 자동 실행 전에 편집기에서 한 번 수동 실행해 권한 승인 화면을 완료하는 것이 좋습니다.


function testPermission() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange("A1").setValue("권한 테스트 완료");
}

위와 같은 간단한 테스트 함수를 먼저 실행하면 Google Sheets 접근 권한이 필요한지 확인할 수 있습니다. 권한 승인이 끝난 뒤 실제 자동화 함수를 다시 실행해 보는 순서가 안전합니다.


실행 계정이 맞는지 확인하기

설치형 트리거는 보통 트리거를 만든 계정의 권한과 연결됩니다. 개인 계정으로 만든 트리거를 회사 계정 파일에서 사용하거나, 다른 사람이 소유한 스프레드시트에 접근하는 경우 권한 차이 때문에 실행이 실패할 수 있습니다.


자동화가 접근해야 하는 Google Sheets, Gmail, Drive 파일을 실행 계정이 실제로 열 수 있는지 확인합니다. 파일 소유자와 트리거 생성자가 다르면 공유 권한도 함께 봐야 합니다.


시간 기반 트리거 주기를 확인하기

시간 기반 트리거는 매분, 매시간, 매일처럼 일정 주기로 실행하도록 설정할 수 있습니다. 다만 너무 촘촘한 실행 주기는 할당량, 실행 시간, 외부 서비스 호출 제한에 걸릴 수 있으므로 처음부터 짧은 주기로 반복 실행하는 방식은 피하는 것이 좋습니다.


Authorization required 메시지 원인

Authorization required는 스크립트가 사용자의 Google 데이터에 접근하려고 하지만 아직 필요한 권한을 받지 못했을 때 자주 나타납니다. Gmail 메일 읽기, 스프레드시트 쓰기, Drive 파일 검색, Calendar 일정 생성처럼 개인 데이터와 연결되는 작업에서 특히 많이 보입니다.


해결 순서는 간단합니다. 먼저 자동 실행에 연결된 함수가 아니라 실제 권한이 필요한 함수를 편집기에서 직접 실행합니다. 이후 Google 계정 선택, 권한 요청 확인, 허용 단계를 완료한 뒤 트리거를 다시 실행합니다.


function checkGmailPermission() {
  const threads = GmailApp.search("newer_than:1d", 0, 5);
  console.log(threads.length);
}

Gmail 자동화라면 위처럼 최소한의 Gmail 접근 테스트를 먼저 실행할 수 있습니다. 회사 계정에서는 관리자가 Gmail API 접근이나 외부 앱 권한을 제한했을 수 있으므로, 개인 계정에서 되는 코드가 회사 계정에서 바로 되는 것은 아닙니다.


주의할 점
권한 오류가 난다고 해서 스크립트를 바로 삭제할 필요는 없습니다. 어떤 서비스 권한이 필요한지 확인하고, 실행 계정이 해당 파일과 서비스에 접근할 수 있는지 먼저 점검하는 것이 안전합니다.


시간 기반 트리거가 실행되지 않을 때

시간 기반 트리거는 사용자가 직접 버튼을 누르지 않아도 정해진 시간에 함수를 실행하는 방식입니다. 예약 실행이 안 된다면 트리거가 등록되어 있는지, 연결된 함수명이 맞는지, 실행 기록에 실패 로그가 남았는지부터 확인합니다.


예를 들어 매일 오전에 메일 보고서를 보내려면 아래처럼 스크립트로 트리거를 만들 수도 있습니다. 다만 같은 함수를 여러 번 실행해 중복 트리거가 생기지 않도록 주의해야 합니다.


function createDailyTrigger() {
  ScriptApp.newTrigger("sendDailyReport")
    .timeBased()
    .everyDays(1)
    .atHour(9)
    .create();
}

function sendDailyReport() {
  console.log("daily report");
}

트리거가 여러 개 중복 등록되면 같은 작업이 반복 실행될 수 있습니다. 트리거 메뉴에서 같은 함수명으로 여러 트리거가 등록되어 있는지 확인하고, 불필요한 트리거는 삭제합니다.


Gmail·Sheets 권한 오류가 날 때

Gmail과 Google Sheets를 함께 쓰는 자동화는 권한 범위가 넓어질 수 있습니다. 문의 메일을 읽고, 내용을 시트에 적고, 처리 상태를 업데이트하는 자동화라면 Gmail 읽기 권한과 Sheets 수정 권한이 함께 필요합니다.


오류 원인을 좁히려면 전체 자동화를 한 번에 실행하지 말고 Gmail 접근 테스트와 Sheets 쓰기 테스트를 나누어 확인합니다.


function testSheetWrite() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.appendRow([new Date(), "Sheets 쓰기 테스트"]);
}

function testGmailRead() {
  const threads = GmailApp.search("is:unread", 0, 3);
  console.log("unread threads:", threads.length);
}

오류 위치 확인할 권한 점검 방법
Gmail 읽기 메일 검색과 읽기 권한 간단한 Gmail 검색 함수 수동 실행
Sheets 쓰기 스프레드시트 수정 권한 테스트 행 추가 함수 실행
Drive 파일 접근 파일 열람 또는 수정 권한 파일 소유자와 공유 범위 확인

함수명 변경 후 트리거 다시 연결하는 방법

함수명을 바꾼 뒤 자동 실행이 멈췄다면 트리거가 여전히 예전 함수명을 바라보고 있을 가능성이 있습니다. 이때는 기존 트리거를 무리하게 유지하기보다 현재 코드의 함수명에 맞춰 다시 연결하는 편이 깔끔합니다.


확인 순서는 다음과 같습니다.


  1. Apps Script 편집기에서 현재 함수명을 확인합니다.
  2. 왼쪽 메뉴에서 트리거를 엽니다.
  3. 실행할 함수가 예전 이름으로 되어 있는지 확인합니다.
  4. 잘못된 트리거를 삭제하거나 수정합니다.
  5. 현재 함수명으로 새 트리거를 등록합니다.
  6. 수동 실행으로 권한 승인과 오류 여부를 먼저 확인합니다.
  7. 실행 기록에서 자동 실행 결과를 확인합니다.

함수명을 바꿀 때는 자동 실행에 연결된 함수와 내부에서 호출되는 함수명을 구분해야 합니다. 트리거에는 보통 시작점 역할을 하는 함수 하나만 연결하고, 그 안에서 다른 보조 함수를 호출하는 방식이 관리하기 쉽습니다.


function runAutomation() {
  collectGmailMessages();
  writeToSheet();
}

function collectGmailMessages() {
  // Gmail 처리
}

function writeToSheet() {
  // Sheets 기록
}

실행 로그에서 오류 확인하는 방법

자동 실행은 화면에서 바로 보이지 않기 때문에 실행 로그 확인이 중요합니다. Apps Script 편집기 왼쪽의 실행 기록에서 언제 실행됐는지, 어떤 함수가 실패했는지, 오류 메시지가 무엇인지 확인할 수 있습니다.


실행 로그를 더 보기 쉽게 남기려면 중요한 지점마다 console.log()를 넣습니다. 로그는 오류 원인을 좁히는 데 도움이 되며, 어느 단계까지 정상 실행됐는지 확인할 수 있습니다.


function runAutomation() {
  console.log("자동화 시작");

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  console.log("시트 접근 성공");

  sheet.appendRow([new Date(), "테스트"]);
  console.log("시트 기록 완료");
}

실행 기록에서 실패한 실행을 열어 보면 오류가 발생한 줄과 메시지를 확인할 수 있습니다. 권한 문제, 함수명 문제, 할당량 문제는 메시지 표현이 다르므로 오류 문구를 그대로 확인하는 것이 중요합니다.


회사 Google Workspace 계정에서 막힐 수 있는 부분

회사 Google Workspace 계정은 개인 Gmail 계정보다 제한이 많을 수 있습니다. 관리자가 외부 앱 권한, 민감한 OAuth 범위, Gmail 접근, Drive 공유 정책을 제한해 두면 코드가 맞아도 실행이 막힐 수 있습니다.


특히 회사 계정에서 자동화가 실패한다면 아래 항목을 확인합니다.


Workspace 계정 체크리스트
1. 자동화를 실행하는 계정이 해당 시트의 편집 권한을 가지고 있는지 확인합니다.
2. Gmail 접근을 사용하는 스크립트가 조직 정책에 막히지 않는지 확인합니다.
3. 외부 공유된 파일을 읽어야 한다면 Drive 공유 정책을 확인합니다.
4. 다른 사람이 만든 트리거라면 트리거 생성 계정을 확인합니다.
5. 조직 관리자에게 Apps Script와 OAuth 앱 사용 제한 여부를 문의합니다.


팀에서 쓰는 자동화라면 개인 계정에만 의존하지 않는 구조가 좋습니다. 담당자가 바뀌거나 계정이 비활성화되면 트리거 실행도 영향을 받을 수 있으므로, 소유자와 실행 계정을 문서로 남겨 두는 편이 안전합니다.


재발 방지 체크리스트

트리거 오류는 한 번 해결해도 함수명 변경, 파일 소유자 변경, 권한 정책 변경 때문에 다시 생길 수 있습니다. 자동화가 업무에 영향을 준다면 간단한 운영 체크리스트를 만들어 두는 것이 좋습니다.


체크 항목 확인 기준 권장 방식
함수명 트리거와 코드의 함수명이 같은지 시작 함수명은 자주 바꾸지 않기
권한 승인 필요한 Google 서비스 권한을 승인했는지 배포 전 수동 실행으로 확인
실행 계정 파일과 서비스에 접근 가능한 계정인지 소유자와 트리거 생성 계정 기록
실행 로그 실패 기록과 오류 문구가 남는지 console.log()로 주요 단계 기록

Apps Script 트리거 오류를 함수명 권한 계정 로그 순서로 점검하는 체크리스트 이미지

자동 실행 오류는 함수명, 트리거 등록, 권한 승인, 실행 계정, 실행 로그 순서로 확인하면 원인을 좁히기 쉽습니다.


공식 자료로 더 확인하기

Apps Script의 권한, 트리거, 실행 기록은 Google 공식 문서 기준으로 확인하는 것이 가장 안전합니다. 화면 구성과 제한은 바뀔 수 있으므로, 실제 운영 자동화라면 공식 문서에서 최신 기준을 함께 확인하는 것이 좋습니다.


Google Apps Script 설치형 트리거 공식 문서

시간 기반 트리거, 이벤트 기반 트리거, 설치형 트리거의 동작 방식과 제한 사항을 확인할 수 있습니다.

Apps Script 설치형 트리거 기준 확인하기

Google Apps Script 권한 승인 공식 문서

Gmail, Sheets, Drive 같은 Google 서비스에 접근할 때 필요한 OAuth 권한과 승인 흐름을 확인할 수 있습니다.

Apps Script 권한 승인 흐름 확인하기

Google Apps Script 문제 해결 공식 문서

실행 기록, 오류 메시지, 로그 확인 방법처럼 스크립트가 실패했을 때 원인을 추적하는 기본 방법을 확인할 수 있습니다.

Apps Script 실행 오류 점검 방법 확인하기

함께 보면 좋은 글

Google Apps Script 자동화 입문
트리거 오류를 해결하기 전에 Apps Script가 구글시트 반복 작업을 어떻게 줄이는지 기본 구조를 잡고 싶을 때 함께 보면 좋습니다.
Google Apps Script로 구글시트 반복 작업 줄이는 기본 흐름 확인

Gmail 자동화 방법
문의 메일을 구글시트에 자동 정리하는 과정에서 Gmail 권한과 시간 기반 트리거가 왜 필요한지 실제 흐름으로 확인할 수 있습니다.
Gmail 문의 메일을 구글시트에 자동 정리하는 방법 확인

ChatGPT 구글시트 데이터 정리
구글시트에 쌓인 데이터를 정리하고 자동화 흐름을 넓히고 싶다면 ChatGPT를 함께 쓰는 실전 흐름도 참고할 수 있습니다.
ChatGPT로 구글시트 데이터 정리 업무 줄이는 흐름 확인

n8n·Make·Zapier 비교
Apps Script 설정이 어렵거나 조직 권한 때문에 막힌다면 노코드 자동화 도구로 바꾸는 선택지도 함께 비교할 수 있습니다.
n8n·Make·Zapier 중 초보자에게 맞는 자동화 도구 비교

자주 묻는 질문

Q1. Apps Script 트리거가 수동 실행은 되는데 자동 실행이 안 되는 이유는 무엇인가요?

수동 실행이 된다고 해서 시간 기반 트리거가 정상 등록되어 있다는 뜻은 아닙니다. 트리거 메뉴에서 실행할 함수명, 이벤트 소스, 실행 주기를 먼저 확인해야 합니다. 함수명을 바꾼 뒤 기존 트리거가 예전 함수명을 바라보고 있거나, 권한 승인 없이 자동 실행만 기다리는 경우에도 실행이 실패할 수 있습니다.


Q2. Authorization required가 뜨면 코드를 다시 만들어야 하나요?

대부분은 코드를 다시 만들 필요가 없습니다. 스크립트가 Gmail, Sheets, Drive 같은 Google 서비스에 접근하려면 사용자의 권한 승인이 필요합니다. 편집기에서 해당 함수를 한 번 수동 실행해 권한 승인 절차를 완료한 뒤, 트리거 실행 기록을 다시 확인하는 순서가 안전합니다.


Q3. 함수명을 바꿨더니 트리거가 실행되지 않습니다. 어떻게 해야 하나요?

트리거는 연결된 함수명을 기준으로 실행되므로, 함수명을 바꾸면 기존 트리거가 깨질 수 있습니다. Apps Script 편집기 왼쪽의 트리거 메뉴에서 실행 함수명이 현재 코드와 같은지 확인합니다. 예전 함수명으로 되어 있다면 기존 트리거를 수정하거나 삭제한 뒤 새 함수명으로 다시 등록하는 것이 좋습니다.


Q4. 회사 Google Workspace 계정에서는 왜 자동화가 막힐 수 있나요?

회사 계정은 관리자가 외부 앱 권한, OAuth 범위, Gmail 접근, Drive 공유 정책을 제한할 수 있습니다. 개인 계정에서 되던 Apps Script가 회사 계정에서 실패한다면 코드 문제만 보지 말고 파일 권한, 트리거 생성 계정, 조직의 보안 정책을 함께 확인해야 합니다.


Q5. 시간 기반 트리거는 몇 분마다 실행해도 괜찮나요?

짧은 주기로 실행할수록 할당량, 실행 시간, 외부 서비스 호출 제한에 걸릴 가능성이 커집니다. 처음 테스트할 때는 너무 촘촘한 주기보다 넉넉한 간격으로 설정하고, 실행 기록에서 실패 여부를 확인하는 것이 좋습니다. 업무 자동화라면 필요한 최소 주기로 조정하는 편이 안정적입니다.


Apps Script 트리거 오류는 코드를 지우기보다 함수명, 트리거 등록, 권한 승인, 실행 계정, 실행 기록을 차례대로 확인하는 방식이 가장 안전합니다.