구글 앱스 스크립트 활용법 5가지, 실무 적용법

핵심 요약
  • 구글 앱스 스크립트는 코드 설치 없이 구글 워크스페이스 문서 안에서 바로 실행하는 자동화 도구입니다.
  • 스프레드시트 정리, 이메일 알림, 폼 응답 처리 등 반복 업무를 스크립트 하나로 대체할 수 있습니다.
  • 무료(개인) 계정의 하루 90분 한도는 트리거가 자동 실행한 시간의 합계이며, 편집기에서 직접 실행한 시간은 포함되지 않습니다.
  • 트리거 설정과 권한 승인 과정에서 흔히 실수가 발생하니 순서를 지켜 진행해야 합니다.

구글 앱스 스크립트란 무엇이고 왜 써야 할까

컴퓨터 화면에 코드 에디터와 Google Sheets 스프레드시트 창이 함께 열려 있는 모습

구글 앱스 스크립트(Google Apps Script)는 구글 스프레드시트·문서·Gmail·캘린더 같은 워크스페이스 서비스 안에서 자바스크립트 기반 코드를 바로 실행할 수 있는 무료 자동화 플랫폼입니다. 별도 서버나 설치 프로그램 없이 브라우저에서 ‘확장 프로그램 > Apps Script’ 메뉴만 열면 바로 코드를 작성하고 저장할 수 있어, 매일 반복하는 데이터 정리·이메일 발송·보고서 취합 업무를 자동화하려는 실무자에게 적합합니다. 엑셀 매크로와 비슷하지만 구글 계정과 연동된 여러 서비스를 동시에 다룰 수 있다는 점이 다릅니다.

실무에서 가장 많이 쓰는 활용법 5가지

1. 스프레드시트 자동 정리와 변경 이력 기록

매일 들어오는 주문 데이터나 설문 응답을 특정 시트로 옮기고, 중복을 제거하거나 조건에 맞춰 색을 칠하는 작업을 스크립트로 자동화할 수 있습니다. 예를 들어 단순 트리거(simple trigger)인 onEdit 함수를 쓰면 셀 값이 바뀔 때마다 다른 시트에 자동으로 기록이 남도록 만들 수 있습니다. 단 단순 트리거는 실행 시간이 30초로 짧고 Gmail처럼 승인이 필요한 서비스는 호출하지 못합니다. 이벤트로 넘어오는 e.value도 한 셀만 편집했을 때 채워지는 값이라, 여러 셀을 한꺼번에 붙여넣는 경우까지 감안하려면 아래처럼 표시값을 대신 읽도록 방어해 두는 편이 안전합니다.

function onEdit(e) {
  const sheet = e.range.getSheet();
  if (sheet.getName() !== '주문') return;

  const value = e.value !== undefined ? e.value : e.range.getDisplayValue();
  const log = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('변경이력');

  log.appendRow([new Date(), sheet.getName(), e.range.getA1Notation(), value]);
}

2. 폼 응답 접수 시 담당자 자동 메일 알림

구글 폼으로 접수를 받는 경우, 응답이 들어올 때마다 담당자에게 자동으로 이메일을 보내는 스크립트를 붙일 수 있습니다. 메일 발송은 승인이 필요한 서비스라 단순 트리거로는 동작하지 않으니, 폼 응답이 쌓이는 스프레드시트를 열어 설치형 트리거(installable trigger)의 ‘양식 제출 시’ 유형으로 등록해야 합니다. 폼 파일 자체에 트리거를 걸면 넘어오는 이벤트가 e.values가 아니라 e.response(FormResponse)라 아래 코드는 그대로 동작하지 않습니다. 발송 잔여량은 MailApp.getRemainingDailyQuota()로 확인해 두면 한도 초과로 알림이 끊기는 사고를 줄일 수 있습니다.

function onFormSubmit(e) {
  const answers = e.values.join(' / ');

  MailApp.sendEmail(
    'manager@example.com',
    '[폼] 새 응답이 접수되었습니다',
    answers
  );

  Logger.log(MailApp.getRemainingDailyQuota());
}

3. 시트에 적은 일정을 구글 캘린더에 자동 등록

회의·출고·상담 일정을 시트에 정리해 두고 한 번에 캘린더로 밀어 넣는 방식입니다. CalendarApp.getDefaultCalendar().createEvent(제목, 시작, 종료)가 기본형이고, 시작·종료 자리에는 Date 객체가 들어갑니다. 시트에 날짜를 문자열로 적어 두면 Date로 변환된 결과가 의도한 시각과 어긋날 수 있으니 해당 열을 날짜 서식으로 지정해 두는 편이 안전합니다.

function addEventsFromSheet() {
  const rows = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
  const calendar = CalendarApp.getDefaultCalendar();

  rows.slice(1).forEach(function (row) {
    const [title, start, end] = row;
    calendar.createEvent(title, new Date(start), new Date(end));
  });
}

4. 외부 API 데이터를 시트로 끌어오기

환율·광고 성과·재고처럼 외부 서비스가 가진 값을 매일 시트에 쌓아 두는 용도입니다. UrlFetchApp.fetch(url)가 돌려주는 응답을 getContentText()로 읽어 파싱하면 됩니다. 다만 이 호출은 실행 시간과 별개로 일일 한도가 걸려 있으니 반복 주기를 과하게 잡지 않는 편이 안전합니다.

function fetchDailyRates() {
  const response = UrlFetchApp.fetch('https://api.example.com/rates');
  const data = JSON.parse(response.getContentText());

  SpreadsheetApp.getActiveSheet().appendRow([new Date(), data.usd, data.jpy]);
}

5. 정기 리포트 문서 자동 생성

주간·월간 보고서를 사람이 매번 새로 만드는 대신, DocumentApp.create()로 문서를 찍어 내고 시간 기반 트리거로 요일·시각을 지정해 자동 실행시키는 방식입니다. 트리거는 편집기의 ‘트리거’ 화면에서 등록해도 되고 ScriptApp.newTrigger()로 코드에서 등록해도 됩니다.

function createWeeklyReport() {
  const count = SpreadsheetApp.getActiveSheet().getLastRow() - 1;
  const doc = DocumentApp.create('주간 리포트 ' + new Date().toLocaleDateString());

  doc.getBody().appendParagraph('이번 주 접수 건수: ' + count + '건');
}

// 매주 월요일 오전 9시에 자동 실행되도록 시간 기반 트리거를 등록한다
function installWeeklyTrigger() {
  ScriptApp.newTrigger('createWeeklyReport')
    .timeBased()
    .onWeekDay(ScriptApp.WeekDay.MONDAY)
    .atHour(9)
    .create();
}

구글 앱스 스크립트 시작하는 법

Google Sheets 툴바의 Extensions 메뉴를 클릭하는 손가락

처음 접근할 때는 코드를 짜기 전에 실행 권한과 저장 방식부터 이해해야 오류를 줄일 수 있습니다.

  1. 스프레드시트나 문서에서 ‘확장 프로그램 > Apps Script’를 클릭해 편집기를 엽니다.
  2. 기본 제공되는 myFunction 틀 안에 원하는 동작을 코드로 작성합니다.
  3. 저장 후 ‘실행’ 버튼을 눌러 최초 1회 권한 승인 화면을 통과합니다.
  4. 반복 실행이 필요하면 왼쪽 메뉴의 ‘트리거’에서 실행 주기(시간 기반, 문서 열기, 편집 시 등)를 등록합니다.
  5. 실행 기록(로그)에서 오류 여부를 확인하고 필요한 부분만 수정합니다.

스크립트 1회 실행 시간 6분 한도는 개인 계정과 구글 워크스페이스(업무용) 계정이 동일합니다. 계정 유형에 따라 갈리는 것은 하루 단위 총량인데, 공식 할당량 표의 ‘트리거 총 실행 시간(Triggers total runtime)’ 항목이 무료 개인 계정 하루 90분, 워크스페이스 계정 하루 6시간입니다. 이름 그대로 트리거가 자동 실행한 시간을 합산한 값이라, 편집기에서 직접 실행하거나 사용자가 호출한 실행 시간은 이 90분에 잡히지 않습니다. 같은 표에서 UrlFetch 호출은 하루 2만 회 대 10만 회, 이메일 수신자는 하루 100명 대 1,500명으로 갈리니 대량 데이터를 반복 처리하는 스크립트는 이 총량을 기준으로 설계해야 중간에 멈추는 일을 피할 수 있습니다.

주요 기능별 비교와 선택 기준

어떤 업무에 어떤 방식이 맞는지 아래처럼 정리하면 스크립트 설계 방향을 잡기 쉽습니다.

활용 목적 사용하는 핵심 서비스 대표 트리거 방식
데이터 정리·변경 이력 기록 SpreadsheetApp 편집 시(onEdit) 또는 시간 기반
이메일·알림 발송 GmailApp, MailApp 폼 제출 시, 편집 시
일정 자동 등록 CalendarApp 스프레드시트 값 변경 시
외부 데이터 연동 UrlFetchApp 시간 기반 또는 수동 실행
정기 리포트 문서 생성 DocumentApp 시간 기반(매주 특정 요일)

흔한 실수와 한계, 놓치기 쉬운 주의점

스크립트 코드 창에서 오류 라인을 가리키는 빨간 경고 표시

권한 승인과 공유 설정 문제

스크립트를 만든 사람이 아닌 다른 팀원이 같은 문서를 열었을 때 트리거가 작동하지 않는 경우가 많은데, 이는 트리거 실행 권한이 스크립트를 최초로 승인한 계정에 귀속되기 때문입니다. 팀 단위로 쓸 스크립트라면 담당자 계정으로 트리거를 등록하고, 담당자가 바뀔 때는 트리거를 재등록해야 합니다.

할당량 초과와 실행 중단

대량의 행을 반복 처리하는 코드를 짜면 6분 실행 한도에 걸려 스크립트가 중간에 멈출 수 있습니다. 이 경우 한 번에 처리할 데이터 양을 나누거나, 스크립트 안에 진행 상태를 저장해 다음 실행 때 이어서 처리하도록 설계하는 방식이 실무에서 자주 쓰입니다.

  • 실행 시간이 긴 작업은 시트 행 수를 배치로 나눠 처리합니다.
  • 외부 API 호출이 많으면 UrlFetchApp 호출 횟수도 별도 할당량이 있으니 확인합니다.
  • 스크립트 편집기의 ‘실행 기록’에서 실패 원인을 주기적으로 점검합니다.

다른 자동화 도구와 비교해서 선택하기

구글 앱스 스크립트는 구글 생태계 안에서는 무료로 강력하지만, 슬랙·노션·CRM 등 외부 서비스를 폭넓게 연결하려면 노코드 자동화 플랫폼이 더 편할 수 있습니다. 코드 작성 여력이 있고 구글 문서 중심 업무라면 앱스 스크립트가, 여러 외부 서비스를 코드 없이 연결하고 싶다면 재피어·메이크·n8n 같은 자동화 도구 비교를 참고해 상황에 맞는 도구를 고르는 것이 효율적입니다.

자주 묻는 질문

Q. 구글 앱스 스크립트는 완전히 무료인가요?

개인 구글 계정으로 사용하는 기본 기능은 무료입니다. 다만 실행 시간·이메일 발송 건수 등에는 계정 유형별 할당량이 있어, 그 범위를 넘는 대량 자동화는 별도 설계가 필요합니다.

Q. 코딩을 전혀 몰라도 사용할 수 있나요?

기본적인 자바스크립트 문법을 이해하면 시작하기 수월합니다. 다만 온라인에 공개된 예제 코드를 그대로 응용하는 방식으로도 간단한 자동화는 구현할 수 있어, 완전 초보자도 단계별 학습으로 접근 가능합니다.

Q. 회사 워크스페이스 계정에서도 개인 계정과 똑같이 쓸 수 있나요?

기능 자체는 같지만 관리자가 스크립트 실행이나 외부 공유를 제한해 둔 조직이라면 일부 기능이 막힐 수 있습니다. 회사 계정이라면 IT 담당 부서에 앱스 스크립트 사용 정책을 먼저 확인하는 것이 안전합니다.

Q. 만든 스크립트를 다른 사람과 공유할 수 있나요?

스크립트가 포함된 문서 자체를 공유하면 코드도 함께 열람·복사할 수 있습니다. 다만 트리거는 공유받은 사람이 별도로 재등록해야 정상 작동하는 경우가 많습니다.

Q. 스크립트 실행 중 오류가 나면 어떻게 확인하나요?

Apps Script 편집기 왼쪽 메뉴의 ‘실행 기록(실행 로그)’에서 실패한 실행 건과 오류 메시지를 확인할 수 있습니다. 오류 메시지에 표시되는 줄 번호를 기준으로 코드를 점검하면 원인을 빠르게 찾을 수 있습니다.

참고자료

관련 글 보기