서버비 월 4달러로 버티는 중
AWS 프리티어 끝나고 청구서 왔는데 47달러.
처음엔 뭔가 잘못된 줄 알았다. 프리티어 쓰고 있었으니까 공짜일 줄 알았는데. 알고 보니 프리티어 1년 지났더라. 가입한 지 벌써 그렇게 됐나 싶었다.
사이드 프로젝트 수익은 0원인데 서버비가 47달러. 말이 안 됐다.
뭐가 47달러였나 #
AWS 비용 분석을 해봤다.
- EC2 t2.micro: 15달러
- RDS db.t3.micro: 18달러
- S3: 3달러
- 데이터 전송: 8달러
- 기타: 3달러
EC2는 24시간 돌리니까 그렇다 치고, RDS가 생각보다 비쌌다. 프리티어 끝나면 제일 작은 인스턴스도 꽤 나온다.
웃긴 건 내 서비스 일일 활성 유저가 5명이었다는 거다. 5명한테 보여주려고 월 47달러 쓰고 있었다. 유저당 월 9달러꼴이다.
다 갈아엎었다 #
일단 아키텍처를 다시 생각했다.
내 서비스가 뭘 하는지 보자. 간단한 CRUD 앱이다. 유저가 데이터 입력하면 저장하고, 조회하면 보여주고. 트래픽? 하루 100 요청도 안 된다. 이걸 위해 EC2 24시간 돌릴 필요가 있나?
프론트엔드: Next.js로 만들어놨다. Vercel로 옮겼다. 연결하면 알아서 빌드하고 배포한다. 설정할 것도 없다. GitHub 연동하면 끝.
# 이게 끝이다
git push origin main
# Vercel이 알아서 빌드하고 배포함
Vercel 무료 범위가 넓다. 월 100GB 대역폭, 서버리스 함수 100만 회 호출. 내 트래픽 수준에서는 평생 무료다.
백엔드: 서버리스로 바꿨다. Next.js API Routes 쓰면 백엔드 따로 안 만들어도 된다. 어차피 간단한 CRUD인데 굳이 Express 서버 돌릴 이유가 없었다.
복잡한 로직이 필요하면 Railway를 쓴다. 월 5달러 크레딧 준다. 내 수준에서는 그 안에서 해결된다. 초과하면 쓴 만큼만 내면 되니까 예측 가능하다.
데이터베이스: Supabase 무료 티어. PostgreSQL인데 무료로 500MB까지 준다. 내 데이터 다 합쳐도 10MB도 안 되니까 충분하다.
// Supabase 쓰는 거 진짜 간단하다
import { createClient } from '@supabase/supabase-js'
const supabase = createClient(url, key)
// 데이터 가져오기
const { data } = await supabase
.from('posts')
.select('*')
// 데이터 저장
await supabase
.from('posts')
.insert({ title: '제목', content: '내용' })
현재 비용 구조 #
지금 월에 나가는 돈:
- Vercel: 0달러 (무료)
- Supabase: 0달러 (무료)
- Railway: 2달러 (크레딧 내에서 해결되는데 가끔 초과)
- 도메인: 연 12달러 (월 1달러)
- Cloudflare: 0달러 (무료)
총 월 3-4달러. 커피 한 잔도 안 되는 돈.
47달러에서 4달러로. 90% 넘게 줄었다.
각 서비스 장단점 #
Vercel
- 장점: Next.js면 설정 제로. 미리보기 배포 자동 생성.
- 단점: 서버리스라서 10초 넘는 작업은 타임아웃. 한국 리전 없어서 좀 느림.
Supabase
- 장점: PostgreSQL 공짜. 인증, 스토리지도 같이 제공. 대시보드 예쁨.
- 단점: 무료는 일주일 안 쓰면 일시정지됨. 다시 키면 되긴 하는데 귀찮음.
Railway
- 장점: 배포 쉬움. 도커 지원. DB도 한 번에 붙임.
- 단점: 아시아 리전 없음. 한국에서 레이턴시 200ms 정도.
PlanetScale (MySQL 쓰면 이것도 좋음)
- 장점: 브랜치 기능. DB에 git 같은 개념.
- 단점: 무료 티어에서 row 10억 개 제한 있긴 한데 보통 문제 안 됨.
예전에 왜 그랬을까 #
예전에 EC2에 RDS에 S3에... 뭘 그렇게까지 했는지 모르겠다.
솔직히 말하면 "제대로 된 아키텍처"를 만들고 싶었던 것 같다. 블로그 글 보면 다들 EC2 쓰고, 로드밸런서 붙이고, RDS 쓰고 그러니까. 그게 "진짜" 배포인 줄 알았다.
유저 100명도 없으면서 스케일업 걱정하고 있었다. "나중에 유저 늘면 어떡하지?" 나중은 안 왔다. 오히려 서버비 때문에 접을 뻔했다.
요즘은 이렇게 생각한다. 유저 1000명 될 때까지는 무료 티어로 버텨라. 그 정도 트래픽이면 대부분 무료로 감당된다. 1000명 넘어서 서버비 걱정할 정도면 그때는 수익도 있을 거다.
마이그레이션 팁 #
AWS에서 Vercel/Supabase로 옮기는 거 어렵지 않다.
-
DB 먼저 옮긴다: pg_dump로 백업하고, Supabase에 import. 테이블 구조 같으면 그냥 된다.
-
환경변수 정리한다: AWS 쓸 때 하드코딩한 거 있으면 다 환경변수로 빼놓는다.
-
API 엔드포인트 바꾼다: 프론트에서 호출하는 URL만 바꾸면 된다.
-
DNS 바꾼다: 도메인 연결. Vercel 대시보드에서 하면 쉽다.
나는 토요일 오후에 시작해서 일요일 저녁에 끝냈다. 하루 반 정도 걸렸다. 생각보다 금방이었다.
지금은 서버비 스트레스 없다. 수익 없어도 그냥 돌릴 수 있으니까. 사이드 프로젝트는 이래야 한다. 돈 안 들어가야 부담 없이 오래 할 수 있다.
- Previous: 3개월 날린 후에 깨달은 것
- Next: 구글 검색에 내 사이트가 안 나왔던 이유