서비스형 백엔드 플랫폼(Baas)인 Supabase와 Firebase중 어떤걸 선택하는게 프로젝트에 가장 적합할지 알아보며 장단점을 찾아보게 됐다
firebase와 supabase를 직접 비교하기 전 DB의 종류와 간단한 특징을 알아보자
데이터를 키-값 쌍으로 저장하는 DB로, 주로 서브용 DB로 많이 사용한다

대표적인 예시로 Redis가 있는데, 메인 DB에서 자주 쓰는 데이터를 redis에 보관해 요청이 올 때 메인 DB가 아닌 redis에서 처리하게 된다. 램에 데이터를 저장하고 하드에는 백업용으로 두기때문에 이러한 특징으로 자주쓰는 데이터 캐싱, 채팅을 위한 pub/sub, 영상 스트리밍, 로그인 기록 저장 등 서버 DB로 활용하는 경우가 많다
관계형 DB로 데이터를 표 형식으로 저장하고싶은 경우에 사용한다

mariaDB, oracle, mySQL, postgreSQL, SQLserver, Google Cloud Spanner, SQLite, IBM Db2 들이 대표적인 예시이다
데이터를 정규화해서 저장하는 특징이 있어 데이터 무결성을 지킬 수 있다
보통 입출력 속도보다 데이터 정확도가 중요한 경우에 관계형 DB를 많이 사용한다
아래 표는 stackoverflow database 2024 통계이다 상위에 RDBMS의 점유율이 높은걸 볼 수 있다

관계를 주로 DB에 저장하고싶은 경우 사용한다

Sparsity, neo4j, OrientDB, ArangoDB 등이 있다
비행기 노선, SNS 친구 관계, 추천 서비스 등에 사용할 수 있다
어떤 데이터를 저장할지 미리 정의하지 않기 때문에 자유롭고, 구조가 빠르게 바뀌는 서비스에 적합하다

분산을 염두에 두고 만든 DB기 때문에 분산 처리를 매우 잘 해준다. 하지만 분산 처리를 하게 되면 DB간의 일관성은 떨어질 수 있다
하나의 Document에 JSON형태로 다양한 데이터를 저장하고 이 Document를 모아서 Collection이라는 폴더를 만드는 구조를 지닌다
정규화를 하지 않기 때문에 데이터의 중복성이 존재하지만, 입출력 문법이 간단하다
mongoDB, CocuchDB, Firebase 등이 여기에 속한다
테이블을 만들고 row 안에 자유롭게 데이터를 저장한다는 특징이 있다

자유롭게 데이터를 저장한다는게, 행마다 column이 다르게 존재해도 상관이 없다는 의미다
정규화없이 쓰는게 일반적이며 복제나 분산 처리를 잘한다
또한, 데이터 시간 기록을 잘해주기 때문에 시계열 데이터를 저장하고 분석할때 많이 사용한다
많은 입출력을 감당해야하는 경우에도 주로 사용한다
Apache Cassandra, Apache HBase, Google Cloud Bigtable 등이 있다
index 보관에 특화된 DB로 평소에 쓰던 DB에서 데이터를 꺼내 인덱스에 저장해두면 빠르게 검색할 수 있는 특징이 있다. 검색이 중요한 사이트를 만들때 주로 사용한다

실시간 검색어, 추천 검색어, 검색어 오타 교정 등에 사용할 수 있다
Elastic, Amazon CloudSearch, Google Cloud Search 등이 있다
일반적으로는 RDBMS나 Document DB를 사용한다 (확장 방법에 따라 달라질 수 있다)
입출력이 매우 잦다면 Document DB, 데이터의 무결성이 중요하면 RDBMS가 일반적이다
firebase는 NoSQL 기반의 document-oriented DB인 Cloud Firestore를 제공한다. 데이터 구조가 자유롭기 때문에 복잡한 JSON 문서 저장에 유리하다
정해진 스키마 없이, 다양한 데이터를 하나의 JSON 객체 형태로 바로 저장할 수 있기 때문에 구조가 자주 바뀌는 서비스에 유리하다
Realtime DB를 제공하는만큼 실시간 기능에 매우 강해, 채팅이나 실시간 알림 서비스에 적합하다
다양한 인증 방식을 기본으로 제공하고, firebase 콘솔을 통해서 시각적으로 설정할 수 있지만, 특정 기능을 커스텀하려면 클라우드 함수를 별도로 짜야한다
오픈소스가 아니고, Google 생태계에 종속돼 있다
Google 생태계를 전체적으로 경험하고 싶다면 유리하지만 데이터 통제권이나 커스텀이 필요하다면 부적합할 수 있다
supabase는 PostgreSQL 기반의 SQL DB 이기 때문에 스키마를 명확하게 정의해야한다. 그렇기 때문에 복잡한 관계형 데이터를 다루기에 적합하며 데이터 무결성을 지키기 좋다
인증 부분에서 Row Level Security라는 SQL 정책만 설정하면 특정 사용자가 자신이 작성한 글만 볼 수 있도록 간단하게 설정 할 수 있다
실시간 기능을 지원하긴 하지만, firebase만큼 최적화돼 있진 않다
오픈 소스이기때문에 직접 서버를 띄워 자가 호스팅이 가능하고, 커스텀도 자유롭다
RDBMS와 SQL에 익숙한 개발자에게는 금방 적응할 수 있다
| 항목 | Supabase | Firebase |
|---|---|---|
| DB 타입 | PostgreSQL (SQL) | Firestore (NoSQL), Realtime DB |
| 호스팅 방식 | 오픈소스, 자체 호스팅 가능 | 클라우드 기반 (자체 호스팅 불가) |
| 쿼리 방식 | SQL / RPC / REST / GraphQL | 자체 문법 (NoSQL 쿼리) |
| 인증(Auth) | 다양한 OAuth 제공 (깃허브, 구글 등), SQL 권한 통제 | Firebase Auth, 보안 룰 기반 |
| 실시간 기능 | PostgreSQL 기반 Realtime 기능 제공 | Firestore & Realtime Database 실시간 기능 |
| 스토리지 | S3 호환 객체 저장소 | Firebase Storage (GCS 기반) |
| 트리거/함수 | PostgreSQL 트리거 및 Edge Functions (Deno) | Cloud Functions (Node.js) |
| 자체 호스팅 가능 | ✅ 가능 (Docker 기반) | ❌ 불가능 |
| 라이선스 | 오픈소스 (Apache 2.0) | 프로프라이어터리 |
| 무료 요금제 | Postgres 기준 500MB / 50K 요청 등 | generous, but 제한적 (무료 사용량 있음) |
✅ 데이터의 자유도? vs 명확한 구조를 가지는 데이터?
이번에 진행하는 프로젝트는 페이지와 페이지에 해당되는 기능마다 필요한 데이터나 타입이 다양하고 각 데이터들이 관계성을 가지게 된다.
✅ 러닝 커브, DB를 다뤄본 경험이 있는가?
DB를 다뤄 본 팀원이 있고, 나 역시도 다뤄봤기에 SQL과 RDBMS에 금방 적응할 수 있다고 판단한다
✅ 요금제가 적합한가?
firebase가 요금에 관한 말이 많았는데, 사용량 기반 과금이라서 처음에는 저렴하지만, 트래픽이 늘면 요금이 갑자기 치솟을 수 있다는 점이다. 반면에 supabase는 명확한 무료 요금제를 제공하기 때문에 범위 내에서는 요금이 치솟을 걱정은 할 필요가 없다
✅ 실시간 처리가 중요한가?
알림 기능이 존재하긴 하지만, 채팅을 메인으로 구현하는 프로젝트가 아니라 중요하지 않다고 판단했다
✅ 고급 쿼리 기능이 필요한가?
데이터를 가져올때도 복잡한 쿼리들을 사용해야한다
이러한 점들을 고려해서 이번 프로젝트에는 supabase가 가장 적합하다고 생각했다
https://www.youtube.com/watch?v=ZVuHZ2Fjkl4
https://www.tutorialspoint.com/hbase/hbase_create_data.htm
https://redis.io/nosql/search-engine-databases/
https://jaemunbro.medium.com/nosql-데이터베이스-특성-비교-c9abe1b2838c