Google OAuth로 로그인한 사용자가 생성한 퀴즈(JSON)를 저장/조회하는 FastAPI 서버입니다. DB는 Supabase PostgreSQL을 사용합니다.
- Python 3.10+
- Supabase 프로젝트와 Service Role Key
- Google OAuth 클라이언트 (Redirect URI는
http://localhost:5001/auth/callback등으로 설정)
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp env.example .env # 값 채우기
uvicorn main:app --host 0.0.0.0 --port 5001 --reloadFASTAPI_SECRET_KEY: 세션 쿠키 서명용 비밀키SESSION_COOKIE_SECURE/SESSION_COOKIE_SAMESITE/SESSION_COOKIE_NAMEFRONTEND_URL: CORS 및 OAuth 로그인 성공 후 리다이렉트 대상GOOGLE_CLIENT_ID/GOOGLE_CLIENT_SECRETSUPABASE_URL/SUPABASE_SERVICE_ROLE_KEY
schema.sql 실행:
psql "$SUPABASE_DB_URL" -f schema.sqlusers(id, email, name, picture, created_at)quizzes(id, user_id, title, source_filename, quizzes jsonb, created_at)
GET /health: 상태 체크GET /auth/login: 구글 로그인 시작 (쿠키 세션)GET /auth/callback: OAuth 콜백, Supabaseusersupsert, 세션 저장POST /auth/logout: 세션 삭제GET /api/me: 현재 세션 유저GET /api/quizzes: 내 퀴즈 목록GET /api/quizzes/{id}: 특정 퀴즈 조회POST /api/quizzes: 퀴즈 저장 (body는quizzes리스트 필수)
- CORS 허용 origin은
FRONTEND_URL - 요청 시
credentials: "include"로 쿠키 전달 - 생성된 퀴즈를 그대로
POST /api/quizzesbody에 전달:
{
"title": "강의 1 요약 퀴즈",
"source_filename": "lecture.pdf",
"quizzes": [ ...QuizItem... ]
}