100K+ 레코드 웹사이트를 위한 최고의 데이터베이스: Supabase vs Firebase vs PlanetScale 테스트
대부분의 "Supabase vs Firebase" 글은 각 플랫폼에서 할 일 앱을 띄워놓고 끝낸 사람들이 작성합니다. 저는 1년 이상 Supabase PostgreSQL에서 5개의 프로덕션 웹사이트에 걸쳐 253,000+ 개의 레코드를 운영해왔습니다. Firebase Firestore, PlanetScale, Neon, Turso를 실제 클라이언트 프로젝트에 대해 평가했으며 -- 가상의 것이 아닙니다. 이것이 제가 실제로 발견한 것입니다.
100K+ 개의 레코드를 처리해야 하고, 복잡한 쿼리, 실시간 기능, 인증이 필요한 웹 애플리케이션을 구축하고 있다면, 데이터베이스 선택이 앞으로 몇 년간 아키텍처를 정의할 것입니다. 잘못 선택하면 6개월 내에 데이터 레이어를 다시 작성하거나 3배를 지불하게 됩니다. 저는 두 가지 모두로부터 당신을 구하고 싶습니다.
목차
- 이 비교가 존재하는 이유
- 한눈에 보는 경쟁자들
- Supabase PostgreSQL: 우리의 프로덕션 핵심
- Firebase Firestore: 승리하는 곳과 그렇지 않은 곳
- PlanetScale: 훌륭한 데이터베이스, 불완전한 플랫폼
- Neon: 순수주의자의 선택
- Turso: 엣지 우선 SQLite
- 헤드투헤드 기능 비교
- 100K+ 레코드의 성능 벤치마크
- 100K 레코드 워크로드의 가격 책정 분석
- 어떤 데이터베이스를 선택해야 할까요?
- FAQ

이 비교가 존재하는 이유
Social Animal에서 저희는 헤드리스 웹 애플리케이션 -- 주로 Next.js와 Astro를 사용합니다 -- 를 동적이고 데이터가 많은 사이트가 필요한 클라이언트를 위해 구축합니다. 50K+ 개 리스팅이 있는 엔터프라이즈 디렉토리, 수천 개의 페이지를 생성하는 프로그래매틱 SEO 사이트, 실시간 업데이트가 필요한 SaaS 대시보드를 생각해보세요.
클라이언트가 100K+ 개의 레코드와 관련된 프로젝트를 가지고 올 때, 데이터베이스 대화는 첫 날에 발생합니다. 사후 생각이 아닙니다. 데이터베이스 선택은 인증 전략, API 설계, 호스팅 비용, 그리고 6개월 후에 기능을 배포할 수 있는 능력에 영향을 미칩니다.
저는 모든 5개의 데이터베이스에서 동일한 프로덕션 워크로드를 실행했다고 가장하지 않을 것입니다. 그것은 부정직할 것입니다. 제가 한 것은 Supabase에서 심각한 프로덕션 작업을 실행했다는 것입니다(253K+ 레코드, 5개 사이트, 14개월)과 특정 클라이언트 프로젝트에 대한 대안들에 대한 철저한 기술 평가입니다. 저는 어떤 데이터가 프로덕션에서 나왔는지, 어떤 데이터가 평가에서 나왔는지 명확히 할 것입니다.
한눈에 보는 경쟁자들
깊이 들어가기 전에, 여기 빠른 그림입니다:
- Supabase -- PostgreSQL with batteries included (auth, storage, realtime, edge functions)
- Firebase Firestore -- Google의 NoSQL 문서 데이터베이스, 우수한 모바일 SDK
- PlanetScale -- Vitess로 구동되는 서버리스 MySQL with database branching
- Neon -- Branching과 scale-to-zero가 있는 서버리스 PostgreSQL
- Turso -- libSQL로 구동되는 엣지의 분산 SQLite
각각은 무언가에 정말 좋습니다. 문제는 그 무언가가 당신이 구축하고 있는 것과 일치하는지 여부입니다.
Supabase PostgreSQL: 우리의 프로덕션 핵심
저는 가장 깊은 경험을 가진 Supabase로 시작하겠습니다. 5개의 프로덕션 사이트에 걸쳐, 우리의 가장 큰 테이블은 137K개 행을 가지고 있으며(전국 주소 디렉토리 프로젝트), 모든 데이터베이스에 걸쳐 253K+ 개의 레코드가 있습니다.
우리가 매일 사용하는 것
**Row Level Security (RLS)**는 아마도 우리를 위해 거래를 체결한 기능일 것입니다. 멀티테넌트 애플리케이션을 구축할 때 -- 대부분의 헤드리스 CMS 기반 사이트는 결국 이것이 됩니다 -- 사용자별 데이터 격리가 필요합니다. RLS를 사용하면, 보안 로직이 데이터베이스 자체에 살고 있습니다. API 레이어는 모든 단일 쿼리에서 user_id로 필터링하는 것을 기억할 필요가 없습니다. 데이터베이스가 이를 적용합니다.
우리 프로젝트의 일반적인 RLS 정책은 다음과 같습니다:
-- 사용자는 자신의 조직의 리스팅만 볼 수 있습니다
CREATE POLICY "org_isolation" ON listings
FOR SELECT
USING (org_id = (SELECT org_id FROM profiles WHERE id = auth.uid()));
-- 관리자는 모든 것을 볼 수 있습니다
CREATE POLICY "admin_access" ON listings
FOR ALL
USING (EXISTS (
SELECT 1 FROM profiles
WHERE id = auth.uid() AND role = 'admin'
));
이것은 실제 SQL입니다. 소유권 있는 DSL이 아닙니다. Supabase를 떠나야 할 경우, 이러한 정책은 모든 PostgreSQL 호스트로 변환됩니다.
pgvector는 의미 검색에 대한 계시였습니다. 우리는 전통적인 전체 텍스트 검색이 충분하지 않았던 콘텐츠가 많은 사이트에서 이를 구현했습니다. 사용자가 "downtown 근처에 먹을 곳"을 검색하고 레스토랑, 카페, 푸드 트럭을 포함한 결과를 기대할 것입니다 -- 정확한 단어가 리스팅에 없더라도.
-- 벡터 열 생성
ALTER TABLE listings ADD COLUMN embedding vector(1536);
-- 인덱스 생성 (100K+ 레코드에서 많이 중요합니다)
CREATE INDEX ON listings USING ivfflat (embedding vector_cosine_ops)
WITH (lists = 100);
-- 의미 검색 쿼리
SELECT id, name, 1 - (embedding <=> $1) AS similarity
FROM listings
WHERE 1 - (embedding <=> $1) > 0.78
ORDER BY embedding <=> $1
LIMIT 20;
1536 차원 벡터가 있는 137K 레코드에서, 이 쿼리는 Supabase의 Pro 플랜에서 ~45ms 내에 반환됩니다. 이것은 실시간 검색 입력 시 충분히 빠릅니다.
PostGIS 지역 쿼리는 우리의 위치 기반 기능을 강화합니다. 반경 내의 리스팅 찾기, 거리별 정렬, 주행 시간 계산 -- 모두 응용 프로그램 코드가 아닌 데이터베이스 수준에서 처리됩니다.
-- 한 지점으로부터 10km 이내의 리스팅 찾기, 거리순 정렬
SELECT id, name,
ST_Distance(location, ST_MakePoint(-73.9857, 40.7484)::geography) AS distance_m
FROM listings
WHERE ST_DWithin(
location,
ST_MakePoint(-73.9857, 40.7484)::geography,
10000
)
ORDER BY distance_m
LIMIT 50;
실시간 구독은 WebSocket 인프라 없이 라이브 대시보드를 구축할 수 있게 해줍니다. 클라이언트의 관리자 패널은 관련 테이블의 INSERT 이벤트를 구독하기 때문에 새로운 제출이 즉시 나타납니다. 추가 인프라가 없습니다.
완벽하지 않은 것
저는 Supabase가 완벽하다고 가장하지 않을 것입니다. 대시보드는 100K+ 행을 가진 테이블을 탐색할 때 느릴 수 있습니다. 테이블 편집기는 작은 데이터셋에는 괜찮지만 대량 작업에는 고통스럽습니다 -- SQL을 직접 사용하고 싶을 것입니다. Edge Functions는 Deno로 구동되므로, 일부 Node.js 패키지는 작동하지 않습니다. 서버리스 환경을 위해 연결 풀링이 필요하면, Supavisor 연결 문자열을 사용해야 합니다(2025년 초부터 PgBouncer를 단계별로 폐지했습니다).
또한, 무료 티어는 개발을 위해 정말 관대하지만 500MB 데이터베이스 공간의 하드 제한이 있습니다. 100K+ 레코드가 있는 프로덕션의 경우, 최소 Pro 플랜($25/월)을 볼 수 있습니다.

Firebase Firestore: 승리하는 곳과 그렇지 않은 곳
우리는 2024년에 두 개의 클라이언트 프로젝트를 위해 Firebase를 진지하게 평가했습니다. 하나는 오프라인 동기화 요구 사항이 있는 모바일 우선 애플리케이션이었습니다. 다른 하나는 복잡한 필터링이 있는 디렉토리 사이트였습니다.
Firebase가 정말 승리하는 곳
모바일 애플리케이션을 위한 Firebase의 실시간 동기화는 여전히 최고 수준입니다. 오프라인 지속성, 자동 충돌 해결, iOS/Android SDK와의 긴밀한 통합은 기본 플랫폼이 모바일인 경우 명백한 선택입니다. Google 인증 통합은 매우 간단합니다 -- 몇 줄의 코드와 Google 로그인, Apple, 전화번호, 이메일/비밀번호를 받았습니다.
Firebase Crashlytics, Remote Config, Analytics는 다른 것이 일치하지 않는 모바일 개발 생태계를 형성합니다. 모바일 앱을 우선적으로 구축하고 웹 앱을 두 번째로 구축하고 있다면, Firebase는 진지한 고려를 받을 자격이 있습니다.
우리가 대신 Supabase를 선택한 이유
Firestore는 문서 데이터베이스입니다. 조인이 없습니다. 잠깐 그것을 생각해 보세요.
카테고리, 태그, 위치, 리뷰, 사용자 프로필이 있는 리스팅이 있는 디렉토리를 구축할 때, 관계형 데이터가 필요합니다. Firestore에서, 모든 것을 비정규화하거나(문서에 걸쳐 데이터를 복제하고 동기화 상태를 유지하길 바랍니다) 여러 왕복 쿼리를 만들고 애플리케이션 코드에서 데이터를 조인합니다.
"카테고리별 리스팅 찾기 평균 등급"이 각각 어떻게 보이는지 다음과 같습니다:
-- Supabase: 한 쿼리, 완료
SELECT l.*, c.name AS category_name,
AVG(r.rating) AS avg_rating,
COUNT(r.id) AS review_count
FROM listings l
JOIN categories c ON l.category_id = c.id
LEFT JOIN reviews r ON r.listing_id = l.id
WHERE c.slug = 'restaurants'
GROUP BY l.id, c.name
ORDER BY avg_rating DESC
LIMIT 20;
// Firestore: 세 쿼리 + 클라이언트 측 조인
const categorySnap = await db.collection('categories')
.where('slug', '==', 'restaurants').get();
const categoryId = categorySnap.docs[0].id;
const listingsSnap = await db.collection('listings')
.where('categoryId', '==', categoryId).get();
// 이제 각 리스팅에 대해 리뷰를 가져옵니다...
// 그런 다음 응용 프로그램 코드에서 평균을 계산합니다...
// 그런 다음 정렬합니다... 아이디어를 얻습니다.
그리고 여기 실제 요점이 있습니다: Firestore는 문서 읽기당 요금을 청구합니다. 위의 트리플 쿼리 패턴? 모든 쿼리의 모든 문서가 계산됩니다. 100K+ 레코드, 적당한 트래픽에서, 청구서는 정말로 예측할 수 없습니다. 우리는 개발자가 예상했던 것보다 더 많은 문서를 스캔하는 것을 깨닫지 못했을 때 $400+ 놀라움 청구서에 대한 공포 이야기를 들었습니다.
Firestore는 pgvector 또는 PostGIS와 동등한 것이 없습니다. 기본 지역 해시 쿼리를 할 수 있지만, 그것들은 대략적이고 진정한 공간 인덱싱과 비교하여 제한됩니다.
PlanetScale: 훌륭한 데이터베이스, 불완전한 플랫폼
PlanetScale은 Vitess를 후드 아래에서 실행합니다 -- YouTube의 데이터베이스를 강화하는 동일한 기술입니다. 순수 MySQL 성능의 경우, 그것은 우수합니다. 데이터베이스 분기 기능(분기 생성, 스키마 변경, 병합)은 정말 혁신적이며 Supabase가 기본적으로 있기를 바라는 무언가입니다.
PlanetScale이 잘하는 것
서버리스 드라이버가 빠릅니다. 연결 관리는 당신을 위해 처리되는데, 이는 각 함수 호출이 새로운 데이터베이스 연결을 열 수 있는 서버리스 환경에서 엄청나게 중요합니다. 스키마 분기는 데이터베이스 마이그레이션이 Git 풀 요청처럼 느껴지게 합니다 -- 안전하고, 검토 가능하고, 되돌릴 수 있습니다.
강한 MySQL 전문 지식과 전통적인 웹 애플리케이션을 구축하는 팀의 경우, PlanetScale은 견고합니다.
누락된 것
PlanetScale은 그냥 데이터베이스입니다. 그 이상입니다. 완전한 애플리케이션 스택을 구축하는데 필요한 것과 비교하세요:
| 기능 | Supabase | PlanetScale + Extras |
|---|---|---|
| 데이터베이스 | ✅ 포함 | ✅ 포함 |
| 인증 | ✅ 포함 | ❌ Clerk ($25+/mo) 또는 Auth0 필요 |
| 파일 저장소 | ✅ 포함 | ❌ S3 또는 Cloudflare R2 필요 |
| 실시간 | ✅ 포함 | ❌ Pusher 또는 Ably 필요 |
| 벡터 검색 | ✅ pgvector | ❌ 사용할 수 없음 |
| 지역 쿼리 | ✅ PostGIS | ❌ 기본 MySQL 공간 |
| 엣지 함수 | ✅ 포함 | ❌ 별도 배포 필요 |
Clerk로 인증을 추가하고, S3로 저장소를 추가하고, Pusher로 실시간을 추가하고, 검색을 위해 별도의 벡터 데이터베이스를 추가하면, 대신 하나를 관리하는 것이 아니라 5개의 서비스를 관리합니다. 청구서가 높고, 복잡성이 높으며, 디버깅 표면 영역이 엄청납니다.
PlanetScale은 또한 2024년 4월에 무료 계층(Hobby 플랜)을 단계별 폐지했으므로, 진입점은 이제 Scaler 플랜의 $39/월입니다. 이것은 Supabase Pro보다 더 비싸고 더 적은 기능을 제공합니다.
Neon: 순수주의자의 선택
Neon은 PostgreSQL을 원하고 아무것도 원하지 않는 경우 내가 선택할 데이터베이스입니다. 서버리스 아키텍처는 정말 인상적입니다 -- scale-to-zero는 데이터베이스가 쿼리되지 않을 때 아무것도 지불하지 않는다는 의미입니다. 분기 기능은 미리보기 배포에 훌륭합니다(모든 PR에 대해 데이터베이스 분기를 회전시킵니다).
Neon은 pgvector 및 PostGIS를 지원합니다, 왜냐하면 표준 PostgreSQL이기 때문입니다. 따라서 벡터 검색 및 지역 쿼리를 얻습니다. 원시 데이터베이스 기능은 Supabase와 거의 동일합니다.
우리가 여전히 Supabase를 선택한 이유
Neon은 데이터베이스입니다. Supabase는 플랫폼입니다. Neon을 사용하면, 다음을 추가해야 합니다:
- 인증 -- Clerk, Auth0, 또는 직접 구축
- 저장소 -- S3, Cloudflare R2, 또는 유사
- 실시간 -- Pusher, Ably, 또는 커스텀 WebSocket 서버
- 엣지 함수 -- Cloudflare Workers 또는 Vercel에 별도로 배포
일부 팀의 경우, 그 모듈식 접근은 실제로 선호됩니다. 이미 인증에 대한 의견이 있으면(그리고 Clerk에 대한 예산), 모든 것에 S3을 사용하고, 실시간이 필요하지 않으면, Neon의 집중된 접근은 더 적은 공급업체 종속을 의미합니다.
하지만 우리의 헤드리스 개발 프로젝트의 경우, 한 대시보드, 한 청구서, 한 세트의 API 키로 인증, 저장소, 실시간을 가지는 것은 가치가 있습니다. 개발자 속도는 빡빡한 일정으로 클라이언트 프로젝트를 배포할 때 중요합니다.
Neon의 가격 책정도 경쟁적입니다: 무료 계층에는 0.5GB 저장소 및 190 계산 시간/월이 포함됩니다. $19/월의 Launch 플랜은 10GB를 제공합니다. 순수 데이터베이스 플레이의 경우, 그것은 서버리스 PostgreSQL에서 최고의 가치입니다.
Turso: 엣지 우선 SQLite
Turso는 매혹적인 기술입니다. 그들은 SQLite -- 세상에서 가장 배포된 데이터베이스 -- 를 가져갔고 분산시켰습니다. 데이터는 엣지에 살고 있으며, 사용자와 가깝고, 읽기 지연 시간이 매우 낮을 수 있다는 의미입니다(전 세계 10ms 미만).
Turso가 빛나는 곳
글로벌 청중을 가진 읽기 집약적 워크로드. 자주 변경되지 않는 콘텐츠를 전 세계 사용자에게 제공하고 있다면, Turso의 엣지 복제는 데이터베이스 읽기가 즉시 느껴지도록 제공합니다. 내장된 레플리카 기능은 SQLite 레플리카를 직접 애플리케이션에 번들할 수 있게 해줍니다.
Astro로 빌드되고 가벼운 데이터 레이어가 필요한 정적 사이트의 경우, Turso는 강력합니다.
우리의 요구에 맞지 않은 이유
우리의 100K+ 레코드 워크로드는 상당한 쓰기를 포함합니다 -- 사용자 제출, 관리자 업데이트, 리뷰 생성, 실시간 데이터 변경. SQLite의 쓰기 모델(단일 쓰기자)은 규모에서 병목이 됩니다. Turso는 libSQL 포크를 통해 이것을 원시 SQLite보다 더 잘 처리하지만, 여전히 쓰기 집약적인 100K+ 레코드 애플리케이션을 위해 설계되지 않았습니다.
벡터 검색이 없습니다. PostGIS와 동등한 것이 없습니다. PostgreSQL 또는 MySQL과 비교하여 제한된 생태계. 우리의 디렉토리 및 SaaS 프로젝트의 경우, 이것들은 거래 차단기였습니다.
헤드투헤드 기능 비교
2025년 중반 현재 우리의 프로덕션 경험 및 평가를 기반으로 한 전체 비교 테이블이 있습니다:
| 기능 | Supabase | Firebase | PlanetScale | Neon | Turso |
|---|---|---|---|---|---|
| 데이터베이스 유형 | PostgreSQL | NoSQL (Firestore) | MySQL (Vitess) | PostgreSQL | SQLite (libSQL) |
| 내장 인증 | ✅ 예 | ✅ 예 | ❌ 아니요 | ❌ 아니요 | ❌ 아니요 |
| 벡터 검색 | ✅ pgvector | ❌ 아니요 | ❌ 아니요 | ✅ pgvector | ❌ 아니요 |
| 지역 쿼리 | ✅ PostGIS | ⚠️ 제한됨 (Geohash) | ⚠️ 기본 MySQL 공간 | ✅ PostGIS | ❌ 아니요 |
| 실시간 | ✅ 예 | ✅ 예 | ❌ 아니요 | ❌ 아니요 | ❌ 아니요 |
| 파일 저장소 | ✅ 예 | ✅ 예 | ❌ 아니요 | ❌ 아니요 | ❌ 아니요 |
| 엣지 함수 | ✅ Deno 기반 | ✅ 클라우드 함수 | ❌ 아니요 | ❌ 아니요 | ❌ 아니요 |
| 조인 / 관계 | ✅ 전체 SQL | ❌ 조인 없음 | ✅ 전체 SQL | ✅ 전체 SQL | ✅ SQL (제한됨) |
| 분기 | ⚠️ 마이그레이션을 통해 | ❌ 아니요 | ✅ 기본 | ✅ 기본 | ❌ 아니요 |
| Scale-to-Zero | ❌ 아니요 | ✅ 예 | ✅ 예 | ✅ 예 | ✅ 예 |
| 가격 책정 예측 가능성 | 🟢 높음 (평면 계층) | 🔴 낮음 (읽기당) | 🟡 중간 | 🟢 높음 | 🟢 높음 |
| 오픈 소스 | ✅ 예 | ❌ 아니요 | ❌ 아니요 (Vitess는) | ✅ 예 | ✅ 예 |
| 자체 호스팅 가능 | ✅ 예 | ❌ 아니요 | ❌ 아니요 | ❌ 아니요 | ✅ 예 |
100K+ 레코드의 성능 벤치마크
이 숫자는 137K 행을 가진 기본 테이블이 있는 우리의 프로덕션 Supabase 인스턴스(Pro 플랜, us-east-1 지역)에서 나옵니다. 다른 데이터베이스의 경우, 100K 합성 레코드로 게시된 벤치마크 및 우리 평가 테스트를 사용합니다.
| 쿼리 유형 | Supabase | Firebase | PlanetScale | Neon | Turso |
|---|---|---|---|---|---|
| ID별 단순 SELECT | 3ms | 8ms | 4ms | 5ms | 1ms |
| 필터링된 쿼리 (인덱싱됨) | 12ms | 15ms | 10ms | 14ms | 3ms |
| 복잡한 조인 (3 테이블) | 35ms | N/A (조인 없음) | 28ms | 38ms | 25ms |
| 벡터 유사성 (상위 20) | 45ms | N/A | N/A | 42ms | N/A |
| 지역 반경 (10km) | 22ms | ~50ms (지역 해시) | N/A | 24ms | N/A |
| 전체 텍스트 검색 | 18ms | N/A (Algolia 사용) | 15ms | 20ms | 12ms |
| 대량 삽입 (1000 행) | 180ms | 250ms | 150ms | 195ms | 320ms |
| 콜드 시작 (서버리스) | N/A (항상 켜짐) | ~100ms | ~50ms | ~300ms | ~20ms |
몇 가지가 두드러집니다. Turso의 읽기 성능은 예외입니다 -- 그것이 엣지의 SQLite 이점입니다. PlanetScale의 MySQL 엔진은 우리 테스트에서 PostgreSQL보다 조인을 약간 더 빠르게 처리합니다. Neon의 콜드 시작은 눈에 띕니다(300ms)은 계산을 깨워야 하기 때문이며, 후속 쿼리는 빠릅니다. Firebase의 조인 부재는 이러한 쿼리의 일부를 리터럴로 실행할 수 없다는 의미입니다.
Supabase의 항상 켜짐 계산(Pro에서 scale-to-zero 없음)은 콜드 시작이 첫 요청이 느릴 수 없는 사용자 대면 애플리케이션에서 중요한 경우가 없음을 의미합니다.
100K 레코드 워크로드의 가격 책정 분석
100K 레코드 애플리케이션을 모델화해 봅시다: 100K 리스팅, 50K 월간 활성 사용자, ~2M 데이터베이스 읽기/월, ~50K 쓰기/월, 5GB 데이터베이스 크기, 10GB 파일 저장소가 있는 디렉토리 사이트.
| Supabase Pro | Firebase (Blaze) | PlanetScale Scaler | Neon Launch | Turso Scaler | |
|---|---|---|---|---|---|
| 기본 비용 | $25/mo | $0 (종량제) | $39/mo | $19/mo | $29/mo |
| 데이터베이스 | 포함됨 (8GB) | ~$18 (읽기 + 쓰기) | 포함됨 (10GB) | 포함됨 (10GB) | 포함됨 (9GB) |
| 인증 | 포함됨 (50K MAU) | 포함됨 | +$25/mo (Clerk) | +$25/mo (Clerk) | +$25/mo (Clerk) |
| 저장소 (10GB) | 포함됨 | ~$3/mo | +$2/mo (R2) | +$2/mo (R2) | +$2/mo (R2) |
| 실시간 | 포함됨 | 포함됨 | +$25/mo (Pusher) | +$25/mo (Pusher) | +$25/mo (Pusher) |
| 예상 총합 | $25/mo | ~$21/mo | ~$91/mo | ~$71/mo | ~$81/mo |
Firebase는 두 가지를 깨닫을 때까지 저렴해 보입니다. 첫째, $21 예상은 예측 가능한 읽기 패턴을 가정합니다. 바이럴 순간이나 봇이 사이트를 크롤링하면 읽기가 급격히 증가할 수 있고 -- 청구서가 함께 증가합니다. 둘째, 벡터 검색과 같은 기능이 필요하면, Pinecone 또는 Weaviate를 추가합니다. $70/월에 시작합니다.
모든 것에 대한 $25/월의 Supabase의 평면 가격 -- 데이터베이스, 인증, 저장소, 실시간, 엣지 함수 -- 는 이 워크로드 크기에 대해 놀랍도록 좋은 가치입니다. Pro 플랜은 8GB 데이터베이스, 250GB 대역폭, 100GB 저장소, 그리고 인증을 위한 50K 월간 활성 사용자를 포함합니다.
어떤 데이터베이스를 선택해야 할까요?
우리의 프로덕션 경험에 따른 정직한 권고는 다음과 같습니다:
Supabase 선택 관계형 데이터로 웹 애플리케이션을 구축하고 있으면, 하나의 플랫폼에서 인증 + 저장소 + 실시간이 필요하면, PostgreSQL의 생태계를 원하면(pgvector, PostGIS, 전체 텍스트 검색), 또는 Next.js로 구축하고 있으면. 이것은 우리가 보는 프로젝트의 아마도 80%를 포함합니다.
Firebase 선택 모바일 우선 애플리케이션을 구축하고 있으면 오프라인 동기화가 중요하면, 팀이 이미 Firebase 생태계를 알면, 또는 데이터가 정말로 문서 모양이면(채팅 메시지, 활동 피드, 단순 사용자 프로필).
PlanetScale 선택 강한 MySQL 팀이 있으면, 복잡한 스키마 관리를 위해 데이터베이스 분기가 필요하면, 그리고 이미 인증 및 저장소를 위해 별도의 서비스를 사용하고 있으면. 그것은 훌륭한 데이터베이스입니다 -- 단지 완전한 플랫폼이 아닙니다.
Neon 선택 PostgreSQL을 원하면 플랫폼 오버헤드 없이, 최고의 서비스에서 자신의 스택을 조립하는 것을 선호하면, 또는 낮은 트래픽 프로젝트에서 비용 최적화를 위해 scale-to-zero가 필요하면.
Turso 선택 읽기 집약적인 글로벌 분산 애플리케이션을 구축하고 있으면 쓰기 처리량보다 엣지 지연이 더 중요하면, 또는 콘텐츠 중심 사이트에서 Astro로 작업하고 있으면.
Social Animal에서의 우리 작업은 헤드리스 웹 애플리케이션 구축입니다. Supabase는 올바른 호출이었습니다. 올인원 플랫폼은 더 빠른 개발, 더 간단한 아키텍처, 예측 가능한 비용을 의미합니다. 253K+ 레코드로 스케일링했으며 고민이 없습니다. 이 규모의 프로젝트를 계획하고 있으면 아키텍처를 논의하고 싶으면, 우리에게 연락하세요 -- 우리는 이것을 몇 번 했습니다.
FAQ
Supabase는 대규모 애플리케이션에 좋은가? 예, 그리고 우리는 이를 뒷받침할 프로덕션 증거가 있습니다. 우리는 Supabase Pro에서 5개의 프로덕션 사이트에 걸쳐 253K+ 레코드를 실행합니다. 쿼리 성능은 일정하게 유지됩니다 -- 137K 행에서 벡터 유사성 검색이 있는 우리의 가장 복잡한 조인은 50ms 미만에서 반환됩니다. Supabase는 표준 PostgreSQL에서 실행되며, 이는 우리 대부분이 구축할 어떤 것보다도 여러 배 큰 애플리케이션을 강화합니다. 플랫폼 계층(인증, 저장소, 실시간)은 더 새로운 부분이지만, 2024년 초 이후로 우리에게 안정적입니다.
Supabase 가격 책정은 규모에서 Firebase와 어떻게 비교되나? Supabase는 훨씬 더 예측 가능합니다. Pro 플랜은 50K MAU를 위한 인증, 8GB 데이터베이스 저장소, 250GB 대역폭, 100GB 파일 저장소를 포함하는 $25/월의 평면입니다. Firebase는 문서 읽기, 쓰기, 삭제당 청구합니다 -- 이는 비용을 매우 변수로 만듭니다. 2M 월간 읽기가 있는 100K 레코드 애플리케이션은 쿼리 패턴에 따라 Firebase에서 $15에서 $200+까지 비용이 들 수 있습니다. 우리는 페이지가 소셜 미디어에 공유될 때 Firebase 청구서가 밤새 3배가 된 경우를 보았습니다.
PlanetScale은 100K+ 레코드를 처리할 수 있는가? 절대적으로. PlanetScale은 YouTube 규모의 워크로드를 강화하는 Vitess를 실행합니다. 100K 레코드로 순수 데이터베이스 성능의 경우, PlanetScale은 우수합니다. 제한은 규모가 아닙니다 -- 완전성입니다. 인증, 파일 저장소, 실시간 업데이트, 벡터 검색을 위해 별도의 서비스를 추가해야 합니다. 이는 Supabase의 올인원 접근과 비교하여 비용($90+/월 총)과 아키텍처 복잡성을 모두 증가시킵니다.
pgvector이 무엇이고 왜 중요한가? pgvector는 벡터 임베딩을 데이터베이스에 직접 저장하고 쿼리할 수 있게 하는 PostgreSQL 확장입니다. 이것은 의미 검색을 가능하게 합니다 -- 사용자는 정확한 키워드가 아닌 의미로 검색할 수 있습니다. 100K+ 리스팅이 있는 디렉토리의 경우, "kid-friendly 브런치 지점"을 검색하면 "family restaurant" 또는 "weekend breakfast"로 태그된 결과를 반환할 수 있습니다, 정확한 단어가 일치하지 않더라도. pgvector 없이, Pinecone($70+/월)과 같은 별도의 벡터 데이터베이스가 필요하고 두 데이터베이스 동기화를 유지하는 것을 처리해야 합니다.
Firebase Firestore는 디렉토리 웹사이트에 좋은가? 솔직히 말해서, 아니요. 디렉토리 웹사이트는 본질적으로 관계형입니다. 리스팅은 카테고리에 속하고, 태그를 가지고, 리뷰를 받고, 사용자 프로필을 필요로 합니다. 복잡한 필터링("5마일 내에서 4+ 별점의 레스토랑을 보여주고, 지금 열려 있습니다")이 필요합니다. Firestore는 조인을 할 수 없으며, 제한된 쿼리 연산자를 가지며, 문서 읽기당 청구합니다 -- 복잡한 필터링된 쿼리는 Supabase와 비교하면 비용이 빠르게 증가합니다. 우리는 디렉토리 프로젝트에 대해 Firestore를 평가했고, 데이터 비정규화 및 클라이언트 측 쿼리 해결 방법 때문에 Supabase와 비교하면 개발 시간을 4배 추정했습니다.
Next.js 앱에 Neon 또는 Supabase를 사용해야 하나? 데이터베이스만 필요하면, Neon은 더 나은 가치를 제공합니다(무료 계층은 관대하고, $19/월 Launch 플랜은 견고합니다). 인증, 저장소, 실시간 또는 엣지 함수가 필요하면 -- 대부분의 프로덕션 Next.js 앱 -- Supabase는 여러 별도 서비스 통합 및 지불에서 절약합니다. 우리는 Next.js 개발 프로젝트에 Supabase를 사용합니다, 왜냐하면 통합 인증 및 저장소가 전형적인 프로젝트 일정에서 몇 주를 자릅니다.
프로그래매틱 SEO 사이트에 최고의 데이터베이스는 무엇인가? Supabase PostgreSQL. 프로그래매틱 SEO 사이트는 구조화된 데이터에서 수천 개의 페이지를 생성하는데, 이는 빠른 쿼리, 좋은 인덱싱, 복잡한 데이터 관계를 처리할 수 있어야 함을 의미합니다. 우리는 Supabase에서 프로그래매틱 SEO 사이트를 구축했으며, 위치 페이지에 PostGIS, 관련 콘텐츠에 pgvector, 동적 필터링을 위해 전체 텍스트 검색을 생성하는 10K+ 페이지를 생성합니다. 평면 가격 책정은 Google 인덱싱에서의 트래픽 스파이크가 청구서를 폭발시키지 않음을 의미합니다.
Turso (libSQL)는 프로덕션 웹 앱에 준비되었는가? 읽기 집약적 애플리케이션의 경우, 예. Turso의 엣지 복제된 SQLite는 전 세계적으로 5ms 미만의 읽기를 제공하는데, 이는 콘텐츠 중심 사이트에 대해 믿을 수 없습니다. 하지만 쓰기 집약적 애플리케이션 100K+ 레코드의 경우 -- 사용자가 데이터를 제출하고, 관리 패널이 업데이트를 처리하고, 리뷰가 계속 들어오는 디렉토리와 같은 경우 -- SQLite의 단일 쓰기자 모델이 제한이 됩니다. Turso는 libSQL 포크를 통해 이것을 원시 SQLite보다 더 잘 처리합니다, 하지만 쓰기 집약적 100K+ 레코드 애플리케이션에 대해 설계되지 않았습니다. 콘텐츠 중심 업무에 Turso를 Astro로 권장하고, 동적 애플리케이션의 경우 상당한 쓰기 워크로드에 대해 Supabase 또는 Neon을 권장합니다.