# 🔧 퀴즈 선택지 및 해설 문제 해결 가이드 ## 문제 증상 - 퀴즈 화면에서 **선택지가 표시되지 않음** - **해설이 보이지 않음** - 문제 텍스트만 보이고 답변할 수 없음 ## 원인 분석 ### 1. 데이터베이스에 선택지 데이터가 없음 (가장 흔한 원인) - Supabase에 `database.sql` 파일이 제대로 실행되지 않았을 수 있습니다 - 샘플 데이터가 삽입되지 않았을 수 있습니다 ### 2. RLS (Row Level Security) 정책 문제 - 선택지를 읽을 권한이 없을 수 있습니다 ### 3. Supabase 연결 문제 - API 키나 URL이 잘못 설정되었을 수 있습니다 ## 해결 방법 ### 🔍 1단계: 디버그 로그 확인 앱을 실행하고 Xcode 콘솔에서 다음 로그를 확인하세요: ``` 🔄 퀴즈 로딩 시작... 📅 오늘 날짜: ... 🎲 랜덤 퀴즈 로딩 시작... ✅ 활성 문제 개수: X ✅ 선택지 개수: X <-- 이 값이 0이면 문제! ``` **선택지 개수가 0**이라면 데이터베이스에 선택지가 없는 것입니다. ### 📊 2단계: Supabase에서 데이터 확인 1. **Supabase 대시보드**에 로그인 - URL: https://supabase.com/dashboard 2. **프로젝트 선택**: `qptsmsyfzbbqqdcyqgeu` 3. **Table Editor**로 이동 4. **questions 테이블 확인** - 데이터가 있는지 확인 - 있다면: ✅ 다음 단계로 - 없다면: ❌ database.sql 실행 필요 5. **question_choices 테이블 확인** - 데이터가 있는지 확인 - 있다면: ✅ 다음 단계로 - 없다면: ❌ 선택지 데이터 추가 필요 ### 🔧 3단계: 데이터 복구 #### 방법 A: 전체 스키마 재실행 (권장) 1. Supabase 대시보드 → **SQL Editor** 2. **New Query** 클릭 3. `database.sql` 파일의 내용을 복사하여 붙여넣기 4. **Run** 클릭하여 실행 #### 방법 B: 데이터만 복구 (빠른 방법) 1. Supabase 대시보드 → **SQL Editor** 2. **New Query** 클릭 3. `verify_and_fix_data.sql` 파일의 내용을 복사하여 붙여넣기 4. **Run** 클릭하여 실행 이 스크립트는 다음을 수행합니다: - ✅ 현재 데이터 상태 확인 - ✅ 선택지가 없는 문제 찾기 - ✅ 자동으로 선택지 추가 - ✅ 최종 결과 확인 ### 🧪 4단계: 확인 SQL 실행 후 다음 쿼리로 확인: ```sql SELECT q.question_text, COUNT(qc.id) as choice_count FROM questions q LEFT JOIN question_choices qc ON q.id = qc.question_id GROUP BY q.id, q.question_text; ``` **결과**: 모든 퀴즈 문제가 최소 2개의 선택지를 가져야 합니다. ### 📱 5단계: 앱 재실행 1. Xcode에서 앱 **완전 종료** (Stop 버튼) 2. **Clean Build Folder** (Cmd + Shift + K) 3. 앱 **재실행** 4. 퀴즈 탭으로 이동 5. Xcode 콘솔에서 로그 확인: ``` ✅ 선택지 개수: 2 (또는 그 이상) - A: 그렇다 - B: 아니다 ``` ## 추가 문제 해결 ### 문제: "활성 문제 개수: 0" **원인**: questions 테이블에 데이터가 없음 **해결**: ```sql -- Supabase SQL Editor에서 실행 SELECT COUNT(*) FROM questions; ``` 0이 나오면 `database.sql` 전체를 다시 실행하세요. ### 문제: "오늘의 퀴즈 없음" 항상 표시 **원인**: daily_quizzes 테이블이 비어있음 (정상) **해결**: - 이것은 정상입니다 - 앱이 자동으로 랜덤 퀴즈를 로드합니다 - 오늘의 퀴즈를 추가하려면: ```sql -- 오늘의 퀴즈 추가 INSERT INTO daily_quizzes (question_id, quiz_date) SELECT id, CURRENT_DATE FROM questions WHERE question_type = 'quiz' ORDER BY RANDOM() LIMIT 1; ``` ### 문제: 해설이 표시되지 않음 **원인**: questions 테이블의 explanation 컬럼이 NULL **확인**: ```sql SELECT question_text, explanation FROM questions WHERE explanation IS NULL; ``` **해결**: ```sql -- 해설 추가 예시 UPDATE questions SET explanation = '여기에 해설을 입력하세요' WHERE id = '문제-UUID'; ``` ## 개선 사항 이번 업데이트로 다음이 추가되었습니다: ### 1. 디버그 로깅 - 모든 데이터 로딩 과정을 콘솔에 출력 - 문제 발생 시 정확한 원인 파악 가능 ### 2. UI 개선 - 선택지가 없을 때 명확한 에러 메시지 표시 - 데이터베이스 문제를 사용자에게 알림 ### 3. 에러 처리 강화 - 각 단계별 에러 로깅 - 실패 시 대체 방안 제공 ## 예방 조치 ### 정기적인 데이터 확인 월 1회 이 쿼리를 실행하여 데이터 무결성 확인: ```sql -- 선택지가 없는 문제 찾기 SELECT q.id, q.question_text, COUNT(qc.id) as choice_count FROM questions q LEFT JOIN question_choices qc ON q.id = qc.question_id GROUP BY q.id, q.question_text HAVING COUNT(qc.id) = 0; ``` ### 새 문제 추가 시 문제를 추가할 때는 **반드시** 선택지도 함께 추가: ```sql -- 1. 문제 추가 INSERT INTO questions (question_text, question_type, category, correct_answer, explanation, difficulty) VALUES ('새로운 문제?', 'quiz', '경제', 'A', '해설 내용', 2) RETURNING id; -- UUID를 복사하세요 -- 2. 선택지 추가 (위에서 복사한 UUID 사용) INSERT INTO question_choices (question_id, choice_key, choice_text, display_order) VALUES ('복사한-UUID', 'A', '첫 번째 선택지', 1), ('복사한-UUID', 'B', '두 번째 선택지', 2); ``` ## 문의 여전히 문제가 해결되지 않으면: 1. Xcode 콘솔의 **전체 로그**를 복사 2. Supabase에서 questions와 question_choices 테이블의 **스크린샷** 캡처 3. 개발자에게 전달 --- **마지막 업데이트**: 2025-11-06 **작성자**: Moni 개발팀