# 🔧 퀴즈 선택지 및 해설 문제 해결 가이드
## 문제 증상
- 퀴즈 화면에서 **선택지가 표시되지 않음**
- **해설이 보이지 않음**
- 문제 텍스트만 보이고 답변할 수 없음
## 원인 분석
### 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 개발팀