Computer >> 컴퓨터 >  >> 프로그래밍 >> Redis

Next.js 프로젝트에 가장 적합한 데이터베이스 완벽 비교 가이드

Next.js는 서버 사이드 렌더링(SSR) 기능을 통해 개발자가 풀스택 애플리케이션을 구축할 수 있게 해줍니다. 여기에 Vercel과 Netlify의 서버리스 함수를 활용하면 백엔드 API까지 손쉽게 작성할 수 있습니다. 그렇다면 다음으로 고민해야 할 질문은 바로 "Next.js 앱에는 어떤 데이터베이스가 가장 적합한가?"입니다.

이 글에서는 Next.js 커뮤니티에서 인기 있는 데이터베이스들을 살펴보고, 각 제품이 서버리스 모델에 얼마나 잘 맞는지 평가해 보겠습니다. 서버리스 환경에서는 특히 다음 두 가지를 확인해야 합니다.

  • 서버리스 요금제: 사용량 기반 종량제인가요? 데이터베이스를 사용하지 않을 때도 비용이 청구되나요?
  • 서버리스 연결 방식: HTTP 기반 연결을 지원하나요? 서버리스 함수에서 흔히 발생하는 연결 문제를 피하려면 이 부분이 중요합니다.

핵심 요약(TLDR)

PlanetScale, Supabase, Upstash, Fauna, DynamoDB, MongoDB Atlas 총 6개 서비스를 검토했습니다. 아래 표에서 각 제품의 기능을 한눈에 비교해 보세요.

기능PlanetScaleSupabaseUpstashFaunaDynamoDBMongoDB Atlas
APIMySQLPostgreSQLRedisFaunaDynamoDBMongoDB
유형관계형관계형KV 스토어도큐먼트도큐먼트도큐먼트
무료 티어🟢🟢🟢🟢🟢🟢
서버리스 요금제🟡 (최소 $29)🟡 (최소 $25)🟢🟡 (최소 $22.5)🟢🟢
REST API🔴🟢🟢🟢🟢🟢
GraphQL API🔴🔴🔴🟢🔴🔴
글로벌 복제🔴🔴🟢🟢🟢🟡 (Dedicated 플랜만)
데이터베이스 브랜칭🟢🔴🔴🔴🔴🔴
실시간 업데이트🔴🟢🔴🔴🟢🟡 (Realm 경유)
읽기 단가$1.5 / 1천만 건$0.09 / GB$0.2 / 10만 건$0.45 / 100만 유닛 (4KB)$0.25 / 100만 유닛 (2KB)$0.3 / 100만 유닛 (4KB)
쓰기 단가$1.5 / 100만 건$0.09 / GB$0.2 / 10만 건$2.25 / 100만 유닛 (1KB)$1.25 / 100만 유닛 (1KB)$1.25 / 100만 유닛 (1KB)
스토리지 단가$1.25 / GB$0.125 / GB$0.25 / GB$0.23 / GB$0.25 / GB$0.25 / GB

PlanetScale

  • PlanetScale은 MySQL 호환 데이터베이스 서비스(DBaaS)입니다.
  • 백그라운드에서 Vitess를 사용합니다. Vitess는 YouTube 같은 대형 서비스에서 실제로 활용되고 있어 신뢰할 만합니다.
  • PlanetScale은 '데이터베이스 브랜칭' 개념을 도입했습니다. Git처럼 브랜치를 만들고 스키마 변경 사항을 운영 데이터베이스에 병합할 수 있습니다. 필자가 아는 한 이 기능은 PlanetScale의 독특한 강점입니다.
  • 월 1억 회 읽기를 제공하는 무료 티어가 있습니다.
  • 유료 플랜은 $29부터 시작하며, 주요 과금 요소는 다음과 같습니다:
    • 스토리지/월: 첫 25GB 이후 $1.25/GB
    • 읽기/월: 첫 5억 회 이후 1천만 회당 $1.50
    • 쓰기/월: 첫 5천만 회 이후 100만 회당 $1.50
  • HTTP/REST 기반 API는 제공하지 않습니다.

Next.js 프로젝트에 가장 적합한 데이터베이스 완벽 비교 가이드

필자의 코멘트:

  • 홈페이지에는 GitHub, Square, Slack 등이 신뢰한다고 소개되어 있습니다. 하지만 이 기업들이 정말 PlanetScale을 사용하는 걸까요, 아니면 Vitess를 사용하는 걸까요? 전자라면 훌륭하지만, 후자라면 이런 마케팅 방식은 다소 아쉽습니다. Vitess를 신뢰한다는 것과 PlanetScale을 신뢰한다는 것은 전혀 다른 문제입니다.
  • PlanetScale은 TCP 기반 연결(MySQL 연결)을 요구합니다. 상태를 저장하지 않는(stateless) 서버리스 함수에서는 이것이 문제가 될 수 있습니다. Vitess 덕분에 연결 수 자체는 큰 문제가 아니라고 설명하지만, 플랜별 최대 연결 수 제한은 여전히 존재합니다.
  • HTTP/REST API가 없기 때문에 TCP 연결을 허용하지 않는 Cloudflare Workers나 Vercel Edge 플랫폼에서는 PlanetScale을 사용할 수 없습니다.
  • 유료 플랜이 $29부터 시작되므로 비용이 0으로 수렴하지 않습니다. DB를 사용하지 않더라도 최소 월 $29를 지불해야 하는데, 이는 서버리스의 정의와는 다소 충돌한다고 생각합니다.

Supabase

  • Supabase는 데이터베이스, 인증 서비스, 스토리지를 포함한 개발자 도구 모음입니다. 스스로를 오픈소스 Firebase 대안이라고 소개합니다.
  • PostgreSQL 데이터베이스를 제공합니다.
  • Firebase처럼 데이터베이스 변경 사항을 실시간으로 구독(listen)할 수 있습니다.
  • PostgREST를 활용한 RESTful API를 제공합니다. 서버리스 함수에서 Supabase를 사용할 계획이라면 특히 유용합니다.
  • REST API 덕분에 Cloudflare Workers에서도 사용할 수 있습니다. 관련 내용 보기.
  • 무료 티어는 500MB 스토리지와 월 2GB 데이터 전송으로 제한됩니다.
  • PlanetScale과 마찬가지로 유료 플랜의 최소 비용이 월 $25입니다. 종량제 요금 요약:
    • 스토리지: GB·월당 $0.125
    • 데이터 전송: GB당 $0.09

Next.js 프로젝트에 가장 적합한 데이터베이스 완벽 비교 가이드

필자의 코멘트:

  • Supabase는 데이터베이스, 인증, 오브젝트 스토리지를 제공하고 서버리스 함수도 준비 중입니다. 다만 Google이라는 든든한 후원을 받는 Firebase와 경쟁하면서 여러 서비스를 고품질로 유지하는 것이 스타트업에게 쉽지 않을 것이라는 우려도 듭니다. 성공하기를 바랍니다.
  • PlanetScale과 마찬가지로 요금 구조가 진정한 의미의 서버리스라고 보기 어렵습니다. 유료 플랜에 고정 월 비용이 있어 사용량이 0이 되어도 비용이 0이 되지 않습니다.

Upstash Redis

  • Upstash는 요청당 과금 방식의 Redis 서비스를 제공합니다.
  • Redis API와 REST API를 모두 지원합니다. 따라서 서버리스 함수와 엣지(Cloudflare Workers) 환경 모두에서 사용할 수 있습니다.
  • 리전(region) 옵션과 글로벌 옵션을 제공합니다. 글로벌 데이터베이스는 데이터를 여러 리전에 복제합니다.
  • 하루 최대 1만 명령어를 제공하는 무료 티어가 있습니다. 종량제 요금은 다음과 같습니다:
    • 명령어: 10만 명령어당 $0.2
    • 스토리지: GB당 $0.25

Next.js 프로젝트에 가장 적합한 데이터베이스 완벽 비교 가이드

필자의 코멘트:

  • 우리(Upstash)와 RedisLabs 모두 Redis가 캐싱, KV 스토어 같은 전통적인 용도 외에도 많은 사용 사례를 감당할 만큼 강력하다고 생각합니다. 그럼에도 불구하고 여전히 많은 개발자가 SQL 데이터베이스를 기본 데이터 스토어로 선호하는 것을 보면, 복잡한 쿼리 기능이 필요하다면 Redis가 첫 번째 선택지가 되기는 어려울 수 있습니다.

Fauna

  • Fauna는 글로벌 복제와 강력한 일관성(strong consistency)을 갖춘 클라우드 데이터베이스 서비스를 제공합니다.
  • Fauna API 외에 GraphQL API도 제공합니다.
  • 연결이 HTTP 기반이므로 연결 관련 문제 없이 서버리스 함수에서 Fauna를 사용할 수 있습니다.
  • 가장 기본적인 플랜(Individual)은 월 $22.5부터 시작합니다.
  • Fauna 요금:
    • 읽기: 100만 유닛(4KB)당 $0.45
    • 쓰기: 100만 유닛(1KB)당 $2.25
    • 스토리지: GB당 $0.23

Next.js 프로젝트에 가장 적합한 데이터베이스 완벽 비교 가이드

필자의 코멘트:

  • 글로벌 강력한 일관성은 추가적인 성능 비용을 동반합니다. 다른 대안 데이터베이스에 비해 쓰기 지연 시간(latency)이 더 높습니다.
  • GraphQL을 사용할 계획이라면 훌륭한 선택이지만, 그렇지 않다면 FQL은 배우고 사용하기가 다소 어려웠습니다.
  • Fauna 요금은 자체 단위(TRO, TWO, TCO)와 여러 차원을 사용하기 때문에 요금 구조를 이해하려면 별도의 문서를 읽어야 합니다.

MongoDB Atlas

  • Atlas는 서버리스, 공유(shared), 전용(dedicated) 플랜을 갖춘 관리형 MongoDB 서비스입니다.
  • Data(REST) API가 최근 발표되었습니다. 이를 통해 HTTP로 데이터베이스에 접근할 수 있습니다.
  • MongoDB Atlas는 일부 제약이 있는 서버리스 플랜을 제공합니다. 이 플랜은 작업(operation) 단위로 과금되므로, 서버리스 제품답게 사용량이 없으면 비용도 0이 됩니다.
  • 멀티 리전 복제는 Dedicated 플랜에서만 사용할 수 있습니다.
  • 서버리스 요금:
    • 읽기: 100만 유닛(4KB)당 $0.30
    • 쓰기: 100만 유닛(1KB)당 $1.25
    • 스토리지: GB·월당 $0.25

Next.js 프로젝트에 가장 적합한 데이터베이스 완벽 비교 가이드

필자의 코멘트:

  • 서버리스 플랜과 Data API의 등장은 MongoDB Atlas가 서버리스 시장을 외면하지 않고 있다는 것을 보여줍니다. 다만 두 솔루션 모두 아직 프리뷰 단계라서, 서버리스 애플리케이션에 이상적인 데이터 솔루션이 되기 위해서는 몇 가지 개선이 필요합니다.

DynamoDB

  • 키-값 및 도큐먼트 데이터 모델을 지원하는 완전 관리형 NoSQL 데이터베이스입니다.
  • 연결이 HTTP 기반이므로 서버리스 애플리케이션에 적합합니다.
  • 데이터 전송 비용 외에 작업 단위로 과금되므로 사용량이 없으면 비용도 0이 됩니다.
  • 기본적으로 읽기는 결과적 일관성(eventual consistency)을 따릅니다. 강력한 일관성 읽기도 요청할 수 있지만 일부 제약이 있습니다.
  • 추가 비용을 지불하면 멀티 리전 복제를 활성화할 수 있습니다.
  • 요금:
    • 읽기: 100만 읽기 요청 유닛(2KB)당 $0.25
    • 쓰기: 100만 쓰기 요청 유닛(1KB)당 $1.25
    • 데이터 전송(아웃바운드): GB당 $0.09
    • 스토리지: GB·월당 $0.25

Next.js 프로젝트에 가장 적합한 데이터베이스 완벽 비교 가이드

필자의 코멘트:

  • 개인적으로 DynamoDB의 API는 Redis나 MongoDB만큼 직관적이지 않다고 느꼈습니다.
  • 벤더 락인(vendor lock-in) 문제도 있습니다. DynamoDB는 AWS에서만 제공되므로 코드를 수정하지 않고는 다른 공급자로 애플리케이션을 이전할 수 없습니다.

결론

그렇다면 Next.js에 가장 좋은 데이터베이스는 무엇일까요? 예상대로 하나의 정답은 없습니다. 하지만 조건별로 답변을 정리해 보면 다음과 같습니다.

  • 관계형 DB가 필요하다면 👉🏻 Supabase 또는 PlanetScale
  • 데이터베이스 브랜칭이 필요하다면 👉🏻 PlanetScale
  • 실시간 업데이트가 필요하다면 👉🏻 Supabase 또는 MongoDB Atlas
  • 글로벌 저지연(low latency)이 필요하다면 👉🏻 Upstash 또는 DynamoDB
  • 글로벌 강력한 일관성이 필요하다면 👉🏻 Fauna
  • 저지연 KV 스토어가 필요하다면 👉🏻 Upstash
  • PostgreSQL을 사랑한다면 👉🏻 Supabase
  • MySQL을 사랑한다면 👉🏻 PlanetScale
  • Redis를 사랑한다면 👉🏻 Upstash
  • Mongo를 사랑한다면 👉🏻 MongoDB Atlas
  • GraphQL이 필요하다면 👉🏻 Fauna

공정하고 정확하게 작성하려고 노력했습니다. 수정이 필요한 부분이 있다면 트위터로 의견을 남겨주세요.