백엔드

Supabase 입문 — Firebase 대안 오픈소스 백엔드 구축 완전 가이드 (2026)

Supabase란? Firebase의 오픈소스 대안 Supabase로 백엔드를 구축하는 방법. PostgreSQL, 인증, 실시간 구독, 스토리지, Edge Functions까지 입문자를 위한 완벽 가이드입니다.

·5 min read
#Supabase#Firebase대안#PostgreSQL#백엔드#BaaS

Database and backend development

Supabase란?

Supabase는 "오픈소스 Firebase 대안"을 표방하는 BaaS(Backend as a Service) 플랫폼입니다. Firebase가 Google의 독점 기술 스택(Firestore, Firebase Auth 등)을 사용하는 반면, Supabase는 PostgreSQL을 기반으로 한 오픈소스 기술 스택으로 구축되어 있습니다.

Firebase vs Supabase

항목FirebaseSupabase
데이터베이스Firestore (NoSQL)PostgreSQL (SQL)
오픈소스
셀프호스팅
실시간Realtime DatabaseRealtime (CDC 기반)
인증Firebase AuthGoTrue (호환)
스토리지Cloud StorageS3 호환 스토리지
Edge FunctionsCloud FunctionsDeno 기반 Edge Functions
벤더 종속높음낮음

Supabase 시작하기

프로젝트 생성

supabase.com에서 계정을 만들고 새 프로젝트를 생성합니다. 무료 티어에서 2개 프로젝트, 500MB DB, 1GB 스토리지가 제공됩니다.

클라이언트 설치

npm install @supabase/supabase-js
import { createClient } from '@supabase/supabase-js'

const supabase = createClient(
  'https://YOUR_PROJECT.supabase.co',
  'your-anon-key'
)

데이터베이스: PostgreSQL의 힘

테이블 생성

Supabase 대시보드의 SQL 에디터 또는 Table Editor에서:

CREATE TABLE posts (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  title TEXT NOT NULL,
  content TEXT,
  author_id UUID REFERENCES auth.users(id),
  created_at TIMESTAMPTZ DEFAULT now()
);

-- RLS(Row Level Security) 활성화
ALTER TABLE posts ENABLE ROW LEVEL SECURITY;

-- 정책: 누구나 읽기 가능
CREATE POLICY "Public read" ON posts
  FOR SELECT USING (true);

-- 정책: 본인 글만 작성 가능
CREATE POLICY "Auth insert" ON posts
  FOR INSERT WITH CHECK (auth.uid() = author_id);

CRUD 작업

// Create
const { data, error } = await supabase
  .from('posts')
  .insert({ title: '첫 글', content: '안녕하세요!' })

// Read
const { data: posts } = await supabase
  .from('posts')
  .select('*')
  .order('created_at', { ascending: false })
  .limit(10)

// Update
await supabase.from('posts').update({ title: '수정됨' }).eq('id', postId)

// Delete
await supabase.from('posts').delete().eq('id', postId)

Firebase Firestore와의 결정적 차이: Supabase는 SQL을 사용하므로 JOIN, 서브쿼리, 집계 함수 등 관계형 데이터베이스의 모든 기능을 활용할 수 있습니다.

인증 (Authentication)

// 이메일/비밀번호 회원가입
const { data, error } = await supabase.auth.signUp({
  email: 'user@example.com',
  password: 'password123'
})

// 소셜 로그인 (Google)
const { data, error } = await supabase.auth.signInWithOAuth({
  provider: 'google'
})

// 현재 사용자
const { data: { user } } = await supabase.auth.getUser()

// 로그아웃
await supabase.auth.signOut()

Google, GitHub, Apple, Kakao, Naver 등 다양한 OAuth 프로바이더를 지원합니다.

실시간 구독 (Realtime)

const channel = supabase
  .channel('posts-changes')
  .on('postgres_changes',
    { event: '*', schema: 'public', table: 'posts' },
    (payload) => {
      console.log('변경 감지:', payload)
    }
  )
  .subscribe()

PostgreSQL의 **논리적 복제(Logical Replication)**를 기반으로 데이터 변경을 실시간 스트리밍합니다.

Edge Functions

Deno 런타임 기반의 서버리스 함수:

// supabase/functions/hello/index.ts
import { serve } from 'https://deno.land/std@0.168.0/http/server.ts'

serve(async (req) => {
  const { name } = await req.json()
  return new Response(
    JSON.stringify({ message: `안녕하세요, ${name}!` }),
    { headers: { 'Content-Type': 'application/json' } }
  )
})
supabase functions deploy hello

셀프호스팅

Supabase의 가장 큰 장점 중 하나는 셀프호스팅이 가능하다는 것입니다:

git clone https://github.com/supabase/supabase
cd supabase/docker
cp .env.example .env
docker compose up -d

라즈베리파이 홈서버에서도 Docker를 통해 Supabase를 셀프호스팅할 수 있습니다.

Next.js + Supabase 통합

npx create-next-app -e with-supabase my-app

이 스타터 템플릿에는 인증, 미들웨어, 서버 컴포넌트 데이터 페칭이 모두 설정되어 있습니다.

참고 자료

결론

Supabase는 PostgreSQL의 검증된 안정성 위에 현대적 BaaS 기능을 얹은 강력한 플랫폼입니다. Firebase의 벤더 종속이 걱정되거나, SQL의 유연성이 필요하거나, 셀프호스팅을 원한다면 Supabase가 최선의 선택입니다.