Supabase 사용법 입문 — 프로젝트 생성부터 DB 연결, 클로드 코드 MCP 연동까지
슈퍼베이스(Supabase) 사용법을 입문자 기준으로 정리했습니다. 프로젝트 생성과 리전 선택, 테이블 만들기와 행 수준 보안(RLS), Next.js·React 앱에서 anon·service_role 키를 구분해 DB에 연결하는 코드, 그리고 클로드 코드 MCP 서버를 읽기 전용으로 붙여 자연어로 데이터베이스를 다루는 실제 설정 과정까지 다룹니다. 무료 플랜 한도와 Pro 한국 카드 결제 VAT 10% 실청구, 입문자가 자주 밟는 보안 함정도 직접 운영 경험으로 짚습니다.
한 줄 요약: 슈퍼베이스(Supabase)는 PostgreSQL 데이터베이스에 인증·스토리지·자동 API를 얹어 주는 백엔드 플랫폼이고, 입문 순서는 프로젝트 생성 → 테이블 만들기 → 앱에서 DB 연결 → (선택) 클로드 코드(Claude Code) MCP 서버 연동 네 단계입니다. 이 글은 제가 tech.ambitstock.com을 포함한 12개 사이트를 Next.js + 슈퍼베이스 + 버셀(Vercel) 조합으로 직접 돌리면서 정리한 실사용 셋업 순서를 그대로 옮긴 것입니다.
이 글이 필요한 사람
슈퍼베이스 계정은 만들었는데 프로젝트 생성 후 무엇부터 눌러야 할지 막막한 입문 개발자
Next.js·React 앱에서 슈퍼베이스 DB에 어떻게 연결하는지 코드로 확인하고 싶은 분
키 종류(anon·service_role)와 환경 변수가 헷갈려 보안 사고가 걱정되는 분
클로드 코드에 슈퍼베이스 MCP 서버를 붙여 자연어로 DB를 다루는 실제 설정 과정이 궁금한 분
※ 2026년 6월 기준으로 정리했습니다. 슈퍼베이스 콘솔 UI와 키 이름, MCP 연동 방식은 자주 바뀌므로 화면이 다르면 공식 문서에서 최신 절차를 확인하시길 권장합니다.
슈퍼베이스는 정확히 무엇을 대신해 주나
슈퍼베이스를 한마디로 말하면 PostgreSQL 데이터베이스 위에 백엔드에서 매번 손으로 짜야 했던 기능들을 미리 얹어 둔 도구입니다. 데이터베이스만 주는 게 아니라, 그 위에 로그인 인증, 파일 스토리지, 실시간 구독, 그리고 테이블을 만들면 자동으로 생기는 REST·GraphQL API까지 한 묶음으로 제공합니다. 그래서 서버 코드를 거의 짜지 않고도 프런트엔드 앱에서 바로 데이터를 읽고 쓸 수 있습니다.
흔히 파이어베이스(Firebase) 대안으로 소개되지만, 가장 큰 차이는 밑바탕이 진짜 관계형 데이터베이스인 PostgreSQL이라는 점입니다. NoSQL 문서 구조가 아니라 SQL로 테이블·조인·트랜잭션을 그대로 쓸 수 있어서, 나중에 데이터가 복잡해져도 설계가 무너지지 않습니다. 아래 표로 입문자가 자주 헷갈리는 구성 요소를 정리했습니다.
구성 요소
하는 일
직접 짰다면
Database
PostgreSQL 데이터 저장
DB 서버 구축·운영
Auth
회원가입·로그인·소셜 인증
세션·토큰 직접 구현
Storage
이미지·파일 업로드 보관
파일 서버·CDN 연결
Auto API
테이블 기준 REST 자동 생성
엔드포인트 하나씩 작성
Realtime
데이터 변경 실시간 푸시
웹소켓 서버 운영
저는 처음에 단순한 방문자 수 기록 테이블 하나를 붙이려고 슈퍼베이스를 골랐는데, 인증과 스토리지가 같이 따라오니 사이트가 늘어날수록 백엔드를 새로 짤 일이 거의 없어졌습니다. 1인 개발자에게는 짜야 할 코드의 양 자체가 줄어드는 게 가장 큰 이점이었습니다.
Supabase 사용법 입문 관련 참고 이미지
1단계 — 프로젝트 생성과 리전 선택에서 놓치기 쉬운 것
슈퍼베이스 콘솔(supabase.com)에 깃허브(GitHub) 계정으로 로그인하면 조직(Organization)부터 만들게 됩니다. 조직은 결제와 멤버를 묶는 단위이고, 그 안에 실제 데이터베이스인 프로젝트(Project)를 생성합니다. 무료 플랜에서는 보통 조직당 프로젝트 2개까지 활성 상태로 둘 수 있습니다.
프로젝트를 만들 때 입력하는 항목 중 입문자가 가장 자주 실수하는 두 가지를 짚겠습니다.
데이터베이스 비밀번호 — 프로젝트 생성 시 정하는 이 비밀번호는 PostgreSQL에 직접 접속할 때 쓰는 값입니다. 한 번 닫으면 화면에 다시 보여 주지 않으니, 만드는 순간 비밀번호 관리자에 저장해 두는 게 안전합니다. 잊어버리면 설정에서 재설정해야 합니다.
리전(Region) 선택 — 데이터가 물리적으로 어느 지역 서버에 저장될지 정하는 값입니다. 한국 사용자 대상 서비스라면 일본 도쿄(Northeast Asia, Tokyo) 리전을 고르는 편이 응답 지연이 가장 짧습니다. 한 번 정한 리전은 나중에 바꾸기 까다로우니 처음에 신중하게 고릅니다.
리전 선택 실전 팁 저는 한국 방문자가 대부분인 사이트라 도쿄 리전을 씁니다. 서울 리전이 따로 보이지 않더라도 도쿄가 한국과 가장 가까운 선택지라 체감 응답이 충분히 빠릅니다. 반대로 글로벌 트래픽이 섞이면 방문자가 몰리는 대륙 기준으로 고르는 게 맞습니다. 프로젝트 프로비저닝(생성 준비)에는 1~2분 정도 걸리니 화면이 멈춘 듯 보여도 기다리면 됩니다.
프로젝트가 만들어지면 좌측 메뉴에 Table Editor, SQL Editor, Authentication, Storage 등이 보입니다. 이제 데이터를 담을 테이블을 만들 차례입니다.
2단계 — 테이블 만들기와 행 수준 보안 켜기
테이블은 두 가지 방법으로 만들 수 있습니다. 화면에서 클릭으로 만드는 Table Editor 방식과, SQL Editor에 직접 쿼리를 붙여 넣는 방식입니다. 처음에는 Table Editor가 직관적이지만, 컬럼 구조를 정확히 통제하려면 SQL이 더 빠르고 실수가 적습니다. 아래는 방문자 기록을 담는 간단한 테이블을 SQL로 만드는 예시입니다.
여기서 입문자가 반드시 알아야 할 개념이 행 수준 보안(RLS, Row Level Security)입니다. 슈퍼베이스는 테이블을 만들면 누구나 접근할 수 있는 자동 API를 함께 열어 줍니다. 그래서 RLS를 켜지 않으면 anon 키만 알면 외부에서 데이터를 통째로 읽거나 쓸 수 있습니다. 공개해도 되는 테이블이라도 RLS는 켜 두고, 어떤 동작을 허용할지 정책(Policy)으로 명시하는 게 기본입니다.
SQL Editor — 테이블 생성 + RLS 켜기 + 읽기 정책
-- 방문자 기록 테이블 생성
create table public.pageviews (
id bigint generated always as identity primary key,
path text not null,
visited_at timestamptz not null default now()
);
-- 행 수준 보안(RLS) 활성화 — 이걸 빼면 외부에서 무제한 접근 가능
alter table public.pageviews enable row level security;
-- 누구나 읽기는 허용하는 정책 (쓰기는 허용 안 함)
create policy "allow read for all"
on public.pageviews
for select
to anon, authenticated
using (true);
위 쿼리를 SQL Editor에 붙여 넣고 실행(Run)하면 테이블이 생기고, 동시에 RLS가 켜진 채로 읽기만 허용됩니다. 쓰기 정책을 따로 만들지 않았으므로 anon 키로는 데이터를 추가할 수 없습니다. 데이터 삽입은 뒤에서 다룰 service_role 키를 쓰는 서버 쪽 코드에서만 가능하게 막아 두는 식입니다. 이렇게 읽기와 쓰기 권한을 분리해 두는 습관이 보안 사고를 크게 줄여 줍니다.
테이블이 만들어지면 Table Editor에서 행을 직접 추가해 데이터가 들어가는지 확인해 보고, 다음 단계인 앱 연결로 넘어갑니다.
Supabase 사용법 입문 관련 참고 이미지
3단계 — Next.js·React 앱에서 DB에 연결하는 코드
앱에서 슈퍼베이스에 접속하려면 두 가지 값이 필요합니다. 프로젝트 URL과 키(Key)입니다. 콘솔의 Project Settings → API 메뉴에서 확인할 수 있고, 키는 성격이 다른 두 종류가 있습니다. 이 둘을 구분하는 게 입문 단계에서 가장 중요합니다.
키 종류
쓰는 곳
RLS 적용
노출 위험
anon
브라우저·프런트엔드
받음(안전)
공개돼도 RLS가 막음
service_role
서버·API 라우트만
무시(전권)
유출 시 DB 전체 노출
핵심 원칙은 이렇습니다. 브라우저로 내려가는 코드에는 anon 키만 쓰고, service_role 키는 절대 프런트엔드 번들이나 깃허브에 올리지 않습니다. service_role 키는 RLS를 통째로 무시하는 전권 키라, 유출되면 데이터베이스 전체가 외부에 열립니다. 그래서 환경 변수 이름도 명확히 구분해 둡니다.
.env.local — 환경 변수 분리 (NEXT_PUBLIC 접두사 주의)
# 브라우저로 노출돼도 되는 값 — NEXT_PUBLIC 접두사 사용
NEXT_PUBLIC_SUPABASE_URL=https://your-project-ref.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOi...여기에_anon_키
# 절대 브라우저로 내려가면 안 되는 값 — NEXT_PUBLIC 접두사 금지
SUPABASE_SERVICE_ROLE_KEY=eyJhbGciOi...여기에_service_role_키
NEXT_PUBLIC 접두사가 곧 공개 선언입니다. Next.js는 NEXT_PUBLIC으로 시작하는 환경 변수를 브라우저 번들에 그대로 넣습니다. 그래서 service_role 키에 실수로 NEXT_PUBLIC을 붙이면 누구나 개발자 도구에서 키를 꺼내 데이터베이스 전권을 가져갑니다. 저도 초기에 이 접두사 규칙을 헷갈려 잠깐 위험한 상태로 둔 적이 있어서, 지금은 키를 등록할 때마다 접두사를 두 번 확인합니다. 만약 service_role 키가 노출됐다면 즉시 콘솔에서 키를 재발급(rotate)해야 합니다.
패키지를 설치하고 클라이언트를 만드는 코드는 다음과 같습니다. 먼저 슈퍼베이스 자바스크립트 SDK를 설치합니다.
이렇게 만든 클라이언트로 앞서 만든 pageviews 테이블에서 데이터를 읽으려면 const { data, error } = await supabase.from("pageviews").select("*").order("visited_at", { ascending: false }).limit(10) 처럼 메서드를 체이닝합니다. SQL을 직접 쓰지 않아도 select·insert·update·delete가 메서드로 제공되고, RLS 정책이 그대로 적용되므로 anon 키로는 정책이 허용한 동작만 통과합니다. 데이터를 추가·수정하는 쓰기 작업은 API 라우트(서버 코드)에서 service_role 키로 별도 클라이언트를 만들어 처리하면 안전합니다.
Supabase 사용법 입문 관련 참고 이미지
4단계 — 클로드 코드 MCP로 슈퍼베이스 붙이기
여기서부터가 제가 12개 사이트를 운영하면서 실제로 가장 많이 쓰는 부분입니다. 클로드 코드(Claude Code)에 슈퍼베이스 MCP(Model Context Protocol) 서버를 연결하면, 콘솔을 열지 않고도 터미널에서 자연어로 테이블 구조를 묻고 SQL을 만들고 데이터를 확인할 수 있습니다. MCP는 클로드 코드 같은 AI 도구가 외부 서비스에 안전하게 접근하도록 표준화한 연결 규약이라고 보면 됩니다.
연결 순서는 세 단계입니다.
슈퍼베이스 개인 액세스 토큰(Personal Access Token) 발급 — 콘솔의 Account → Access Tokens에서 새 토큰을 만듭니다. 이 토큰은 한 번만 보이니 바로 복사해 둡니다.
프로젝트 ref 확인 — Project Settings → General에서 프로젝트 참조 ID(project-ref)를 복사합니다. URL에 들어 있는 그 값입니다.
클로드 코드에 MCP 서버 등록 — claude mcp add 명령으로 슈퍼베이스 MCP 서버를 추가합니다.
claude mcp add — 슈퍼베이스 MCP 서버 등록 (읽기 전용 권장)
# 읽기 전용 모드로 슈퍼베이스 MCP 서버 등록 (--read-only 권장)
claude mcp add supabase \
--env SUPABASE_ACCESS_TOKEN=발급받은_개인_액세스_토큰 \
-- npx -y @supabase/mcp-server-supabase@latest \
--read-only \
--project-ref=프로젝트_참조_ID
# 등록 확인
claude mcp list
처음에는 반드시 --read-only로 시작하세요. 읽기 전용 모드로 붙이면 클로드 코드가 테이블 구조와 데이터를 조회만 할 수 있고, DROP TABLE 같은 위험한 변경은 막힙니다. 또한 운영 데이터베이스를 직접 연결하기보다 개발용 프로젝트를 따로 만들어 붙이는 편이 안전합니다. 저는 운영 사이트의 실제 데이터에는 MCP를 읽기 전용으로만 걸어 두고, 스키마 변경은 SQL Editor에서 직접 확인한 뒤 적용합니다. AI가 만든 SQL이라도 운영 DB에 바로 실행하기 전에 사람이 한 번 검토하는 단계를 빼지 않습니다.
등록이 끝나면 클로드 코드 세션에서 자연어로 요청할 수 있습니다. 예를 들어 pageviews 테이블에서 가장 많이 방문된 경로 상위 10개를 보여 줘 라고 하면, 클로드 코드가 MCP를 통해 테이블 구조를 읽고 SQL을 만들어 실행한 뒤 결과를 정리해 줍니다. 콘솔과 코드 에디터를 오가지 않아도 되니 1인 개발에서 데이터 확인 속도가 확연히 빨라집니다. MCP 연결의 더 깊은 개념과 다른 서버 연동은 클로드 코드 가이드 시리즈에서 별도로 다룹니다.
무료 플랜으로 어디까지 되고, 언제 돈이 드나
입문 단계에서는 무료 플랜으로 충분합니다. 다만 무료 플랜에는 두 가지 제약이 있어서 미리 알아 두면 당황하지 않습니다. 첫째, 일정 기간 활동이 없으면 프로젝트가 일시정지(pause)됩니다. 토이 프로젝트를 며칠 안 들어가면 멈춰 있을 수 있는데, 콘솔에서 다시 켜면(restore) 복구됩니다. 둘째, 데이터베이스 용량과 월 전송량에 한도가 있어서, 트래픽이 늘면 초과 전에 유료 플랜으로 올라가야 합니다.
유료 Pro 플랜은 2026년 6월 기준 월 25달러부터입니다. 한국 카드로 결제하면 표기 금액에 부가가치세(VAT) 10%가 더해지고, 카드사 환율과 해외 결제 수수료가 적용돼 원화 청구액은 매달 조금씩 달라집니다. 환율을 1,350원 안팎으로 가정하면 VAT 포함 약 27.5달러가 대략 3만 7천 원대에서 빠지는 식인데, 정확한 금액은 결제 후 카드 명세서에서 확인하시는 게 맞습니다. 정지 없이 항상 켜져 있어야 하는 서비스를 운영한다면 그 시점이 유료 전환의 손익분기라고 보면 됩니다. 요금과 한도의 정확한 수치는 슈퍼베이스 공식 요금 페이지에서 최신 값을 확인하시길 권장합니다.
Supabase 사용법 입문 관련 참고 이미지
입문자가 처음에 꼭 밟는 함정 5가지
제가 직접 겪었거나 주변에서 반복해 본 실수들을 모았습니다. 셋업 직후 이 목록을 한 번 점검하면 사고를 거의 막을 수 있습니다.
RLS를 안 켰다 — 테이블을 만들고 RLS 없이 두면 anon 키로 외부에서 데이터를 다 읽고 쓸 수 있습니다. 모든 테이블에 RLS를 켜고 정책을 명시하는 게 기본입니다.
service_role 키를 깃허브에 올렸다 — .env 파일을 .gitignore에 넣지 않아 키가 공개 저장소에 노출되는 사고가 흔합니다. 노출됐다면 즉시 키를 재발급합니다.
밑바탕 데이터 구조 취향에 달렸습니다. 슈퍼베이스는 PostgreSQL 기반이라 SQL과 테이블·조인에 익숙하거나 나중에 복잡한 쿼리를 쓸 가능성이 있으면 유리합니다. 파이어베이스는 NoSQL 문서 구조라 단순 키-값 저장과 모바일 실시간 동기화에 강합니다. 저는 관계형 쿼리를 자주 써서 슈퍼베이스를 골랐고, 12개 사이트 모두 이 조합으로 운영하고 있습니다.
anon 키가 브라우저에 그대로 노출되는데 위험하지 않나요?
anon 키는 공개를 전제로 설계된 키라서, 행 수준 보안(RLS) 정책만 제대로 켜 두면 노출돼도 정책이 허용한 동작만 통과합니다. 진짜 위험한 건 RLS를 끄거나, 전권 키인 service_role을 프런트엔드로 내보내는 경우입니다. anon 키 공개 자체는 정상 동작이고, 안전의 핵심은 RLS 설정에 있습니다.
한국 사용자라면 리전을 어디로 고르는 게 맞나요?
한국 방문자가 대부분이라면 일본 도쿄(Northeast Asia, Tokyo) 리전이 가장 가까워 응답 지연이 짧습니다. 서울 리전이 따로 보이지 않아도 도쿄가 한국과 거리가 가까워 체감 속도가 충분합니다. 한 번 정한 리전은 나중에 바꾸기 번거로우니 프로젝트 생성 시점에 신중하게 고르는 게 좋습니다.
클로드 코드 MCP 연동은 꼭 해야 하나요?
필수는 아니지만 데이터 확인 속도가 크게 빨라집니다. MCP를 붙이면 콘솔을 열지 않고 터미널에서 자연어로 테이블 구조를 묻고 SQL을 만들 수 있습니다. 다만 처음에는 반드시 읽기 전용(--read-only)으로 붙이고, 운영 데이터베이스가 아니라 개발용 프로젝트에 거는 편이 안전합니다. AI가 만든 SQL은 운영 DB에 적용 전 사람이 한 번 검토하길 권합니다.
무료 플랜 프로젝트가 멈췄다는데 데이터가 사라진 건가요?
사라진 게 아닙니다. 무료 플랜은 일정 기간 활동이 없으면 프로젝트가 일시정지(pause) 상태로 들어가고, 콘솔에서 다시 켜기(restore)를 누르면 데이터 그대로 복구됩니다. 토이 프로젝트를 며칠 방치하면 흔히 보는 정상 동작이라 장애로 오해하지 않아도 됩니다. 항상 켜져 있어야 한다면 유료 Pro 플랜으로 올라가면 됩니다.
Pro 플랜은 한국 카드로 실제 얼마가 청구되나요?
Pro 플랜은 2026년 6월 기준 월 25달러부터입니다. 한국 카드로 결제하면 표기 금액에 부가가치세(VAT) 10%가 더해지고, 카드사 환율과 해외 결제 수수료가 적용돼 원화 청구액은 매달 달라집니다. 환율을 1,350원 안팎으로 보면 VAT 포함 약 27.5달러가 대략 3만 7천 원대에서 빠지는 식인데, 정확한 금액은 결제 후 카드 명세서에서 확인하시는 게 맞습니다.
supabase 사용법슈퍼베이스SupabasePostgreSQLRLS 보안클로드 코드 MCPNext.js DB 연결service_role 키무료 플랜