리더보드 및 게임화

학생들의 포인트, 레벨, 랭킹 시스템을 설명합니다.

목차

  1. 게임화 시스템 소개
  2. 포인트 시스템
  3. 레벨 시스템
  4. 리더보드
  5. 출석 스트릭
  6. 관련 파일

게임화 시스템 소개

목적

게임화 시스템은 다음과 같은 목적을 가지고 있습니다:

주요 요소

  1. 포인트 (Points): 활동별로 획득
  2. 레벨 (Level): 누적 포인트로 상승
  3. 랭킹 (Ranking): 커뮤니티 내 순위
  4. 스트릭 (Streak): 연속 출석 일수
  5. 칭호 (Title): 레벨별 칭호

포인트 시스템

포인트 획득 방법

학생들은 다양한 활동을 통해 포인트를 획득할 수 있습니다:

활동포인트비고
게시글 작성+10P타입 무관
댓글 작성+5P답글 포함
과제 제출+20P점수 무관
퀴즈 완료+점수P획득 점수만큼
일기 작성+10P하루 1회
체크인+5P하루 1회
게시글 좋아요 받기+2P받은 좋아요당

보너스 포인트

특별한 성취에 대한 보너스:

포인트 확인

현재 포인트는:

포인트 사용

현재는 포인트 소비 시스템 없음:

레벨 시스템

레벨 구조

누적 포인트에 따라 자동으로 레벨이 상승합니다:

레벨필요 포인트칭호설명
Level 10 - 99P입문자한국어 학습 시작
Level 2100 - 299P초급자기본기를 다지는 중
Level 3300 - 599P중급자실력이 향상되고 있음
Level 4600 - 999P고급자상당한 실력 보유
Level 51000P+마스터한국어 마스터!

레벨 업 알림

레벨이 상승하면:

다음 레벨까지

사이드바에 표시:

Level 2 (초급자) 200/300P 100 points needed

레벨별 혜택

각 레벨별로 다음과 같은 혜택:

리더보드

페이지 접근

/c/{community-slug}/leaderboard 페이지에서 랭킹을 확인할 수 있습니다.

랭킹 표시

리더보드에는 다음 정보가 표시됩니다:

  1. 순위

    • 1위, 2위, 3위는 메달 표시
    • 4위부터는 숫자로 표시
  2. 학생 정보

    • 프로필 사진
    • 이름
    • 칭호 (레벨별)
  3. 포인트

    • 현재 총 포인트
    • 포인트 증가량 (주간)
  4. 레벨

    • 현재 레벨
    • 레벨 진행도

기간별 랭킹

다음 기간별로 랭킹 확인 가능:

내 순위

리더보드 상단에 내 정보가 고정 표시:

Your Ranking: #5 Points: 350P Level: 3 (중급자)

순위 변동

출석 스트릭

스트릭이란?

연속으로 체크인한 일수를 의미합니다.

스트릭 확인

스트릭 유지

스트릭을 유지하려면:

  1. 매일 체크인 페이지 방문
  2. "체크인" 버튼 클릭
  3. 하루라도 빠지면 스트릭 초기화

스트릭 보상

연속 출석에 대한 보상:

스트릭 복구

스트릭이 끊긴 경우:

관련 파일

페이지

API 라우트

컴포넌트

서비스

주요 기능

실시간 업데이트

포인트 및 랭킹:

활동 히스토리

모든 포인트 활동 기록:

배지 시스템

특별한 성취에 대한 배지:

사용 예시

1. 포인트 획득

학생: 게시글 작성 시스템: "게시글이 작성되었습니다. +10P" 사이드바: 포인트 100P → 110P 학생: 과제 제출 시스템: "과제가 제출되었습니다. +20P" 사이드바: 포인트 110P → 130P

2. 레벨 업

학생: 퀴즈 완료 (80점) 시스템: "퀴즈 완료! +80P" 포인트: 90P → 170P 시스템: "축하합니다! Level 2 달성!" 칭호: 입문자 → 초급자 알림: 레벨 업 축하 메시지

3. 리더보드 확인

학생: Leaderboard 페이지 접근 표시: 1위 🥇 김철수 - 850P (Level 4, 고급자) 2위 🥈 이영희 - 720P (Level 4, 고급자) 3위 🥉 박민수 - 680P (Level 4, 고급자) 4위 나 - 350P (Level 3, 중급자) 5위 최지원 - 320P (Level 3, 중급자)

4. 체크인

학생: Check-In 페이지 접근 학생: "체크인" 버튼 클릭 시스템: "체크인 완료! +5P" 스트릭: 6일 → 7일 시스템: "7일 연속 체크인! +50P 보너스!"

데이터베이스 스키마

user_points 테이블

{ id: string, userId: string, communityId: string, totalPoints: number, level: number, lastCheckIn: Date | null, checkInStreak: number, updatedAt: Date }

point_activities 테이블

{ id: string, userId: string, communityId: string, activityType: string, // 'post', 'comment', 'quiz', etc. points: number, description: string, createdAt: Date }

achievements 테이블

{ id: string, userId: string, badgeType: string, badgeName: string, earnedAt: Date }

포인트 부여 로직

중복 방지

하루 1회만 포인트 부여:

// 예: 체크인 if (lastCheckIn?.toDateString() === today.toDateString()) { return { error: "이미 오늘 체크인하셨습니다." } }

레벨 계산

누적 포인트로 레벨 자동 계산:

function calculateLevel(points: number): number { if (points < 100) return 1 if (points < 300) return 2 if (points < 600) return 3 if (points < 1000) return 4 return 5 }

스트릭 계산

연속 출석 계산:

const daysDiff = (today - lastCheckIn) / (1000 * 60 * 60 * 24) if (daysDiff === 1) { // 연속 출석 streak++ } else if (daysDiff > 1) { // 스트릭 끊김 streak = 1 }

랭킹 계산

전체 랭킹

누적 포인트로 정렬:

SELECT userId, totalPoints, level FROM user_points WHERE communityId = ? ORDER BY totalPoints DESC LIMIT 100

기간별 랭킹

특정 기간 내 획득 포인트로 정렬:

SELECT userId, SUM(points) as periodPoints FROM point_activities WHERE communityId = ? AND createdAt >= ? AND createdAt <= ? GROUP BY userId ORDER BY periodPoints DESC LIMIT 100

문제 해결

포인트가 부여되지 않는 경우

레벨이 올라가지 않는 경우

스트릭이 끊긴 경우

리더보드가 업데이트되지 않는 경우

모범 사례

효과적인 포인트 획득

레벨 업 전략

랭킹 상승 팁

향후 기능

계획 중인 기능

  1. 포인트 샵

    • 포인트로 아이템 구매
    • 프로필 커스터마이징
    • 특별 뱃지
  2. 그룹 챌린지

    • 팀별 경쟁
    • 그룹 목표 달성
    • 공동 보상
  3. 주간/월간 미션

    • 특별 미션 제공
    • 미션 달성 시 보너스
    • 한정 뱃지
  4. 스트릭 복구

    • 포인트로 스트릭 복구
    • 1회 복구 기회
  5. 개인 통계

    • 활동 그래프
    • 학습 시간 추적
    • 성과 분석

게임화의 교육적 효과

긍정적 효과

주의사항