잊기전에
운영 중잊어버리기 직전에 다시 보여주는 영단어 앱
단어마다 잊어버릴 시점을 계산해 그날 다시 문제로 내는 영단어 앱입니다. 기초·중급·토익·여행·개발자 단어장 5종에서 하루 분량만 풀면 끝나고, 가입 없이 바로 시작할 수 있습니다. 기획부터 디자인, 개발, 출시까지 혼자 맡아 App Store에 출시했습니다.

왜 만들었나
단어를 오래 기억하는 방법은 이미 연구로 밝혀져 있습니다. 간격을 두고 복습하고(간격 반복), 보기만 하지 않고 떠올려 보는 것(인출 연습)입니다. 문제는 효과가 아니라 지속이었습니다. 이런 앱은 효과가 있어도 지루해서 쉽게 버려집니다.
그래서 검증된 학습 원리를 지루하지 않게, 매일 쓰게 만드는 단어 앱을 목표로 잡았습니다. 무엇을 언제 복습할지는 앱이 정하고, 사용자는 "오늘 할 것"만 하면 됩니다.
할 수 있는 것
- 잊기 직전에 복습: 단어마다 잊어버릴 시점을 계산해 그날 다시 문제로 냅니다. 잘 아는 단어는 점점 뜸하게, 헷갈리는 단어는 자주 만납니다.
- 문제로 푸는 복습: 뜻 떠올리기, 듣고 고르기, 예문 빈칸 채우기 세 가지 유형으로 풉니다.
- 목적별 단어장 5종: 기초, 중급, 토익, 여행, 개발자 단어장에 약 7,200개 단어가 들어 있습니다. 모든 단어에 뜻, 예문과 번역, 발음 기호, 원어민 발음이 있습니다.
- 하루 분량만: 오늘 복습할 단어와 새 단어 수가 정해져 있어 끝이 보입니다.
- 놓쳐도 괜찮은 연속 기록: 한 주에 한 번은 연속 기록을 자동으로 지켜 줍니다.
- 가입 없이 바로 시작: 학습 기록은 기기 안에만 저장됩니다.
고민한 점
근거에 기대어 결정하기
학습 방식에 관한 결정은 논문 조사 문서에 근거를 두고, 근거가 없는 결정은 "가설"로 표시했습니다. 예를 들어 뜻이 비슷한 새 단어는 서로 헷갈리기 쉬워서 같은 날 내지 않습니다(Nakata & Suzuki 2019). 구현 중에 고른 방법과 이유는 결정 기록으로 70개 넘게 남겼습니다.
복습 엔진을 순수 함수로
복습 일정(FSRS), 하루 분량 계산, 연속 기록, 알림 계획 같은 학습 로직을 화면과 분리해 순수 TypeScript 패키지로 만들었습니다. 덕분에 30일 동안 매일 공부하는 상황을 시뮬레이션하는 테스트로 엔진을 검증할 수 있었습니다.
학습 흐름을 끊지 않는 광고
광고는 학습을 마친 뒤 결과 화면의 배너, 그리고 사용자가 추가 학습이나 연속 기록 보호를 직접 골랐을 때 보는 영상 광고뿐입니다. 문제를 푸는 동안에는 절대 나오지 않습니다. 광고를 없애고 싶은 사람을 위해 광고 제거 상품도 넣었습니다.
서버 없이, 하지만 나중을 위해
출시 버전은 서버 없이 기기 안의 SQLite만 씁니다. 대신 모든 평가 기록을 남기고, 데이터 구조는 나중에 동기화와 개인화를 붙일 수 있게 설계했습니다. 데이터베이스 마이그레이션은 이미 배포한 파일을 고치지 않는 규칙으로 관리합니다.
단어장을 만드는 파이프라인
단어장은 앱 코드와 분리된 콘텐츠로 다룹니다. 초안 검사, 발음 기호 생성, 검수 시트, 발음 파일 생성까지 도구로 만들었습니다. 발음은 Google Cloud TTS로 만들고, 음성 인식(whisper)으로 다시 받아 적어 그 단어로 들리는지 검사합니다. LGTM처럼 그대로 읽으면 틀리는 약어는 읽는 법을 따로 정해 둡니다.
기술 스택
- 앱: React Native, Expo (Expo Router, Development Build), TypeScript
- 데이터: expo-sqlite, Drizzle ORM, Zustand
- 학습 엔진: ts-fsrs
- 기능: expo-audio, expo-notifications, AdMob, 앱 내 구입, PostHog
- 콘텐츠: Google Cloud TTS, whisper.cpp
- 품질: Jest, ESLint, Prettier, npm workspaces 모노레포
외우는 방법은 이미 알려져 있다. 남은 건 매일 하게 만드는 것.