증상 확인: 이메일 발송이 되지 않거나, 자동화가 예상대로 작동하지 않음
구글 폼의 응답을 받을 때마다 자동으로 이메일을 발송하려고 부가기능(Add-ons)을 설치했는데, 전혀 작동하지 않거나 간헐적으로만 작동합니다. “권한 부여가 필요합니다”라는 메시지만 반복되거나, 스크립트 오류 로그에 ‘권한 없음’이 표시되는 경우가 대표적입니다, 이 문제는 대부분 부가기능의 실행 권한과 트리거 설정의 미스매치에서 비롯됩니다.
원인 분석: OAuth 동의 화면과 트리거 권한의 불일치
구글 워크스페이스 환경(회사/학교 계정)을 사용 중이라면, 관리자가 타사 앱에 대한 접근을 제한했을 수 있습니다. 개인 계정이라도 가장 흔한 원인은 부가기능이 요구하는 권한 범위와 실제 발송 스크립트가 사용하는 API 간의 차이입니다. 예를 들어, 폼 응답을 읽는 권한만 부여했지만, 이메일을 보내려면 Gmail API에 대한 추가 권한이 필요합니다. 뿐만 아니라, 간과하기 쉬운 점은 ‘설치 시 권한 부여’와 ‘실제 실행 시 권한’이 다를 수 있다는 것입니다. 트리거(예: 폼 제출 시)를 통해 실행되는 함수는 명시적인 권한 재부여 과정 없이는 실패할 확률이 높습니다.
해결 방법 1: 기본 권한 재설정 및 테스트 실행
먼저 가장 간단한 조치부터 시작합니다. 부가기능의 권한 캐시를 초기화하고 핵심 기능이 정상인지 테스트합니다.
- 구글 폼을 열고 상단 메뉴에서 확장 프로그램 > 부가기능 > 관리를 클릭합니다.
- 문제의 부가기능을 선택하고 설정 아이콘(기어 모양)을 클릭한 후 부가기능 관리를 선택합니다.
- 새로 열린 탭에서 해당 부가기능 옆의 사용 안함을 클릭하여 완전히 비활성화한 후, 다시 사용으로 전환합니다. 이 과정에서 새로운 OAuth 동의 화면이 나타날 수 있습니다.
- 부가기능 메뉴로 돌아가 테스트 실행 또는 시작하기와 같은 옵션이 있다면 실행해 봅니다. 이 단계에서 명시적인 권한 부여를 요청받아야 합니다. 모든 권한에 동의하십시오.
이 조치로도 해결되지 않는다면, 부가기능의 스크립트 자체에 접근해야 합니다.
해결 방법 2: Apps Script 프로젝트의 권한 및 트리거 재설정
대부분의 구글 폼 부가기능은 Google Apps Script로 작성됩니다. 여기서 권한 문제를 근본적으로 해결할 수 있습니다.
주의사항: 이 단계에서는 부가기능의 스크립트 코드를 수정하지 않습니다. 설정만 변경합니다. 하지만 작업 전에, 확장 프로그램 > Apps Script 메뉴에서 프로젝트의 코드를 확인해, 중요한 사용자 함수가 삭제되지 않았는지 확인하는 것이 좋습니다.
- 구글 폼에서 확장 프로그램 > Apps Script를 클릭해 스크립트 편집기를 엽니다.
- 왼쪽 사이드바의 트리거 아이콘(시계 모양)을 클릭합니다.
- 기존에 구성된 트리거(예: ‘양식 제출 시 – 함수명’)가 보일 것입니다. 각 트리거 오른쪽의 연필(수정) 아이콘을 클릭합니다.
- 실행 권한 섹션을 확인합니다. ‘내가 아닌 사용자가 양식을 제출할 때: 앱을 실행하는 사람: 나’로 설정되어 있는지 확인하십시오. 이 설정은 폼 응답자가 누구든, 이메일 발송 스크립트는 당신의 권한으로 실행되도록 보장합니다. 다른 옵션으로 되어 있다면 변경하세요.
- 트리거를 저장합니다. 기존 트리거를 삭제하고 새로 만들 수도 있습니다.
- 이제 권한을 완전히 갱신합니다. 스크립트 편집기에서 실행 > 함수 실행을 클릭합니다. 드롭다운 메뉴에 특정 함수가 나열될 수 있습니다. 만약 이메일 발송을 테스트하는 함수(예: `sendTestEmail`)가 있다면 그것을, 없다면 주 함수(예: `onFormSubmit`)를 선택합니다.
- 권한 검토를 요청하는 팝업이 나타납니다. 권한 확인을 클릭하고, 나타나는 새 탭에서 당신의 계정을 선택한 후 허용을 클릭합니다. 이 과정이 스크립트가 필요로 하는 모든 API 권한(Forms, Gmail, Drive 등)을 최신 상태로 부여합니다.
해결 방법 3: 스크립트 코드 내 권한 범위 명시적 선언 및 로깅 추가
방법 2로도 해결이 안 되거나, 더 안정적인 구성을 원한다면 코드 수준에서 접근합니다. 스크립트의 최상단에 필요한 권한을 명시하고, 오류 발생 시 원인을 파악할 수 있는 로그를 추가합니다.
백업의 중요성: 코드를 수정하기 전에, 스크립트 편집기에서 파일 > 버전 관리 > 새 버전 저장…을 클릭하여 현재 상태를 백업하십시오. 실수했을 때 이전 버전으로 돌아갈 수 있습니다.
- Apps Script 편집기에서 `appsscript.json` 파일을 확인합니다. 왼쪽 파일 탐색기에서 보이지 않는다면. 프로젝트 설정 아이콘(기어 모양) > manifest 파일 표시를 켠 후 확인하세요. 이 파일에 `oauthScopes` 필드가 있는지 봅니다.
- 필요한 권한 범위(scope)가 선언되어 있지 않다면 추가합니다. 일반적인 이메일 발송 부가기능에 필요한 범위는 다음과 같습니다.
- https://www.googleapis.com/auth/forms.responses.readonly
- https://www.googleapis.com/auth/gmail.send
- https://www.googleapis.com/auth/spreadsheets.currentonly (응답 시트를 사용할 경우)
- 주요 함수(예: `onFormSubmit`) 시작 부분에 로깅 코드를 추가해 실행 흐름과 오류를 추적합니다. function onFormSubmit(e) {
console.log(‘함수 실행 시작: ‘, new Date()); // 실행 확인
try {
// 기존 이메일 발송 로직… MailApp.sendEmail(recipient, subject, body);
console.log(‘이메일 발송 성공: ‘, recipient);
} catch (error) {
console.error(‘이메일 발송 실패: ‘, error.toString()); // 오류 상세 기록
}
} - 코드를 저장한 후, 실행 > 함수 실행에서 `onFormSubmit`을 테스트 실행하여 다시 권한을 부여받습니다. 이후 실제 폼을 제출해 보고, 실행 로그(보기 > 로그)에서 메시지를 확인합니다.
주의사항 및 예방 조치
자동화 스크립트는 한 번 설정해도 환경 변화로 인해 작동이 중단될 수 있습니다. 다음 사항을 체크하여 문제를 예방하십시오.
- Gmail 일일 발송 한도: 개인 Gmail 계정은 하루 500통, G Suite/Workspace 계정은 구독 플랜에 따라 1,000~2,000통의 한도가 있습니다. 이를 초과하면 조용히 실패합니다.
- 트리거 비활성화: 스크립트 편집기에서 트리거가 실패한 경우, 일정 횟수 후 자동으로 비활성화됩니다. 트리거 페이지를 정기적으로 점검해야 합니다.
- 변수 및 시트 이름 변경: 스크립트가 특정 시트 이름이나 셀 범위를 하드코딩했다면, 폼 연동 스프레드시트의 구조를 변경하면 스크립트가 깨집니다.
전문가 팁: 배포를 통한 안정성 확보
부가기능이 복잡하거나 여러 사람이 사용해야 한다면, ‘배포’를 고려하세요. 스크립트 편집기에서 배포 > 새 배포를 선택합니다. ‘설정 유형’을 부가기능으로, ‘실행 권한’을 나(본인)으로 설정합니다. 이렇게 배포된 버전은 코드를 수정해도 배포된 버전은 유지되며, 사용자에게는 일관된 버전이 제공됩니다. 또한 배포마다 고유 ID가 부여되어 권한 및 버전 관리가 훨씬 수월해집니다. 테스트가 완료된 안정적인 코드 버전을 배포하고, 실제 운영에서는 이 배포판을 사용하도록 하십시오. 이처럼 버전 관리와 설정 최적화는 커뮤니케이션 도구에서도 동일하게 중요한데, 디스코드 서버 지역 변경 및 음성 채널 비트레이트 설정을 통해 서버 성능을 최적화하면 음성 품질과 지연 시간을 크게 개선할 수 있습니다. 사용자 수와 지역에 따라 적절한 서버 리전과 비트레이트를 선택하는 것이 안정적인 운영의 핵심입니다.