구글 앱스 스크립트 사용법, 자동화 예시 5개
구글 앱스 스크립트로 시트 · 메일 · 폼 · 캘린더 반복 일을 자동으로 돌리는 법을 정리했습니다. 첫 실행과 권한 승인 순서, 예시 5개와 바로 붙여 쓰는 코드 2개, 개인 · 워크스페이스 계정 할당량 표, 외주 개발로 넘길 기준을 담았습니다.

구글 앱스 스크립트(Google Apps Script)는 구글 계정이 있으면 브라우저 편집기에서 바로 코드를 써서 시트 · 메일 · 폼 · 캘린더 · 문서를 잇고, 정한 시각이나 폼 제출 때 반복 일을 자동으로 돌리는 도구입니다. 설치할 프로그램은 없고 스크립트는 드라이브에 저장돼 구글 서버에서 실행됩니다. 대신 계정 종류별 하루 할당량과 「한 번 실행 6분」 한도가 있어, 그 안에 들어가는 일부터 맡깁니다. 아래에 되는 일 지도, 첫 실행 순서, 예시 5개와 코드 2개, 한도 표, 외주 개발로 넘길 기준을 정리했습니다.
구글 앱스 스크립트로 무엇을 자동화할 수 있나요
구글 공식 문서는 앱스 스크립트를 구글 워크스페이스와 이어지는 업무용 앱을 빠르게 만드는 개발 플랫폼으로 소개합니다. 자바스크립트로 쓰고, 앱마다 준비된 기본 서비스를 불러 씁니다.
| 앱 | 부르는 서비스 | 자동으로 돌릴 수 있는 일(예) |
|---|---|---|
| 구글 시트 | SpreadsheetApp | 행 읽기 · 쓰기 · 정리, 시트 사이 옮겨 적기, 사용자 지정 함수 |
| Gmail | MailApp · GmailApp | 알림 메일 · 보고 메일 보내기, 받은 메일 읽어 시트에 적기 |
| 구글 폼 | FormApp · 폼 제출 트리거 | 응답이 들어올 때마다 함수 실행 |
| 구글 캘린더 | CalendarApp | 시트의 날짜로 일정 만들기 · 바꾸기 |
| 문서 · 드라이브 | DocumentApp · DriveApp | 틀 문서를 복사해 이름 · 금액만 바꾼 문서 여러 장 만들기, 폴더 정리 |
| 외부 서비스 | UrlFetchApp | 메신저 웹후크로 알림 보내기, 다른 서비스 API 부르기 |
시트에 버튼 메뉴를 다는 일, 웹 주소로 여는 간단한 웹앱을 배포하는 일도 공식 문서에 나오는 쓰임새입니다. 엑셀 파일 안에서 끝나는 반복이라면 엑셀 자동화, 함수 · 매크로 · 파워 쿼리 중 무엇으로 하나를 먼저 보고, 시트 · 메일 · 폼을 오가는 일이면 앱스 스크립트를 고릅니다.
구글 앱스 스크립트 사용법 — 첫 실행은 어떻게 하나요
- 편집기 열기 — 쓸 구글 시트에서 「확장 프로그램 > Apps Script」를 누르면 그 시트에 묶인 프로젝트가 열립니다. 시트 없이 시작하려면 script.google.com에서 「새 프로젝트」를 누릅니다.
- 코드 붙여넣기 · 저장 — 편집기에 있던 코드를 지우고 아래 예시를 붙여 넣은 뒤 저장하고, 「제목 없는 프로젝트」를 눌러 이름을 바꿉니다.
- 실행 · 권한 승인 — 위쪽에서 함수를 고르고 실행을 누르면, 처음 한 번 권한을 묻는 창이 뜹니다. 앱스 스크립트는 코드를 훑어 쓰는 서비스(시트 · 메일 등)에 맞는 권한을 자동으로 정하고, 직접 실행할 때는 실행하는 사용자의 권한으로 돕니다. 동의 화면에 「이 앱은 인증되지 않았습니다」 경고가 나오면 공식 예제 안내대로 「고급 > {프로젝트 이름}(안전하지 않음)으로 이동」을 눌러 계속합니다. 남이 준 코드는 무엇을 읽고 보내는지 읽어 본 뒤 승인합니다.
- 트리거 걸기 — 편집기 왼쪽의 트리거(시계 아이콘) → 오른쪽 아래 「트리거 추가」 → 실행할 함수와 이벤트(시간 · 폼 제출 등)를 고르고 저장합니다.
- 실행 기록 보기 — 실패한 실행은 편집기 왼쪽의 실행 기록에서 오류 메시지와 함께 확인합니다.
코드에 새 서비스를 더하면 승인을 다시 받아야 합니다. 트리거가 「승인 필요」 오류로 멈추면, 공식 문서 안내대로 편집기에서 함수를 한 번 직접 실행해 승인 창을 다시 띄웁니다.
구글 앱스 스크립트 예제 5개는 어떻게 짜나요
다섯 가지를 트리거와 흐름으로 정리했습니다. 1 · 2번은 코드를 붙였고, 3~5번은 쓰는 서비스와 순서만 적었습니다.
| 예시 | 트리거 | 흐름 |
|---|---|---|
| 1. 폼 응답 → 메일 알림 | 폼 제출(시트에서) | 응답 한 줄을 「질문: 답」으로 묶어 담당자에게 메일 |
| 2. 매일 아침 보고 메일 | 시간 기반 — 매일 9시대 | 「일별」 시트 맨 아래 줄을 머리글과 짝지어 메일 |
| 3. 시트 → 캘린더 일정 | 시간 기반 또는 메뉴 버튼 | 날짜 · 제목 칸을 읽어 CalendarApp 으로 일정 생성, 만든 줄에 「등록함」 표시 |
| 4. 문서 일괄 생성 | 메뉴 버튼 | 틀 문서를 DriveApp 으로 복사 → DocumentApp 으로 %회사명% 같은 자리 표시를 시트 값으로 바꿈 |
| 5. 메신저 알림 | 폼 제출 또는 시간 기반 | UrlFetchApp 으로 메신저가 준 웹후크 주소에 알림 문장을 전송 |
예시 1 — 폼 응답이 연결된 시트에서 편집기를 열고 붙여 넣은 뒤, 트리거 추가에서 실행할 함수는 notifyNewResponse, 이벤트 소스는 스프레드시트, 이벤트 유형은 폼 제출로 고릅니다. 시트 쪽 폼 제출 이벤트는 질문 제목과 답을 묶은 namedValues 를 넘겨줍니다.
function notifyNewResponse(e) {
const v = e.namedValues; // { '질문 제목': ['답'] }
const body = Object.keys(v)
.map((q) => q + ': ' + v[q].join(', '))
.join('\n');
MailApp.sendEmail('받을 메일 주소', '새 문의가 들어왔습니다', body);
}
예시 2 — 「일별」 시트 1행이 머리글, 맨 아래 줄이 어제 숫자라고 가정했습니다. createMorningTrigger 를 한 번만 실행하면 트리거가 만들어집니다.
function sendDailyReport() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('일별');
const rows = sheet.getDataRange().getValues();
const last = rows[rows.length - 1];
const body = rows[0].map((h, i) => h + ': ' + last[i]).join('\n');
MailApp.sendEmail('받을 메일 주소', '어제 숫자 보고', body);
}
function createMorningTrigger() {
ScriptApp.newTrigger('sendDailyReport').timeBased().atHour(9).everyDays(1).create();
}
두 코드는 공식 문서의 메서드만 썼고, 구글 서비스를 흉내 낸 가짜 객체로 넘기는 값과 메일 본문이 맞게 나오는지 확인했습니다. 「받을 메일 주소」 자리에 실제 주소를 넣어 씁니다. 시간 기반 트리거는 정확한 시각이 아니라 그 시간대 안에서 돕니다 — 9시로 정하면 9시와 10시 사이 한 시각을 골라 날마다 비슷한 때에 실행합니다.
구글 앱스 스크립트는 무료인가요 — 한도는 얼마인가요
개인 계정(gmail.com)으로도 쓸 수 있고, 공식 할당량 문서는 개인 계정과 워크스페이스 계정의 한도를 나눠 적어 둡니다. 스크립트 실행에 붙는 요금 항목은 할당량 문서에 없고, 회사 계정이면 워크스페이스 구독료는 따로입니다. 아래는 2026년 10월 15일에 확인한 값이며, 구글은 예고 없이 바꿀 수 있다고 적고 있습니다.
| 항목 | 개인 계정 | 워크스페이스 계정 |
|---|---|---|
| 메일 받는 사람 수(MailApp 등) | 하루 100명 | 하루 1,500명 |
| 트리거 실행 시간 합계 | 하루 90분 | 하루 6시간 |
| 한 번 실행 시간 | 6분 | 6분 |
| 사용자 지정 함수 실행 시간 | 30초 | 30초 |
| 트리거 개수 | 스크립트당 사용자별 20개 | 스크립트당 사용자별 20개 |
| 캘린더 일정 생성 | 하루 5,000건 | 하루 10,000건 |
| 문서 생성 | 하루 250건 | 하루 1,500건 |
| 외부 주소 호출(URL Fetch) | 하루 20,000회 | 하루 100,000회 |
할당량은 사용자별로 세고, 첫 요청부터 24시간 뒤에 다시 채워집니다. 무료 체험 중인 워크스페이스 계정은 한도가 더 낮습니다. 메일 남은 수는 MailApp.getRemainingDailyQuota() 로 확인할 수 있어, 대량 발송 전에 한 줄 넣어 두면 중간에 멈추는 일을 줄입니다.
트리거는 누구 계정으로 돌아가나요
- 만든 사람 계정 — 설치형 트리거는 만든 사람의 권한으로 실행됩니다. 동료가 시트를 열어 트리거가 돌아도 메일은 만든 사람 계정에서 나갑니다.
- 담당자가 바뀔 때 — 다른 계정이 만든 트리거는 내 화면에 보이지 않습니다. 새 담당자 계정에서 트리거를 다시 만들고, 옛 트리거는 script.google.com 「내 트리거」에서 지웁니다.
- 단순 트리거의 한계 — 함수 이름만으로 도는 onOpen · onEdit 같은 단순 트리거는 승인이 필요한 서비스를 못 쓰고 30초를 넘길 수 없어, 메일을 보내려면 설치형 트리거를 씁니다.
- 실패 알림 — 트리거 실행이 실패하면 화면 대신 실패 요약 메일이 오고, 메일 속 링크로 트리거를 끄거나 고칠 수 있습니다.
외주 개발로 넘길 때는 언제인가요
아래 가운데 두 가지 이상이 겹치면 시트 위 스크립트보다 별도 업무 시스템을 검토할 때입니다.
- 한 번에 처리할 양이 6분 안에 끝나지 않거나, 하루 트리거 실행 합계를 넘습니다.
- 보내야 할 메일 수가 계정의 하루 수신자 한도를 넘습니다.
- 여러 사람이 같은 화면에서 동시에 입력 · 승인합니다.
- 고객 개인정보를 많이 다뤄 권한 · 기록 관리를 따로 해야 합니다.
- 외부 시스템 여러 곳과 계속 주고받습니다.
무엇부터 자동화할지 고르는 순서는 업무 자동화, 어디서부터 시작하나에 정리돼 있습니다. 외주로 넘길 때는 지금 돌고 있는 스크립트와 트리거 목록, 시트 구조를 그대로 넘기면 프로그램 개발 요구 사항 문서의 바탕이 됩니다.
자주 묻는 질문
컴퓨터를 꺼 두어도 트리거가 도나요?
스크립트는 구글 서버에서 실행되므로, 시간 기반 · 폼 제출 트리거는 내 컴퓨터가 꺼져 있어도 돕니다. 코드를 고치거나 실행 기록을 볼 때만 브라우저로 편집기를 엽니다.
웹앱으로도 만들 수 있나요?
공식 문서는 단독 웹앱이나 구글 사이트에 넣는 웹앱을 배포할 수 있다고 안내합니다. 웹앱은 배포할 때 고른 옵션에 따라 「접속한 사용자」 또는 「스크립트 소유자」 권한으로 실행되므로, 누구 권한으로 돌릴지를 먼저 정합니다.
시트를 공유하면 스크립트도 같이 가나요?
시트에 묶인 스크립트는 시트 사본을 만들면 함께 복사됩니다. 설치형 트리거는 만든 사람 계정으로 걸린 것이라, 사본에서는 트리거 목록을 열어 보고 필요하면 새 담당자 계정으로 다시 겁니다.
한도를 넘으면 어떻게 되나요?
스크립트가 예외를 내고 멈추며, 「Service invoked too many times」 같은 메시지가 실행 기록에 남습니다. 할당량은 첫 요청부터 24시간 뒤에 다시 채워지므로, 큰 작업은 여러 번에 나눠 트리거로 돌립니다.
오늘 할 일
매주 손으로 옮겨 적는 시트 하나를 골라 「확장 프로그램 > Apps Script」를 열고, 예시 2를 붙여 머리글 · 시트 이름만 바꿔 한 번 실행해 보십시오. 메일이 오면 createMorningTrigger 를 실행해 다음 날 아침부터 자동으로 받습니다.
이어서 읽기 — 카카오톡 챗봇, 자동응답 만드는 6단계와 비용 · 노션 사용법, 위키 만드는 순서와 템플릿 5개 · AI 코딩, 비개발자용 명세 5칸 양식과 검토표 · 구글 스프레드시트 사용법, 공유 업무표 8단계



