콘텐츠로 이동

챌린지식 문제 풀이

v0.2 변경 (2026-05-21, ADR-0009) — Minor: - Notion v0.2에서 챌린지를 1차 MVP 핵심 채널로 격상 (비로그인 학생 유입 + AI 사용 데이터 확보) - 막힘 시 hint 트리거 위임 대상이 teams/engineering/concepts/사고력-답변구조 (v0.1 단계형, superseded) → teams/engineering/concepts/사고력-답변구조-v0.2 (v0.2 대화형)

변경 이력

버전 날짜 내용
v0.1 2026-05-20 최초 작성 (Notion v0.1 기반)
v0.2 2026-05-21 Minor — 1차 MVP 핵심 채널 격상 + hint 위임 대상 v0.2 대화형 (ADR-0009)

버전은 Notion 페이지와 1:1 매칭 (ADR-0010).

1. 무엇 / 왜

학습 문제 풀이를 챌린지(스테이지/단계 진행) 메타포로 감싼다. 학생은 챌린지 시작 → 문제별 풀이 → 막히면 teams/engineering/concepts/사고력-답변구조-v0.2 대화형 AI 코치 개입 → 학생이 직접 답 선택 → 통과/포기 종결.

Notion v0.2 (2026-05-19)에서 챌린지가 1차 MVP 핵심 채널로 격상됨 — 비로그인 학생 유입 채널 + 사고력 답변 v0.2 실증 컨테이너 이중 역할.

핵심 동기는 Notion 본문 §8 시장 진입 전략에 명시:

6모 전후 오픈챌린지로 학생 유입 → 디에듀 AI 사용 경험 → 선생님 전환

즉 챌린지는 학생 획득 채널 + 사고력-답변구조의 실증 컨테이너 두 역할을 동시에 한다.

출처: raw/notion/ai-mvp-v0.1

2. 사용자 시나리오

학생 — 오픈챌린지 (비로그인 또는 무소속 학생)

  1. /challenge 진입 → 공개 챌린지 리스트
  2. 챌린지 시작 → 문제 1 풀이
  3. 답 제출 → 채점 결과
  4. 막힘 → teams/engineering/concepts/사고력-답변구조 트리거 (1~5단계 힌트)
  5. 모든 문제 통과 또는 종료 → 결과 화면

학생 — 스터디룸 챌린지

  • 위와 동일. 단, 챌린지가 자기 스터디룸 안에서 제공됨. 선생님이 진행도/사고 과정 열람 가능

선생님

  1. 스터디룸에서 챌린지 등록(또는 공개 챌린지 큐레이션) — 1차 MVP에서는 운영자가 시드 (선생님 출제 UI는 2차)
  2. 학생별 진행도/AI 상호작용 로그 열람 (AI Inbox 재사용)

3. 데이터 모델

별도 도메인 challenge로 신설. QnA와 직교(orthogonal) — 챌린지 풀이 중 막힘은 새 QnaContext를 만드는 대신 ChallengeAttemptQnaContext를 1:1로 연결.

엔티티 필드 (요약)
Challenge id, title, description, visibility(PUBLIC/STUDYROOM), studyRoomId(nullable), authorId, createdAt
ChallengeProblem id, challengeId, order, title, body(Tiptap JSON), expectedAnswer(or rubricRef), problemType(SHORT_ANSWER/MULTIPLE_CHOICE/OPEN_ENDED)
ChallengeRubric id, problemId, criteria(JSON) — open-ended용
ChallengeAttempt id, challengeId, studentId, status(IN_PROGRESS/COMPLETED/ABANDONED), startedAt, finishedAt
ChallengeProblemAttempt id, attemptId, problemId, status(PENDING/PASSED/FAILED/GIVEN_UP), answerSubmitted, hintLevelUsed(0~5), qnaContextId(nullable, FK)
ChallengeScore id, attemptId, totalProblems, passed, failed, hintUsageScore, completedAt — view 또는 집계 테이블

4. Backend FRD

구현 명세 본문은 코드 옆 mvp-back:docs/frd/챌린지식-풀이/spec (Backend) + mvp-front:docs/frd/챌린지식-풀이/spec (Frontend) 에서 관리한다 (ADR-0004, ADR-0005). 본 페이지는 "왜·추상" 만 유지.

핵심 요약: - 신규 도메인 challenge (Challenge, ChallengeProblem, ChallengeRubric, ChallengeAttempt, ChallengeProblemAttempt, ChallengeScore) - API 9개 (공개 리스트/상세 2 + 학생 attempts·submit·hint·give-up 5 + 선생님 모니터링 2) - Flyway V35~V39 (사고력-답변구조 V29~V34 뒤) - 두 단계 상태머신 (Attempt: IN_PROGRESS→COMPLETED/ABANDONED, ProblemAttempt: PENDING→PASSED/FAILED/GIVEN_UP) - 채점 분기: 객관식/단답=서버, open-ended=LLM - /api/public/** permitAll (ADR-0008 예정) - 막힘 → ChallengeProblemAttempt.qnaContextId lazy 생성 후 teams/engineering/concepts/사고력-답변구조 위임

세부 (엔티티 필드·SQL·서비스 클래스명·권한 분기): mvp-back:docs/frd/챌린지식-풀이

5. Frontend 화면/플로우

본 FRD는 backend 중심. Frontend 상세는 Track F.

후보 화면: - /challenge — 공개 챌린지 리스트 (비로그인) - /challenge/[id] — 챌린지 상세 (시작 전 안내) - /challenge/[id]/attempts/[attemptId] — 풀이 진행 화면 - 단계 진행 인디케이터 (문제 N/M) - 막힘 → 사이드 패널에서 teams/engineering/concepts/사고력-답변구조 UI 재사용 - 결과 화면 (총점 + 사용한 힌트 단계 표시 → 사고력 점수 가시화)

6. 비기능

  • 공개 챌린지 응답 시간: 리스트 < 200ms, 상세 < 300ms (Redis 캐시 후보)
  • 시도 동시성: 한 학생이 동일 챌린지에 진행 중 시도는 1개만 (POST attempts 멱등성)
  • 오픈챌린지 트래픽: 6모 시즌 일시적 spike 가능. 1차 MVP는 RDS · 단일 인스턴스 가정, 모니터링 알림 임계만 사전 설정
  • 부정행위 방지: 1차 MVP 범위 외 (정답을 클라이언트로 보내지 않는 것까지만)

7. 관련 도메인

8. 관련 결정

  • (예정) ADR-0006 — 챌린지 vs 과제(homework) 경계
  • (예정) ADR-0007 — 비로그인 공개 엔드포인트 Spring Security 정책
  • (참조) teams/engineering/concepts/사고력-답변구조 — 의존 컨셉

9. 출처

  • raw/notion/ai-mvp-v0.1 — STEP 1 오픈챌린지 / STEP 2 선생님 전환
  • raw/notion/ai-mvp-v0.1 — "기존 질문 / 과제에 AI 힌트 추가" — 챌린지에도 동일 패턴 적용
  • raw/notion/ai-mvp-v0.1 — A. 학생 학습 경험 (챌린지가 실증 컨테이너)