소개
분당에서 영어 읽기 전문 학원을 운영하는 Reading Horizons Master Teacher입니다. 22년간 아이들을 가르치면서 늘 이런 문제가 있었어요. "처음 만나는 학생의 읽기 수준을 정확히 파악하는 데 2~3주가 걸린다." 학부모에게 "왜 이 수준인가요?"라는 질문을 받으면 설명은 할 수 있는데, 근거 자료로 보여줄 문서가 없었습니다.
그래서 Claude를 활용해서 직접 AI 읽기 진단 웹앱을 만들어봤습니다. 코딩 경험 없는 비개발자가 Claude Code와 Claude AI를 활용해 기획부터 배포까지 진행 한 과정을 공유합니다.
진행 방법
진행 방법
사용 도구
Claude (기획, 코드 작성, 디버깅, 문서 작성 전반)
Claude Code (파일 관리, 빌드, 코드 실행)
React + Vite (프론트엔드)
Vercel (배포, 무료)
GitHub (코드 저장소)
OpenAI Whisper API (음성 인식)
Anthropic Claude API (AI 진단 분석)
1단계 — 앱 구조 기획
Claude에게 내 문제 상황을 설명하고 구조를 함께 설계했습니다.
사용한 프롬프트:
나는 22년 경력의 영어 읽기 전문 원장이야.
Reading Horizons Master Teacher 자격이 있고,
파닉스와 난독증 지도를 전문으로 해.
다음 문제를 해결하고 싶어:
1. 처음 오는 학생의 읽기 수준을 빠르게 파악하고 싶다
2. 학부모에게 진단 근거를 PDF로 줄 수 있으면 좋겠다
3. 난독증이 의심되는 아이의 어떤 하위 기술이 약한지 파악하고 싶다
React 웹앱으로 만들고 싶은데, 어떤 구조가 좋을까?Claude가 제안한 구조:
로그인/회원가입 (localStorage 기반)
아이 정보 입력 → 설문 → AI 분석 → 결과 리포트
PDF 다운로드
진단 기록 저장
2단계 — 핵심 기능 구현
AI 읽기 진단
AI 읽기 진단
Claude API를 활용한 진단 분석 프롬프트 (실제 사용 버전):
system: 'You are an expert in Reading Horizons methodology and structured
literacy for Korean children learning English. Analyze diagnostic data
and produce a personalized diagnosis with ACTIONABLE teaching tips.
RESPOND ONLY IN JSON:
{
"overallLevel": "Level description in Korean",
"levelNumber": 2,
"summary": "2-3 sentences in Korean using simple language",
"strengths": ["..."],
"challenges": ["..."],
"recommendations": [{"title": "...", "desc": "...", "priority": "high/medium/low"}],
"teachingTips": [{"title": "...", "how": "...", "example": "..."}],
"nextSteps": ["..."],
"readingHorizonsPath": "...",
"categoryScores": {
"phonemic_awareness": 75,
"decoding": 60,
"phonics_patterns": 40,
"fluency": 50,
"comprehension": 65,
"attitude": 70
}
}
teachingTips은 전문 지식 없는 학부모/교사가 집에서 바로 시도할 수 있는 팁으로.'난독증 심층 스크리닝
현장에서 자주 겪는 "블렌딩은 되는데 받아쓰기가 안 되는 아이"의 패턴을 분석하기 위해 7개 하위 기술로 세분화했습니다.
글자-소리 대응
블렌딩 (소리 합치기)
세그멘팅 (소리 쪼개기)
인코딩/받아쓰기
시각 변별 (b/d, p/q 혼동)
빠른 이름대기 (RAN)
작업 기억
Claude에게 이 7개 영역을 설명하고 불균형 패턴을 자동 감지하는 알고리즘을 코드로 작성하게 했습니다.
// 블렌딩-인코딩 불균형 패턴 감지 (실제 코드)
if (scores.blending > 60 && scores.encoding < 40) {
patterns.push({
title: '블렌딩 > 인코딩 불균형',
icon: '⚖️',
desc: '