핵심부터: Apps Script 트리거 문제는 대개 코드 자체보다 트리거 등록, 권한 승인, 함수명 변경, 시간대, 중복 실행, 실행 제한, 외부 API 실패에서 생깁니다. 그래서 코드를 고치기 전에 실행 기록과 트리거 설정을 먼저 봐야 합니다.
1. 트리거가 실제로 등록되어 있는지 확인한다
가장 먼저 볼 것은 Apps Script 에디터의 왼쪽 시계 아이콘, 즉 트리거 메뉴입니다. 코드에 함수가 있어도 설치형 트리거가 등록되어 있지 않으면 정해진 시간에 자동 실행되지 않습니다.
2. 단순 트리거와 설치형 트리거를 구분한다
onEdit(e), onOpen(e)처럼 이름만 맞으면 동작하는 단순 트리거가 있습니다. 하지만 외부 API 호출, 메일 발송, 다른 파일 접근, 권한이 필요한 작업은 단순 트리거만으로 막힐 수 있습니다. 이때는 설치형 트리거를 써야 합니다.
| 상황 | 가능성이 큰 원인 | 확인할 것 |
|---|---|---|
| 셀 색상 변경은 되는데 메일 발송은 안 됨 | 권한이 필요한 작업을 단순 트리거에서 실행 | 설치형 편집 트리거로 바꾸기 |
| 버튼 실행은 되는데 자동 실행은 안 됨 | 트리거 미등록 또는 함수명 불일치 | 트리거 메뉴에서 대상 함수 확인 |
| 처음에는 됐는데 계정 변경 후 멈춤 | 승인 계정 또는 파일 권한 문제 | 트리거 소유자와 파일 접근 권한 확인 |
3. 권한 승인이 풀렸거나 막혀 있지 않은지 본다
Apps Script 자동화는 처음 실행할 때 권한 승인을 요구합니다. 파일 읽기, 메일 발송, 외부 URL 호출 같은 기능을 추가하면 승인 범위가 바뀔 수 있습니다. 회사나 학교 계정에서는 관리자가 특정 권한을 제한해 실행이 막히기도 합니다.
이때는 스크립트 편집기에서 함수를 직접 한 번 실행해보는 것이 빠릅니다. 수동 실행에서 권한 승인 화면이 뜨거나 오류가 보이면, 트리거 문제처럼 보였던 것이 사실은 권한 문제일 수 있습니다.
4. 시간대와 실행 시간을 확인한다
시간 기반 트리거는 사용자가 생각한 정확한 분초에 실행되지 않을 수 있습니다. 또한 프로젝트 시간대가 한국이 아니면 새벽이나 오전 실행 시간이 엉뚱하게 보일 수 있습니다.
시간 트리거 체크:
5. 실행 로그에서 실패 지점을 본다
자동화가 안 돌 때 가장 위험한 판단은 “아무 일도 안 일어났다”고 생각하는 것입니다. 실제로는 실행됐지만 중간에 실패했을 수 있습니다. Apps Script의 실행 기록에서 실패 시간, 오류 메시지, 대상 함수명을 확인해야 합니다.
로그를 남기는 습관도 중요합니다. console.log()나 Logger.log()로 처리한 행 수, 대상 시트 이름, 외부 API 응답 상태를 남기면 다음 장애 때 훨씬 빠르게 원인을 찾을 수 있습니다.
6. 외부 API와 알림 발송은 따로 의심한다
구글폼 응답은 들어왔고 시트 처리도 됐는데 슬랙, 카카오 알림톡, 메일만 안 가는 경우가 있습니다. 이때는 트리거보다 외부 API 실패를 의심해야 합니다. 토큰 만료, 템플릿 불일치, Webhook URL 변경, 발송 한도, 응답 코드 오류가 흔한 원인입니다.
7. 자동화를 오래 쓰려면 상태 열을 둔다
스프레드시트 자동화는 “한 번 실행”보다 “중복 없이 오래 실행”이 어렵습니다. 특히 구글폼 응답, 주문 데이터, 상담 신청처럼 행이 계속 늘어나는 구조라면 처리 상태를 기록하는 열이 필요합니다.
추천 구조는 단순합니다. 원본 응답 열은 그대로 두고, 오른쪽에 처리상태, 처리일시, 오류메시지, 재시도필요 열을 둡니다. 트리거는 처리상태가 빈 행만 실행하고, 성공하면 완료로 표시합니다.
문제가 생겼을 때의 빠른 순서
관련해서 이어 읽기: 자동화 기본 구조는 Apps Script 시간 트리거와 편집 트리거 활용법에서, 입력 창구는 구글폼과 스프레드시트 연동에서, 알림 발송은 스프레드시트에서 슬랙으로 메시지 보내기와 구글폼 카카오 알림톡 연동으로 이어서 볼 수 있습니다.
FAQ
Apps Script 트리거가 갑자기 안 돌면 제일 먼저 뭘 봐야 하나요?
트리거 메뉴와 실행 기록을 먼저 봐야 합니다. 대상 함수가 등록되어 있는지, 최근 실행에서 오류가 났는지 확인하면 권한 문제인지 코드 문제인지 방향이 잡힙니다.
버튼으로 실행하면 되는데 시간 트리거만 안 됩니다.
트리거 등록이 빠졌거나, 트리거가 옛 함수명을 보고 있거나, 권한 승인 계정이 파일에 접근하지 못할 수 있습니다. 시간대 설정도 함께 확인하는 것이 좋습니다.
onEdit 함수 안에서 메일이나 외부 API를 호출해도 되나요?
권한이 필요한 작업은 단순 트리거에서 제한될 수 있습니다. 메일 발송, 외부 URL 호출, 다른 파일 접근이 필요하면 설치형 트리거를 쓰는 편이 안전합니다.
자동화가 두 번씩 실행됩니다.
같은 함수가 여러 트리거에 중복 등록되어 있거나, 처리 상태를 기록하지 않아 같은 행을 반복 처리하는 경우가 많습니다. 트리거 목록을 정리하고 상태 열을 추가하는 것이 좋습니다.