Skip to content

Project

수학도우미

초등 5학년 수학 개념 학습과 연습 문제를 제공하는 웹앱입니다. 15개 개념에 걸쳐 450개의 템플릿 문제를 설계하고, 3단계 평가 루프를 통해 문제 퀄리티를 지속적으로 검증하는 구조를 갖추고 있습니다.

2026.02 - 2026.05기획 / 풀스택 개발 / 교육 콘텐츠 설계 / 평가 루프 설계
Next.jsTypeScriptTailwind CSSKaTeXPromptfooVercel
수학도우미

Related links

아이가 수학 문제를 풀다 막히면 "힌트만 줘"라고 합니다. 정답을 알려주는 것이 아니라 다음 한 걸음을 안내하는 도구가 필요했습니다. 여기에 더해, 제공되는 문제 자체의 품질을 일정하게 유지하는 것도 중요한 과제였습니다.

학습 흐름

개념 설명을 읽고, 10문제를 풀고, 자동 채점 후 단계별 풀이를 확인하는 구조입니다. KaTeX로 수식을 렌더링하고 SVG로 도형을 그립니다. 틀린 문제에는 Claude 기반 AI 힌트가 풀이 방향을 제안합니다. 답을 바로 보여주지 않고 사고 과정을 유도하는 데 집중했습니다.

평가 루프 — 450개 문제의 품질 유지

15개 개념마다 30개의 템플릿 문제를 설계하여 총 450개의 문제 템플릿을 운영합니다. 각 템플릿은 난이도(쉬움/보통/어려움)와 세트(A/B/C)로 분류되며, 세션마다 정해진 비율(4:4:2)로 조합됩니다.

이 규모의 문제를 사람이 매번 검수하는 것은 현실적이지 않아서, 에이전트가 모든 문제를 반복 평가할 수 있는 3단계 평가 루프를 설계했습니다.

1단계 — 구조 검증: 템플릿의 파라미터 바인딩, 선택지 중복, 정답 유효성 등 기본적인 구조 오류를 확인합니다. 450개 템플릿 전체를 대상으로 합니다.

2단계 — 품질 감사: 분수 문제에서 분수가 프롬프트에 실제로 드러나는지, "첫 번째/두 번째" 같은 모호한 지시가 없는지, 같은 개념 안에서 난이도가 실제로 점진적으로 올라가는지를 체크합니다. 난이도 신호는 함수 호출 수, 연산자 수, 파라미터 범위, 풀이 단계 수, 특정 용어(통분, 평균 등) 포함 여부 등 10여 가지 지표를 조합한 휴리스틱 점수로 산출합니다.

3단계 — Promptfoo 게이트: 각 템플릿에서 파라미터를 16가지 변형으로 샘플링하고, 고정된 시드(11, 29, 47)로 10문제 세션을 135가지 조합으로 생성하여 실제 학습자가 마주할 문제들을 결정론적으로 재현합니다. 세션 내 중복, 난이도 분포, 난이도 단조 증가 여부를 총 601개 항목으로 검사합니다.

에이전트에게 평가를 맡긴 방식

사람이 450개 문제를 하나씩 보는 대신, 에이전트가 평가 리포트를 생성하고 경고/오류를 분류하도록 설계했습니다. 사람은 경계선 사례만 확인하면 됩니다.

문제 설계에서 오류가 발견되면 템플릿을 수정하고, 다시 세 단계를 통과시키는 방식으로 반복했습니다. 이 과정에서 "분수가 변수로만 표현되어 학습자가 원본 분수를 볼 수 없는 프롬프트", "난이도 2가 난이도 3보다 더 어렵게 느껴지는 템플릿" 같은 미세한 문제들이 드러났고, 수정 전후를 같은 평가 루프로 검증할 수 있었습니다.

결정론적 생성

모든 문제는 시드 기반 난수로 생성됩니다. 같은 시드로 같은 템플릿을 돌리면 정확히 같은 10문제가 나옵니다. 이 덕분에 평가 루프가 재현 가능하고, 학습자의 이전 세션도 동일하게 복원할 수 있습니다.

돌이켜보면

교육 콘텐츠는 정확성이 중요합니다. 수식 하나, 풀이 한 줄이 틀리면 학습자에게 혼란을 주기 때문에 자동 테스트와 평가 루프를 갖춰두는 것이 장기적으로는 효율적이었습니다. 에이전트에게 문제를 만들게 하는 것보다, 에이전트에게 문제의 품질을 평가하게 하는 쪽이 더 안정적인 접근이라는 점도 이 프로젝트에서 확인했습니다.