Supabase 대시보드(https://supabase.com)에 접속하여:
- 프로젝트 선택
- 좌측 메뉴에서 "SQL Editor" 클릭
/supabase/schema.sql파일의 내용을 복사하여 붙여넣기- "Run" 버튼 클릭하여 실행
이렇게 하면 다음 테이블들이 생성됩니다:
users- 사용자 정보classes- 수업 정보schedules- 일정 정보
-- 테스트 사용자 추가 (비밀번호: 1234)
INSERT INTO users (email, password_hash, name, user_type, is_teacher, verification_status) VALUES
('student@test.com', '$2a$10$YourHashedPasswordHere', '학생', 'student', false, 'none'),
('teacher@test.com', '$2a$10$YourHashedPasswordHere', '선생님', 'teacher', true, 'verified');.env 파일이 올바르게 설정되어 있는지 확인:
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
# 메일 발송 (둘 중 하나 선택)
# 1) 권장: Resend HTTP API (Cloudflare Worker 호환)
RESEND_API_KEY=your_resend_api_key
EMAIL_FROM=no-reply@your-domain.com
# 2) 로컬 호환: Gmail SMTP
EMAIL_USER=your_gmail_address
EMAIL_PASS=your_gmail_app_passwordCloudflare Worker 배포 시에는 .env가 자동 반영되지 않으므로 시크릿을 별도로 등록해야 합니다:
# 권장 (Resend)
npx wrangler secret put RESEND_API_KEY
npx wrangler secret put EMAIL_FROM
# 또는 SMTP
npx wrangler secret put EMAIL_USER
npx wrangler secret put EMAIL_PASSnpm install # 의존성 설치 (bcryptjs가 추가됨)
npm run dev # 개발 서버 실행POST /api/auth/signup
Body: {
email: string,
password: string,
name: string,
userType: 'student' | 'teacher'
}POST /api/auth/login
Body: {
username: string, // email로 사용
password: string
}GET /api/classes
Response: ClassItem[]POST /api/classes
Body: {
title: string,
description: string,
level: string,
type: string,
category: string,
image: string,
tutorId: string,
tutorName: string,
details?: string[]
}GET /api/classes/[id]
Response: ClassItemGET /api/schedules?classId={id}&studentId={id}
Response: ScheduleItem[]POST /api/schedules
Body: {
classId: string,
date: string, // YYYY-MM-DD
time: string,
studentId: string
}GET /api/users/[id]
Response: UserPUT /api/users/[id]
Body: {
name?: string,
profileImage?: string,
verificationStatus?: string
}프론트엔드 페이지들을 API와 연결해야 합니다:
/app/class/page.tsx-db.class.getAll()→ API 호출로 변경/app/class/[id]/page.tsx-db.class.getById()→ API 호출로 변경/app/schedule/page.tsx-db.schedule.getAll()→ API 호출로 변경/app/main/page.tsx- 데이터 로딩을 API 호출로 변경/app/profile/page.tsx- 사용자 정보 API와 연동
// Before (Mock DB)
import { db } from "@/lib/db";
const classes = await db.class.getAll();
// After (API Route)
const response = await fetch('/api/classes');
const classes = await response.json();- 비밀번호 해싱: 회원가입 시 bcryptjs로 자동 해싱됩니다.
- RLS (Row Level Security): Supabase RLS 정책이 활성화되어 있습니다.
- UUID 사용: 모든 ID는 UUID 형식입니다.
- camelCase ↔ snake_case 변환: API에서 자동으로 변환됩니다.
비밀번호 해시를 생성하려면 Node.js 콘솔에서:
const bcrypt = require('bcryptjs');
const hash = await bcrypt.hash('1234', 10);
console.log(hash);생성된 해시를 SQL INSERT 문에 사용하세요.
.env파일의 환경 변수를 확인하세요.- 개발 서버를 재시작하세요.
- Supabase에서 사용자가 생성되었는지 확인하세요.
- 비밀번호 해시가 올바른지 확인하세요.
- 브라우저 개발자 도구의 Network 탭에서 응답을 확인하세요.
- 서버 콘솔에서 에러 로그를 확인하세요.