출처: https://supabase.com/docs/guides/getting-started/architecture
Supabase는 오픈 소스입니다. 우리는 확장 가능한 오픈 소스 도구를 선택하여, 사용하기 쉽게 만듭니다.
Supabase는 Firebase와 1:1로 매핑되는 서비스가 아닙니다. Firebase가 제공하는 많은 기능을 구축하고 있지만, 동일한 방식으로 접근하지는 않습니다. 우리의 기술적 선택은 상당히 다르며, 사용하는 모든 것은 오픈 소스입니다. 가능하다면, 처음부터 새로 개발하기보다는 기존 도구를 사용하고 지원합니다.
가장 주목할 점은, NoSQL 저장소 대신 Postgres를 사용한다는 것입니다. 이 선택은 의도적이었습니다. 우리는 Postgres만이 Firebase와 경쟁할 수 있는 기능을 제공하면서, 그 이상으로 확장성을 유지할 수 있다고 믿습니다.
편안한 수준을 선택하세요
Supabase의 목표는 Postgres의 모든 기능을 쉽게 사용할 수 있도록 하는 것입니다. 그렇다고 해서 모든 기능을 반드시 사용해야 하는 것은 아닙니다. Postgres에 익숙하다면, 우리가 제공하는 도구들을 좋아하게 될 것입니다. Postgres를 처음 사용한다면, 작은 것부터 시작해서 점차 확장해 나가면 됩니다. 단순히 Postgres를 테이블 저장소처럼 사용하고 싶다면, 그것도 충분히 가능합니다.
아키텍처
각 Supabase 프로젝트는 여러 도구로 구성됩니다.
Postgres (데이터베이스)
Postgres는 Supabase의 핵심입니다. 우리는 Postgres 데이터베이스를 추상화하지 않습니다 — 전체 권한으로 접근하고 사용할 수 있습니다. 우리는 Postgres를 Firebase만큼 쉽게 사용할 수 있도록 도구를 제공합니다.
- 공식 문서: postgresql.org/docs
- 소스 코드: github.com/postgres/postgres (미러)
- 라이선스: PostgreSQL License
- 언어: C
Studio (대시보드)
데이터베이스와 서비스를 관리할 수 있는 오픈 소스 대시보드입니다.
- 공식 문서: Supabase docs
- 소스 코드: github.com/supabase/supabase
- 라이선스: Apache 2
- 언어: TypeScript
GoTrue (인증)
JWT 기반 API로, 사용자를 관리하고 액세스 토큰을 발급합니다. PostgreSQL의 Row Level Security 및 API 서버와 통합됩니다.
- 공식 문서: Supabase Auth reference docs
- 소스 코드: github.com/supabase/gotrue
- 라이선스: MIT
- 언어: Go
PostgREST (API)
Postgres 데이터베이스를 RESTful API로 바로 변환해주는 독립형 웹 서버입니다. pg_graphql 확장과 함께 사용하여 GraphQL API도 제공합니다.
- 공식 문서: postgrest.org
- 소스 코드: github.com/PostgREST/postgrest
- 라이선스: MIT
- 언어: Haskell
Realtime (API & 멀티플레이어)
사용자 Presence 관리, 메시지 브로드캐스팅, 데이터베이스 변경 스트리밍을 위한 확장 가능한 WebSocket 엔진입니다.
- 공식 문서: Supabase Realtime docs
- 소스 코드: github.com/supabase/realtime
- 라이선스: Apache 2
- 언어: Elixir
Storage API (대용량 파일 저장)
Postgres에 메타데이터를 저장하는 S3 호환 오브젝트 스토리지 서비스입니다.
- 공식 문서: Supabase Storage reference docs
- 소스 코드: github.com/supabase/storage-api
- 라이선스: Apache 2.0
- 언어: Node.js / TypeScript
Deno (엣지 함수)
JavaScript와 TypeScript를 위한 최신 런타임입니다.
- 공식 문서: Deno documentation
- 소스 코드: Deno source code
- 라이선스: MIT
- 언어: TypeScript / Rust
postgres-meta (데이터베이스 관리)
Postgres를 관리할 수 있는 RESTful API입니다. 테이블 조회, 역할 추가, 쿼리 실행 등이 가능합니다.
- 공식 문서: supabase.github.io/postgres-meta
- 소스 코드: github.com/supabase/postgres-meta
- 라이선스: Apache 2.0
- 언어: Node.js / TypeScript
Supavisor
클라우드 네이티브, 멀티 테넌트 Postgres 커넥션 풀러입니다.
- 공식 문서: Supavisor GitHub Pages
- 소스 코드: supabase/supavisor
- 라이선스: Apache 2.0
- 언어: Elixir
Kong (API 게이트웨이)
NGINX 기반의 클라우드 네이티브 API 게이트웨이입니다.
- 공식 문서: docs.konghq.com
- 소스 코드: github.com/kong/kong
- 라이선스: Apache 2.0
- 언어: Lua
제품 원칙
Supabase의 목표는 대규모 기업이 직접 설계할 만한 아키텍처를 제공하고, 그 위에 인디 개발자와 소규모 팀도 쉽게 사용할 수 있는 도구를 제공하는 것입니다.
우리는 확장성과 사용성이 서로 상충하지 않도록 일련의 원칙을 따릅니다.
모든 것은 독립적으로 동작해야 한다
각 시스템은 가능한 한 적은 구성 요소로 독립적으로 동작해야 합니다. 리트머스 테스트는 다음과 같습니다: "사용자가 Postgres 데이터베이스만으로 이 제품을 실행할 수 있는가?"
모든 것은 통합되어야 한다
Supabase는 조합이 가능합니다. 각 제품이 독립적으로 동작하더라도, 플랫폼의 각 제품은 다른 제품의 가치를 10배로 높여야 합니다. 통합을 위해 각 도구는 API와 Webhook을 제공해야 합니다.
모든 것은 확장 가능해야 한다
새로운 도구를 추가하는 것보다 기존 도구를 확장하는 것을 선호합니다. 이는 많은 클라우드 제공업체가 틈새 용도를 위해 제품을 확장하는 것과는 반대입니다. 우리는 개발자를 위한 프리미티브(primitive) 를 제공하여, 어떤 목표든 달성할 수 있도록 합니다. 적지만 더 나은 도구를 지향합니다.
모든 것은 이식 가능해야 한다
락인(lock-in)을 피하기 위해, 쉽게 마이그레이션할 수 있도록 합니다. 클라우드 서비스는 셀프 호스팅 제품과 호환됩니다. 기존 표준(pg_dump, CSV 파일 등)을 사용하여 이식성을 높입니다. 새로운 표준이 "Supabase" 방식과 경쟁하게 되면, 우리는 그 표준을 채택하고 기존 방식을 폐기합니다. 이는 사용자 경험으로 경쟁하게 만듭니다. 우리는 최고의 Postgres 호스팅 서비스를 목표로 합니다.
장기적 관점에서 접근한다
단기적 이익보다 장기적 이익을 우선합니다. 예를 들어, 고객만을 위한 기능을 추가한 Postgres 포크를 운영하는 것은 유혹적이지만, 우리는 필요한 기능을 업스트림에 반영하는 노력을 선호합니다. 이는 이식성과 장기적 지속성을 보장합니다.
개발자를 위해 만든다
"개발자"는 빌더 라는 특정 사용자 프로필입니다. 노력 대비 영향력을 평가할 때, 개발자는 구축할 수 있는 제품과 시스템 덕분에 효율이 높습니다. 개발자의 프로필이 시간이 지나며 변화하더라도, Supabase는 이에 맞춰 계속 진화할 것입니다.
기존 도구를 지원한다
Supabase는 가능한 한 기존 도구와 커뮤니티를 지원합니다. Supabase는 "커뮤니티의 커뮤니티"와 같습니다. 각 도구는 자체 커뮤니티를 가지고 있으며, 우리는 이들과 협력합니다. 오픈 소스는 협업적으로 접근합니다: 유지관리자를 고용하고, 프로젝트를 후원하며, 비즈니스에 투자하고, 자체 오픈 소스 도구도 개발합니다.