성경퀴즈 대회 시스템
참가자 휴대폰으로 실시간 퀴즈 참여
🎯 학습 목표
- ✓퀴즈 문제 관리 시스템 구축
- ✓실시간 답안 제출 및 채점
- ✓점수판 실시간 업데이트
- ✓제한 시간 관리 및 동기화
💻 실습: 단계별 진행
STEP 1DB 스키마 설계 (5분)
🤖 프롬프트
Prisma로 다음 모델들을 만들어줘:
Quiz: id, question(문자열), options(JSON 배열), correctAnswer(숫자 0-3), timeLimit(초), points(점수), createdAt
QuizSession: id, roomCode(6자리), status(waiting/active/finished), currentQuestionIndex, createdAt
QuizAnswer: id, sessionId, quizId, playerName, answer, isCorrect, responseTime(ms), createdAt
STEP 2백엔드: 퀴즈 관리 API (7분)
🤖 프롬프트
NestJS로 Quiz CRUD API를 만들어줘.
GET /quizzes - 전체 퀴즈 목록
POST /quizzes - 새 퀴즈 생성
GET /quizzes/:id - 특정 퀴즈 조회
PATCH /quizzes/:id - 퀴즈 수정
DELETE /quizzes/:id - 퀴즈 삭제
POST /quiz-sessions - 새 세션 생성 (방 코드 자동 생성)
GET /quiz-sessions/:roomCode - 세션 정보 조회
STEP 3백엔드: Socket 이벤트 처리 (8분)
🤖 프롬프트
Socket.IO 게이트웨이에 다음 이벤트를 추가해줘:
'quiz:join' - 참가자 입장
'quiz:start' - 호스트가 퀴즈 시작
'quiz:nextQuestion' - 다음 문제로 이동
'quiz:submitAnswer' - 답안 제출
'quiz:timeUp' - 시간 종료
각 이벤트는 방(room) 내 모든 클라이언트에게 브로드캐스트해줘. 답안은 DB에 저장하고, 정답 여부를 즉시 계산해줘.
⏱️ 타이머 동기화 로직
// 서버에서 타이머 관리
handleStartQuestion(roomCode, questionIndex) {
const timeLimit = questions[questionIndex].timeLimit;
// 모든 클라이언트에게 문제 전송
io.to(roomCode).emit('quiz:question', {
...question,
startTime: Date.now(),
timeLimit
});
// 서버 타이머 시작
setTimeout(() => {
io.to(roomCode).emit('quiz:timeUp');
}, timeLimit * 1000);
}STEP 4프론트엔드: 호스트 & 참가자 화면 (10분)
🤖 프롬프트
호스트 화면을 만들어줘:
- 문제 출제 (큰 화면에 프로젝터 투사용)
- 실시간 답변 현황 (누가 답했는지)
- 점수판 (상위 10명)
- 다음 문제 버튼
- 타이머 표시
참가자 화면을 만들어줘 (모바일 최적화):
- 4개 보기 버튼 (큰 터치 영역)
- 제한 시간 표시
- 내 점수 표시
- 정답/오답 피드백
🎨 화면 구성
호스트 화면
- • 문제 (큰 폰트)
- • 보기 4개
- • 타이머 (카운트다운)
- • 답변 현황 바
- • 실시간 점수판
참가자 화면
- • 문제 텍스트
- • 4개 큰 버튼
- • 남은 시간
- • 내 현재 점수
- • 내 순위
🏆 점수 계산 로직
기본 점수 + 속도 보너스
calculateScore(question, responseTime) {
const baseScore = question.points; // 예: 100점
const timeLimit = question.timeLimit * 1000; // ms로 변환
// 남은 시간 비율에 따라 보너스
const timeBonus = Math.floor(
baseScore * 0.5 * (1 - responseTime / timeLimit)
);
return baseScore + Math.max(0, timeBonus);
// 빠르게 답할수록 최대 50% 보너스
}예시:
- • 제한 시간 30초, 기본 점수 100점인 문제
- • 5초 만에 정답: 100 + (100 × 0.5 × 0.83) = 141점
- • 15초 만에 정답: 100 + (100 × 0.5 × 0.5) = 125점
- • 29초 만에 정답: 100 + (100 × 0.5 × 0.03) = 101점
🚀 확장 아이디어
⚡ 파워업 아이템
50:50 찬스, 시간 연장 등
🎵 효과음
정답/오답 사운드, 카운트다운 틱톡
📊 난이도 조절
연령대별 문제 세트
🎁 경품 추첨
상위 10명 자동 추첨
✅ 완성 체크리스트
👨🏫 강사 노트
⏰ 시간 관리: DB 모델링(5분), API 구현(10분), 프론트엔드(12분), 테스트(3분)
🎮 실제 퀴즈: 구약 5문제, 신약 5문제 미리 준비하여 실제 대회 진행
📱 동시 접속: 참가자들 모두 휴대폰으로 함께 참여 → 실시간 감동 체험
🎯 핵심: "안식일학교에서 100명이 동시에 퀴즈 대회 가능!"
⚡ 팁: 첫 문제는 쉽게, 분위기 띄우기. 마지막은 어렵게 변별력 확보