github action에서 gcp cloud functions로 전환

최지웅·2025년 11월 15일

백엔드

목록 보기
6/6

배경 이전의 전반적인 상황은 Render 무료 서비스 파이프라인 비용 절약: GitHub Actions로 Keep-Alive 전환를 참고하자.

아래 정리는 그 이후의 트러블 슈팅 내용이다.

문제상황

확인해보니 대략 1시간에 2~3번정도 꺠우고 있음.
이유는 github는 전세계 많은 워크플로우를 동시처리하고 있기에 정확한 시간 실행을 보장하지 않는다.

즉, 최소 5분간격으로 작동이 아닌, 5분간격으로 시도는 하지만 지연될 수 있고, 지연되어 작동한 시간으로부터 +5분 뒤 또 시도를 하기에 실제로 많은 지연이 발생하는 것이다.

해결방안

여기에 여러개의 워크플로우를 실행시켜 지연을 커버하도록 작동시키는 방법과, 다른 방법을 시도하는 방법, 내 서버컴의 cron을 사용하는 방법 등이 있다.

render 파이프라인 비용 감축 확인

11월 9일의 게시글을 참고하면 기존의 uptimerobot은 계속 깨우기 떄문에 일부 down을 제외하면 하루에 24시간의 비용을 사용하고 있었다.

그때 기준 192.45시간을 사용하고있었는데, 지금 github action을 도입후 시간비용을 확인해보자. 총 256.38시간이다.

정리하면 다음과 같다.
render: 24/24 hour
action: 10/24 hour

이 속도면 앞으로 한달동안 154시간을 추가로 사용하여 420/750시간 정도로 렌더의 한계치를 초과하진 않는다.

또한, 사용자가 없기 떄문에 현재 정도의 시간당 2회의 wake는 크게 상관이 없긴 하다.

하지만, 조금 찾아보면 효율적인 방법이 있을 듯 하여(렌더의 750시간을 꽉꽉채우는) 조금만 서칭해보자.

gcp cloud functions

GCP의 Cloud Scheduler는 엔터프라이즈 급 cron을 제공한다고 한다.
Free Tier도 많은 무료 사용량을 제공한다고 하니 구현해보자.

  1. gcp 프로젝트 생성
  2. cloud run make function(inline editor, Node.js 22, public access, per request, max_instance 1, region asia-northest3)
  3. Cloud Build API enabled
  4. index.js
const RENDER_URL = "https://com-on.onrender.com";

// Cloud Run에서 HTTP 요청을 받을 함수
exports.handler = async (req, res) => {
  try {
    const response = await fetch(RENDER_URL, {
      method: 'GET',
      headers: {
        'User-Agent': 'Google-Cloud-Run-Keep-Alive/1.0',
        'Connection': 'keep-alive'
      }
    });

    if (response.ok) {
      console.log(`[SUCCESS] Ping sent to ${RENDER_URL}`);
      res.status(200).send('Keep-Alive Ping successful.');
    } else {
      console.error(`[FAIL] Ping failed with status: ${response.status}`);
      res.status(500).send('Keep-Alive Ping failed.');
    }
  } catch (error) {
    console.error(`[ERROR] Ping execution failed: ${error.message}`);
    res.status(500).send('Keep-Alive Ping execution error.');
  }
};
  1. 함수 진입점 설정, 배포

  2. url 복사(https://com-on-keep-alive-817572530096.asia-northeast3.run.app)

  3. Cloud Scheduler enabled

  4. make work(asia-northest3, "*/15 8-22 * * *", KST, HTTP GET)

  5. github action disabled, 모니터링

profile
이제 4학년!!!

0개의 댓글