Supabase는 PostgreSQL 기반의 오픈소스 Backend-as-a-Service(BaaS) 플랫폼으로, AWS 또는 구글 Firebase와 함께 현대적인 백엔드 솔루션으로 주목받고 있습니다. 특히 무료 플랜에서 제공하는 관대한 리소스 덕분에 개인 프로젝트, 스타트업, 프로토타입 개발에 널리 활용되고 있습니다.
그러나 무료 플랜 사용자들은 하나의 제약사항을 마주하게 됩니다. 7일간 데이터베이스 활동이 없으면 프로젝트가 자동으로 일시정지됩니다. 이는 Supabase가 서버 리소스를 효율적으로 관리하기 위한 정당한 정책이지만, 정기적으로 사용하지 않는 사이드 프로젝트나 테스트 환경을 운영하는 개발자에게는 불편함을 야기할 수 있습니다. 그렇기때문에 자동 활성화는 7일 비활성화 정책으로 인한 프로젝트 중단 문제를 해결하는 필수적입니다.. 성장해서 사용자가 상주하기 전까지는요 ㅜㅜ.
Supabase 무료 플랜의 이해
정확히 어떤 제약이 있는지
Supabase 무료 플랜은 개발자들에게 상당히 관대한 리소스를 제공합니다. 하지만 프로젝트 계획 시 고려해야 할 제약사항들이 있습니다:
스토리지 & 리소스
- 데이터베이스: 500MB
- 파일 스토리지: 1GB
- 대역폭: 5GB/월
- Edge Functions: 500,000 호출/월
그리고 주목해야 할 정책:
- 7일간 데이터베이스 활동이 없으면 프로젝트 자동 일시정지
- 일시정지된 프로젝트는 대시보드에서 수동으로 재활성화 필요
- 14일 동안 일시정지 상태가 지속되면 프로젝트 삭제 가능성
이 정책은 서버 리소스 관리 차원에서 합리적이지만, 간헐적으로 사용하는 사이드 프로젝트나 데모 환경을 운영하는 개발자에게는 관리 포인트가 됩니다. 특히 여러 프로젝트를 동시에 관리할 때 각 프로젝트의 활성 상태를 추적하는 것이 번거로울 수 있습니다.
왜 이런 정책이 존재하는가?
Supabase의 7일 비활성화 정책은 클라우드 리소스 효율성을 위한 업계 표준 관행입니다. 실제로 사용되지 않는 수만 개의 프로젝트가 서버 자원을 점유하는 것을 방지하여, 실제 사용자에게 더 나은 성능을 제공하기 위한 목적입니다. 이는 무료 티어를 지속 가능하게 유지하기 위한 필수적인 조치이며, 전혀 비합리적이지 않습니다.
다른 대안과 비교
| 기능 | Supabase 무료 | Firebase Spark | AWS Free Tier |
|---|---|---|---|
| 데이터베이스 | PostgreSQL 500MB | Firestore 1GB | DynamoDB 25GB |
| 비활성화 정책 | 7일 미사용시 정지 | 없음 | 12개월 후 종료 |
| Auth | 무제한 사용자 | 무제한 | Cognito 50,000 MAU |
| Storage | 1GB | 5GB | S3 5GB (12개월) |
| 실시간 기능 | ✅ | ✅ | ❌ (추가 비용) |
| SQL 지원 | ✅ (PostgreSQL) | ❌ (NoSQL) | 부분적 |
| 자체 호스팅 | ✅ | ❌ | ❌ |
Firebase의 장점:
- 비활성화 정책이 없음 (이게 제일 크다!)
- Google 생태계와의 완벽한 통합
- 더 성숙한 문서와 커뮤니티
Firebase의 단점:
- NoSQL만 지원 (복잡한 쿼리가 어려움)
- 백엔드 로직이 복잡해지면 Cloud Functions 비용 폭탄
- vendor lock-in이 심함
AWS의 장점:
- 가장 강력하고 유연함
- 프로덕션 레벨 인프라
- 세밀한 비용 제어
AWS의 단점:
- 러닝 커브가 가파름 (설정만 하루 걸림…)
- 무료 티어가 12개월 제한
- 실수로 과금될 위험성
왜 Supabase를 선택했는지
1. 빠른 프로토타이핑
- API 자동 생성 (테이블 만들면 REST API 즉시 사용 가능)
- 실시간 기능 내장 (채팅, 알림 구현이 쉬움)
- Row Level Security로 간단한 권한 관리
2. 오픈소스
- 언젠가 트래픽이 터지면 직접 호스팅 가능
- vendor lock-in 회피
- 커뮤니티가 활발하고 투명함
3. 개발자 경험
// 이게 전부다. 진짜로.
const { data } = await supabase.from("posts").select("*").eq("user_id", userId);
복잡한 설정 없이 바로 시작할 수 있다는 게 가장 큰 매력입니다.
결론적으로:
- 빠르게 프로토타입 만들고 싶다 → Supabase
- 복잡한 데이터 관계가 있다 → Supabase
- 비활성화 정책이 싫다 → Firebase (하지만 이제 SupabaseZombi가 있습니다!)
- 프로덕션 레벨 확장성이 필요하다 → AWS (또는 Supabase Pro)
7일 비활성화 정책을 효과적으로 관리할 수 있는 자동화 솔루션이 필요했고, 이것이 SupabaseZombi 프로젝트의 시작점이 되었습니다. 개발자 커뮤니티에서 “keep-alive”라는 이름으로 존재하는 여러 프로젝트들을 참고하여, 더욱 개선된 솔루션을 만들게 되었습니다.
기술적 해결 방안 모색
기존 오픈소스 솔루션 분석
개발자 커뮤니티에서는 이미 이 문제를 해결하기 위한 여러 오픈소스 프로젝트가 존재합니다. GitHub에서 찾은 supabase-inactive-fix는 정기적으로 데이터베이스에 활동을 발생시켜 프로젝트를 활성 상태로 유지하는 훌륭한 접근 방식이었습니다.
하지만 실제 사용하면서 몇 가지 개선 포인트를 발견했습니다:
- 패턴의 다양성: 매번 동일한 개수의 데이터를 삽입하는 고정 패턴
- 데이터 관리: 지속적으로 누적되는 더미 데이터의 관리 방안 부재
- 배포 복잡도: Docker 이미지 빌드 과정의 복잡성
- 모니터링: 실행 결과와 상태에 대한 실시간 피드백 부족
SupabaseZombi 프로젝트 소개
이러한 개선점을 반영하여 SupabaseZombi라는 오픈소스 프로젝트를 개발하게 되었습니다. 이 프로젝트는 Supabase의 정책을 존중하면서도, 개발자가 프로젝트를 효율적으로 관리할 수 있도록 자동화 솔루션을 제공합니다.
프로젝트명의 의미: “Zombie(좀비)”는 계속해서 활동하는 특성을 은유적으로 표현한 것으로, 프로젝트가 지속적으로 활성 상태를 유지한다는 의미를 담고 있습니다.
핵심 기술 구현
1. 동적 데이터 생성 전략
# 1. 가변적 데이터 삽입 (1~10개)
insert_count = random.randint(1, 10)
# 2. 임계값 초과 시 자동 정리 (50개 초과 → 30개 유지)
if current_count > 50:
delete_count = current_count - 30
# 오래된 데이터부터 삭제
랜덤 삽입 개수의 이점:
- 고정 패턴 대비 더욱 자연스러운 데이터베이스 활동 시뮬레이션
- 트래픽 패턴이 다양하여 시스템 테스트에도 유용
자동 데이터 정리의 필요성:
- 데이터베이스 공간 효율성 유지 (무료 플랜은 500MB 제한)
- Keep-Alive 목적의 임시 데이터이므로 장기 보관 불필요
- 일정 수량 유지로 쿼리 성능 최적화
2. 스케줄링 시스템
import schedule
import time
def keep_alive_job():
"""정기적인 데이터베이스 활동 생성"""
# Supabase에 데이터 삽입
insert_random_data()
# 임계값 초과 시 오래된 데이터 정리
cleanup_old_data()
# 24시간 주기 실행 (7일 정책 대비 충분한 여유)
schedule.every(24).hours.do(keep_alive_job)
while True:
schedule.run_pending()
time.sleep(60) # 1분마다 스케줄 확인
24시간 주기는 7일 정책을 준수하면서도 충분한 안전 마진을 확보하는 최적의 간격입니다. 더 짧은 간격은 불필요한 리소스 사용을 초래하며, Supabase의 정책 의도에도 부합하지 않습니다.
개발 과정에서의 기술적 의사결정
1. 구성 관리 방식: 환경변수 vs 설정파일
초기에는 모든 구성을 환경변수로 관리하는 전통적인 방식을 채택했습니다. 그러나 여러 Supabase 프로젝트를 동시에 관리해야 하는 요구사항이 발생하면서 구조적 한계에 직면했습니다.
Before:
SUPABASE_URL_1=...
SUPABASE_KEY_1=...
SUPABASE_URL_2=...
SUPABASE_KEY_2=...
개선된 JSON 기반 구성:
[
{
"name": "프로젝트1",
"supabase_url": "https://xxx.supabase.co",
"supabase_key": "your-key",
"table_name": "keep-alive"
},
{
"name": "프로젝트2",
"supabase_url": "https://yyy.supabase.co",
"supabase_key_env": "SUPABASE_KEY_2", // 환경변수 참조도 지원
"table_name": "keep-alive"
}
]
JSON 기반 구성의 장점:
- 확장성: 무제한 프로젝트 추가 가능
- 가독성: 구조화된 형식으로 관리 용이
- 유연성: 직접 값 입력과 환경변수 참조 모두 지원
- 버전 관리: Git으로 구성 이력 추적 가능 (민감 정보는 .gitignore 처리)
2. Docker 컨테이너화 전략 최적화
기존 방식의 문제점:
- Dockerfile 작성 → 이미지 빌드 → 컨테이너 실행의 다단계 프로세스
- 코드 수정 시마다 이미지 재빌드 필요
- 빌드 시간과 디스크 공간 소모
최적화된 접근 방식:
# 공식 Python 이미지 + 볼륨 마운트 활용
docker run -d \
-v $(pwd)/main_standalone.py:/app/main.py:ro \
-v $(pwd)/config.json:/app/config.json:ro \
python:3.11-slim \
sh -c "pip install supabase requests && python /app/main.py"
개선 효과:
- 빌드 제거: 즉시 실행 가능, 개발 주기 단축
- 유연성: 소스 코드 수정 후 컨테이너만 재시작
- 단순성: Dockerfile 관리 오버헤드 제거
- 표준화: 공식 Python 이미지로 일관성 보장
3. 구조화된 로깅 시스템
운영 가시성 향상을 위한 상세 로깅:
2025-10-30 09:00:00 - INFO - == '2025-10-30 09:00:00' Run start (2 servers)
2025-10-30 09:00:00 - INFO - = Server #1: My Database
2025-10-30 09:00:01 - INFO - ✓ SUCCESS | #15 data | Inserted: 7 | Deleted: 0
2025-10-30 09:00:01 - INFO - = Server #2: Another Database
2025-10-30 09:00:02 - INFO - ✓ SUCCESS | #53 data | Inserted: 5 | Deleted: 23
2025-10-30 09:00:02 - INFO - == Next run: '2025-10-31 09:00:02'
로깅 시스템의 핵심 요소:
- 타임스탬프: 각 작업의 정확한 실행 시간 기록
- 작업 결과: 성공/실패 상태 명확히 표시
- 통계 정보: 삽입/삭제된 데이터 개수 추적
- 다음 실행 예고: 스케줄 투명성 제공
구조화된 로그는 문제 발생 시 신속한 진단과 디버깅을 가능하게 하며, 시스템의 정상 동작 여부를 쉽게 모니터링할 수 있게 합니다.
4. 실시간 알림 시스템 통합
텔레그램 봇 API를 활용한 알림:
실행 결과를 텔레그램으로 실시간 수신할 수 있는 기능을 통합했습니다. 이를 통해 서버에 직접 접속하지 않고도 시스템 상태를 모니터링할 수 있습니다.
알림 내용:
- ✅ 성공 시: 각 데이터베이스별 처리 통계
- ❌ 실패 시: 문제가 발생한 서버 식별 및 오류 메시지
- 📊 요약 정보: 전체 프로젝트 상태 개요
이러한 알림 시스템은 문제 발생 시 즉각적인 대응을 가능하게 하며, 특히 여러 프로젝트를 관리할 때 유용합니다.
사용법
# 1. 저장소 클론
git clone https://github.com/shsm0520/supabasezombi.git
cd supabasezombi
# 2. 설정 파일 작성
cp config.json.example config.json
# config.json 편집
# 3. Docker Compose로 실행
docker-compose up -d
# 4. 로그 확인
docker-compose logs -f
이제 자동화 시스템이 프로젝트를 활성 상태로 유지합니다.
프로젝트 성과 및 효과
달성한 목표
1. 자동화된 프로젝트 관리
- 7일마다 대시보드에 접속하여 수동으로 재활성화할 필요 제거
- 개발자가 실제 개발에 집중할 수 있도록 관리 부담 최소화
2. 멀티 프로젝트 지원
- 단일 컨테이너로 여러 Supabase 프로젝트 동시 관리
- 프로젝트별 독립적인 설정 및 모니터링
3. 효율적인 리소스 사용
- 자동 데이터 정리로 데이터베이스 공간 최적화
- 무료 플랜의 500MB 제한 내에서 안정적 운영
4. 실시간 모니터링
- 텔레그램 알림으로 실행 결과 즉시 확인
- 문제 발생 시 신속한 대응 가능
5. 배포 용이성
- Docker 기반으로 플랫폼 독립적 실행
- 복잡한 설정 없이 빠른 구축 가능
향후 개발 로드맵
커뮤니티 피드백 기반 개선 계획
프로젝트를 오픈소스로 공개한 후 다양한 사용자 피드백과 제안을 받았습니다. 이를 바탕으로 향후 개발 방향을 다음과 같이 계획하고 있습니다.
단기 로드맵 (구현 예정) ✅
1. 유연한 스케줄링 옵션
{
"schedule": {
"interval_hours": 12, // 12시간 간격 실행
"run_at": "09:00" // 특정 시각 실행
}
}
사용자별로 최적의 실행 주기가 다를 수 있습니다. 일부 사용자는 더 빈번한 체크를 원할 수 있고, 다른 사용자는 리소스 절약을 위해 최소 빈도를 선호할 수 있습니다. 커스터마이징 가능한 스케줄링으로 이러한 다양한 요구사항을 충족할 예정입니다.
2. 다양한 알림 채널 지원
현재는 텔레그램만 지원하지만, 기업 환경에서 널리 사용되는 Slack과 개발자 커뮤니티에서 인기 있는 Discord 통합을 추가할 계획입니다. 이를 통해 팀 단위 협업 시나리오에서도 효과적으로 활용할 수 있습니다.
중장기 로드맵 (검토 중) 🤔
3. Web 기반 관리 대시보드
localhost:8080 →
- 등록된 프로젝트 목록 및 상태
- 실행 히스토리 그래프
- GUI 기반 설정 변경
- 수동 실행 트리거
웹 UI는 사용자 경험을 크게 향상시킬 수 있지만, 프로젝트의 복잡도도 증가시킵니다. 커뮤니티 피드백을 통해 실제 수요를 파악한 후 개발 여부를 결정할 예정입니다.
4. 헬스체크 API 엔드포인트
# GET /health 응답 예시
{
"status": "healthy",
"last_run": "2025-10-31 09:00:00",
"next_run": "2025-11-01 09:00:00",
"databases": {
"total": 3,
"healthy": 3,
"failed": 0
}
}
외부 모니터링 시스템 통합을 위한 헬스체크 엔드포인트입니다. 보안 고려사항(인증, 방화벽 설정 등)을 충분히 검토한 후 구현할 예정입니다.
5. 지능형 재시도 메커니즘
네트워크 일시적 장애나 Supabase 서비스 점검 시 자동으로 재시도하는 로직입니다. Exponential backoff 전략을 적용하여 효율적인 재시도를 계획하고 있습니다.
6. 상세 분석 및 통계
- 실행 이력 및 성공률 추적
- 데이터베이스별 성능 메트릭
- 평균 응답 시간 분석
- 데이터 증가 추이 모니터링
장기적으로는 Grafana, Prometheus와 같은 표준 모니터링 도구와의 통합도 고려하고 있습니다.
장기 비전 (보류 중) ⏸️
7. 크로스 플랫폼 GUI 클라이언트
Electron 기반 데스크톱 애플리케이션으로 더욱 직관적인 사용자 경험을 제공할 수 있습니다. 그러나 현재의 Docker 기반 솔루션도 충분히 간편하므로, 실제 수요를 확인한 후 결정할 예정입니다.
8. 다양한 Keep-Alive 전략
- 경량 API 호출 방식 (데이터 삽입 없이)
- Edge Functions 주기적 트리거
- Storage 레벨 활동 생성
각 전략마다 장단점이 있으므로, 사용자가 선택할 수 있는 옵션으로 제공하는 것을 검토 중입니다. 다만 프로젝트의 핵심 가치인 “단순성”을 해치지 않는 범위 내에서 진행할 예정입니다.
9. SaaS 플랫폼으로 확장
“SupabaseZombi.io”와 같은 클라우드 서비스로 제공하는 것은 매력적인 아이디어입니다. 사용자는 회원가입 후 Supabase 정보만 입력하면 되는 편리한 서비스입니다. 그러나 이는 인프라 비용, 개인정보 보호, 지속 가능한 비즈니스 모델 등 복잡한 고려사항을 수반하므로 신중히 검토할 예정입니다.
커뮤니티 참여 환영
오픈소스 프로젝트의 핵심은 커뮤니티입니다. 어떤 기능이 가장 유용할지, 어떤 개선이 필요한지에 대한 여러분의 의견을 GitHub Issues를 통해 공유해 주시기 바랍니다. Pull Request는 언제나 환영하며, 함께 더 나은 도구를 만들어가고 싶습니다.
맺음말
프로젝트의 의의
SupabaseZombi는 Supabase 무료 플랜의 7일 비활성화 정책을 효율적으로 관리하기 위한 오픈소스 자동화 도구입니다. 이 프로젝트는 Supabase의 정책을 존중하면서도, 개발자가 프로젝트 관리에 소요되는 시간을 절약하고 실제 개발에 집중할 수 있도록 돕습니다.
기술적 가치
- 자동화: 반복적인 수동 작업 제거
- 확장성: 다중 프로젝트 동시 관리
- 효율성: 리소스 최적화 및 데이터 관리
- 가시성: 실시간 모니터링 및 알림
- 이식성: Docker 기반 플랫폼 독립적 배포
오픈소스 기여
이 프로젝트는 MIT 라이선스 하에 공개되어 있으며, 누구나 자유롭게 사용, 수정, 배포할 수 있습니다. 커뮤니티의 피드백과 기여를 통해 지속적으로 발전하고 있습니다.
비슷한 과제를 직면하고 있는 개발자라면 이 솔루션이 도움이 될 것입니다. 궁금한 점이나 개선 제안이 있다면 GitHub Issues에서 논의해 주시기 바랍니다.
👉 GitHub 저장소: https://github.com/shsm0520/supabasezombi
면책사항
본 프로젝트는 Supabase의 서비스 약관을 준수하며, 정상적인 데이터베이스 활동을 시뮬레이션하는 기술적 솔루션입니다. 사용자는 자신의 Supabase 프로젝트에 대해 전적인 책임을 지며, 본 도구는 “있는 그대로” 제공됩니다.