이어서 Supabase DB + Toss 결제까지 붙여서 수익형 MVP 배포 완료

소개

앞에서 Google AI Studio로 프론트엔드를 만들고 GitHub → Vercel 배포까지 완료했습니다. 하지만 그 상태에서는 상품 데이터가 하드코딩되어 있고, 결제도 안 되는 "껍데기"였습니다.

이번 목표는 그 껍데기에 진짜 기능을 붙이는 것이었습니다: Supabase로 DB 연결 → 회원가입/로그인 → Toss Payments 결제 연동 → 최종 배포. 즉, 결제가 가능한 서비스로 만드는 작업입니다.


진행 방법

1. Supabase DB 세팅

Supabase 가입 → 프로젝트 생성 후, SQL Editor에서 테이블을 한 번에 만들었습니다. Claude가 IPO 기획서 기반으로 SQL을 만들어줬고, 복사-붙여넣기 → Run 클릭으로 끝.

sql

-- 상품 테이블
CREATE TABLE products (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  name TEXT NOT NULL,
  description TEXT,
  price INTEGER NOT NULL,
  category TEXT NOT NULL,
  file_url TEXT,
  thumbnail_url TEXT,
  created_at TIMESTAMPTZ DEFAULT now()
);

-- 주문 테이블
CREATE TABLE orders (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  user_id UUID REFERENCES auth.users(id),
  product_id UUID REFERENCES products(id),
  payment_status TEXT DEFAULT 'pending',
  paid_at TIMESTAMPTZ,
  created_at TIMESTAMPTZ DEFAULT now()
);

-- 문의 테이블
CREATE TABLE contacts (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  name TEXT NOT NULL,
  email TEXT NOT NULL,
  message TEXT NOT NULL,
  created_at TIMESTAMPTZ DEFAULT now()
);

-- 더미 상품 3개 삽입
INSERT INTO products (name, description, price, category) VALUES
('SW/AI 수업 커리큘럼 템플릿', '8주~16주 수업 커리큘럼을 30분 만에 완성하세요.', 15000, '수업 운영용'),
('학생 활동지 세트 (SW/AI)', '수업에 바로 쓰는 활동지 10종 세트.', 12000, '수업 운영용'),
('수업 제안서 양식', '기관 제출용 수업 제안서, 양식만 채우면 끝.', 9000, '강사 업무용');

2. Claude Code로 프론트엔드 ↔ Supabase 연결

GitHub에서 프로젝트를 로컬로 clone한 뒤, Claude Code에 아래 프롬프트를 넣어 Supabase 연결 작업을 시켰습니다.

이 프로젝트는 "티처킷(TeacherKit)"이라는 Next.js 웹사이트야.
프리랜서 SW/AI 강사를 위한 수업 템플릿 판매 사이트야.
지금은 상품 데이터가 하드코딩되어 있어.

지금 할 일: Supabase DB 연결

## Supabase 정보
- URL: https://xxxxx.supabase.co
- ANON KEY: sb_publishable_xxxxx

## Supabase에 이미 만들어둔 테이블
- products 테이블: id, name, description, price, category, file_url, thumbnail_url, created_at
- 더미 상품 3개가 이미 들어있음

## 해줘야 할 작업
1. 먼저 이 프로젝트의 파일 구조를 확인해줘
2. @supabase/supabase-js 패키지 설치
3. .env.local 파일 생성하고 위 Supabase URL과 ANON KEY 저장
4. Supabase 클라이언트 설정 파일 생성
5. 상품 목록 페이지에서 하드코딩된 데이터를 Supabase에서 불러오는 걸로 교체
6. 상품 상세 페이지도 Supabase에서 불러오도록 수정

포인트: "먼저 이 프로젝트의 파일 구조를 확인해줘"를 1번에 넣으면 Claude Code가 구조를 파악한 뒤 작업하기 때문에 정확도가 올라갑니다.

3. 회원가입/로그인 (Supabase Auth)

DB 연결 확인 후, 이어서 Auth 기능도 Claude Code에 요청했습니다.

이 프로젝트에 Supabase Auth로 이메일 로그인 기능을 추가해줘.

## 구현할 내용
1. 회원가입 페이지: 이메일 + 비밀번호로 가입
2. 로그인 페이지: 이메일 + 비밀번호로 로그인
3. Header에 로그인 상태 표시: 로그인 전 → "로그인" 버튼 / 로그인 후 → 이메일 표시 + "로그아웃" 버튼
4. 로그인하지 않아도 상품 목록과 상세 페이지는 볼 수 있어야 함
5. 구매하기 버튼은 로그인한 사용자만 클릭 가능

4. Toss Payments 결제 연동

사업자번호가 없어서 막히는 줄 알았는데, 토스페이먼츠는 문서용 테스트 키를 사업자번호 없이 사용할 수 있었습니다. 개발자센터 문서 페이지에 있는 test_ck_..., test_sk_... 키를 가져와서 Claude Code에 결제 연동을 요청했습니다.

한국 앱 스크린샷

--- 성공하기까지 다양한 상황의 에러가 발생.. 결제화면이 이렇게 반가울줄이야.. ㅎㅎ

5. 환경변수 등록 + Vercel 최종 배포

로컬에서 충분히 테스트한 뒤:

  1. Git commit → GitHub push

  2. Vercel Settings → Environment Variables에 Supabase URL, ANON KEY, Toss 키 등록

  3. Vercel 재배포 → 완성!

- Vercel Settings에 환경변수를 별도로 등록

  1. Supabase 에 배포한 URL 등록하기

완성 홈페이지 이미지

방에 앉아 있는 사람들의 흑백 사진

https://teacher-kit-1.vercel.app/


결과와 배운 점

배운 점

  • Supabase SQL Editor는 생각보다 간단하다 — SQL을 몰라도 Claude가 만들어준 코드를 붙여넣고 Run만 누르면 끝

  • 사업자번호 없이도 Toss Payments 테스트 결제 개발이 가능하다 — 테스트 키 활용

시행착오

  • 토스 결제 연동 시 사업자번호 이슈 → 문서용 테스트 키로 우회

  • 토스 결제 서비스 구현 과정 중 다양한 오류 해결

앞으로의 계획

  • 마이페이지 기능 추가: 구매 이력 조회, 재다운로드, 회원 정보 관리

  • 홈페이지 리브랜딩: 주제 및 방향성 재정비 후 새로운 컨셉으로 리오픈

  • 무료 공유 상품 라인업 추가: 진입 장벽을 낮춰 신규 유입 유도

  • 홈페이지 세부 업데이트: UI 디테일 개선, 상품 필터링 고도화, 모바일 반응형 다듬기

  • 실제 판매할 상품 템플릿(커리큘럼·활동지·제안서) 콘텐츠 제작

  • SEO/AEO 최적화 (메타 태그, OG 이미지, 사이트맵)

  • 사업자 등록 후 라이브 키로 전환 → 실제 결제 오픈

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요