Google Apps Script로 반복 업무 자동화하기: 비개발자도 따라 하는 기본 예제와 실전 적용법

반복 입력 업무, Google Apps Script로 어디까지 줄일 수 있을까? ( (Google Calendar와 Notion으로 주간 업무 계획 자동화하는 실전 방법)Zapier와 Google Calendar로 반복 일정 등록 자동화하기)

직장 업무에서 시간이 많이 새는 지점은 의외로 복잡한 기획이 아닙니다. 매주 같은 형식의 보고서를 만들고, 시트 값을 확인하고, 담당자에게 알림을 보내고, 완료 여부를 표시하는 반복 작업입니다.

Google Apps Script는 구글 시트, Gmail, Google Drive 같은 구글 업무 도구를 연결해 반복 작업을 자동화할 수 있는 기능입니다. 별도 프로그램을 설치하지 않아도 되고, 구글 시트 안에서 바로 시작할 수 있어 비개발자도 실무에 적용하기 좋습니다.

이 글에서는 개념 설명보다 실제 업무 장면을 기준으로 진행합니다. 예제는 “구글 시트에서 마감일이 지난 업무를 찾아 담당자에게 메일을 보내는 자동화”입니다.

오늘 만들 자동화 예제: 마감 지난 업무 자동 알림

예를 들어 아래와 같은 업무 관리 시트가 있다고 가정합니다.

업무명 담당자 이메일 마감일 상태 알림발송
거래처 견적서 정리 sample1@company.com 2026-06-08 진행중
주간 실적 취합 sample2@company.com 2026-06-10 완료

목표는 간단합니다.

  • 상태가 완료가 아닌 업무를 찾습니다.
  • 마감일이 오늘보다 지났는지 확인합니다.
  • 담당자에게 알림 메일을 보냅니다.
  • 이미 보낸 업무는 다시 보내지 않도록 알림발송 칸에 표시합니다.

입력: 업무명, 담당자 이메일, 마감일, 상태가 적힌 구글 시트
결과: 마감 지난 미완료 업무 담당자에게 자동 메일 발송 + 시트에 발송 완료 표시

1단계: 구글 시트 준비하기

먼저 새 구글 시트를 만들고, 첫 번째 행에 아래 제목을 그대로 입력합니다.

A열 B열 C열 D열 E열
업무명 담당자 이메일 마감일 상태 알림발송

두 번째 행부터 실제 업무를 입력합니다. 여기서 중요한 점은 마감일을 날짜 형식으로 입력하는 것입니다. 예를 들어 “2026.06.08”처럼 텍스트로 입력하기보다 구글 시트가 날짜로 인식하도록 “2026-06-08” 형식을 권장합니다.

업무 목록 시트에서 마감일과 상태를 확인하는 흐름

2단계: Apps Script 편집기 열기

구글 시트 상단 메뉴에서 다음 순서로 이동합니다.

  1. 상단 메뉴에서 확장 프로그램 클릭
  2. Apps Script 클릭
  3. 새 창이 열리면 기존 코드를 지우고 아래 코드를 붙여넣기

처음 열면 function myFunction() {} 같은 기본 코드가 있을 수 있습니다. 그대로 지우고 아래 예제를 넣으면 됩니다.

3단계: 기본 자동화 코드 붙여넣기

function sendOverdueTaskEmails() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const data = sheet.getDataRange().getValues(); const today = new Date(); today.setHours(0, 0, 0, 0); for (let i = 1; i < data.length; i++) { const taskName = data[i][0]; const email = data[i][1]; const dueDate = new Date(data[i][2]); const status = data[i][3]; const sentStatus = data[i][4]; dueDate.setHours(0, 0, 0, 0); if (status !== "완료" && dueDate < today && sentStatus !== "발송완료") { const subject = "[업무 알림] 마감일이 지난 업무가 있습니다"; const body = "안녕하세요.\\n\\n" + "아래 업무의 마감일이 지났습니다.\\n\\n" + "업무명: " + taskName + "\\n" + "마감일: " + Utilities.formatDate(dueDate, "Asia/Seoul", "yyyy-MM-dd") + "\\n\\n" + "진행 상황을 확인해 주세요.\\n\\n" + "※ 이 메일은 Google Apps Script 자동화로 발송되었습니다."; MailApp.sendEmail(email, subject, body); sheet.getRange(i + 1, 5).setValue("발송완료"); } } }

이 코드가 실제로 하는 일

코드가 길어 보이지만 흐름은 단순합니다.

  • 시트 전체 데이터를 읽습니다.
  • 두 번째 행부터 한 줄씩 확인합니다.
  • 상태가 “완료”가 아니고, 마감일이 지났고, 아직 알림을 보내지 않은 업무만 찾습니다.
  • 담당자 이메일로 알림을 보냅니다.
  • E열에 “발송완료”라고 기록합니다.

여기서 E열에 발송 여부를 남기는 것이 실무에서 매우 중요합니다. 이 표시가 없으면 스크립트를 다시 실행할 때 같은 사람에게 같은 알림이 반복 발송될 수 있습니다.

4단계: 직접 실행해보기

Apps Script 화면 상단에서 함수 이름을 sendOverdueTaskEmails로 선택한 뒤, 실행 버튼을 누릅니다.

처음 실행할 때는 권한 승인 화면이 나옵니다. 구글 계정으로 로그인한 뒤, “이 스크립트가 이메일 발송과 스프레드시트 접근 권한을 사용한다”는 내용을 확인하고 승인합니다.

실행 후 결과는 다음처럼 확인할 수 있습니다.

실행 전 실행 후
E열이 비어 있음 마감 지난 업무의 E열에 “발송완료” 표시
담당자가 직접 확인해야 함 담당자에게 자동 알림 메일 도착

입력 예시: 상태가 “진행중”이고 마감일이 지난 업무
실행 결과: 담당자에게 알림 메일 발송, 시트에는 “발송완료” 표시

5단계: 매일 아침 자동 실행되게 만들기

수동 실행만으로도 테스트는 가능하지만, 실무 자동화의 목적은 사람이 매번 누르지 않아도 돌아가게 만드는 것입니다. Apps Script에서는 트리거를 설정하면 정해진 시간마다 자동 실행할 수 있습니다.

  1. Apps Script 왼쪽 메뉴에서 트리거 아이콘 클릭
  2. 오른쪽 아래 트리거 추가 클릭
  3. 실행할 함수: sendOverdueTaskEmails 선택
  4. 이벤트 소스: 시간 기반 선택
  5. 시간 기반 트리거 유형: 일 타이머 선택
  6. 시간대: 예를 들어 오전 8시~9시 선택
  7. 저장
업무 일정과 이메일 알림을 확인하는 사무실 장면

실무 적용 예시 3가지

예시 1. 주간 보고서 제출 현황 확인

부서별 주간 보고서 제출 여부를 구글 시트에 정리해두고, 상태가 “미제출”인 행만 찾아 담당자에게 알림을 보낼 수 있습니다.

입력: 부서명, 담당자 이메일, 제출기한, 제출상태
결과: 제출기한이 지났는데 상태가 “미제출”인 담당자에게 자동 안내

예시 2. 거래처 회신 지연 관리

견적 요청일, 회신 예정일, 담당 영업자, 회신 상태를 관리하는 시트에 적용할 수 있습니다. 회신 예정일이 지났는데 상태가 “대기”이면 담당자에게 확인 메일을 보냅니다.

입력: 거래처명, 담당자, 회신 예정일, 회신 상태
결과: 회신 지연 건만 추려 담당자에게 자동 알림

예시 3. 교육 신청자 명단 정리

교육 신청자 명단에서 승인 상태가 “대기”인 사람만 따로 추려 담당자에게 확인 요청 메일을 보낼 수 있습니다. 신청자가 많을수록 사람이 직접 필터링하는 시간을 줄일 수 있습니다.

실무에서 한 수준 높게 쓰는 조정 방법

1. 메일 제목에 업무명을 넣기

기본 코드는 모든 메일 제목이 같습니다. 담당자가 여러 업무를 맡고 있다면 제목에서 바로 구분되도록 바꾸는 것이 좋습니다.

const subject = "[업무 알림] " + taskName + " 마감일이 지났습니다";

이렇게 바꾸면 받은 편지함에서 어떤 업무인지 바로 확인할 수 있습니다.

2. 특정 부서만 자동화 대상으로 제한하기

사내 전체 데이터를 대상으로 하기 부담스럽다면 처음에는 특정 팀이나 특정 업무 유형만 적용하는 것이 안전합니다. 예를 들어 F열에 “자동알림대상”이라는 칸을 만들고, 값이 “Y”인 행만 처리하도록 바꿀 수 있습니다.

const autoTarget = data[i][5]; if (autoTarget === "Y" && status !== "완료" && dueDate < today && sentStatus !== "발송완료") { // 메일 발송 코드 }

이 방식은 처음 자동화를 도입할 때 유용합니다. 모든 업무에 한 번에 적용하지 않고, 검증된 업무부터 단계적으로 넓힐 수 있습니다.

사내에서 사용하기 전 반드시 확인할 점

Google Apps Script는 편리하지만, 회사 업무에 적용할 때는 자동화보다 먼저 확인해야 할 기준이 있습니다.

  • 개인정보 포함 여부: 주민등록번호, 계좌번호, 민감한 인사정보는 자동 메일 본문에 넣지 않는 것이 안전합니다.
  • 사내 보안 규정: 회사가 구글 워크스페이스 사용을 허용하는지, 외부 메일 발송 제한이 있는지 확인해야 합니다.
  • 발송 대상 검증: 테스트 단계에서는 실제 직원 이메일 대신 본인 이메일로 먼저 실행해 봅니다.
  • 반복 발송 방지: “발송완료” 같은 표시 열을 반드시 두어 중복 발송을 막습니다.
  • 권한 관리: 시트 공유 권한을 불필요하게 넓히지 않습니다. 자동화 담당자와 관련자만 접근하도록 제한하는 것이 좋습니다.

처음 자동화할 업무를 고르는 기준

처음부터 복잡한 업무를 자동화하려고 하면 실패 가능성이 높습니다. 아래 조건에 맞는 업무부터 시작하는 것이 현실적입니다.

자동화하기 좋은 업무 처음에는 피하는 것이 좋은 업무
규칙이 명확한 업무 사람의 판단이 많이 필요한 업무
매일 또는 매주 반복되는 업무 한 번만 처리하면 끝나는 업무
시트에 데이터가 정리된 업무 자료 형식이 매번 바뀌는 업무
알림, 표시, 분류 중심 업무 승인, 평가, 징계처럼 책임 판단이 필요한 업무

추천 순서는 “알림 자동화 → 상태 표시 자동화 → 보고서 초안 생성 → 파일 정리”입니다. 특히 알림 자동화는 결과가 바로 보이고, 실패했을 때도 수정하기 쉬워 입문용으로 적합합니다.

마무리: 자동화의 시작은 거창한 시스템이 아니라 작은 반복 제거

Google Apps Script는 개발자만 쓰는 도구처럼 보일 수 있지만, 실제로는 구글 시트를 자주 쓰는 직장인에게 매우 현실적인 자동화 도구입니다. 이번 예제처럼 “마감일 확인 → 담당자 알림 → 발송 표시” 정도만 자동화해도 매일 반복 확인하던 시간을 줄일 수 있습니다.

처음부터 완벽한 자동화 시스템을 만들 필요는 없습니다. 먼저 한 개의 시트, 한 개의 반복 업무, 한 개의 알림부터 시작하면 됩니다. 실행 후 결과가 눈에 보이면 그다음에는 보고서 취합, 파일 정리, 메일 발송, 일정 알림까지 자연스럽게 확장할 수 있습니다.

FAQ

Q1. 회사 업무 데이터를 Google Apps Script에 넣어도 괜찮나요?

회사 규정에 따라 다릅니다. 구글 워크스페이스 사용이 허용된 조직이라도 개인정보, 인사정보, 계약 금액, 고객 민감정보는 자동화 대상에서 제외하거나 최소한으로 사용해야 합니다. 처음에는 샘플 데이터나 본인 이메일로만 테스트한 뒤, 사내 보안 담당자 또는 팀 책임자에게 사용 범위를 확인하는 것이 안전합니다.

Q2. 코드를 잘못 실행하면 기존 시트 데이터가 사라질 수 있나요?

가능성은 있습니다. 특히 clear(), deleteRow(), setValue() 같은 코드는 데이터를 지우거나 바꿀 수 있습니다. 이 글의 예제는 E열에 “발송완료”를 입력하는 수준이지만, 실무 적용 전에는 반드시 원본 시트를 복사해 테스트용 시트에서 먼저 실행하는 것을 권장합니다.

Q3. 자동 메일이 너무 많이 발송될까 봐 걱정됩니다. 어떻게 막을 수 있나요?

중복 발송을 막으려면 발송 여부를 기록하는 열이 필요합니다. 이 글에서는 E열의 “알림발송” 칸에 “발송완료”를 남기도록 했습니다. 추가로 테스트 기간에는 수신자를 본인 이메일로 고정하거나, 자동화 대상 행에 “Y” 표시가 있는 경우에만 발송되도록 제한하면 더 안전하게 운영할 수 있습니다.