Supabase 무료 계정 만들기 및 AI 앱 DB 연동

Supabase 무료 플랜으로 PostgreSQL 기반 백엔드를 5분 만에 세팅하고, Python과 pgvector로 AI 앱에 벡터 DB까지 연결하는 방법을 단계별로 정리했다. 2026년 6월 기준 최신 무료 한도 포함.

Supabase란 — Postgres 위에 올라탄 BaaS

Supabase는 오픈소스 BaaS(Backend-as-a-Service, 서버 기능을 통째로 빌려쓰는 서비스)다. 핵심은 PostgreSQL(오픈소스 관계형 데이터베이스)이고, 그 위에 사용자 인증(Auth), 파일 저장소(Storage), 실시간 데이터 구독(Realtime), 그리고 AI 앱에 필수인 벡터 검색(pgvector)을 한 번에 얹어준다.

Firebase(구글의 노코드 백엔드 서비스)와 자주 비교되는데, 결정적인 차이가 있다. Firebase는 NoSQL 방식이라 복잡한 관계형 쿼리가 어렵지만, Supabase는 표준 SQL을 그대로 쓸 수 있다. AI 앱에서 벡터 유사도 검색과 일반 테이블 조인을 동시에 써야 할 때 Supabase가 훨씬 유리한 이유다. 2020년에 설립된 스타트업이지만 2026년 현재 GitHub Star 7만 개를 넘기며 개발자 커뮤니티에서 빠르게 자리잡았다.

무료 플랜 한도 — 개인 프로젝트나 MVP에 충분한 수준

2026년 6월 기준 Supabase 공식 사이트에서 확인한 무료 플랜 한도다. MVP(최소 기능 제품) 개발이나 사이드 프로젝트에는 충분한 수준이고, 규모가 커지면 월 $25 Pro 플랜으로 전환하면 된다.

항목 무료 한도 비고
DB 스토리지 500 MB 초과 시 읽기 전용 전환
월간 활성 사용자(MAU) 50,000명 Auth 기능 이용자 기준
파일 스토리지 1 GB 이미지, PDF 등
Edge Function 호출 월 500,000회 서버리스 함수 실행 횟수
동시 Realtime 연결 200개 웹소켓 실시간 연결 수
프로젝트 수 2개 동시 활성 프로젝트

주의할 점이 하나 있다. 7일 동안 아무 활동이 없으면 프로젝트가 자동으로 일시 정지된다. 정지된 프로젝트는 대시보드에 접속해 수동으로 다시 켜야 한다. 장기간 방치할 계획이라면 주기적으로 접속하거나, Pro 플랜 전환을 고려하는 게 낫다.

무료 계정 생성 및 프로젝트 만들기

Supabase 계정 생성은 GitHub 계정 하나만 있으면 된다. 이메일 가입도 가능하지만 GitHub 로그인이 더 빠르고, 나중에 GitHub 리포지토리와 연동할 때도 편리하다.

STEP BY STEP
Supabase 계정부터 프로젝트 생성까지
airusk.com
1
supabase.com 접속 후 “Start your project” 클릭
우측 상단 또는 메인 화면의 Start your project 버튼을 누르면 로그인 페이지로 이동한다. GitHub 계정으로 로그인을 선택하면 GitHub 권한 승인 화면이 뜨고, 허용하면 자동으로 Supabase 대시보드로 진입한다.
2
Organization 생성 — 처음 로그인이면 자동 생성
최초 로그인 시 개인 Organization(작업 공간 단위)이 자동으로 만들어진다. 이름은 나중에 바꿀 수 있으니 기본값으로 두어도 무방하다.
3
New Project 클릭 후 세부 정보 입력
프로젝트 이름(영문 소문자 권장), DB 비밀번호(반드시 따로 메모), 리전을 설정한다. 한국 사용자는 Northeast Asia (Seoul)을 선택하면 응답 속도가 가장 빠르다. 설정 완료 후 Create new project를 누르면 1~2분 내에 DB가 준비된다.
Project Settings에서 API 키 확인
프로젝트 대시보드 좌측 메뉴에서 Project Settings → API를 선택하면 Project URL(SUPABASE_URL)과 anon public 키(SUPABASE_KEY)를 확인할 수 있다. 이 두 값이 Python, JavaScript 등 AI 앱과 연결할 때 필요한 핵심 정보다.

Python, JavaScript로 AI 앱과 DB 연결하기

프로젝트가 준비되면 클라이언트 라이브러리로 코드에서 바로 연결할 수 있다. API 키는 코드 안에 직접 쓰지 말고 환경변수로 분리하는 것이 기본이다.

환경변수 설정 (.env 파일)

SUPABASE_URL=https://xyzcompany.supabase.co
SUPABASE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Python 연결 예시

import os
from supabase import create_client, Client

url: str = os.environ.get("SUPABASE_URL")
key: str = os.environ.get("SUPABASE_KEY")
supabase: Client = create_client(url, key)

# 데이터 조회
response = supabase.table("documents").select("*").execute()
print(response.data)

Python 라이브러리는 pip install supabase 한 줄로 설치된다. JavaScript(Node.js) 환경이라면 npm install @supabase/supabase-js로 설치하고 동일한 방식으로 연결한다. 환경변수는 Python에서는 python-dotenv, Node.js에서는 dotenv 패키지로 .env 파일에서 읽어오면 된다.

pgvector로 벡터 DB 활용 — AI 임베딩 저장과 검색

pgvector는 PostgreSQL에 벡터(숫자 배열 형태의 의미 정보) 저장 및 유사도 검색 기능을 추가해주는 확장 모듈이다. AI 앱에서 텍스트의 의미를 숫자 배열로 변환한 임베딩(embedding)을 저장하고, “이 질문과 가장 비슷한 문서를 찾아라” 같은 의미 기반 검색을 SQL로 처리할 수 있게 된다.

Supabase는 pgvector를 기본 지원한다. 대시보드의 SQL Editor에서 아래 명령 한 줄로 활성화한다.

-- pgvector 확장 모듈 활성화
CREATE EXTENSION IF NOT EXISTS vector;

-- 임베딩을 저장할 테이블 생성 (1536차원 = OpenAI text-embedding-3-small 기준)
CREATE TABLE documents (
  id BIGSERIAL PRIMARY KEY,
  content TEXT,
  embedding VECTOR(1536)
);
FEATURE COMPARISON
벡터 DB 옵션 비교 — Supabase vs Pinecone vs Chroma
airusk.com
기능
Supabase
Pinecone
Chroma
무료 플랜
있음
있음
오픈소스
SQL 지원
관계형 DB 결합
셀프 호스팅

임베딩을 저장하고 유사도 검색을 수행하는 Python 코드 예시다. OpenAI API로 텍스트를 임베딩 벡터로 변환한 뒤 Supabase에 저장하고, 코사인 유사도(cosine similarity, 두 벡터의 방향이 얼마나 비슷한지 측정하는 방법)로 가장 관련 있는 문서를 찾는다.

import os
from openai import OpenAI
from supabase import create_client

openai_client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
supabase = create_client(
    os.environ.get("SUPABASE_URL"),
    os.environ.get("SUPABASE_KEY")
)

def embed_and_store(text: str):
    # 텍스트를 1536차원 숫자 배열(임베딩)로 변환
    response = openai_client.embeddings.create(
        model="text-embedding-3-small",
        input=text
    )
    embedding = response.data[0].embedding

    # Supabase에 저장
    supabase.table("documents").insert({
        "content": text,
        "embedding": embedding
    }).execute()

def search_similar(query: str, top_k: int = 5):
    # 질문도 동일한 방식으로 임베딩 변환
    response = openai_client.embeddings.create(
        model="text-embedding-3-small",
        input=query
    )
    query_embedding = response.data[0].embedding

    # pgvector 코사인 유사도 검색
    result = supabase.rpc("match_documents", {
        "query_embedding": query_embedding,
        "match_count": top_k
    }).execute()
    return result.data

위 코드에서 match_documents는 Supabase SQL Editor에서 미리 만들어둔 함수다. 공식 문서(supabase.com/docs/guides/ai)에 복붙용 코드가 제공되므로 그대로 사용하면 된다. 이 구조가 RAG(Retrieval-Augmented Generation, 검색 기반으로 답변을 보강하는 AI 기법)의 핵심 파이프라인이 된다.

자주 묻는 질문

Q1) Supabase 무료 플랜은 상업용으로 써도 되나요?

공식적으로 가능하다. 무료 플랜에도 사용 제한 조건은 없고, 트래픽이나 사용자 수가 한도를 넘으면 유료 플랜으로 전환하면 된다. 단, SLA(서비스 수준 보장)나 자동 백업은 무료 플랜에서 제공되지 않으므로 중요한 데이터는 별도 백업을 직접 구성하는 것이 안전하다.

Q2) 7일 비활성화로 프로젝트가 정지되면 데이터는 사라지나요?

데이터는 유지된다. 프로젝트가 일시 정지되는 것이지 삭제가 아니다. 대시보드에 접속해 “Restore project” 버튼을 누르면 수 분 안에 다시 활성화된다. 다만, 정지 상태에서는 API 호출이 모두 실패하므로 서비스 중인 앱이라면 Pro 플랜을 권장한다.

Q3) pgvector는 대규모 임베딩에서도 빠른가요?

수만 개 수준까지는 인덱스 없이도 충분히 빠르다. 수십만 개 이상이라면 IVFFlat 또는 HNSW(계층적 탐색 그래프, 대규모 데이터에서 빠른 근사 검색을 위한 인덱스 방식) 인덱스를 생성해야 속도가 유지된다. Supabase 공식 문서에 인덱스 생성 SQL이 안내되어 있다.

Q4) JavaScript(Next.js) 환경에서도 연결 방법이 같은가요?

같다. @supabase/supabase-js 패키지를 설치하고 SUPABASE_URL, SUPABASE_KEY 두 환경변수만 세팅하면 된다. Next.js에서는 .env.local 파일에 써두면 자동으로 불러온다. Server Component와 Client Component 각각에 맞는 클라이언트 초기화 방법은 Supabase 공식 Next.js 통합 문서에 상세히 나와 있다.

댓글 남기기