바이브 코딩 · 데이터베이스 비용 · VPS Postgres
바이브 코딩 데이터베이스 선택 가이드: Supabase, D1, Turso, MongoDB 찍고 VPS Postgres까지 온 이유
처음에는 데이터베이스를 그냥 “붙이면 되는 부품”으로 봤습니다. 그런데 유튜브 API 수집, 방문 카운트, 트렌딩 영상처럼 읽기와 쓰기가 계속 생기는 앱을 만들고 나니 결론이 바뀌었습니다. DB는 기능보다 먼저 요금 구조를 봐야 합니다.
내가 겪은 결론
DB도 공짜가 아니다앱은 AI가 빨리 만들어도, 데이터가 계속 읽히고 써지면 요금표가 바로 실전 교재가 됩니다.
D1에서 배운 것
row 과금은 무섭다읽기와 쓰기가 rows read/written으로 잡히면, 작은 쿼리 하나도 스캔 범위에 따라 비용이 커집니다.
Postgres의 장점
요청보다 자원 중심관리형이든 VPS든 Postgres는 보통 CPU, 메모리, 디스크, I/O 같은 서버 자원 기준으로 판단합니다.
주의할 선
보안 데이터는 별개개인정보, 결제, Auth는 직접 서버 운영보다 Supabase 같은 관리형 보안 스택이 더 안전할 수 있습니다.
00 · 전체 지도
데이터베이스는 종류, 과금 단위, 워크로드를 같이 봐야 합니다
바이브 코딩에서 DB 선택이 어려운 이유는 “DB”라는 말 안에 너무 많은 물건이 들어 있기 때문입니다. Postgres, MongoDB, Redis, R2, Firestore, ClickHouse, 벡터 DB는 같은 후보군처럼 보이지만 실제 역할은 다릅니다.
1. DB 종류
관계형, 문서형, 캐시, 검색, 벡터, OLAP, 객체 저장소는 서로 대체제가 아니라 역할이 다른 도구입니다.
2. 과금 단위
월요금보다 rows read/written, request, compute hour, storage, egress, MAU, backup 보관료를 먼저 봐야 합니다.
3. 워크로드
방문 카운트, 유튜브 sweep, 실시간 통계, Auth, 검색, RAG는 모두 DB 선택 기준이 다릅니다.
4. 운영 책임
VPS Postgres는 싸고 강력할 수 있지만 백업, 보안, 장애 대응, 모니터링 책임이 내 쪽으로 옵니다.
그래서 이 글은 경험담만 말하지 않습니다. 먼저 어떤 DB 종류가 있는지, 어떤 서비스가 있는지, 어떤 과금 단위를 조심해야 하는지, 그리고 실제 운영에서 어떤 실수를 피해야 하는지를 순서대로 정리합니다.
01 · 경험담
DB도 공짜가 아니었습니다
바이브 코딩으로 앱을 만들면 화면, API, 관리자 페이지는 생각보다 빨리 나옵니다. 문제는 그 다음입니다. 방문자가 들어오고, 크론이 돌고, 유튜브 데이터를 수집하고, 통계를 갱신하기 시작하면 “이 데이터는 어디에 둘 것인가”가 바로 돈 문제로 바뀝니다.
저는 Supabase를 쓰다가 월 $25가 부담스러웠고, Cloudflare D1은 Pages/Workers와 붙어서 좋아 보였지만 쓰기 폭탄을 맞았습니다. Turso도 만만히 봤다가 rows read/written 구조를 다시 봤고, MongoDB도 문서형이라 편할 줄 알고 구축했다가 fetch 체감 지연 때문에 다시 분해했습니다.
02 · 요금 구조
DB는 기능보다 과금 단위를 먼저 봐야 합니다
Supabase 같은 관리형 Postgres는 보통 plan, compute, disk, egress 중심으로 봅니다. 공식 가격표 기준 Free에는 500MB DB, Pro는 $25/month부터 시작하고, API requests는 Unlimited로 표시되지만 DB 용량과 egress, compute 한도는 별도로 봐야 합니다.
반대로 Cloudflare D1은 서버리스 SQL이라 사용한 쿼리가 rows read, rows written으로 잡힙니다. 공식 문서에는 paid tier에서 월 25B rows read 포함 후 $0.001/M, 월 50M rows written 포함 후 $1/M로 설명되어 있습니다. 인덱스가 있는 컬럼을 쓰면 인덱스 갱신도 write row에 영향을 줄 수 있습니다.
Turso도 SQLite 감각이라 편하지만 plan별 rows read, rows written, sync 포함량을 봐야 합니다. 그래서 “SQL이니까 싸겠지”, “서버리스니까 자동으로 저렴하겠지”는 위험한 판단입니다.
예를 들어 방문 카운터 하나도 설계에 따라 비용이 달라집니다. 매 방문마다 `page_views`에 INSERT하면 쓰기량이 방문 수만큼 늘고, 매번 오늘 합계를 다시 계산하면 읽기량도 늘어납니다. 반대로 메모리/Redis에 잠깐 모았다가 1분 단위로 집계하거나, 원본 이벤트는 R2/S3에 묶어 두고 화면용 집계만 DB에 올리면 같은 기능도 훨씬 조용해집니다.
03 · 서비스 정보
서비스별 가격표
Managed Postgres + Auth
Supabase
- 무료/시작 한도
- 500MB DB, 50K MAU, 5GB egress, 1GB file storage
- 유료 시작
- Pro $25/month
- 과금 단위
- DB size, egress, compute, MAU, storage quota
- 잘 맞는 곳
- Auth, RLS, 개인정보, 관리자 권한, 빠른 MVP
API requests가 unlimited여도 DB 용량과 egress, compute 한도는 따로 본다.
로그인/권한/보안이 있으면 돈값을 한다. 취미 프로젝트에는 월 $25 고정비가 크게 느껴진다.
Serverless SQLite
Cloudflare D1
- 무료/시작 한도
- Free daily rows read/written quota, 5GB storage
- 유료 시작
- Workers Paid $5/month + D1 usage quota
- 과금 단위
- rows read, rows written, storage
- 잘 맞는 곳
- Cloudflare Pages/Workers 메타데이터, 작은 설정값, 가벼운 공개 조회
방문 카운트, 반복 UPDATE, 대량 정렬/필터는 rows read/written이 빠르게 튄다.
싼 DB가 아니라 Cloudflare 안에서 쓰기 편한 서버리스 DB다. 작게 정확히 써야 한다.
libSQL / SQLite cloud
Turso
- 무료/시작 한도
- plan별 rows read/write와 storage 포함량
- 유료 시작
- Developer plan부터 시작
- 과금 단위
- rows read, rows written, storage, replica/sync quota
- 잘 맞는 곳
- 로컬-first 수집, SQLite 감각, 작은 API, edge replica
읽기/쓰기 많은 크론과 방문 카운트를 무작정 넣으면 D1과 비슷한 row 한도 문제가 생긴다.
D1 대체로 좋지만, 대량 수집 DB라면 row 포함량을 먼저 계산해야 한다.
Managed document DB
MongoDB Atlas
- 무료/시작 한도
- Free 512MB, shared RAM/vCPU
- 유료 시작
- Flex $0.011/hour, Dedicated $0.08/hour부터
- 과금 단위
- cluster tier, storage, RAM/vCPU, backup, transfer
- 잘 맞는 곳
- JSON 문서형 데이터, 스키마 변경이 잦은 앱, 객체 단위 저장
관계형 집계, 비용 민감한 분석, 조인 중심 화면에는 프로젝트 성격을 많이 탄다.
문서형이라 편할 줄 알았지만 내 프로젝트에서는 fetch 지연과 이전 비용이 더 크게 느껴졌다.
Serverless Redis / cache
Upstash Redis
- 무료/시작 한도
- free database 제공, 사용량 기반으로 시작 가능
- 유료 시작
- pay-as-you-go 또는 fixed plan
- 과금 단위
- requests/commands, storage, region/replication option
- 잘 맞는 곳
- 캐시, rate limit, 세션, leaderboard, 방문 카운트 버퍼
원본 대량 DB가 아니라 빠른 임시 상태와 flush buffer로 보는 편이 안전하다.
D1/Postgres 앞단에서 쓰기 폭주를 흡수하는 완충재로 좋다. 영구 원본 DB로 보면 위험하다.
Managed SQL Server
Azure SQL Database
- 무료/시작 한도
- 월 100,000 vCore seconds, 32GB data storage, 32GB backup storage
- 유료 시작
- serverless/provisioned compute와 storage 사용량 기준
- 과금 단위
- vCore seconds/hours, configured storage, backup storage
- 잘 맞는 곳
- Microsoft/Azure 생태계, SQL Server 호환 앱, 기업형 관리 DB
Postgres 대체라기보다 SQL Server 계열 선택지다. vCore seconds가 월 24시간 무료라는 뜻은 아니다.
무료 저장공간은 매력적이지만, 바이브 코딩 공개 대량 DB의 기본 답으로 보기보다는 MS 스택일 때 후보로 둔다.
Self-hosted Postgres
VPS + Docker Postgres
- 무료/시작 한도
- 무료는 아니고 VPS 월 고정비
- 유료 시작
- 월 $5~$20대 VPS부터 실험 가능
- 과금 단위
- 서버 CPU, RAM, disk, network, 운영 책임
- 잘 맞는 곳
- 공개 대량 데이터, 유튜브 catalog, 트렌딩 영상, 로그성 분석
백업, 보안 패치, 방화벽, 장애 대응을 직접 해야 한다.
털려도 치명적이지 않은 공개 데이터라면 row/request 과금보다 예측 가능하다.
04 · 과금 모델
과금 단위 지도
row/request 과금
D1, Turso, Upstash PAYG
쿼리나 명령이 읽고 쓴 단위가 곧 비용 단위가 된다.
방문 카운트, 반복 UPDATE, 넓은 필터 쿼리에서 비용이 갑자기 보인다.
compute/storage 과금
Supabase, Azure SQL, MongoDB Atlas Dedicated
CPU, 메모리, 디스크, 전송량 같은 자원 한도를 중심으로 본다.
자동 확장과 egress를 방치하면 조용히 월 비용이 커진다.
월정액 managed DB
Supabase Pro, MongoDB Dedicated, Upstash Fixed
일정 비용으로 운영 편의, 보안, 백업, 대시보드를 산다.
작은 사이드 프로젝트에는 고정비가 기능보다 더 무겁게 느껴진다.
VPS 고정비
VPS + Docker Postgres
서버를 빌리고 그 안에서 DB를 직접 운영한다.
요청 과금은 줄지만 백업 실패와 보안 사고 책임이 내 쪽으로 온다.
05 · 워크로드
워크로드별 DB 선택
| 워크로드 | 추천 | 피할 구조 | 이유 |
|---|---|---|---|
| 유튜브 영상 50만~300만 건 catalog | VPS Postgres 또는 별도 managed Postgres | D1 full sweep 반복 INSERT | 영상 목록은 관계형 인덱스와 batch write가 중요해서 row 과금 DB에 매번 current를 쓰면 비용이 커진다. |
| 방문 카운트와 실시간 조회수 | Redis buffer + Postgres aggregate | 방문마다 D1/Turso UPDATE | 매 요청 쓰기를 즉시 DB에 반영하지 말고, 버퍼에 모아 주기적으로 집계하면 쓰기 횟수를 크게 줄인다. |
| 로그인, 결제, 개인정보 | Supabase 같은 managed Auth/Postgres | 초보 직접 운영 VPS | 보안, RLS, 백업, 감사 로그는 월 비용보다 사고 방지가 더 중요하다. |
| Cloudflare Pages용 설정값과 작은 메타데이터 | D1 | 외부 DB roundtrip 남발 | 작은 데이터는 Cloudflare binding으로 붙는 D1이 빠르고 운영이 단순하다. |
| 스키마가 자주 바뀌는 JSON 문서 앱 | MongoDB Atlas | 복잡한 관계형 JOIN을 문서에 억지로 넣기 | 문서 단위 저장은 빠르지만 분석형 관계 쿼리가 늘면 Postgres 쪽이 더 자연스럽다. |
03B · 서비스 지도
다양한 DB 서비스는 역할별로 나눠 봐야 합니다
“Supabase냐 D1이냐”만 보면 선택지가 너무 좁습니다. 실제로는 관리형 Postgres, 서버리스 SQL, 문서형 BaaS, 캐시, 분석 DB, 검색 DB, 벡터 DB, 객체 저장소, VPS 자체 운영까지 역할별 후보가 따로 있습니다.
관리형 Postgres
Supabase, Neon, Render Postgres, Railway Postgres, DigitalOcean Managed Databases, Aiven, Crunchy Bridge, AWS RDS/Aurora, Google Cloud SQL/AlloyDB
- 쓸 때
- 일반 웹앱, 관리자, 권한, 관계형 데이터, SQL 집계, 안정적인 백업이 필요할 때
- 주의
- 월 고정비, compute autoscale, storage, egress, backup, connection limit
서버리스·엣지 SQL
Cloudflare D1, Turso/libSQL, PlanetScale, Neon serverless Postgres
- 쓸 때
- Cloudflare/edge 앱, 작은 메타데이터, SQLite 감각, 빠른 배포가 중요할 때
- 주의
- rows read/written, branch/replica 비용, cold start, 동시 write, 쿼리 스캔 범위
문서형·모바일 BaaS
MongoDB Atlas, Firebase Firestore, DynamoDB, Azure Cosmos DB
- 쓸 때
- JSON 문서, 모바일 실시간 앱, 스키마가 자주 바뀌는 객체 저장이 핵심일 때
- 주의
- document read/write, index write, 보안 규칙, 관계형 집계 비용, vendor lock-in
캐시·카운터·큐 버퍼
Upstash Redis, Redis Cloud, Valkey, Cloudflare KV, Cloudflare Queues
- 쓸 때
- 방문 카운트 버퍼, rate limit, 세션, 중복 방지, 짧은 TTL 캐시가 필요할 때
- 주의
- 원본 DB로 착각하지 않기, TTL, durability, request/command 과금
분석·검색·AI 보조 저장소
ClickHouse Cloud, BigQuery, Snowflake, Elastic Cloud, OpenSearch, Meilisearch, Typesense, Pinecone, Qdrant Cloud, Weaviate
- 쓸 때
- 대량 집계, 로그 분석, 사이트 검색, AI 임베딩/RAG 검색이 필요할 때
- 주의
- 원본 DB와 분리, 인덱스 재생성 비용, 쿼리 compute, 데이터 중복 저장
객체 저장소·로컬 자체 운영
Cloudflare R2, AWS S3, Backblaze B2, VPS + Docker Postgres, SQLite, DuckDB
- 쓸 때
- 원본 JSONL/archive, 이미지/파일, 공개 대량 데이터, 로컬 24시간 수집기가 있을 때
- 주의
- SQL DB가 아닌 저장소와 DB를 구분하기, 백업/복구, 디스크, 보안 업데이트
06 · DB 종류
DB 종류 백과
DB 선택은 “Postgres냐 MongoDB냐” 한 줄로 끝나지 않습니다. 관계형, 문서형, 캐시, 검색, 벡터, OLAP, 시계열처럼 목적이 다른 도구들이 있고, 같은 저장소라도 원본 DB인지 보조 인덱스인지에 따라 역할이 달라집니다.
비용도 이 분류를 알아야 읽힙니다. Redis는 원본 DB보다 버퍼에 가깝고, ClickHouse는 거래 처리보다 집계용이며, R2/S3는 SQL DB가 아니라 원본 파일 보관소입니다. 역할을 섞지 않는 것이 비용 절감의 첫 단계입니다.
DB 종류 01
관계형 DB (RDBMS / SQL) - 오픈소스
테이블, 행, 열, 조인, 트랜잭션으로 데이터를 정확하게 다루는 기본형 DB입니다.
대부분의 웹앱은 Postgres나 MySQL에서 시작하면 됩니다. 비용·기능·자료량까지 가장 균형이 좋습니다.
PostgreSQL
범용 오픈소스 RDBMS의 사실상 기본값
- 용도
- 정산, 관리자, 검색, JSONB, 대량 catalog
- 주의
- 처음에는 인덱스와 VACUUM 개념을 배워야 합니다.
MySQL
웹 호스팅과 LAMP 스택의 고전
- 용도
- 일반 웹서비스, 쇼핑몰, 블로그, 레거시 호환
- 주의
- 고급 분석/확장 기능은 Postgres 쪽이 더 편할 때가 많습니다.
MariaDB
MySQL 계열 오픈 포크
- 용도
- MySQL 대체, 오픈소스 선호 환경
- 주의
- MySQL과 100% 같다고 보고 들어가면 호환 차이를 만날 수 있습니다.
SQLite
파일 하나가 곧 DB인 임베디드 SQL
- 용도
- 로컬 앱, 작은 서버, 테스트, 개인 도구
- 주의
- 동시 쓰기와 대규모 원격 서비스에는 설계가 필요합니다.
libSQL
SQLite를 서버/edge 환경으로 확장한 계열
- 용도
- Turso, edge replica, SQLite 감각의 원격 DB
- 주의
- row read/write 한도와 sync 구조를 꼭 봐야 합니다.
DB 종류 02
관계형 DB - 상용/엔터프라이즈
대기업, 금융, 특정 플랫폼 생태계에서 표준으로 쓰이는 유료 RDBMS입니다.
개인 프로젝트가 일부러 고를 일은 적지만, 회사 시스템과 연결할 때는 자주 만납니다.
Oracle Database
대기업·금융권의 대표 상용 DB
- 용도
- 대형 ERP, 금융, 레거시 업무 시스템
- 주의
- 비용과 라이선스가 개인 프로젝트 감각과 완전히 다릅니다.
Microsoft SQL Server
.NET·Windows 생태계의 표준 DB
- 용도
- Azure, .NET, MS 업무 시스템
- 주의
- Postgres 대체라기보다 MS 스택일 때 자연스럽습니다.
IBM Db2
메인프레임과 엔터프라이즈 레거시 DB
- 용도
- 기존 IBM/금융권 시스템
- 주의
- 신규 바이브 코딩용 기본 선택지는 아닙니다.
DB 종류 03
분산 SQL (NewSQL)
SQL의 트랜잭션 감각을 유지하면서 여러 노드와 지역으로 확장하는 DB입니다.
처음부터 글로벌 대규모 서비스가 아니면 과합니다. 다만 PlanetScale 같은 서비스 뒤에서 자주 보입니다.
CockroachDB
Postgres 호환을 지향하는 분산 SQL
- 용도
- 글로벌 분산, 고가용성, 무중단 확장
- 주의
- 단순 CRUD 앱에는 운영 복잡도가 큽니다.
YugabyteDB
Postgres 호환 분산 SQL
- 용도
- 오픈소스 분산 RDBMS
- 주의
- 소규모 프로젝트에는 학습 비용이 큽니다.
TiDB
MySQL 호환 HTAP 분산 SQL
- 용도
- 트랜잭션과 분석을 같이 다루는 대규모 시스템
- 주의
- 운영 단위가 커서 개인 VPS 감각과 다릅니다.
Vitess
MySQL 수평 샤딩 엔진
- 용도
- 초대형 MySQL 확장, PlanetScale 기반
- 주의
- 직접 운영보다 관리형 서비스로 만나는 경우가 많습니다.
DB 종류 04
문서형 DB (Document NoSQL)
JSON 문서를 통째로 저장합니다. 객체 구조가 자주 바뀌는 앱에서 시작이 빠릅니다.
JSON이라 만능처럼 보이지만, 채널/영상/집계처럼 관계가 많아지면 Postgres가 더 편할 수 있습니다.
MongoDB
대표 JSON 문서형 DB
- 용도
- 유연한 스키마, 빠른 프로토타입, 문서 단위 저장
- 주의
- 관계형 조인과 대량 집계가 늘면 설계 난도가 올라갑니다.
CouchDB / PouchDB
오프라인 동기화에 강한 문서형 DB
- 용도
- 로컬-first, 모바일, 양방향 sync
- 주의
- 일반 웹앱 생태계는 MongoDB보다 작습니다.
RavenDB
.NET 친화 문서형 DB
- 용도
- .NET 환경과 ACID 문서 저장
- 주의
- 국내 자료와 점유율은 제한적입니다.
DB 종류 05
키-값 / 캐시 / 인메모리
복잡한 쿼리보다 초고속 key 조회와 증가 연산에 집중합니다.
방문 카운트와 rate limit은 원본 DB에 바로 쓰기보다 Redis 계열로 버퍼링하면 비용이 확 줄 수 있습니다.
Redis
인메모리 키-값의 대명사
- 용도
- 캐시, 세션, 카운터, rate limit, queue
- 주의
- 영구 원본 DB가 아니라 빠른 상태 저장소로 보는 편이 안전합니다.
Valkey
Redis 라이선스 변경 후 나온 오픈 포크
- 용도
- 오픈소스 Redis 대체
- 주의
- 관리형 서비스별 지원 여부를 확인해야 합니다.
Memcached
단순하고 빠른 캐시
- 용도
- 값 캐싱
- 주의
- Redis처럼 다양한 자료구조를 기대하면 안 됩니다.
etcd
분산 설정 저장소
- 용도
- Kubernetes 같은 클러스터 상태
- 주의
- 일반 앱 데이터베이스로 쓰는 물건은 아닙니다.
DB 종류 06
와이드 컬럼 / 대규모 NoSQL
엄청난 쓰기량과 수평 확장을 위해 만들어진 분산 저장소 계열입니다.
개인 프로젝트에는 보통 과합니다. 하지만 대규모 이벤트/로그 저장 구조를 이해할 때 중요합니다.
Apache Cassandra
대규모 분산 쓰기에 강한 DB
- 용도
- 무중단, 선형 확장, 대량 이벤트
- 주의
- 쿼리 유연성보다 미리 정한 access pattern이 중요합니다.
ScyllaDB
Cassandra 호환 고성능 DB
- 용도
- 낮은 지연과 높은 처리량
- 주의
- 운영 난도가 낮은 편은 아닙니다.
HBase
Hadoop 생태계 와이드 컬럼 DB
- 용도
- 빅데이터 배치와 대규모 저장
- 주의
- 요즘 신규 소형 서비스의 기본값은 아닙니다.
DynamoDB / Bigtable
AWS/GCP의 초대규모 관리형 NoSQL
- 용도
- 운영 제로 서버리스 확장
- 주의
- 접근 패턴과 과금 구조를 모르면 비용이 튑니다.
DB 종류 07
분석형 DB (OLAP / 컬럼 지향)
거래 처리보다 집계, 통계, 대시보드, 대량 스캔을 빠르게 하는 DB입니다.
서비스 원본 DB와 분석 DB는 분리하는 게 좋습니다. 유튜브 통계 대시보드가 커지면 이쪽을 보게 됩니다.
DuckDB
분석계의 SQLite
- 용도
- 로컬 parquet/csv 분석, 일회성 리포트
- 주의
- 웹서비스 동시 쓰기 원본 DB가 아닙니다.
ClickHouse
초고속 컬럼형 OLAP
- 용도
- 실시간 대규모 집계, 로그 분석
- 주의
- 트랜잭션 원본 DB와 역할이 다릅니다.
Druid / Pinot
실시간 이벤트 분석 DB
- 용도
- 대시보드, 광고/이벤트 분석
- 주의
- 소규모 앱에는 구성이 무겁습니다.
BigQuery / Snowflake
클라우드 데이터 웨어하우스
- 용도
- 거대한 분석 쿼리와 BI
- 주의
- 쿼리/컴퓨트 과금 구조를 모르고 돌리면 비쌉니다.
DB 종류 08
시계열 DB (Time-Series)
시간이 붙은 데이터, 메트릭, 센서값, 서버 모니터링에 특화되어 있습니다.
방문 통계도 시간축이 중요하지만, 단순 카운터면 Postgres 집계 테이블로 충분할 때가 많습니다.
TimescaleDB
Postgres 기반 시계열 DB
- 용도
- 메트릭, IoT, 시간축 집계
- 주의
- Postgres 운영 지식은 그대로 필요합니다.
InfluxDB
대표 시계열 DB
- 용도
- 센서, 모니터링, time bucket
- 주의
- 일반 관계형 업무 DB와는 모델이 다릅니다.
QuestDB
고성능 시계열 DB
- 용도
- 금융, 고빈도 데이터
- 주의
- 범용 CRUD 앱용은 아닙니다.
Prometheus
모니터링 특화 시계열 저장소
- 용도
- 서버/앱 메트릭
- 주의
- 비즈니스 원본 데이터를 저장하는 DB가 아닙니다.
DB 종류 09
그래프 DB
노드와 관계를 중심으로 저장합니다. 관계 자체가 핵심인 문제에 강합니다.
유튜브 채널 네트워크, 추천 관계, 사기 계정 연결 분석처럼 관계 탐색이 핵심이면 후보가 됩니다.
Neo4j
대표 그래프 DB
- 용도
- 추천, 관계망, 사기 탐지
- 주의
- 일반 CRUD 서비스 전체를 그래프로 만들 필요는 없습니다.
ArangoDB
문서+그래프 멀티모델 DB
- 용도
- 복합 모델과 그래프 탐색
- 주의
- Postgres보다 생태계가 작습니다.
Memgraph
실시간 인메모리 그래프 DB
- 용도
- 빠른 관계 탐색
- 주의
- 대중적인 기본 DB는 아닙니다.
DB 종류 10
벡터 DB / AI 임베딩
텍스트·이미지 임베딩을 저장하고 비슷한 의미를 검색합니다.
RAG를 처음 붙일 때는 pgvector로 시작하고, 규모가 커지면 Qdrant/Milvus/Pinecone을 봅니다.
pgvector
Postgres에 벡터 검색 추가
- 용도
- 작은 RAG, 기존 Postgres와 결합
- 주의
- 초대형 벡터 검색 전용 엔진은 아닙니다.
Qdrant
Rust 기반 벡터 DB
- 용도
- 고성능 오픈소스 벡터 검색
- 주의
- 원본 업무 데이터는 별도 DB에 두는 편이 좋습니다.
Milvus
대규모 벡터 검색 DB
- 용도
- 엔터프라이즈 규모 임베딩
- 주의
- 운영 구성이 가볍지는 않습니다.
Weaviate / Chroma / Pinecone
RAG와 시맨틱 검색용 벡터 DB
- 용도
- AI 검색, 추천, 지식베이스
- 주의
- 벡터 DB는 SQL DB 대체가 아니라 검색 보조 저장소입니다.
DB 종류 11
검색 엔진형 저장소
검색어, 오타 허용, 필터, 로그 검색 같은 full-text retrieval에 특화되어 있습니다.
Postgres 전문검색으로 버티다가 검색 UX가 중요해지면 Meilisearch/OpenSearch로 분리하면 됩니다.
Elasticsearch
검색·로그 분석 대표 엔진
- 용도
- 복잡한 검색, 로그 탐색
- 주의
- 운영 메모리와 튜닝 비용이 큽니다.
OpenSearch
Elasticsearch 오픈 포크
- 용도
- 오픈소스 검색/로그 분석
- 주의
- 작은 앱에는 과할 수 있습니다.
Meilisearch
가볍고 빠른 즉석 검색
- 용도
- 사이트 검색, 앱 검색 UX
- 주의
- 원본 DB가 아니라 검색 인덱스로 보는 편이 맞습니다.
Typesense
오타 허용 instant search
- 용도
- 상품/문서 검색
- 주의
- 라이선스와 운영 방식을 확인해야 합니다.
DB 종류 12
임베디드 / 로컬 우선
서버 없이 앱 내부나 로컬 파일에서 돌아가는 저장소입니다.
002 로컬 수집처럼 내 컴퓨터가 24시간 켜져 있다면 SQLite/DuckDB가 비용 방어에 아주 강합니다.
SQLite
임베디드 SQL 표준
- 용도
- 로컬 앱, 수집기, 작은 서버
- 주의
- 동시 쓰기는 구조를 나눠야 합니다.
DuckDB
임베디드 분석 DB
- 용도
- 대량 파일 분석
- 주의
- 트랜잭션 서비스 원본 DB가 아닙니다.
RocksDB / LevelDB
임베디드 키-값 엔진
- 용도
- 저수준 저장 엔진
- 주의
- SQL처럼 바로 쓰는 앱 DB는 아닙니다.
LMDB
메모리맵 기반 초경량 KV
- 용도
- 로컬 고속 key-value
- 주의
- 직접 다루려면 저장 엔진 지식이 필요합니다.
DB 종류 13
관리형 DB / BaaS
DB뿐 아니라 Auth, Storage, API, 운영 편의를 묶어서 제공하는 서비스입니다.
초기 속도는 최고지만, 읽기/쓰기 폭주 앱은 요금 단위부터 봐야 합니다.
Supabase
Postgres 기반 Firebase 대안
- 용도
- Auth, RLS, Storage, Realtime
- 주의
- API unlimited와 DB 자원 unlimited를 혼동하면 안 됩니다.
Firebase / Firestore
모바일 실시간 BaaS
- 용도
- 모바일, 실시간 sync, push
- 주의
- 문서 read/write 과금 구조를 반드시 계산해야 합니다.
Neon
서버리스 Postgres
- 용도
- scale-to-zero, branch database
- 주의
- autoscale 상한을 안 두면 비용 예측이 어려울 수 있습니다.
PlanetScale
확장형 managed DB
- 용도
- 무중단 스키마 변경, 대규모 확장
- 주의
- 요금과 row/storage 단위를 확인해야 합니다.
Cloudflare D1 / Turso / Upstash
edge/serverless 친화 저장소
- 용도
- Cloudflare 앱, SQLite edge, Redis cache
- 주의
- 대량 read/write는 무료처럼 보이다가 비용이 보입니다.
DB 종류 14
DB처럼 보이지만 역할이 다른 저장소
R2/S3 같은 객체 스토리지와 Kafka 같은 스트림은 DB 대체가 아니라 보조 저장소입니다.
원본 파일은 R2/S3, 검색은 검색엔진, 실시간 증가값은 Redis, 최종 집계는 Postgres처럼 역할을 나누면 비용이 줄어듭니다.
S3 / R2 object storage
파일과 원본 덩어리 저장소
- 용도
- JSONL archive, 이미지, ZIP, 원본 로그
- 주의
- SQL WHERE/JOIN을 하는 DB가 아닙니다.
Kafka / Redpanda
이벤트 스트림/로그 파이프라인
- 용도
- 수집 이벤트, 비동기 처리
- 주의
- 최종 조회용 DB가 아니라 흐름을 운반하는 시스템입니다.
Analytics Engine / Clickstream tools
집계·분석 특화 서비스
- 용도
- 방문/이벤트 집계
- 주의
- 원본 관계형 데이터 저장소와 역할을 분리해야 합니다.
06B · 실전 주의
DB를 쓸 때 반드시 봐야 하는 운영 체크리스트
DB 비용은 요금표에서만 결정되지 않습니다. 같은 Postgres, 같은 D1이라도 이벤트를 어떻게 저장하고, 인덱스를 어떻게 잡고, 재시도를 어떻게 처리하느냐에 따라 비용과 안정성이 완전히 달라집니다.
쓰기 폭주 기능은 먼저 버퍼링한다
방문 카운트, 조회수, 좋아요, 크론 sweep은 즉시 UPDATE 대신 Redis/Queue/로컬 DB에 모아 batch로 반영한다.
서버리스 DB는 작은 쓰기도 횟수가 쌓이면 과금과 잠금 부담이 커집니다.
인덱스 없는 필터와 정렬을 방치하지 않는다
WHERE, ORDER BY, GROUP BY에 자주 쓰는 컬럼은 explain/query plan과 실제 rows read를 확인한다.
화면은 20개만 보여도 DB가 수백만 행을 스캔하면 읽기 비용과 응답 시간이 같이 터집니다.
원본 이벤트를 영구 저장할지 먼저 결정한다
raw event, daily aggregate, current snapshot, archive를 분리하고 retention 기간을 정한다.
방문 로그와 트렌딩 원본을 무기한 테이블에 쌓으면 storage와 read scan이 계속 커집니다.
idempotent write를 기본으로 만든다
unique key, content hash, upsert 조건, changed-only update를 두고 같은 batch 재실행이 중복 write를 만들지 않게 한다.
수집기는 실패 후 재시도합니다. 재시도할 때마다 비용이 늘면 안정화할수록 더 비싸집니다.
보안 데이터와 공개 데이터를 섞지 않는다
회원, 결제, 토큰, 개인정보는 관리형 Auth/RLS DB에 두고 공개 유튜브 catalog와 분리한다.
털려도 피해가 제한적인 데이터와 유출 즉시 사고가 되는 데이터는 운영 기준이 완전히 다릅니다.
클라이언트 직접 DB 접근을 믿지 않는다
anon key, RLS, security rules, service role 노출 여부, public JS 번들 검색을 배포 전 확인한다.
요금 폭탄보다 더 위험한 것은 공개 키와 잘못된 규칙으로 DB 전체가 열리는 상황입니다.
백업은 파일 생성이 아니라 복구 성공까지다
daily dump, offsite backup, restore rehearsal, migration rollback 절차를 문서화한다.
VPS Postgres는 비용을 줄여도 백업 실패 한 번이면 관리형 DB보다 훨씬 비싸집니다.
예산 경보와 사용량 로그를 앱 기능처럼 다룬다
D1 rows, Turso rows, Supabase egress/DB size, Workers requests, storage 증가량을 24h/7d 단위로 기록한다.
DB 비용은 체감이 늦습니다. 청구서가 온 뒤가 아니라 사용량 곡선이 꺾일 때 잡아야 합니다.
07 · 실제 타임라인
Supabase, D1, Turso, MongoDB를 거치며 배운 것
Supabase
Postgres와 Auth는 편했지만, 사이드 프로젝트 입장에서는 월 $25가 고정 지출로 느껴졌습니다.
Cloudflare D1
Pages/Workers와 붙이면 편하지만, YouTube 트렌딩 수집과 방문 카운트처럼 쓰기가 많은 기능에서 rows written이 튀었습니다.
Turso
SQLite 감각은 좋지만 읽기·쓰기 포함량과 초과 과금이 있어서 대량 수집 DB로는 설계가 필요했습니다.
MongoDB
JSON 문서형은 매력적이었지만 제 프로젝트에서는 fetch 체감 지연과 운영 복잡도 때문에 다시 이전했습니다.
이 비용은 단순히 “트래픽이 많아서”가 아니었습니다. 매 방문마다 카운터를 쓰고, 매 크론마다 같은 영상과 채널을 다시 쓰고, 필터 통계를 만들려고 넓은 테이블을 계속 읽으면 사용자는 한 명이어도 DB는 계속 일합니다.
08 · D1
Cloudflare D1 쓰기 폭탄의 정체
D1은 Cloudflare Pages와 Workers에 붙이기 정말 좋습니다. 작은 설정값, 앱 메타, 짧은 링크, 공개 페이지의 가벼운 조회용 데이터에는 여전히 좋은 선택입니다. 하지만 YouTube 트렌딩 영상 수집처럼 같은 셀을 계속 긁고, 채널별 current 값을 계속 갱신하고, 방문 카운트를 매번 INSERT/UPDATE하는 구조에서는 rows written이 빠르게 쌓입니다.
특히 D1의 rows read는 “화면에 반환된 행 수”가 아니라 “쿼리가 읽거나 스캔한 행 수” 관점입니다. 인덱스가 빠지거나 정렬·필터가 넓게 걸리면, 사용자는 20개만 보는데 DB는 수천~수백만 행을 읽을 수 있습니다.
09 · 비교
Supabase, Turso, MongoDB, D1, VPS Postgres 비교
| DB | 요금 구조 | 잘 맞는 곳 | 위험한 곳 | 내 결론 |
|---|---|---|---|---|
| Supabase Postgres | Free 한도 + Pro $25/month부터, compute·disk·egress quota | Auth, RLS, 관리자 앱, 개인정보가 있는 서비스, 빠른 MVP | 수백만 공개 로그를 무작정 밀어 넣는 비용 민감 프로젝트 | 돈을 내면 편합니다. 그런데 취미/바이브 코딩 프로젝트에는 $25 고정비가 은근 큽니다. |
| Cloudflare D1 | rows read/written + storage, Workers 비용 별도 가능 | Cloudflare Pages/Workers 설정값, 작은 메타데이터, 읽기 최적화된 공개 데이터 | 방문 카운트, 트렌딩 영상, 반복 UPDATE, full scan 정렬·필터 | 작게 쓰면 좋고, 많이 쓰면 요금표를 직접 배우게 됩니다. D1은 싼 DB가 아니라 서버리스 DB입니다. |
| Turso / SQLite | plan별 storage, rows read, rows written, sync 포함량 | 로컬 수집, SQLite 친화 데이터, edge replica, 가벼운 운영 | 억 단위 방문 카운트와 대량 반복 갱신을 아무 생각 없이 넣는 구조 | D1 대체로 좋을 때가 있지만, 여기도 읽기·쓰기 한도는 확인해야 합니다. |
| MongoDB Atlas | shared/free tier, dedicated cluster, storage/compute 중심 | 문서형 JSON, 스키마가 자주 바뀌는 데이터, 객체 단위 저장 | 관계형 집계, 조인, 비용 민감 대량 분석, fetch 지연에 예민한 화면 | JSON이라 편할 줄 알았는데, 제 프로젝트에서는 속도와 이전 비용이 더 크게 느껴졌습니다. |
| VPS + Docker Postgres | VPS 월 비용 + 직접 운영 책임 | 공개 대량 데이터, 유튜브 영상 catalog, 로그성 통계, 실험용 분석 DB | 개인정보, 결제, Auth, 백업/보안/장애 대응을 직접 못 하는 팀 | 털려도 큰 문제가 없는 공개 데이터라면, 이제 VPS Postgres를 진지하게 볼 차례입니다. |
Supabase는 비싼 만큼 편합니다. Auth, RLS, dashboard, Postgres, Storage까지 한 번에 들어옵니다. 그래서 개인정보가 있거나 로그인/권한/결제가 있는 서비스라면 여전히 관리형 DB가 맞습니다.
Turso는 SQLite 계열이라 로컬 수집과 작은 API에는 매력적입니다. 다만 대량 read/write가 반복되는 구조라면 D1과 마찬가지로 포함량과 초과 과금을 확인해야 합니다. MongoDB는 JSON 문서형이라 직관적이지만, 관계형 집계와 비용 민감한 분석 화면에서는 프로젝트 성격을 많이 탑니다.
10 · 대안
그래서 VPS + Docker Postgres가 나옵니다
VPS는 쉽게 말해 24시간 켜져 있는 컴퓨터를 빌리는 개념입니다. 그 위에 Docker로 Postgres를 올리면, request마다 돈을 내는 감각보다는 CPU, 메모리, 디스크, 네트워크 한도 안에서 직접 운영하는 구조가 됩니다.
유튜브 영상 제목, 채널 ID, 썸네일, 조회수, 공개 트렌딩 기록처럼 이미 공개된 데이터는 개인정보와 위험도가 다릅니다. 이런 데이터 50만, 100만, 200만, 300만 건을 실험하려면 서버리스 row 과금형 DB보다 VPS Postgres가 더 예측 가능할 수 있습니다.
- Docker Compose로 Postgres, backup job, pgAdmin/Adminer 같은 관리 도구를 분리한다.
- DB 포트는 인터넷에 바로 열지 말고, SSH 터널 또는 VPN 경유를 기본으로 둔다.
- 매일 dump, 주간 offsite backup, 복구 리허설까지 해야 백업이라고 부를 수 있다.
- YouTube 공개 데이터처럼 털려도 치명적이지 않은 데이터부터 올려 실험한다.
- 개인정보, 결제, 비밀번호, 민감 로그는 직접 운영 DB에 섞지 않는다.
- 인덱스, VACUUM, autovacuum, slow query log, 디스크 사용량을 주기적으로 본다.
11 · 선택표
그래서 뭘 써야 하나
워크로드
로그인, 결제, 개인정보, 관리자 권한
추천 방향
Supabase 같은 관리형 Postgres
선택 이유
Auth, RLS, 보안 패치, 백업, 운영 편의가 비용보다 중요합니다.
워크로드
Cloudflare 사이트 설정, 작은 상태값, 단축링크, 앱 메타
추천 방향
D1
선택 이유
Pages/Workers와 결합이 쉽고, 쿼리량이 작으면 운영 부담이 낮습니다.
워크로드
로컬 수집, SQLite 파일 감각, 작은 API 서버
추천 방향
SQLite 또는 Turso
선택 이유
개발 속도가 빠르고, 로컬-first 구조를 만들기 좋습니다.
워크로드
유튜브 영상 50만~300만 건, 공개 트렌딩 catalog
추천 방향
VPS + Postgres
선택 이유
row/request 과금보다 서버 자원 한도 안에서 직접 튜닝하는 편이 예측 가능할 수 있습니다.
워크로드
방문 카운트, 실시간 조회수, 반복 업데이트
추천 방향
집계 버퍼 + Postgres 또는 전용 analytics
선택 이유
매 방문마다 DB INSERT/UPDATE를 때리면 어떤 서버리스 DB도 비용·부하가 커집니다.
제 기준은 이제 단순합니다. 보안·권한·결제가 핵심이면 돈을 내고 관리형을 씁니다. 공개 대량 데이터와 수집 실험이면 VPS Postgres를 검토합니다. Cloudflare 생태계의 작은 상태값은 D1에 둡니다. 로컬 수집과 가벼운 SQLite 감각은 Turso나 SQLite로 처리합니다.
12 · 보안선
개인정보와 결제 정보는 다른 문제입니다
이 글은 “무조건 VPS에 다 때려 넣자”가 아닙니다. 유튜브 공개 데이터처럼 털려도 피해가 제한적인 데이터와, 이메일·회원·결제·개인 로그처럼 유출되면 바로 사고가 되는 데이터는 완전히 다르게 봐야 합니다.
Auth가 필요하고 RLS가 중요하고 감사 로그와 백업, 보안 업데이트가 중요한 서비스라면 Supabase 같은 유료 클라우드 DB를 쓰는 것이 오히려 싸게 먹힐 수 있습니다. 직접 운영은 자유를 주지만 책임도 같이 줍니다.
13 · 마무리
최종 결론: DB 선택은 가격표가 아니라 데이터 흐름 설계입니다
제 결론은 단순합니다. 로그인과 권한은 관리형으로 안전하게, 공개 대량 데이터는 원본·스냅샷·집계를 분리해서, 반복 쓰기 기능은 버퍼링해서, 검색과 분석은 필요할 때 보조 저장소로 나눕니다. 이 순서를 지키면 DB 비용은 “운”이 아니라 설계 문제가 됩니다.
- 월요금이 아니라 과금 단위를 먼저 봤는가?
- 내 기능이 read-heavy인지 write-heavy인지, cron-heavy인지 구분했는가?
- 원본, current snapshot, aggregate, archive를 분리했는가?
- 방문 카운트와 반복 수집을 즉시 DB write로 처리하지 않는가?
- 개인정보/Auth/결제 데이터와 공개 대량 데이터를 분리했는가?
- 인덱스, 쿼리 스캔, backup, egress, budget alert까지 운영 항목에 넣었는가?
14 · FAQ
FAQ
처음 웹앱을 만들 때 DB는 뭘 쓰면 되나?
로그인, 권한, 관리자 페이지가 있으면 Supabase 같은 관리형 Postgres가 편합니다. 작고 단순한 앱이면 SQLite/Turso도 좋고, Cloudflare 안에서 설정값이나 작은 공개 데이터를 다루면 D1도 맞습니다. 처음부터 검색 DB, 벡터 DB, 캐시까지 전부 붙이면 비용보다 운영 복잡도가 먼저 커집니다.
싼 DB인지 보려면 월요금보다 뭘 봐야 하나?
과금 단위를 먼저 봐야 합니다. rows read/written, request, operation, compute hour, disk, egress, MAU, backup 보관료 중 어디에 돈이 붙는지 확인해야 합니다. 월 $0 또는 $7이어도 반복 수집, 방문 카운트, 통계 화면이 과금 단위를 계속 때리면 실제 청구액은 금방 달라집니다.
읽기와 쓰기가 많은 유튜브 데이터는 어디에 두는 게 낫나?
원본 대량 데이터는 R2/S3 같은 객체 저장소나 VPS Postgres 후보가 됩니다. 화면에 필요한 최신값만 Postgres/Turso/D1에 얇게 올리고, 매 sweep마다 같은 row를 다시 쓰는 구조는 피해야 합니다. 서버리스 row 과금형 DB에 트렌딩 영상 전체 갱신을 계속 넣으면 비용 예측이 어렵습니다.
방문 카운트는 왜 D1이나 Turso에 바로 쓰면 위험한가?
페이지뷰는 사람 한 명이 여러 번 만들고, 봇도 만들고, 새로고침도 만듭니다. 방문마다 INSERT/UPDATE를 하면 rows written이 방문 수보다 훨씬 크게 튈 수 있습니다. 그래서 방문 카운트는 Postgres 집계 함수, Redis/Queue 버퍼, 일괄 집계처럼 쓰기 횟수를 줄이는 구조가 필요합니다.
MongoDB는 JSON이라 영상 데이터에 제일 좋은 것 아닌가?
영상 원본 payload를 통째로 저장하는 데는 문서형 DB가 편합니다. 하지만 채널, 영상, 날짜별 랭킹, 국가별 순위, 집계 화면처럼 관계와 통계가 많아지면 Postgres 쿼리와 인덱스가 더 단순할 때가 많습니다. JSON 친화성과 분석 비용은 별개입니다.
벡터 DB는 Postgres를 대체하나?
대체라기보다 검색용 보조 인덱스에 가깝습니다. 원본 글, 영상, 채널 정보는 Postgres나 객체 저장소에 두고, 임베딩 검색이 필요할 때 pgvector, Pinecone, Qdrant, Weaviate 같은 벡터 저장소를 붙이는 식이 안전합니다.
VPS Postgres는 무조건 정답인가?
공개 대량 데이터, 수집 실험, 읽기/쓰기 많은 내부 도구에는 강력한 후보입니다. 대신 백업, 보안 업데이트, 디스크 용량, 장애 대응을 직접 챙겨야 합니다. 개인정보, 결제, 인증이 있으면 관리형 DB와 Auth 서비스를 쓰는 편이 더 안전할 수 있습니다.
D1은 언제 쓰면 좋은가?
Cloudflare Pages/Workers와 붙는 작은 앱 메타데이터, 설정값, 짧은 링크, 읽기 위주의 공개 데이터에는 좋습니다. 다만 전체 영상 sweep, 채널별 반복 갱신, 방문 카운트처럼 계속 쓰는 기능은 D1의 rows written 구조와 맞지 않을 수 있습니다.
15 · 링크
가격과 기능을 다시 확인할 문서
실제 도입 전에는 현재 사용하는 region, plan, storage, egress, read/write 단위를 기준으로 다시 계산해야 합니다. 이 글의 가격 숫자는 선택 방향을 잡기 위한 기준선이고, 최종 견적은 각 서비스의 최신 문서에서 확인하는 편이 안전합니다.