매일 8시에 오라고 했는데 8시에 오지 않습니다 — 정해진 시간에 도는 자동화가 어긋나는 이유

「매일 아침 8시에 어제 실적이 메일로 오게 해 주세요.」 자동화 요청 중에서 가장 흔한 형태입니다. 그런데 이렇게 만들어 두면 대개 8시에 오지 않습니다. 8시와 9시 사이 어딘가에 오거나, 그날은 안 오거나, 뉴욕 시간 8시에 옵니다.

아침 보고 메일을 만들면서 이 어긋남을 직접 쟀고, n8n을 PC에 두고 쓰면서 다른 종류의 어긋남도 봤습니다. 원인은 다섯 가지였습니다.

1. 「8시 정각」이라는 선택지가 없습니다

구글 시트에 붙은 Apps Script로 매일 도는 트리거를 걸면, 「일 단위 타이머」를 고른 뒤 시간을 고르는 목록이 이렇게 나옵니다.

자정~오전 1시 사이
오전 1시~오전 2시 사이
…
오전 8시~오전 9시 사이
…

08:00을 고르는 칸이 없습니다. 「오전 8시~오전 9시 사이」가 있을 뿐이고, 그 한 시간 안 어디에서 돌지는 구글이 정합니다. 공식 문서에도 그렇게 적혀 있습니다.

실제로 얼마나 어긋나는지 재 봤습니다. 아침까지 기다릴 수 없어서 저녁 창으로 걸었습니다.

걸어 둔 것 실제 시작 어긋남
특정 날짜 및 시간 20:52 20:52:09 9초
특정 날짜 및 시간 21:41 21:41:54 54초
일 단위 타이머 「오후 9시~오후 10시 사이」 21:28:21 창이 열리고 28분
일 단위 타이머 「오후 10시~오후 11시 사이」 22:42:47 창이 열리고 42분

「일 단위 타이머」는 두 번 다 창의 한가운데 근처였습니다. 두 번뿐이라 「보통 몇 분」이라고는 못 합니다. 다만 「오전 8시~오전 9시 사이」로 걸고 8시에 메일이 와 있기를 기대하면 안 된다는 것은 충분했습니다. 8시 회의 전에 보려면 「오전 7시~오전 8시 사이」로 걸어야 합니다.

문서는 한 번 정해진 시각을 날마다 유지한다고 적고 있는데, 저희는 여러 날에 걸쳐 같은 시각에 도는지는 재지 못했습니다.

「특정 날짜 및 시간」은 지정한 분 안에 돌았습니다. 대신 이름 그대로 한 번만 돕니다. 돌고 나면 목록에 「사용 중지됨」으로 남고, 다음 날 다시 돌지 않습니다. 매일 정각이 필요하다고 이걸로 대신할 수는 없었습니다.

매일 도는 시간 트리거가 정각이 아니라 한 시간 창 안에서 실행되는 것을 보여 주는 그림 — 오전 8시~9시 창에서 창 시작 28분·42분 뒤 위치, 8시 전에 받으려면 7시~8시 창

2. 시간대가 두 군데 있고, 기본값이 뉴욕일 수 있습니다

n8n에서 실패 알림을 만들 때 워크플로 설정의 「Timezone」 기본값이 America/New York이었습니다. 실행 기록의 시각도 -04:00이 붙은 뉴욕 시각으로 찍혔습니다. 이대로 「매일 아침 9시」 스케줄을 걸면 뉴욕 아침 9시, 한국 시간으로 밤에 돕니다. n8n 공식 문서에도 기본값이 적혀 있습니다.

Apps Script는 시간대를 보는 곳이 두 군데였습니다. 시트의 「파일 → 설정 → 시간대」와 Apps Script의 「프로젝트 설정 → 시간대」입니다. 아침 보고 메일을 만든 계정에서는 둘 다 서울이었지만, 계정 하나만 본 것이라 늘 그렇다고는 못 합니다. 그래서 코드 안에서 날짜를 글자로 만들 때는 시간대를 매번 적었습니다. 설정이 바뀌어도 「어제」가 하루 밀리지 않게 하려는 것입니다.

만들기 전에 시간대부터 확인하는 것이 순서입니다. Apps Script는 트리거를 거는 화면의 시간 목록 아래에 (GMT+09:00)이 작게 붙어 있고, n8n은 워크플로 설정의 「Timezone」 칸에서 보입니다.

3. 그 시각에 도는 곳이 꺼져 있으면, 놓친 것은 다시 돌지 않습니다

Apps Script는 구글 서버에서 돌지만, n8n을 사무실 PC에 깔아 쓰면 그 PC가 켜져 있고 n8n이 떠 있어야 스케줄이 돕니다.

n8n을 껐다 켰을 때 재기동에 239초가 걸렸고, 그 4분 동안 스케줄 워크플로는 돌지 않았습니다. 그리고 켜진 뒤에 놓친 실행을 몰아서 돌리지도 않았습니다. 8시 스케줄이 있는데 7시 58분에 PC가 재부팅되면, 그날 8시 몫은 그냥 없습니다. npx로 켜는 n8n은 켤 때마다 2분 이상 걸렸으니, 재부팅이 조금만 겹쳐도 빠집니다.

n8n이 PC를 켤 때 자동으로 뜨게 해 둔 설정도 조건이 있었습니다. 관리자 권한 없이 걸 수 있었던 것은 「이 사용자가 로그온할 때」뿐이라, 그 계정으로 누군가 로그인해야 n8n이 뜹니다. 밤사이 윈도우 업데이트로 재부팅된 PC는, 아침에 누가 로그인하기 전까지 스케줄이 돌지 않습니다. 절전에서 깨어날 때 어떻게 되는지는 확인하지 못했습니다.

4. 첫 실행이 언제인지, 그리고 첫 실행에서 죽을 수 있습니다

일 단위 타이머를 저녁에 걸었더니, 그날 저녁 창에 바로 돌았습니다. 「내일부터」가 아니었습니다. 아침 창으로 걸면 다음 날 아침이 첫 실행이 될 텐데, 그것은 기다리지 못해 확인하지 못했습니다.

더 중요한 것은 그 첫 실행이 실패했다는 점입니다.

TypeError: today.getDay is not a function

편집기에서 날짜를 넣어 세 번 시험했고 세 번 다 통과한 코드였습니다. 그런데 트리거로 처음 돌 때 죽었습니다. 시간 기반 트리거도 첫 인자로 이벤트 정보를 넣어 주는데, 코드는 그 자리에 날짜가 오거나 비어 있을 거라고 가정했습니다. 편집기에서 됐다는 것이 트리거에서도 된다는 뜻이 아니었습니다.

이걸 가장 빨리 잡는 방법은 「특정 날짜 및 시간」에 몇 분 뒤 시각을 넣어 트리거로 한 번 돌려 보는 것이었습니다. 지정한 분 안에 돌기 때문에, 한 시간 창을 기다리지 않고 「트리거로 돌 때」를 시험할 수 있습니다. 매일 도는 트리거를 걸기 전에 이걸 한 번 하십시오.

5. 화면이 보여 주는 시각을 믿기 어렵습니다

마지막은 어긋남이 아니라, 어긋났는지 확인하는 화면의 문제입니다.

Apps Script 트리거 목록에는 「시간 기반」이라고만 나옵니다. 한 번만 도는 것과 매일 도는 것이 목록에서 똑같아 보였고, 어느 것인지는 줄에 마우스를 올려 연필(트리거 수정)을 눌러야 보였습니다. 한 번 돌고 끝난 트리거도 지워지지 않고 남아 있어서, 목록의 줄 수가 돌고 있는 자동화 수가 아니었습니다.

n8n 자동 시작에 쓴 윈도우 작업 스케줄러에서는 「마지막 실행 시간」이 틀린 값을 보여 줬습니다. 이미 떠 있어서 새로 띄우지 않고 거절한 시각이 「마지막 실행 시간」으로 바뀌었습니다. 아무것도 안 돌았는데 시각이 갱신되니, 이 칸으로 「언제 켜졌나」를 읽으면 틀립니다. 실제 켜진 시각은 스크립트가 남긴 기록 파일에 있었습니다.

실제로 언제 돌았는지는 실행 기록(Apps Script는 「실행」 메뉴의 시작 시각, n8n은 실행 목록)과 자동화가 스스로 남긴 기록으로 봐야 했습니다.

매일 도는 자동화를 걸 때 점검표

  1. 원하는 시각보다 한 시간 앞 창으로 겁니다. 8시에 받으려면 7~8시 창
  2. 시간대를 두 군데 다 봅니다. n8n은 기본값이 뉴욕이고, Apps Script는 시트와 프로젝트 설정
  3. 코드 안에서 날짜를 만들 때는 시간대를 직접 적습니다
  4. 걸기 전에 「특정 날짜 및 시간」으로 몇 분 뒤에 한 번, 트리거로 돌려 봅니다
  5. PC에서 도는 도구라면 그 시각에 PC와 도구가 켜져 있는지, 재부팅 뒤에 누가 로그인해야 하는지 확인합니다
  6. 기록이 없는 날에도 「없음」이라고 보내게 합니다. 안 오면 그날 멈춘 것을 압니다
  7. 확인은 목록이 아니라 실행 기록의 시작 시각으로 합니다

이 글이 다루지 않은 것

여러 날에 걸쳐 같은 시각에 도는지는 재지 못했습니다. 문서의 「keeps that timing consistent from day to day」 문장만 옮겼습니다.

일 단위 타이머 실측은 두 번입니다. 아침 창에서는 재지 않았습니다.

공휴일, 절전, 재부팅 뒤 실제 기동은 확인하지 못했습니다.

요약

어긋나는 이유 기록 대책
정각이 없음 「오전 8시~오전 9시 사이」, 실측 창 열리고 28분·42분 한 시간 앞 창
시간대 n8n 기본 America/New York, Apps Script는 두 군데 걸기 전에 확인, 코드에 시간대 명시
도는 곳이 꺼짐 n8n 재기동 239초 동안 안 돌고, 놓친 것도 안 돌림 켜져 있는 곳에 두기, 로그인 조건 확인
첫 실행 저녁에 건 것은 그날 저녁에 바로, 첫 실행에서 TypeError 「특정 날짜 및 시간」으로 한 번 먼저
화면의 시각 목록은 「시간 기반」만, 「마지막 실행 시간」이 거절 시각으로 갱신 실행 기록으로 확인

「매일 8시」는 사람에게는 한 가지 뜻이지만, 도구에게는 한 시간 창, 어느 나라 시간, 켜져 있을 때만, 이라는 조건이 붙어 있었습니다.

참고 (2026-09-23 확인)
– Google Apps Script 공식 문서 — 설치형 트리거, Time-driven triggers (developers.google.com/apps-script/guides/triggers/installable): 「The time might be slightly randomized—for example, if you create a recurring 9 AM trigger, Apps Script chooses a time between 9 AM and 10 AM, then keeps that timing consistent from day to day so that 24 hours elapse before the trigger fires again.」
– n8n 공식 문서 — Set the timezone (https://docs.n8n.io/deploy/host-n8n/configure-n8n/basic-configuration/configuration-examples/set-the-timezone): 「The default timezone is America/New_York. For instance, the Schedule node uses it to know at what time the workflow should start. To set a different default timezone, set GENERIC_TIMEZONE to the appropriate value.」

Leave a Comment