lifecarelog
개발일지

Supabase 무료 프로젝트 4개 잠들지 않게 하기 — Workers Cron 설계

Supabase 무료 플랜은 7일 비활동이면 프로젝트가 잠들어요. 프로젝트 4개를 Workers Cron 하나로 깨워두는 keepalive 설계와 시행착오를 정리했어요.

5분 읽기

지난주에 플랜엘(plan-l) 개발용 프로젝트 하나가 조용히 잠들어 있었어요. Supabase 무료 플랜은 7일 동안 요청이 없으면 프로젝트를 일시정지시키거든요. 혹시 무료 플랜으로 사이드 프로젝트 여러 개를 돌리는 분이라면 비슷한 경험 있지 않나요?

문제: 트래픽 없는 프로젝트는 조용히 잠든다

저는 플랜씨(plan-c), 플랜엘(plan-l) 같은 서비스를 Supabase 무료 프로젝트 4개에 나눠 운영하고 있어요. 문제는 개발 중이거나 트래픽이 거의 없는 쪽이에요. 7일 기준을 넘기는 순간 멈추고, 다음에 접속하면 대시보드에서 수동으로 깨워야 해요. 복구를 기다리는 몇 분도 아깝지만, 잠든 걸 사용자가 먼저 발견하는 상황이 제일 곤란했어요.

왜 Workers Cron이었나

선택지는 세 가지였어요. n8n 크론, GitHub Actions, Cloudflare Workers Cron. 저는 이미 Cloudflare에 도메인을 올려두고 있었고, Workers는 서버 관리가 필요 없어요. 무료 한도가 하루 10만 요청이라 keepalive 용도로는 사실상 무제한이고요. 하루 2번씩 4개 프로젝트를 깨워도 한 달에 240번 수준이에요.

Workers Cron 발화4개 프로젝트 REST 호출실패 시 알림

설계: ping이 아니라 진짜 쿼리

직접 만들어 보니 핵심은 "무엇을 호출하느냐"였어요. 홈 URL만 여는 건 의미가 없고, 프로젝트 API로 실제 요청이 들어가야 활동으로 잡혀요. 그래서 각 프로젝트에 keepalive용 테이블을 하나씩 만들고, REST 엔드포인트로 가벼운 조회를 날리게 했어요. 클라이언트 공개용 anon 키만 쓰면 되니까 비밀키를 Worker에 넣을 일도 없어요.

코드는 40줄 정도예요. 환경변수에 프로젝트 URL 4개를 넣고, cron이 돌 때마다 순회하며 응답을 확인해요. 여기까지 만드는 데 10분 정도 걸렸어요.

시행착오: 성공 로그만 믿으면 안 돼요

적용해 봤더니 함정이 하나 있었어요. cron 자체가 멈추면 아무도 실패를 알려주지 않는다는 점이에요. 그래서 응답이 200이 아니면 알림을 보내는 분기를 넣었고, "cron이 아예 안 돌았다"는 상황은 로그를 주기적으로 확인하는 걸로 보완했어요. 테스트해 보면 이미 잠든 프로젝트는 첫 응답이 확연히 느린 것도 보여요. 잠에서 깨는 중이라는 신호예요.

  • 실제 API 쿼리로 깨우기
  • anon 키만 사용
  • 실패 알림 분기
  • 하루 2회면 충분

정리

돌려 보니 한 달 넘게 잠든 프로젝트가 없어요. 비용은 0원 그대로고요. 무료 한도를 여러 개 이어 붙여 쓰는 1인 개발에서는 이런 작은 도구 하나가 반복 확인을 통째로 줄여줘요. 혼자 운영하면서 무료 플랜의 빈틈을 자동화로 메우는 것, 그게 제일 남는 장사더라고요.

#Supabase#Cloudflare Workers#Cron#1인개발

라이프케어로그 서비스가 궁금하신가요?

AI 기반 건강·일정·재활 관리 앱을 직접 써보세요.

서비스 살펴보기

관련 글

댓글

아직 댓글이 없어요. 첫 댓글을 남겨주세요.