Skip to content

[FIX] Upstash free DB 유휴 자동 삭제 방지 — /health/redis 엔드포인트 + 주간 keepalive cron #527

Description

@minij02

✨ 배경

2026-07-26 dev 환경 unique-snail Upstash 인스턴스가 DNS NXDOMAIN 상태로 확인됨. .env/.env.dev 가 같은 URL 을 공유하고 있어 prod 도 동반 사망. 502 재발 방지 코드는 #525 에서 별도 처리 중.

원인은 Upstash free tier 의 비활성 DB 자동 삭제 정책. Redis command 가 며칠간 하나도 없으면 삭제 대상. 우리 서비스의 방문자 tracking 은 봇 UA 를 걸러내기 때문에 (BOT_UA_PATTERN) uptime monitor / health check 들의 요청이 Redis 명령으로 이어지지 않음. 실 유저 트래픽이 없는 시기엔 Upstash 가 진짜로 조용해짐.

✨ 해결 방향

가장 lazy 한 조합:

  1. GET /health/redis 엔드포인트 추가 — redisClient.ping() 만 실행. 인증 없음 (정보 유출 없음). 짧은 타임아웃 폴백 (redis client 재연결 대기로 hang 되지 않도록).
  2. GitHub Actions cron 주 1회 위 엔드포인트 호출. 실 유저 트래픽과 무관하게 Redis 활동 발생 → Upstash "활성" 유지.

✨ 개발 목록

  • src/index.ts/health/redis 라우트 (기존 /health 옆). Promise.race 로 2s 타임아웃, 성공 200 / 실패 503.
  • .github/workflows/redis-keepalive.yml — 주 1회 cron + workflow_dispatch. dev 엔드포인트 curl (-f 로 실패 감지).
  • pnpm build 확인.

✨ 기타

  • 현재는 dev 만 대상. prod 를 별도 유료 Upstash DB 로 분리하면 keepalive 자체가 불필요. 무료 유지하면 워크플로에 prod URL 도 추가.
  • SKIP_PATH_PREFIXES 가 이미 /health prefix 를 스킵하므로 방문자 카운트에 오염 없음.
  • 봇 UA (curl, python-requests 등) 는 visitor middleware 가 어차피 skip 하니 cron 이 방문자 지표에 노이즈 남기지 않음.

Metadata

Metadata

Assignees

Labels

fixfixing codes

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions