현재 render 무료티어로 배포 진행 중인데, 15분동안 request가 없으면 꺼졌다가 다시 켜지는 문제를 uptimerobot을 이용해 강제로 깨워 해결중이었다.
이 때 문제가 발생하는게 render역시 무료로 지원 가능한 pipeline 시간이 정해져있고 해당 시간이 넘어가면 down된다.
그로인해 월 마지막 주가 되면 uptimerobot으로 아무리 건들여도 랜더 초기 로딩으로 3분정도 기다려야 넘어가는 문제 존재.
이를 uptimerobot에 request시간대를 정해서 새벽에 비활성화, pipeline 비용절약으로 해결하려한다.
uptimerobot은 5분마다 request보냄.
render 무료티어는 500시간의 파이프라인 제공
uptimerobot은 월간 750시간의 파이프라인을 사용함.
11월 9일인 현재

벌써 750시간 중 200시간을 사용한 것을 볼 수 있다.
그런데 여기서 uptimerobot에서 maintenance info에서 setup maintenance window를 사용하려면 7$/월의 요금제를 써야한다.
api 역시 유료만 된다.
github action으로 완전 대체해보자. 이전에도 원래 해당 방법을 고안했으나 제대로 wake되지 않아 uptimerobot으로 넘어가게 되었었다.
.github/workflow/keep_alive.yml생성
name: Render Keep-Alive Ping
on:
# 매 5분마다 실행되도록 스케줄 설정
schedule:
# 💡 UTC 기준: 한국 시간(KST) 새벽 1시 (04:00)부터 아침 6시 (21:00)까지 실행을 중지
# 즉, UTC 21:00부터 UTC 04:00까지는 핑을 보내지 않습니다.
# (KST = UTC + 9)
# KST 06:00 (UTC 21:00) / KST 06:05 (UTC 21:05) ...
# ... KST 00:55 (UTC 15:55)
# KST 01:00 (UTC 16:00)부터 다음 실행 시각인 KST 06:00 (UTC 21:00)까지는 휴면
- cron: '*/5 23 * * *'
# 💡 UTC 00:00부터 14:55까지 (KST 09:00 ~ 23:55)
- cron: '*/5 0-14 * * *'
jobs:
ping_service:
runs-on: ubuntu-latest
steps:
- name: Send HTTP Request to Keep Service Alive
# curl 명령어를 사용하여 Render 서비스 URL에 요청을 보냅니다.
# -s: Silent 모드 (진행률 표시 안함)
# -o /dev/null: 응답 내용을 버림
run: |
# 여기에 실제 Render 서비스 URL을 입력하세요.
RENDER_SERVICE_URL="https://com-on.onrender.com"
echo "Pinging ${RENDER_SERVICE_URL}..."
curl -s -o /dev/null "${RENDER_SERVICE_URL}"
echo "Ping successful at $(date +%H:%M:%S) KST."
git config --global credential.helper store
실행 후 토큰 발급, push하면 캐시해서 사용.
새로이 배포하자.
uptimerobot은 pause처리해두자.
ping 은 보내지지만 실제 get이 아니라 wakeup 안됨.
실제 브라우저 요청처럼 헤더를 추가해보자.
name: Render Keep-Alive Ping
on:
# 스케줄 설정: 매 5분마다 실행 (밤 12시 ~ 아침 8시 KST 제외)
schedule:
# 💡 실행 시간대: KST 08:00 ~ KST 23:55 (UTC 23:00 ~ 14:55)
# 1. UTC 23:00부터 23:55까지 (KST 08:00 ~ 08:55)
- cron: '*/5 23 * * *'
# 2. UTC 00:00부터 14:55까지 (KST 09:00 ~ 23:55)
- cron: '*/5 0-14 * * *'
jobs:
ping_service:
runs-on: ubuntu-latest
steps:
- name: Send Robust Keep-Alive Request
run: |
# ⚠️ 여기에 실제 Render 서비스 URL을 입력하세요.
RENDER_SERVICE_URL="https://com-on.onrender.com"
if [ -z "$RENDER_SERVICE_URL" ]; then
echo "Error: RENDER_SERVICE_URL is not defined."
exit 1
fi
echo "Pinging ${RENDER_SERVICE_URL} at $(date) (UTC) with full headers..."
# 💡 User-Agent 및 Connection 헤더를 추가하여 서버가 일반 브라우저 요청처럼 인식하도록 수정
# -H: 헤더 추가, -s: Silent, -o /dev/null: 응답 내용 무시
curl -s -o /dev/null \
-H "User-Agent: Mozilla/5.0 (compatible; Render-Keep-Alive/1.0)" \
-H "Connection: keep-alive" \
"${RENDER_SERVICE_URL}"
if [ $? -eq 0 ]; then
echo "Ping successful (Service should be awake)."
else
echo "Ping failed or returned an error. (This job will run again in 5 minutes)."
fi
새로 배포(그런데 생각해보니 push만 해도 되긴할듯)