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

 


 

- 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가지

  1. 정각('0'분)에 몰리는 전 세계적인 트래픽
    • 설정하신 0 22,3,9 * * *에서 분 항목이 0으로 되어 있습니다. 전 세계 수많은 개발자가 크론을 설정할 때 0분(예: 오전 7시 정각, 12시 정각)으로 지정합니다.
    • 이로 인해 해당 정각마다 GitHub Actions 서버에 요청이 폭주하여 대기 큐(Queue)가 길어지게 됩니다.
  2. 무료 티어(공용 서버)의 낮은 우선순위
    • GitHub은 Enterprise나 Pro 요금제를 사용하는 사용자의 워크플로우에 자원을 먼저 할당하는 경향이 있습니다. 무료 계정의 크론 작업은 대기열의 뒤쪽으로 밀리기 쉽습니다.
  3. 시간대별 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 저장소에 접근해 워크플로우를 실행하려면 권한(토큰)이 필요합니다.

  1. GitHub 로그인 후 우측 상단 프로필 클릭 ➔ Settings로 이동합니다.
  2. 좌측 최하단의 Developer settingsPersonal access tokens ➔ Tokens (classic)을 선택합니다.
  3. Generate new token (classic)을 클릭합니다.
  4. Note에 구별할 이름(예: GCP-Scheduler-Trigger)을 적고, Expiration(만료일)을 필요에 맞게 설정합니다.
  5. Select scopes에서 repo 권한(전체 체크)을 선택합니다. (만약 공개 저장소이고 액션만 실행한다면 workflow 권한만 체크해도 됩니다.)
  6. 맨 아래 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" }

설정을 마친 후 [만들기]를 누르면 모든 연동이 완료됩니다.

 

최종 검증 및 팁

  1. 생성된 스케줄러 목록 우측의 [지금 실행] 버튼을 누르면 다음 정시까지 기다리지 않고 즉시 테스트해볼 수 있습니다.
  2. 외부 스케줄러가 정상 작동한다면, 기존 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 ~ 

 

 

+ Recent posts