본문 바로가기
📮Git

GitHub Actions cron을 믿으면 안 되는 이유

by 캔 2026. 10. 4.

들어가며

GitHub Actions의 cron으로 워크플로를 정해진 시각에 돌리도록 예약해 두었는데, 그 시각이 지나도 잡이 돌지 않았다. Actions 탭을 새로고침해도 아무 기록이 없었고, 한참 지나서야 실행이 시작됐다.

 

처음에는 YAML 문법이나 브랜치 설정을 의심했다. 하지만 원인은 설정 오류가 아니라 GitHub Actions 스케줄 트리거의 성격 자체에 있었다.

 

나만 겪는 문제가 아니었다

원인을 찾으려고 구글에 why doesnt github actions fire on time 이라고 검색해 봤다. 첫 화면부터 같은 문제를 다룬 글이 줄줄이 나왔다.

 

 

화면 한 장에 보이는 것만 일곱 개였다. Stack Overflow 질문, DEV Community 글, GitHub 커뮤니티 토론 여러 개, 그리고 해결법을 정리한 기술 블로그까지 출처도 다양했다. 2년 전에 올라온 질문부터 최근 글까지 시기도 넓게 퍼져 있었다.

 

그만큼 오래전부터 많은 사람이 반복해서 겪고 있는 문제라는 뜻이다. 스니펫만 훑어봐도 비슷한 이야기가 반복된다. 많은 워크플로가 동시에 돌 때 스케줄이 지연될 수 있고, 가장 붐비는 시간은 매 시 정각이며, 정시 실행은 보장되지 않는다는 내용이다. 공개 저장소에서 60일간 활동이 없으면 스케줄이 꺼진다는 이야기도 있었다.

 

schedule 이벤트는 최선형(best effort)이다

GitHub 공식 문서는 schedule 이벤트가 부하가 높은 시간대에 지연될 수 있다고 명시한다. 부하가 충분히 크면 큐에 들어간 잡 일부가 아예 버려질 수도 있다고 한다. 즉 cron 표현식은 실행 시각의 보장이 아니라 실행 요청이 큐에 들어가는 시각의 기준에 가깝다.

 

스케줄 잡은 다른 모든 저장소의 push, PR, 수동 실행 잡과 같은 큐를 공유한다. 전 세계 사용자가 몰리는 시간에는 내 잡도 줄을 서야 한다.

 

정각이 가장 붐빈다

문서가 직접 꼽는 고부하 시간대가 매 시 정각이다. 대부분의 사람이 0 * * * * 이나 0 9 * * * 처럼 정각을 습관적으로 적기 때문에 같은 순간에 요청이 몰린다.

 

한국 사용자라면 하나 더 조심해야 한다. cron은 UTC 기준이라서 한국 시간 오전 9시에 맞추려면 0 0 * * * 으로 적게 된다. 정각 중에서도 가장 흔한 조합이라 경쟁이 특히 심하다.

 

on:
  schedule:
    - cron: '0 0 * * *'   # KST 09:00, 가장 붐비는 슬롯

 

늦는 것보다 빠지는 것이 더 위험하다

지연은 불편하지만 언젠가는 실행된다. 진짜 문제는 누락이다. 드롭된 실행은 Actions 탭에 기록도 로그도 실패 메일도 남지 않는다. GitHub는 워크플로가 실패하면 알려 주지만, 시작조차 안 한 워크플로는 알려 주지 않는다.

 

그래서 조용하다는 사실을 성공으로 읽으면 안 된다. 인증서 갱신이나 글 발행처럼 안 돌았다는 것 자체가 장애인 작업이라면 더 그렇다.

 

지연 폭도 생각보다 크다. 커뮤니티에는 몇 분이 아니라 몇 시간씩 밀린다는 보고가 꾸준히 올라온다. 정각을 피해 설정했는데도 소용없었다는 후기도 있다.

 

해결 방법

1. 정각을 피해 어긋난 분으로 설정한다

가장 싸고 즉시 적용할 수 있는 방법이다. 3, 17, 43처럼 사람들이 잘 고르지 않는 분을 쓴다.

 

on:
  schedule:
    - cron: '17 0 * * *'   # KST 09:17

 

다만 평소의 지연을 줄여 주는 정도의 최적화일 뿐이다. 대기열이 몇 시간씩 밀리는 날에는 몇 분 앞당겨 봐야 의미가 없다. 시각이 중요한 작업의 근본 해결책은 아니다.

 

2. 시각이 중요하면 시계를 GitHub 밖에 둔다

정해진 시각에 꼭 실행돼야 하는 작업은 GitHub의 큐에 시각 결정권을 맡기지 않는 편이 낫다. 클라우드 스케줄러나 직접 운영하는 서버의 cron, systemd timer가 정해진 시각에 API로 workflow_dispatch를 호출하게 만든다. GitHub는 실행만 맡고 시계는 다른 곳이 쥐는 구조다.

 

on:
  workflow_dispatch:
  schedule:
    -

'📮Git' 카테고리의 다른 글

Git 주요 명령어  (0) 2026.08.31
SVN(SubVersioN) 주요 명령어  (0) 2026.08.31
Git 명령어만 정리  (0) 2022.02.03