- 띠로리 GitHub Actions에 cron을 설정했는데, 요청한 시간대에 돌지 않았어요

- --- 이전글 ---
- [제작기] GitHub Actions 기반 부동산 뉴스 자동 알림 봇 : https://gardentree.tistory.com/195
- [기능 정의서] GitHub Actions 기반 부동산 뉴스 자동 알림 봇 Build :https://gardentree.tistory.com/194
- cron: '0 22,3,9 * * *'
분명 한국시간 오전7시, 오후12시, 오후6시로 설정했는데 돌지않은너..
예상시간보다 40분 / 1시간 / 2시간이나 지연되어 실행되었다 @@

예정 시간 vs 실제 실행 시간 비교
| 회차 | 원래 예정 시간 (KST) | 실제 실행 시간 (KST) | 지연 시간 (지연 분포) |
| #8 | 7월 18일 저녁 18:00 | 7월 18일 저녁 19:11 | 약 1시간 11분 지연 |
| #9 | 7월 19일 오전 07:00 | 7월 19일 오전 07:40 | 약 40분 지연 |
| #10 | 7월 19일 낮 12:00 | 7월 19일 낮 14:43 | 약 2시간 43분 지연 |
왜?? 왜 늦게도는거야..??

지연이 발생하는 이유 3가지
- 정각('0'분)에 몰리는 전 세계적인 트래픽
- 설정하신 0 22,3,9 * * *에서 분 항목이 0으로 되어 있습니다. 전 세계 수많은 개발자가 크론을 설정할 때 0분(예: 오전 7시 정각, 12시 정각)으로 지정합니다.
- 이로 인해 해당 정각마다 GitHub Actions 서버에 요청이 폭주하여 대기 큐(Queue)가 길어지게 됩니다.
- 무료 티어(공용 서버)의 낮은 우선순위
- GitHub은 Enterprise나 Pro 요금제를 사용하는 사용자의 워크플로우에 자원을 먼저 할당하는 경향이 있습니다. 무료 계정의 크론 작업은 대기열의 뒤쪽으로 밀리기 쉽습니다.
- 시간대별 GitHub 서버 부하 차이
- #10 작업이 약 2시간 43분이나 지연된 이유는 한국 시간 낮 12시(UTC 3시) 전후로 아시아/유럽 지역의 빌드 및 크론 요청이 몰리는 피크 타임이었을 가능성이 높습니다. 반면 오전 7시(#9)는 상대적으로 부하가 적어 40분 만에 실행된 것입니다.
☁ Google Cloud Scheduler (추천)
- 무료 제공량: 계정당 매달 3개의 작업(Job)까지 완전 무료입니다. (실행 횟수 제한이 아니라 등록된 스케줄 개수 기준입니다.)
- 비용 판단: 현재 설정하신 매일 3회 실행 스케줄을 작업 1개로 등록해두면, 한 달에 수백 번이 돌더라도 요금이 0원입니다.
- 연동 방식: 정해진 시간에 GitHub Actions의 workflow_dispatch를 깨우는 HTTP POST 요청(웹훅)을 보내도록 설정합니다.
그렇게 하게된 Google Cloud Scheduler 방식!
Google Cloud Scheduler를 사용해서 GitHub Actions의 workflow_dispatch를 정각에 호출하는 구체적인 설정 방법과 웹훅 URL 구조
1. 사전 준비: GitHub PAT(토큰) 발급
Google Cloud가 내 GitHub 저장소에 접근해 워크플로우를 실행하려면 권한(토큰)이 필요합니다.
- GitHub 로그인 후 우측 상단 프로필 클릭 ➔ Settings로 이동합니다.
- 좌측 최하단의 Developer settings ➔ Personal access tokens ➔ Tokens (classic)을 선택합니다.
- Generate new token (classic)을 클릭합니다.
- Note에 구별할 이름(예: GCP-Scheduler-Trigger)을 적고, Expiration(만료일)을 필요에 맞게 설정합니다.
- Select scopes에서 repo 권한(전체 체크)을 선택합니다. (만약 공개 저장소이고 액션만 실행한다면 workflow 권한만 체크해도 됩니다.)
- 맨 아래 Generate token을 누른 후, 생성된 토큰 문자열(ghp_...)을 복사하여 안전한 곳에 저장해 둡니다. (창을 닫으면 다시 볼 수 없습니다.)


2. Google Cloud Scheduler 설정 방법
Google Cloud 콘솔에 로그인한 뒤, Cloud Scheduler 서비스로 이동하여 [작업 만들기]를 진행합니다.
1단계: 작업 정의
- 이름: daily-real-estate-news-bot-trigger (자유롭게 입력)
- 지역(Region): asia-northeast3 (서울)
- 빈도(Cron 표현식): 0 7,12,18 * * *
- 안내: GCP Scheduler는 설정을 변경하지 않으면 기본적으로 현지 시간(서울 시간) 기준 또는 사용자가 지정한 타임존 기준으로 작동합니다. 타임존 항목에서 **한국 표준시(KST)**를 선택하고 위처럼 입력하면, GitHub Actions와 달리 **한국 시간 정각(07:00, 12:00, 18:00)**에 정확히 실행됩니다.

2단계: 구성 실행 (웹훅 URL 및 Body 설정)
- 목표 유형: HTTP
https://api.github.com/repos/{소유자_ID}/{저장소_이름}/actions/workflows/{워크플로우_파일명}/dispatches
(예시)
https://api.github.com/repos/gildong/news-bot/actions/workflows/main.yml/dispatches
- HTTP 메서드: POST
- HTTP 헤더: 총 3개를 추가해야 합니다.
- 키 (Key)값 (Value)
키 (Key) 값 (Value)
| Accept | application/vnd.github+json |
| Authorization | Bearer ghp_발급받은토큰문자열 |
| User-Agent | GCP-Cloud-Scheduler |
본문(Body): 실행할 브랜치를 JSON 형태로 입력합니다. (일반적으로 main 또는 master)
json
{ "ref": "main" }
설정을 마친 후 [만들기]를 누르면 모든 연동이 완료됩니다.



최종 검증 및 팁
- 생성된 스케줄러 목록 우측의 [지금 실행] 버튼을 누르면 다음 정시까지 기다리지 않고 즉시 테스트해볼 수 있습니다.
- 외부 스케줄러가 정상 작동한다면, 기존 GitHub Actions YAML 파일에 있던 - cron: '0 22,3,9 * * *' 라인은 지우거나 주석 처리하셔도 됩니다. 수동 실행용 workflow_dispatch:만 남겨두면 됩니다.
--> cron.yml 파일 : https://github.com/gardenS2/newsBot/blob/main/.github/workflows/cron.yml
newsBot/.github/workflows/cron.yml at main · gardenS2/newsBot
Contribute to gardenS2/newsBot development by creating an account on GitHub.
github.com
강제실행하면

git actions 수행완료

FLOW ~

'IT > 서비스' 카테고리의 다른 글
| [Google AI Studio] 해외 유튜브 영상을 실시간 한국어 통역으로 듣기 (Gemini Live API 활용) (0) | 2026.07.22 |
|---|---|
| [버전업2] 뉴스자동화 (텔레그램 개인방->그룹방에 메신저 쏘기) (0) | 2026.07.22 |
| [제작기] GitHub Actions 기반 부동산 뉴스 자동 알림 봇 (0) | 2026.07.18 |
| [기능 정의서] GitHub Actions 기반 부동산 뉴스 자동 알림 봇 Build (0) | 2026.07.18 |