문제 해결

경험이 많은 개발자도 처음부터 올바른 코드를 작성하는 경우는 드물기 때문에 문제 해결은 개발 프로세스의 중요한 부분입니다. 이 섹션에서는 스크립트에서 오류를 찾고, 이해하고, 디버그하는 방법을 설명합니다.

오류 메시지

스크립트에 오류가 발생하면 줄 번호와 함께 오류 메시지가 표시됩니다. 오류에는 구문 오류런타임 오류의 두 가지 기본 유형이 있습니다.

구문 오류

구문 오류는 코드가 JavaScript 문법을 따르지 않을 때 발생하며 스크립트를 저장할 때 감지됩니다. 예를 들어 다음 스니펫에는 구문 오류가 포함되어 있습니다.

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ";
  MailApp.sendEmail('john@example.com',
                    'Data in row ' + rowNumber,
                    rowData);
}

문제는 4번째 줄 끝에 ) 문자가 누락된 것입니다. 스크립트를 저장하면 다음 오류가 표시됩니다.

인수 목록 뒤에 )가 누락되었습니다. (4번째 줄)

이러한 오류는 즉시 발견되므로 문제 해결이 간단합니다. 유효한 코드만 프로젝트에 저장됩니다.

런타임 오류

런타임 오류는 함수나 클래스가 잘못 사용될 때 발생하며 스크립트가 실행될 때 감지됩니다. 예를 들어 다음 코드는 런타임 오류를 발생시킵니다.

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ");
  MailApp.sendEmail('john',
                    'Data in row ' + rowNumber,
                    rowData);
}

코드는 올바르게 형식이 지정되었지만 'john'은 잘못된 이메일 주소입니다. 다음 오류가 발생합니다.

잘못된 이메일: john (5번째 줄)

이러한 오류는 스프레드시트나 양식과 같은 외부 소스에서 데이터를 가져오는 경우가 많기 때문에 해결하기가 어렵습니다. 디버깅 기법을 사용하여 원인을 파악합니다.

일반적인 오류

다음은 일반적인 오류와 그 원인의 목록입니다.

서비스가 너무 많이 호출됨: <작업 이름>

이 오류는 너무 많은 이메일을 보내는 등 작업의 일일 할당량을 초과했음을 나타냅니다. 할당량은 계정 유형에 따라 다르며 변경될 수 있습니다. Apps Script 할당량 문서에서 한도를 확인하세요.

서버를 사용할 수 없습니다. 또는 서버 오류가 발생했습니다. 다시 시도하세요.

다음과 같은 이유로 발생할 수 있습니다.

  • Google 서버를 일시적으로 사용할 수 없습니다. 기다렸다가 다시 시도하세요.
  • 스크립트의 오류에 해당하는 메시지가 없습니다. 디버깅을 통해 문제를 격리해 보세요.
  • Google Apps Script에 버그가 있습니다. 버그에서 버그 신고를 검색하고 제출합니다.

작업을 수행하려면 승인이 필요합니다.

스크립트에 실행에 필요한 승인이 없습니다. 트리거에서 또는 서비스로 스크립트를 실행하는 경우 승인 대화상자를 표시할 수 없습니다.

스크립트를 승인하려면 스크립트 편집기를 열고 함수를 실행하세요. 스크립트에서 승인되지 않은 새 서비스를 사용하는 경우 스크립트를 다시 승인해야 합니다.

승인 전에 또는 만료 후에 실행되는 트리거로 인해 이 오류가 발생하는 경우가 많습니다. 부가기능으로 인해 이 문제가 발생한 경우 부가기능을 다시 사용하여 승인하세요. 문제가 있는 트리거를 삭제합니다.

  1. Apps Script 프로젝트에서 트리거 를 클릭합니다.
  2. 트리거 옆에 있는 더보기 > 트리거 삭제를 클릭합니다.

또는 부가기능을 제거합니다.

세부적인 권한으로 인해 이러한 오류가 발생할 수도 있습니다. 트리거 실행을 보호하려면 승인 범위 페이지를 참고하세요.

액세스 거부: DriveApp 또는 도메인 정책으로 인해 서드 파티 Drive 앱이 사용 중지됨

Google Workspace 관리자는 도메인에 대해 Drive API를 사용 중지할 수 있으며, 이렇게 하면 사용자가 Drive 서비스를 사용하는 Drive 앱 또는 Apps Script 부가기능을 사용할 수 없습니다.

부가기능 또는 웹 앱이 도메인 전체 설치를 위해 게시되고 관리자가 설치한 경우 Drive API가 사용 중지되어도 스크립트가 작동합니다.

스크립트에 활성 사용자의 ID를 가져올 권한이 없습니다.

활성 사용자의 ID와 이메일을 사용할 수 없습니다. 이는 AuthMode.FULL 이외의 승인 모드에서 Session.getActiveUser() 또는 Session.getEffectiveUser()를 호출한 결과입니다. 스크립트가 트리거에서 실행되는 경우 Apps Script 이벤트 객체의 authMode 속성에서 승인 모드를 확인할 수 있습니다.

승인 모드에 따라 문제를 해결하세요.

  • AuthMode.FULL에서는 대신 Session.getEffectiveUser()를 사용하는 것이 좋습니다.
  • AuthMode.LIMITED에서 소유자가 스크립트를 승인했는지 확인합니다.
  • 다른 승인 모드에서는 두 메서드 중 하나를 호출하지 마세요.
  • 설치 가능한 트리거에서 이 경고가 새로 표시되는 Google Workspace 고객인 경우 트리거가 조직 내 사용자로 실행되고 있는지 확인하세요.

라이브러리가 누락됨

너무 많은 사용자가 동시에 라이브러리에 액세스하면 라이브러리가 누락된 것으로 신고될 수 있습니다. 이 문제를 해결하려면 다음과 같이 하세요.

  • 라이브러리의 코드를 스크립트에 직접 복사합니다.
  • 자신의 계정에서 라이브러리를 복사하고 배포합니다.
  • 스크립트가 작동하는 데 라이브러리가 필요하지 않으면 스크립트 프로젝트에서 라이브러리를 삭제합니다.

라이브러리 버전 또는 배포 버전 누락으로 인해 오류가 발생했습니다. 오류 코드 Not_Found

이 오류 메시지는 다음 중 하나를 나타냅니다.

  • 배포에서 사용한 스크립트 버전이 삭제되었습니다. 이 문제를 해결하려면 배포를 수정하고 다른 스크립트 버전을 선택하세요.
  • 스크립트에서 사용한 라이브러리 버전이 삭제되었습니다. 이 문제를 해결하려면 스크립트 편집기의 '라이브러리'에서 라이브러리를 찾아 다른 버전으로 업데이트하거나 라이브러리를 삭제하세요. 업데이트하려면 버전 번호를 클릭하고 다른 버전을 선택합니다. 삭제하려면 더보기 > 삭제를 클릭합니다.
  • 라이브러리에 다른 라이브러리가 포함되어 있고 해당 라이브러리의 버전이 삭제되었습니다. 이 문제를 해결하려면 라이브러리 작성자에게 문의하거나 스크립트에서 사용하는 다른 버전의 라이브러리를 사용하세요.

고급 서비스를 사용하여 Google Chat API를 호출할 때 오류 400: invalid_scope가 발생함

오류 메시지 Some requested scopes cannot be shown와 함께 Error 400: invalid_scope가 표시되면 Apps Script 프로젝트의 appsscript.json 파일에 승인 범위가 지정되지 않았음을 의미합니다. 대부분의 경우 Apps Script는 스크립트에 필요한 범위를 자동으로 결정하지만 Chat 고급 서비스를 사용하는 경우 스크립트에서 사용하는 승인 범위를 Apps Script 프로젝트의 매니페스트 파일에 수동으로 추가해야 합니다. 명시적 범위 설정을 참고하세요.

이 오류를 해결하려면 oauthScopes 배열의 일부로 Apps Script 프로젝트의 appsscript.json 파일에 적절한 승인 범위를 추가하세요. 예를 들어 spaces.messages.create 메서드를 호출하려면 다음을 추가합니다.

"oauthScopes": [
  "https://www.googleapis.com/auth/chat.messages.create"
]

관리자가 <URL>에 대한 UrlFetch 호출을 허용하지 않습니다

Google Workspace 관리자는 허용 목록을 사용하여 외부 도메인 액세스를 제어할 수 있습니다. 관리자에게 문의하여 URL을 허용 목록에 추가하세요.

디버깅

일부 오류는 미묘하여 메시지를 트리거하지 않습니다. 예를 들어 코드는 실행되지만 결과가 예상과 다를 수 있습니다. 다음 전략을 사용하여 예상치 못한 방식으로 작동하는 스크립트를 조사하세요.

로깅

스크립트 편집기에서 Cloud Logging 서비스 또는 로거 및 콘솔 서비스를 사용하여 스크립트가 실행될 때 정보를 기록합니다.

Error Reporting

Google Cloud에서 오류 보고를 사용하려면 기본 프로젝트 대신 표준 사용자 관리 프로젝트를 사용하세요.

표준 프로젝트를 사용하면 런타임 오류가 Google Cloud Error Reporting에 자동으로 기록됩니다. Google Cloud 콘솔에서 Cloud 로그 및 오류 보고서 보기

실행

Google Apps Script는 Cloud 로그를 포함한 모든 실행을 기록합니다. 실행을 보려면 실행 을 클릭합니다.

서비스 상태 확인

Google Workspace 상태 대시보드에서 Google Workspace 서비스 중단 여부를 확인합니다.

디버거 및 중단점 사용

스크립트에서 문제를 찾으려면 디버그 모드로 실행하면 됩니다. 디버그 모드에서 실행하면 스크립트에 문제가 있을 수 있다고 생각하여 강조 표시한 줄인 중단점에 도달할 때 스크립트가 일시중지됩니다. 스크립트가 일시중지되면 해당 시점의 각 변수 값이 표시되므로 로깅 문을 많이 추가하지 않고도 스크립트의 내부 작동을 검사할 수 있습니다.

중단점 추가

중단점을 추가하려면 중단점을 추가할 줄의 줄 번호 위로 마우스를 가져갑니다. 행 번호의 왼쪽에서 원을 클릭합니다. 아래 이미지는 스크립트에 추가된 중단점의 예를 보여줍니다.

중단점 추가

디버그 모드에서 스크립트 실행

디버그 모드로 스크립트를 실행하려면 편집기 상단에서 디버그를 클릭합니다.

스크립트가 중단점이 있는 줄을 실행하기 전에 일시중지되고 디버그 정보 표가 표시됩니다. 이 표를 사용하여 매개변수 값과 객체에 저장된 정보와 같은 데이터를 검사할 수 있습니다.

스크립트가 실행되는 방식을 제어하려면 디버거 패널 상단에서 '한 단계씩 실행', '프로시저 단위로 실행', '프로시저 나가기' 버튼을 사용합니다. 이를 통해 스크립트를 한 줄씩 실행하고 시간이 지남에 따라 값이 어떻게 변하는지 검사할 수 있습니다.

오류: 현재 줄의 소스 코드를 사용할 수 없음

현재 줄의 소스 코드를 사용할 수 없음

이 오류는 활성 디버깅 파일을 사용할 수 없을 때 표시됩니다. Google Apps Script는 eval()new Function()를 사용하여 생성된 스크립트와 같이 스크립트 편집기에 동적으로 생성된 JavaScript (JS) 스크립트를 표시하는 기능을 지원하지 않습니다. 이러한 스크립트는 V8 엔진 내에서 생성되고 실행되지만 편집기에서는 독립형 파일로 표시되지 않습니다. 이러한 스크립트를 단계별로 실행하면 이 오류가 발생합니다.

예를 들어 다음 코드를 살펴보세요.

function myFunction() {
  eval('a=2');
}

eval()가 호출되면 인수는 JS 코드로 처리되고 V8 엔진 내에서 동적으로 생성된 스크립트로 실행됩니다. eval()로 들어가면 이 오류가 표시됩니다. 스크립트에 //# sourceURL 주석이 포함된 경우 이름이 호출 스택에 표시됩니다. 그렇지 않으면 이름이 지정되지 않은 항목으로 표시됩니다.

오류 메시지가 표시되더라도 디버깅 세션은 활성 상태로 유지되며 실행을 계속할 수 있습니다. 계속하려면 단계별 실행, 단계별 나가기 또는 실행 재개를 계속하세요. 하지만 실행이 동적 스크립트 범위 내에 있는 한 이 오류는 계속 표시됩니다. 실행이 동적 스크립트에서 벗어나면 이 오류 없이 디버깅이 계속됩니다.

여러 Google 계정 관련 문제

동시에 여러 Google 계정에 로그인된 경우 부가기능 및 웹 앱 액세스 문제가 발생할 수 있습니다. Apps Script, 부가기능, 웹 앱에서는 멀티 로그인, 즉 동시에 여러 Google 계정에 로그인하는 기능이 지원되지 않습니다.

  • 여러 계정에 로그인한 상태에서 Apps Script 편집기를 열면 Google에서 계속 진행할 계정을 선택하라는 메시지가 표시됩니다.

  • 웹 앱 또는 부가기능을 열 때 멀티 로그인 문제가 발생하는 경우 다음 해결 방법 중 하나를 시도해 보세요.

    • 모든 Google 계정에서 로그아웃하고 액세스하려는 부가기능 또는 웹 앱이 있는 계정으로만 로그인합니다.
    • Chrome의 시크릿 창 또는 이와 유사한 시크릿 브라우징 창을 열고 액세스하려는 부가기능 또는 웹 앱이 있는 Google 계정에 로그인합니다.

도움 받기

지원 페이지를 방문하여 질문하거나 버그를 신고하세요.