소개
분당에서 영어 읽기 전문 학원을 운영하는 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: '