구글 스프레드 시트 자동화(4) - 트리거 사용하기

chaejm55·2021년 8월 30일
0

1. 트리거

GAS에서 제공하는 스크립트 자동 실행 서비스이다. 스프레드 시트 수정과 열기 등 스프레드 시트 기반, 시간 기반, 캘린더 기반의 이벤트로 스크립트를 자동실행할 수 있다. 이번 포스팅에서는 가장 많이 사용 될 시간기반을 알아 보겠다. 트리거는 스크립트 편집기 페이지의 왼편에 있는 시계 모양의 아이콘을 클릭하면 접근 가능하다.

2. 시간 기반 트리거

1) 기본 Trigger


트리거 페이지로 이동해 새 트리거를 만들어보자.


저번 포스팅에서 사용한 scraper 함수를 선택해주자. 현재 따로 배포는 없기 때문에 그대로 두면 된다. 시간 기반 중에서도 일 단위 타이머를 선택해 하루마다 스크립트를 실행하도록 설정해주자. 시간대는 원하는 시간대를 골라주면 해당 시간대에 자동으로 실행이 된다. 실패 시 아래 사진 처럼 구글 메일로 알림이 온다.

2) Installable Trigger

스크립트에 코드를 추가하여 Installable Trigger를 사용해보자. 공식문서에 명시된 내용을 토대로 installabe trigger를 작성해보자.


scaper.gs

function setInstallableTrigger() {
  ScriptApp.newTrigger("scraper")
    .timeBased()
    .atHour(8)
    .nearMinute(30)
    .create();                                
}
...
  • newTrigger("scraper"): 새 트리거를 생성한다. 파라미터로 실행 시킬 함수 이름을 정해주어야한다.
  • .timeBased(): 트리거 이벤트를 시간 기반으로 정한다.
  • .nearMinute(30): 위의 코드에선 약 오전 8시 15분 ~ 8시 45분 사이에 트리거가 실행된다. 설정된 시간에서 약 15분 정도 오차가 발생할 수 있다고 한다.

해당 Trigger를 사용하려면 이전에 생성했던 트리거 설정을 수정하여 실행할 함수를 setInstallableTrigger()로 바꿔주거나 수동으로 실행시켜주자.
그런데 이렇게 하면 동일한 트리거가 계속 생성 될 수 있기 때문에 이를 체크하는 함수를 만들어 사용하자.
scaper.gs

function checkIfTriggerExists(eventType, handlerFunction) {
  var triggers = ScriptApp.getProjectTriggers();
  var triggerExists = false;
  triggers.forEach(function (trigger) {
    if(trigger.getEventType() === eventType &&
      trigger.getHandlerFunction() === handlerFunction)
      triggerExists = true;
  });
  return triggerExists;
}
function setInstallableTrigger() {
  if (!checkIfTriggerExists(ScriptApp.EventType.CLOCK, "scraper")) {
    ScriptApp.newTrigger("scraper")
      .timeBased()
      .atHour(9)
      .nearMinute(30)
      .everyDays(1)
      .create();
  }
  else {
    console.log("[scraper] trigger already Exist.")
  }                                
}
...
  • ScriptApp.EventType.CLOCK: 시간 기반 트리거를 의미한다
  • handlerFunction: ScriptApp.newTrigger("scraper")에서 인자로 넘긴 문자열(scraper)를 넣어주면된다.

이렇게 하면 여러번 실행해도 트리거가 중복으로 생성되지 않는다.

3. 로그 확인하기

왼쪽 아이콘에서 트리거 바로 아래의 아이콘을 클릭하면 스크립트 실행 로그를 확인할 수 있다.

실행 유형, 실행 시간, 상태 등을 확인 가능하다.

4. 마무리

트리거로 직접 실행시키지 않고도 자동으로 편리하게 스크립트를 실행시킬 수 있게 되었다. 다만 트리거 실행에는 일일 제한량이 있다. 기본 계정은 하루에 총 90분 실행이 가능하고, workspace 계정이면 하루에 총 6시간 실행가능하다. 다른 여러 제한은 링크를 확인하자

5.Reference

Quotas for Google Services - https://developers.google.com/apps-script/guides/services/quotas
Create triggers programmatically using Apps Script - https://spreadsheet.dev/create-triggers-programmatically-using-apps-script
Google apps script time-driven_events - https://developers.google.com/apps-script/guides/triggers/events#time-driven_events

profile
여러가지를 시도하는 학생입니다

0개의 댓글