cloud deployment

Edit

클라우드에 애플리케이션과 데이터베이스를 올릴 곳을 정리한 노트.

무료 티어 조건은 자주 바뀐다. 2026년만 해도 Koyeb이 신규 가입자에게 무료 티어를 닫았고, Fly.io가 무료 할당을 폐지했으며, Netlify가 크레딧 기반 플랜으로 개편했다. 가입 직전에 각 사 pricing 페이지를 다시 확인할 것. 특히 "카드 불필요" 여부는 3자 정리 글이 틀린 경우가 많아 실제로 리소스를 만들어 봐야 안다.

Application

컨테이너나 앱 프로세스를 띄우는 곳.

무료 티어 비교

서비스 무료 시작 시 카드 무료 쿼터 / 한도 비고
Back4app Containers 불필요 컨테이너 1개, 256MB RAM / 0.25 CPU GitHub 연동 Dockerfile 빌드(Kaniko). 커스텀 도메인은 유료. 무료 임시 URL이 만료되면 삭제됨. 상시 운영 불가
Render 대체로 불필요 Free web service: 512MB RAM, 0.1 CPU, workspace당 월 750시간, 15분 idle 후 spin down 복귀에 30초~1분. Free Postgres는 30일 제한
Hugging Face Spaces 불필요 CPU Basic(2 vCPU, 16GB RAM), 공개 Space 한정 SDK를 docker로 지정하면 임의 Dockerfile 구동. 유휴 시 sleep, 영구 스토리지는 유료
Cloudflare Workers / Pages 불필요 요청 10만/일, 호출당 CPU 10ms, 정적 자산 요청은 무제한 무료 컨테이너가 아니라 V8 아이솔레이트. 콜드스타트·유휴 정지가 없다. 대신 번들 3MB(gzip), 메모리 128MB, 커넥션 풀 불가
Google Cloud Run 필요 월 2M requests, 360,000 GiB-초, 180,000 vCPU-초 무료 한도만 써도 열려 있는 결제 계정 연결이 필수. 서울 리전(asia-northeast3) 있음
Northflank 필요(검증용) 프로젝트 1개, 서비스 2개 + 잡 2개 + addon 1개 리소스 생성 시 카드 등록 요구. 무료 리전은 us-central·europe-west 뿐
Azure Container Apps 필요 월 180,000 vCPU-초, 400,000 GiB-초, 2M requests scale-to-zero 지원. Cloud Run과 성격 유사
AWS Lambda 필요 월 1M requests, 400,000 GB-초 컨테이너 이미지 배포 가능하나 Lambda Runtime Interface 구현 필요
Oracle Cloud Always Free 필요(검증용) ARM Ampere A1 4 OCPU / 24GB RAM, Block Storage 200GB PaaS는 아니지만 Coolify/Dokploy를 올리면 사실상 무료 PaaS. 리전별 재고 이슈
Vercel Hobby는 대체로 불필요 Edge Requests 1M/월, Fast Data Transfer 100GB/월, Functions 1M invocations/월 Hobby는 개인/비상업 용도 제약. 프론트엔드 특화
Netlify 불필요 Free(Legacy): 빌드 300분, 대역폭 100GB, Edge Function 1M invocations 정적 호스팅·DNS·프록시 rewrite 용도로는 최상. Go 함수는 2027-07-01 종료 예정
DigitalOcean App Platform 대체로 필요 Static site 앱 3개, 앱당 1GiB 전송량 무료는 정적 사이트 중심. 웹 서비스·워커·잡은 유료
Modal 확인 못함 Starter: 월 $30 무료 크레딧 크레딧 소진 후 사용량 과금. AI 워크로드 특화
ngrok HTTP는 불필요 $5 one-time credit, 최대 3 endpoints, 1GB transfer, 20k requests 배포가 아니라 터널. TCP endpoint는 카드 검증 필요
Coolify 불필요 Self-hosted는 무료 forever 도구 자체는 무료, 실행할 서버 비용은 별도. Coolify Cloud는 유료
Cloudflare Containers 필요 무료 티어 없음 Workers Paid($5/월) 필수. 그 안에 메모리 25 GiB-시 / CPU 375 vCPU-분 / 디스크 200 GB-시 포함. Worker 자체 무료 플랜과 혼동 주의
Railway 필요 $5 one-time trial credit 상시 무료 아님
Fly.io 필요 Free trial: VM 2시간 또는 7일 신규 조직 대상 무료 할당 폐지
Koyeb 필요 기존 사용자만 유지 신규 가입자에게 무료 티어 미제공
Heroku 필요 없음 2022년 11월 무료 dyno 종료

선택 가이드

Google Cloud Run

Back4app Containers

Render

Northflank

Hugging Face Spaces

Netlify

정적 사이트 호스팅과 DNS·TLS·프록시 용도로는 무료 플랜이 여전히 훌륭하다. 다만 서버 런타임으로 쓸 때 제약이 크다.

Vercel

Modal

Azure Container Apps

AWS Lambda (컨테이너 이미지)

Oracle Cloud Always Free + 셀프호스팅 PaaS

Cloudflare Workers / Pages

이 표의 다른 항목들과 층위가 다르다. VM도 컨테이너도 아니고 V8 아이솔레이트에 코드를 얹는 방식이라 뜨고 지는 개념이 없다. 콜드스타트도 유휴 정지도 없는 대신 런타임이 좁다.

한도 (2026-08 기준):

Free Paid
번들 크기 (gzip 후) 3MB 10MB
아이솔레이트 메모리 128MB 128MB
기동 시간 (전역 스코프 실행) 1초 1초
호출당 subrequest 50 10,000

HTML을 직접 응답할 수 있다 — 즉 서버 사이드 렌더링이 된다. fetch 핸들러가 Response를 돌려주는 게 전부라, body에 HTML 문자열을 넣고 content-type: text/html 만 붙이면 브라우저가 페이지로 렌더링한다. JSON을 주느냐 HTML을 주느냐는 헤더 차이일 뿐이다. DB에서 읽어 HTML을 조립해 반환하는 구성이 그대로 성립한다(아래 chain.benelog.net 사례). 문자열 조합이 가장 가볍고, React renderToReadableStream 같은 스트리밍 SSR도 Web Streams가 있어 돌아간다.

지원 언어가 JS만은 아니다. V8이 WebAssembly도 실행하기 때문이다.

제약 — 채택 여부를 가르는 것들.

Cloudflare Containers

DigitalOcean App Platform

ngrok — 배포가 아니라 터널

Koyeb

Fly.io

무료 티어가 사라진 곳 (자주 오해하는 것들)

Cloud DB

컨테이너가 0으로 줄었다가 요청마다 다시 뜨는 환경(Cloud Run, Lambda, 무료 PaaS)에서는 DB 선택 기준이 달라진다. 커넥션 풀을 유지할 수 없다는 게 핵심 제약이라, 요청 단위 HTTP로 붙는 DB가 유리하다.

무료 티어 비교

Turso Neon Supabase InstantDB DoltHub Back4app BaaS
정체 관리형 SQLite(libSQL) 서버리스 Postgres Postgres + PostgREST + Auth 실시간 동기화 DB Git처럼 버전 관리되는 MySQL 호환 DB Parse + MongoDB
접속 HTTPS 요청 단위 TCP (pooler 경유) TCP + REST 클라이언트 SDK + Admin HTTP API HTTP REST API REST / GraphQL만
무료 한도 DB 100개 / 5GB / 월 5억 row read, 1천만 write 0.5GB / 월 100 CU-h / 프로젝트 100개 500MB / egress 5GB / MAU 5만 / 활성 프로젝트 2개 1GB / API 요청 무제한 공개 저장소 무료, 비공개는 100MB까지 월 25,000 요청 / 250MB / 파일 1GB
유휴 시 영향 없음 5분 후 scale-to-zero, 재개 시 지연 7일 유휴 시 프로젝트 정지 정지 없음 영향 없음 -
카드 불필요 불필요 불필요 불필요 불필요 불필요
Go 궁합 libsql-client-go순수 Go, CGO 불필요 pgx pgx 공식 SDK 없음 (JS/Python만) HTTP 직접 호출 Go SDK 없음

선택 가이드

Turso (libSQL)

SQLite를 서버로 올린 libSQL의 관리형 서비스. 이 노트의 til.benelog.net 구성에서 실제로 쓴 저장소다.

실무 주의사항:

Neon

Supabase

InstantDB

Dolt / DoltHub

PaaS 내장 DB

앱을 올린 곳에서 DB까지 같이 주는 경우. 앱과 같은 리전에 있어 지연이 짧다는 게 공통 장점이다.

Back4app BaaS (Parse)

조합 패턴

Netlify 프록시 rewrite로 커스텀 도메인 붙이기

무료 PaaS 상당수가 커스텀 도메인을 유료 기능으로 잠가둔다(Back4app Containers 등). 정적 호스팅을 Netlify에 두고 있으면 서브도메인 하나를 다른 곳에 띄운 컨테이너로 넘겨서 이를 우회할 수 있다.

# _redirects
/*  https://<backend-host>/:splat  200

실제 구성 예: til.benelog.net

Go + HTMX로 만든 TIL 기록 앱(benelog/til)을 무료로만 올린 구성.

til.benelog.net  →  Netlify rewrite(200)  →  Cloud Run (서울)  →  Turso (도쿄)
   도메인·TLS·HSTS          프록시           asia-northeast3    aws-ap-northeast-1

실제 구성 예: chain.benelog.net

TypeScript + HTMX로 만든 습관 기록 앱(benelog/habit-chain). til.benelog.net 과 달리 앱 서버 프로세스가 없다. 컨테이너 대신 Worker 하나가 전부다.

chain.benelog.net  →  Cloudflare Pages (_worker.js)  →  DoltHub HTTP API
  Netlify DNS의 CNAME       SSR + 정적 자산              요청 단위 HTTP, 커넥션 없음