본문 바로가기
Computer Science/CS 지식

Supabase란 무엇인가 — PostgreSQL 위에 쌓은 풀스택 백엔드

by rnasterofmysea 2026. 3. 27.
반응형

 

Supabase란 무엇인가 — PostgreSQL 위에 쌓은 풀스택 백엔드

백엔드를 빠르게 구성하고 싶지만, Firebase의 NoSQL 한계와 벤더 락인이 걸린다면 Supabase는 진지하게 고려할 만한 선택지입니다.

 

 

주요 특징 요약

기반 DB PostgreSQL (완전한 SQL 지원)
인증 JWT, OAuth, RLS 통합
API 방식 REST (PostgREST), GraphQL (pg_graphql), Realtime WS
배포 Cloud (managed) 또는 Self-hosted (Docker Compose)
라이선스 오픈소스 (MIT/Apache 2.0)
무료 플랜 2개 프로젝트, 500MB DB, 1GB Storage
SDK JS/TS, Python, Dart(Flutter), Swift, Kotlin 등

 

 

 

 

들어가며

새 프로젝트를 시작할 때마다 반복되는 작업이 있습니다. 인증 서버 세팅, REST API 설계, 파일 업로드 처리, 실시간 이벤트 구독… 핵심 기능을 만들기도 전에 인프라 보일러플레이트에 시간을 쏟는 패턴입니다.

Firebase가 이 문제를 해결해줬지만, Firestore의 NoSQL 특성과 Google 종속성은 규모가 커질수록 불편해집니다. Supabase는 이 자리를 PostgreSQL 기반으로 대체하려는 오픈소스 BaaS(Backend-as-a-Service)입니다.

 

Supabase가 무엇인지 한 줄 요약

"PostgreSQL을 중심으로, 인증·REST API·실시간·스토리지·Edge Function을 하나의 플랫폼으로 묶은 오픈소스 백엔드 인프라"

중요한 점은 Supabase가 새로운 DB를 만든 게 아니라는 것입니다. 검증된 PostgreSQL 위에 여러 오픈소스 레이어를 조합해 개발 생산성을 끌어올리는 구조입니다.

 

핵심 구성 요소

1. PostgreSQL — 진짜 관계형 DB

Supabase의 모든 것은 PostgreSQL에서 시작됩니다. NoSQL이 아닌 완전한 SQL을 사용할 수 있으며, 다음 기능들을 그대로 활용할 수 있습니다.

  • RLS(Row Level Security) — 테이블 row 단위 접근 제어를 DB 레벨에서 정의
  • Extensions — pgvector(벡터 검색), PostGIS(지리 데이터), pg_cron(스케줄러) 등
  • Logical Replication — Realtime 기능의 기반
-- RLS 예시: 본인 데이터만 조회 허용
CREATE POLICY "user_isolation" ON public.profiles
  FOR SELECT USING (auth.uid() = user_id);

 

2. PostgREST — 자동 REST API

DB 스키마를 분석해 테이블·뷰·함수를 자동으로 REST 엔드포인트로 노출합니다. API 코드를 별도로 작성할 필요가 없습니다.

# 테이블이 존재하면 즉시 사용 가능
GET  /rest/v1/users?role=eq.admin
POST /rest/v1/orders

필터링, 정렬, 페이지네이션, 관계 조인까지 쿼리 파라미터로 처리할 수 있습니다. 복잡한 로직이 필요한 경우에는 PostgreSQL Function을 RPC로 호출하는 방식으로 확장합니다.

 

3. Auth (GoTrue)

JWT 기반 인증 시스템으로, 다음 방식을 모두 지원합니다.

이게 진짜 미치도록 간단해서...야무집니다.

Email / Password 기본 이메일 인증
Magic Link 비밀번호 없는 이메일 로그인
OAuth Google, GitHub, Kakao 등 30+ 프로바이더
Phone OTP SMS 인증

발급된 JWT는 PostgREST와 RLS에 자동으로 연동됩니다. auth.uid()를 RLS 정책에서 바로 참조할 수 있어서 인증과 데이터 접근 제어가 하나의 흐름으로 이어집니다.

 

4. Realtime (Phoenix)

PostgreSQL의 Logical Replication을 구독해 DB 변경 사항을 WebSocket으로 클라이언트에 push합니다.

const channel = supabase
  .channel('orders')
  .on('postgres_changes', {
    event: 'INSERT',
    schema: 'public',
    table: 'orders'
  }, (payload) => {
    console.log('새 주문:', payload.new)
  })
  .subscribe()

Realtime은 세 가지 기능을 제공합니다.

  • Postgres Changes — DB INSERT/UPDATE/DELETE 실시간 구독
  • Broadcast — 클라이언트 간 메시지 전송 (채팅 등)
  • Presence — 온라인 상태 추적

 

5. Storage

S3 호환 오브젝트 스토리지입니다. 가장 큰 장점은 RLS 정책을 스토리지 버킷에도 동일하게 적용할 수 있다는 점입니다.

-- 본인이 업로드한 파일만 접근 허용
CREATE POLICY "owner_access" ON storage.objects
  FOR SELECT USING (auth.uid() = owner);

이미지 리사이징, CDN 연동도 내장되어 있습니다.

 

6. Edge Functions

Deno 런타임 기반의 서버리스 함수로, 전 세계 엣지 노드에 배포됩니다. Webhook 수신, 결제 연동, 서드파티 API 호출처럼 DB 레이어 밖에서 처리해야 하는 로직에 사용합니다.

// supabase/functions/send-notification/index.ts
Deno.serve(async (req) => {
  const { user_id, message } = await req.json()
  // 푸시 알림 전송 로직
  return new Response(JSON.stringify({ ok: true }))
})

 

7. AI / Vectors

pgvector 확장이 기본 내장되어 있어 임베딩 벡터를 PostgreSQL 안에서 저장하고 유사도 검색을 수행할 수 있습니다. 외부 벡터 DB 없이 RAG 파이프라인을 구성할 수 있는 구조입니다.

-- 코사인 유사도 검색
SELECT content
FROM documents
ORDER BY embedding <=> '[0.1, 0.2, ...]'::vector
LIMIT 5;

 

Firebase와 무엇이 다른가

백엔드 경험이 있는 개발자라면 두 플랫폼의 철학 차이가 명확하게 보입니다.

 

DB NoSQL (Firestore) PostgreSQL (관계형)
쿼리 제한적 (컬렉션 기반) 완전한 SQL + 조인
인프라 Google 완전 관리형 오픈소스 · Self-hosting 가능
벤더 락인 높음 낮음
실시간 Firestore 내장 Logical Replication
가격 예측 읽기/쓰기 횟수 과금 컴퓨팅·스토리지 기준 과금

Firestore의 쿼리 제약(복합 인덱스 수동 관리, 컬렉션 간 조인 불가)에 불편함을 느껴본 적이 있다면, Supabase의 완전한 SQL 지원은 상당히 편하게 느껴집니다.


 

언제 Supabase를 선택하면 좋은가

Supabase가 잘 맞는 상황은 다음과 같습니다.

  • 관계형 데이터 모델이 자연스러운 도메인 (e-commerce, SaaS, ERP)
  • PostgreSQL Extension을 활용해야 하는 경우 (지리 데이터, 벡터 검색 등)
  • 벤더 락인 없이 Self-hosting 옵션을 유지하고 싶은 경우
  • 팀에 백엔드 경험이 있어 SQL·RLS 설계를 직접 관리할 수 있는 경우

반대로 다음 상황에서는 신중하게 검토하는 것이 좋습니다.

  • 스키마가 매우 유동적이고 비정형 데이터가 주를 이루는 경우
  • RLS 설계 없이 빠르게 프로토타이핑만 필요한 경우 (RLS 없이 사용하면 보안 구멍이 생김)
  • 시계열 데이터가 핵심인 경우 — TimescaleDB나 전용 TSDB가 더 적합합니다

 

Self-hosting 구성 개요

Supabase는 Docker Compose로 로컬 또는 프라이빗 서버에 직접 배포할 수 있습니다.

# 공식 self-hosting 레포 클론
git clone https://github.com/supabase/supabase
cd supabase/docker

# 환경 변수 설정
cp .env.example .env
# .env에서 JWT_SECRET, POSTGRES_PASSWORD 등 수정

# 실행
docker compose up -d

기본 구성에서 실행되는 컨테이너는 postgres, postgrest, gotrue, realtime, storage, kong, studio 등입니다. 클라우드 플랜과 기능은 동일하지만 인프라 관리는 직접 해야 합니다.

 


참고: 이 글은 Supabase 공식 문서(supabase.com/docs)를 기반으로 작성되었습니다.

반응형