Nihongo
PRODUCT간격 반복과 AI 튜터를 결합한 일본어 학습 PWA
- 기간
- 2026.08 ~ 2026.09
- 역할
- 기획 · 구현 · 배포 단독
- 사용 기술
- React 19 · Firebase · IndexedDB · Gemini API
개요
SM-2 간격 반복과 마스코트·연속 학습·일일 미션을 연결한 일본어 학습 PWA입니다. 콘텐츠 수보다 매일 복습할 이유와 끊기지 않는 학습 흐름에 집중했습니다.
가나·한자·회화·독해·JLPT 모의고사를 기본 학습 흐름으로 구성하고, Gemini 튜터와 작문 첨삭은 필요할 때 선택하는 보조 도구로 분리했습니다.
문제와 해결
- 01
오프라인에서도 이어지는 발음 학습
이동 중에도 학습할 수 있어야 하지만 TTS는 네트워크가 끊기면 재생되지 않습니다.
발음 오디오를 IndexedDB에 저장해 한 번 들은 소리는 오프라인에서도 다시 재생할 수 있게 했습니다.
- 02
학습 데이터의 저장 경계 분리
프로필·학습 상태·SRS·라이브러리는 데이터 크기와 저장 시점이 달라 하나의 Firestore 문서에 두면 불필요한 쓰기와 충돌이 늘어납니다.
문서를
profile / state / srs / library로 분리하고 각 기능이 필요한 범위만 갱신하도록 저장 경계를 나눴습니다. - 03
애니메이션 내부 카드 폭 고정
가운데 정렬된 flex 영역 안에서
motion.div의 폭이 0으로 계산되며 글자가 한 글자씩 세로로 배치됐습니다.문제가 발생한 래퍼의 폭을 직접 지정하고, 같은 flex·motion 조합을 프로젝트 문서에 재현 조건과 함께 기록했습니다.
주요 구현
- SM-2 간격반복(SRS) 코어 + 오답 노트 · 일일 미션 · 연속 학습 스트릭 · XP/레벨
- N5~N1 단어 사전, 가나 차트·게임·연습, 단어에서 자동 추출한 한자 드릴
- Gemini 튜터 채팅(스트리밍) · 작문 첨삭 · AI 독해 지문 생성 · AI 회화
- JLPT 모의고사와 숙련도·약점 차트
- 마스코트 3종 + 의상, 테마 7종, 홈 레이아웃 4종
- ⌘K 퀵서치 — 단어와 회화 표현을 하나의 인덱스로 통합
회고
학습 도구의 완성도는 기능 수보다 사용자가 다시 돌아올 이유와 이동 중에도 이어지는 학습 흐름에서 결정된다는 점을 확인했습니다.