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)를 기반으로 작성되었습니다.
'Computer Science > CS 지식' 카테고리의 다른 글
| Tailscale — 포트포워딩 없이 어디서든 내 인프라에 접속하기 (0) | 2026.03.24 |
|---|---|
| .env 파일 - 환경 변수로 설정 관리하기 (0) | 2025.10.29 |
| Kafka에 대해 간략하게 알아보기 (0) | 2025.08.22 |
| TLS 암호화 프로토콜 (2) | 2025.07.31 |
| 정보처리기사 실기에 나오는 네트워크 관련 용어 (0) | 2025.07.16 |