공개 설정에 따라 각 계정이 1위로 표시되던 문제를 조사했다. 가입 회원을 대상으로 누적 습득 문장 수 기준 공통 순위를 계산하도록 개선하고, 0문장 회원도 포함했다. 비로그인·게스트는 대표 결정에 따라 제외했으며, 랭킹 TOP 10·30·50·100과 내 주변 순위 UI를 GitHub에 반영했다. 운영 서버 배포 성공과 비로그인 접근 차단을 확인했으나 실계정별 순위 검증은 별도로 필요하다.
Cloudflare 자동 서버 배포 구성
GitHub Actions와 Cloudflare API 토큰을 연결하고 실제 계정 ID를 확인했다. 기존 malhaebwa-api Worker의 D1/AI 바인딩을 점검한 뒤 배포하도록 안전 검사를 추가했다. 토큰·계정 ID 문제를 해결하고 운영 API 배포 기록을 확보했다.
공개 고객지원 게시판 배포
고객지원 문의·답변 공개 열람, 로그인 회원 작성 및 운영진 처리 기능을 개발했다. 별도 D1 malhaebwa-support를 생성하고 마이그레이션 적용, malhaebwa-support Worker 배포 및 공개 상태 API 검증에 성공했다. 실제 회원 문의 접수·답변 전체 과정은 추가 확인이 필요하다. 기존 비공개 문의는 공개로 일괄 전환하지 않는다.
관리자 개발일지 이동
일반 설정에서 개발일지를 제거하고 관리자 전용 페이지로 이전했다. 개인정보 처리방침과 이용약관은 일반 설정 하단에 유지한다.
레벨테스트 · 기록 시스템
v9.10.21 · Clean Base소스 구조 정리
v9.10.20의 실제 동작을 유지하면서 index.html의 inline CSS와 JavaScript를 외부 파일로 분리했습니다. 호출되지 않는 개발용 복사본·미리보기·레거시 함수와 CSS 선택자를 제거하고, Service Worker 캐시 버전을 새 구조에 맞게 갱신했습니다. Samsung Music 기능은 회귀검증 뒤 별도 단계에서 추가합니다.
v9.10.20 · Sentence Match Trace문장일치도 오류 추적·인증 재시도
Galaxy S25 Ultra에서 마이크 충돌을 없애기 위해 Web Speech SpeechRecognition 실행 코드를 완전히 제거했습니다. 가운데 말하기 버튼은 MediaRecorder 하나만 사용하며, 녹음 종료 후 같은 녹음 파일을 malhaebwa-api의 /v1/sentence-match로 전송해 Workers AI가 일본어를 인식합니다. 서버 인식 결과를 현재 학습문장과 비교해 문장일치도와 단어 피드백을 표시하며, 서버 오류가 나도 내목소리와 학습 횟수는 정상 진행됩니다.
v9.10.6 · Background Continuity백그라운드 자동 일시정지 제거
v9.10.5의 첫 클릭 직접 MP3 재생과 6단계 속도 구조는 그대로 유지하고, 앱이 숨겨질 때 계속듣기를 강제로 일시정지하던 visibilitychange 로직과 과거 TTS용 복귀 재시작 로직을 제거했습니다. HTMLAudioElement가 홈 이동·화면 꺼짐 상태에서도 재생을 계속하도록 OS 오디오 세션에 맡깁니다.
v9.10.5 · Playback Speed계속듣기 6단계 재생속도
v9.10.4의 첫 클릭 직접 MP3 재생 구조는 그대로 유지하고, 0.8×·1.0×·1.2×·1.4×·1.6×·1.8× 속도 버튼을 한 줄로 추가했습니다. 속도 변경은 재생을 재시작하지 않고 현재 HTMLAudioElement의 playbackRate만 즉시 변경하며 선택값을 저장합니다.
v9.10.4 · Minimal MP3 Player계속듣기 첫 클릭 최소 재생 구조
계속듣기 재생 경로에서 TTS 폴백, Media Session, 외부 플레이어, 자동 재시도, 화면 진단을 제거하고 하나의 HTMLAudioElement가 현재 문장 MP3를 직접 play()하도록 단순화했습니다. 이전/다음과 문장 종료 후 다음 재생도 같은 오디오 객체만 사용합니다.
v9.10.3 · External Player Playlist계속듣기 MP3 직접 재생 경로 단순화
계속듣기 오디오를 배포 루트 /audio/문장ID.mp3에 직접 연결하고, 숨김 audio를 1px 오프스크린 미디어 요소로 변경했습니다. 첫 재생은 현재 문장을 직접 play()하고 readyState·networkState·Promise 결과·MediaError·실제 URL을 화면 진단에 표시합니다.
v9.9.7 · Background Listen Controls계속듣기 백그라운드 제어 1차
계속듣기에 Media Session을 연결해 Android/PWA의 잠금화면·알림 영역·이어폰 미디어 버튼에서 재생/일시정지/이전/다음/정지를 제어할 수 있도록 추가했습니다. 백그라운드에서 OS가 웹 TTS를 중단한 뒤 앱으로 복귀하면 현재 문장에서 자동 복구합니다. 현재 음성은 Web Speech TTS이므로 화면이 꺼진 상태의 지속 재생 자체는 기기·브라우저 정책에 따라 제한될 수 있습니다.
v9.9.6 · 15-Day Guest Login Prompt15일째 첫 로그인 안내
최초 사용일부터 15일째가 되면 첫 로그인/계정 연결 안내를 1회 표시하도록 추가했습니다. 날짜 기준은 서버 firstUsedAt을 우선하고 기존 guest 생성 시각과 기기 최초사용일을 보조 기준으로 사용합니다. 안내를 미뤄도 학습은 계속할 수 있으며 기존 guest 학습 기록은 유지됩니다.
v9.9.3 · Continuous Listen First Tap계속듣기 첫 재생·한손 조작 개선
Android/PWA에서 첫 재생 직전 불필요한 TTS cancel 호출로 첫 발화가 무시될 수 있던 흐름을 수정하고, 시작 감시 후 1회 자동 재시도 안전장치를 추가했습니다. 재생 범위를 창 상단으로 분리하고 재생 조작을 가운데로 올렸으며, 아래 보조 설정 버튼은 주 버튼보다 2단계 낮은 테마 농도로 정리했습니다.
v9.9.2 · Full Learning Reset학습 전체 초기화 화면·로직 완성
학습 초기화를 별도 설정 페이지로 완성하고, 레벨테스트 결과·모든 단계의 학습/습득/복습·복귀 큐·오늘 학습 통계·계급 진행도·임시 세션을 함께 초기화하도록 변경했습니다. 초기화 후에는 초급 1·설렘·계급 1 상태가 되며 레벨테스트를 다시 하거나 기초부터 바로 시작할 수 있습니다. 닉네임·캐릭터·프레임·테마·알림·앱 설정은 유지합니다.
v9.9.1 · Stage Reset Isolation단계 전환·초기화 세션 분리
중급에서 초급으로 돌아왔을 때 중급의 열린 문장이나 저장 세션이 초급 학습을 가로채던 문제를 수정했습니다. 단계 전환 시 이전 단계의 임시 세션을 종료하고, 학습 기록 초기화 시 다른 단계의 영구 기록은 보존하되 열린 임시 세션은 정리합니다. 홈의 말하기 시작·복습은 현재 선택 단계의 문장만 우선 진행합니다.
v9.9.0 · Voice Stable Base문장일치도 격리 · 내목소리 녹음 안정화
문장일치 관련 Web Speech·일치도·단어분석 코드를 실행 경로에서 완전히 비활성화하고, 가운데 말하기 버튼을 녹음 전용으로 안정화했습니다. 가운데 말하기 버튼은 MediaRecorder 녹음 전용으로 전환했으며, 녹음 완료 1회를 말하기 1회로 처리해 기존 학습 진행은 유지합니다. 내목소리 버튼은 최근 녹음 재생 전용입니다.
v9.8.9 · Unified Voice Capture말하기·문장일치·내목소리 통합
가운데 말하기 버튼 하나로 Web Speech 문장일치 확인과 MediaRecorder 내목소리 녹음을 함께 시작하도록 연결했습니다. 음성인식을 먼저 시작한 뒤 녹음을 독립적으로 붙여 과거 마이크 충돌을 줄였고, 녹음 실패가 문장일치 기능을 중단하지 않도록 분리했습니다. 내목소리 버튼은 녹음 기능이 아니라 방금 말한 최근 음성 재생 전용으로 정리했습니다.
v9.8.7 · Theme Palette Sync연습화면 6단계 테마 팔레트 연동
연습화면의 고정 블루 파스텔을 테마 연동형 1~6단계 팔레트로 재구성했습니다. 블루·핑크·그린·보라 테마를 선택하면 바닥, 메인패널, 문장카드, 테두리, 보조강조, 주요강조가 같은 농도 역할로 함께 변하며 야간모드와 평가 버튼의 의미색은 유지합니다.
v9.8.6 · Home Stage Inline홈 메인 등급 아이콘 위치 보정
중급·고급 홈화면의 투명 아이콘이 메인 일러스트 중앙이 아니라 단계 단어 바로 앞에 붙도록 구조를 다시 고정했습니다. 새싹 아이콘은 익숙함 앞에, 만개 아이콘은 자유로움 앞에 직접 붙습니다.
v9.8.5 · Final Stage Icons중급·고급 최종 아이콘 교체
중급 홈화면의 익숙함 앞 아이콘을 사용자가 최종 확정한 투명 배경 새싹 아이콘으로, 고급 홈화면의 자유로움 앞 아이콘을 최종 확정한 만개 꽃 아이콘으로 교체했습니다. 같은 단계 표식을 사용하는 연습화면에도 동일 아이콘이 적용됩니다.
v9.8.4 · Stage Identity Lock중급 1·고급 1 페이지 명칭 고정
중급 1 페이지의 표시를 새싹 아이콘 + 익숙함으로, 고급 1 페이지의 표시를 만개한 꽃 아이콘 + 자유로움으로 고정했습니다. i1/a1 내부 단계 코드와 학습 데이터는 그대로 유지하고, 중급 2·3 및 고급 2·3 표기는 기존 단계명을 유지합니다.
v9.8.3 · Stage Identity중급·고급 단계 상징 표기 적용
연습화면의 중급 표기를 새싹 아이콘 + 익숙함으로, 고급 표기를 만개한 꽃 아이콘 + 자유로움으로 변경했습니다. 내부 단계 코드와 학습 로직은 그대로 유지합니다.
v9.8.2 · Compact Audio Row음성 버튼 높이·내목소리 한 줄 정리
내목소리 버튼의 아이콘과 제목을 한 줄로 배치하고, 듣기·내목소리 버튼 높이를 54px에서 46px로 줄였습니다. 가운데 말하기 버튼은 기존 위치에서 4px 아래로 이동했습니다.
v9.8.1 · Compact Answers긍정·부정 카드 높이 축소
연습화면의 긍정 답변 카드와 부정 답변 카드 높이를 약 10~12% 줄이고, 확보한 공간을 질문 본문 영역에 배분했습니다. 글자 크기와 학습 기능은 그대로 유지했습니다.
v9.8.0 · Button Reset연습화면 버튼 CSS 구조 정리
듣기·말하기·내목소리에 누적되어 있던 여러 세대의 버튼 보정 CSS를 정리하고, 세 버튼을 하나의 전용 CSS 블록에서만 관리하도록 재구성했습니다. 듣기와 내목소리는 단순한 플랫 기본 상태로 초기화하고, 말하기는 녹음 상태에 필요한 원형 마이크 스타일만 유지했습니다.
v9.7.29 · Colorless Audio듣기·내목소리 버튼 색 완전 제거
듣기와 내목소리 버튼의 배경색·테두리·그림자·눌림 색 변화를 모두 제거하고 아이콘과 글자만 남겼습니다. 오래된 CSS가 다시 색을 넣지 못하도록 파일의 실제 맨 끝에 최종 규칙을 고정했습니다.
v9.7.28 · Clear Audio Buttons듣기·내목소리 버튼 투명화
듣기와 내목소리 버튼의 배경색을 투명하게 바꾸고, 버튼 경계와 글자색만 남겨 화면을 더 가볍게 정리했습니다. 기능과 위치는 그대로 유지합니다.
v9.7.27 · Final Accent듣기/내목소리 색상 최종 고정
파일 맨 뒤쪽의 오래된 연습화면 CSS가 듣기 버튼을 다시 파스텔 4단계로 덮어쓰던 문제를 확인했습니다. 최종 스타일을 문서의 실제 마지막에 배치해 듣기=#72BDF2, 내목소리=#A9D5F5가 확실히 유지되도록 수정했습니다.
v9.7.26 · Accent Lock듣기·내목소리 버튼 색상 충돌 해결
기존 CSS의 높은 선택자 우선순위 때문에 새 색상이 화면에 반영되지 않던 문제를 수정했습니다. 듣기는 파스텔 5단계 #72BDF2, 내목소리는 파스텔 4단계 #A9D5F5로 최종 우선순위에서 고정했습니다.
연습화면의 듣기 버튼과 내목소리 버튼을 파스텔 6단계 #2698EA로 통일했습니다. 버튼 글자는 흰색으로 정리하고 기능과 배치는 그대로 유지했습니다.
v9.7.23 · Score Clear문장 일치도 배경 제거
문장 일치도 영역의 배경색만 제거하고, 문장일치 분석자료의 파스텔 3단계 배경은 유지했습니다. 부모 영역도 투명 처리해 점수 영역 뒤로 색이 비쳐 보이지 않도록 정리했습니다.
v9.7.22 · Match Pastel Unity문장일치/분석표 배경 통일
문장 일치도 영역과 문장일치 분석자료 영역의 배경색을 동일한 파스텔 3단계 #DEEDFF로 통일했습니다. 기능과 점수 계산 로직은 그대로 유지합니다.
v9.7.21 · Clear Match Surface문장일치 바탕색 완전 제거
문장일치 영역에 남아 있던 바탕색이 이전 CSS에 의해 다시 나타날 가능성을 막기 위해, 문서 최종 우선순위에서 문장일치 카드·점수 영역·분석 영역의 배경색을 모두 완전 투명으로 고정했습니다.
v9.7.20 · Match Bare문장 일치도 바탕 카드 제거
문장 일치도 영역의 배경·테두리·둥근 카드·그림자를 제거했습니다. 분석자료 영역과 함께 카드 장식 없이 점수·반복 횟수·분석 내용만 표시되도록 정리했습니다.
v9.7.19 · Analysis Bare분석자료 바탕 카드 제거
문장 일치도 카드는 유지하고, 문장일치 분석자료 영역의 배경·테두리·둥근 카드 모양을 제거해 카드 없이 바로 아래에 표시되도록 정리했습니다.
v9.7.18 · Analysis Lower II분석자료 추가 6px 하향
문장일치 분석자료를 현재 보이는 위치에서 추가로 6px 더 아래로 이동했습니다. 다른 요소와 학습 로직은 그대로 유지했습니다.
v9.7.17 · Analysis Lower분석자료 6px 하향
한 장의 문장일치 카드 구조는 유지하면서, 문장일치 분석자료 내용만 6px 아래로 내려 상단 점수 영역과의 간격을 넓혔습니다.
v9.7.16 · Seamless Match문장일치도/분석자료 카드 통합
문장일치도 카드와 문장일치 분석자료 영역을 다시 하나의 카드로 확실히 묶었습니다. 분석자료를 아래로 내리던 보정은 제거하고, 하나의 배경·테두리 안에서 위는 일치도, 아래는 분석 내용이 이어지도록 정리했습니다.
v9.7.14 · Analysis Drop문장일치 분석자료 위치 보정
문장일치 분석자료 영역을 기존 위치에서 3px 아래로 이동했습니다. 문장일치도 카드와 분석 기능, 음성인식 로직은 그대로 유지합니다.
v9.7.13 · Clean Legend문장일치 범례 문구 간소화
문장일치 분석 범례에서 “브라우저 인식 결과를 바탕으로 한 참고 표시” 설명 문구를 삭제하고, 색상 범례만 간결하게 남겼습니다.
v9.7.12 · Analysis Air분석자료 바탕 카드 제거
문장 일치도 카드는 유지하고, 그 아래 문장일치 분석자료 영역의 배경색·테두리·둥근 카드 모양을 제거했습니다. 분석 내용은 카드 없이 가볍게 이어지며 음성인식과 일치도 계산 로직은 그대로 유지합니다.
v9.7.11 · Quiet Recognition말하기 버튼 추가 상향 · 실시간 인식 멘트 숨김
가운데 말하기 버튼을 v9.7.10 위치에서 추가로 3px 더 위로 올렸습니다. 음성 인식 중 잠깐 나타나던 “듣고 있어요”, “인식: …” 등의 실시간 검정색 문구는 화면에 전혀 표시되지 않도록 숨겼으며, 음성인식·문장일치도·단어 분석 로직은 그대로 유지합니다.
v9.7.10 · Clean Match분석 제목 정리 · 말하기 버튼 추가 상향
문장일치 통합 카드에서 ‘문장일치 분석자료’ 제목 글자를 제거해 화면을 더 간결하게 정리했습니다. 가운데 말하기 버튼은 기존 위치에서 추가로 3px 더 위로 올렸습니다.
v9.7.9 · Mic Lift가운데 말하기 버튼 추가 상향
가운데 말하기 버튼을 v9.7.8 위치에서 추가로 3px 더 위로 올렸습니다. 문장일치도와 분석자료의 단일 카드 구조 및 다른 연습화면 배치는 그대로 유지합니다.
v9.7.8 · Match Capsule말하기 추가 상향 · 일치도/분석표 실제 단일 카드화
가운데 말하기 버튼을 v9.7.7보다 3px 더 위로 올렸습니다. 문장 일치도와 분석자료는 시각적 연결이 아니라 실제 하나의 부모 카드 안에 담아 하나의 패널로 정리했습니다.
v9.7.7 · Unified Match Card가운데 말하기 버튼 상향 · 일치도/분석표 통합
연습화면에서 가운데 말하기 버튼을 3px 위로 올렸습니다. 또한 문장 일치도와 문장일치 분석자료가 하나의 카드처럼 보이도록 배경·테두리·모서리·간격을 통일해 한 묶음으로 정리했습니다.
v9.7.6 · Equal Bloom꽃 3송이 크기 통일
연습화면에서 세 번째 꽃만 크게 보이게 하던 오래된 전용 크기 규칙을 제거하고, 질문·긍정·부정 꽃 3송이의 실제 크기를 완전히 동일하게 고정했습니다. 꽃의 색상과 진행 상태 표현은 그대로 유지합니다.
v9.7.5 · True Order연습화면 실제 순서 고정
메인카드 → 꽃 3개 → 듣기·말하기·내목소리 3버튼 → 기억평가 3버튼 → 문장일치도 → 분석자료 순서가 HTML 구조와 화면 배치 모두에서 동일하게 유지되도록, 뒤에서 순서를 덮어쓰던 오래된 CSS 충돌을 제거하고 최종 순서를 고정했습니다.
v9.7.4 · Bloom Row꽃 진행과 3버튼 한 줄 재정렬
연습화면을 메인카드 → 꽃 3개 → 듣기·말하기·내목소리 3버튼 → 기억평가 3버튼 → 문장일치도 → 분석자료 순서로 재배치했습니다. 음성·학습 로직은 그대로 유지했습니다.
v9.7.3 · Flower Lead꽃 진행을 말하기 버튼 위로 이동
말하기 횟수 꽃 3개를 중앙 말하기 버튼 바로 위로 이동했습니다. 듣기·내목소리는 한 줄에 유지하고, 꽃 진행 → 말하기 → 기억평가 → 문장일치도 순으로 학습 흐름을 재정렬했습니다.
v9.7.2 · Button Harmony듣기·말하기·내목소리 버튼 균형 조정
내목소리 버튼을 듣기 버튼과 같은 직사각형 규격으로 통일했습니다. 세 버튼 줄 전체를 3px 아래로 이동하고, 말하기 버튼은 추가로 5px 더 내려 세 버튼의 시각적 균형을 조정했습니다.
v9.7.1 · Match Stack문장일치 분석자료 정렬 · 마이크 상향
연습화면에서 문장일치 분석자료를 문장일치도 카드 바로 아래에 고정 배치했습니다. 인식 결과·단어별 분석·인식 오류 건너뛰기를 한 묶음으로 정리하고, 중앙 말하기 마이크 버튼은 메인카드 쪽으로 더 위로 올렸습니다.
v9.7.0 · Frame Gallery캐릭터 테두리 장식 선택 기능
내 캐릭터 변경창에 현재 캐릭터와 같은 크기의 원형 테두리 슬롯을 추가했습니다. 테두리 원을 누르면 장식 갤러리가 열리고 기본 링·꽃잎·골드·보석·밤빛·민트 프레임을 선택해 즉시 캐릭터에 적용하고 저장할 수 있습니다. 캐릭터 이미지와 프레임 선택은 독립적으로 관리되며, 향후 성과 보상·이벤트·유료 아이템 속성을 붙일 수 있는 구조를 유지합니다.
v9.6.4 · Practice Microtune연습화면 미세 위치·본문 크기 보정
No 카운터를 기존 위치에서 3px 더 위로, 홈 버튼을 2px 위로 이동했습니다. 카테고리 옆 ‘- 새 문장’ 글자를 더 크게 키우고, 본문 일본어 문장은 카드 크기를 유지한 채 두 단계 작게 조정해 긴 문장의 줄바꿈 여유를 확보했습니다.
v9.6.3 · Practice Rail연습화면 상단·조작 순서 정렬
홈 버튼을 캐릭터 원형의 상하 중심선에 맞추고, 설정 삼선을 3px 위로 보정했습니다. NO 표기는 No로 정리하고 카운터를 2px 위로 이동했습니다. 메인카드 아래 흐름은 듣기·말하기·내목소리 → 기억평가 3버튼 → 문장일치도 순으로 재배치했습니다.
v9.6.2 · Practice Dock연습화면 상단·조작부 위치 보정
계급 아이콘과 닉네임을 아주 조금 아래로 내리고, NO 카운터는 약 한 글자 폭만큼 왼쪽으로 이동했습니다. 연습화면 메인 타이틀을 홈화면과 같은 크기 체계로 맞추고 설정 삼선을 캐릭터 원형의 상하 중심선에 정렬했습니다. 듣기·말하기·내목소리 조작부는 메인카드 바로 아래에 붙도록 간격을 다시 정리했습니다.
v9.6.1 · Header Balance홈·연습 상단 정렬과 하단 공간 재배분
캐릭터와 닉네임 사이에 아주 작은 간격을 두고, 홈과 연습의 메인 타이틀을 확대해 캐릭터 원형 이미지의 상하 중심선에 맞췄습니다. 설정 삼선도 같은 중심선에 맞춰 우측 안전 여백까지 이동했습니다. 카테고리·새 문장·긍정·부정 라벨의 가독성을 키우고, 조작 버튼 묶음 전체를 위로 당겨 하단 잘림을 줄였습니다.
v9.6.0 · Practice Flowline연습화면 정보·조작 흐름 재배치
캐릭터와 닉네임을 좌측으로 밀착하고 NO 카운터를 우측 하단으로 이동했습니다. 새 문장 상태는 카테고리 옆의 작은 라벨로 통합하고, 학습 흐름을 듣기·말하기·내목소리 → 기억평가 3버튼 → 꽃 진행 3개 → 문장일치도 순으로 재배치했습니다. 주간 화면은 파스텔 1~4단계 농도로 계층을 정리했습니다.
v9.5.2 · Frame Socket캐릭터 장식 프레임 슬롯 도입
내 캐릭터의 둥근 테두리를 단순 CSS 선이 아니라 교체 가능한 장식 아이템 슬롯으로 분리했습니다. 기본 무료 프레임을 적용하고, 향후 성취 보상·이벤트·유료 장식 프레임을 프레임 ID와 자산만 추가해 교체할 수 있도록 저장 구조와 확장 API를 준비했습니다.
v9.4.4 · Chronicle Archive개발 연대기 전체 복원
공식 개발 시작일인 2026.09.23부터 오늘까지 흩어져 있던 주요 작업, 기준본 변경, 오류, 롤백, 설계 결정을 앱 내부 개발일지와 CHANGELOG.md에 날짜별로 복원했습니다. 이후 새 버전마다 같은 기록을 계속 누적합니다.
v9.4.3 · Chronicle Seed개발일지 기능 시작
설정 메뉴 맨 아래에 글자형 ‘개발일지’ 링크를 추가하고 날짜별 카드로 개발 역사를 확인할 수 있게 했습니다. ZIP 안에도 CHANGELOG.md를 함께 보관하는 이중 기록 방식을 시작했습니다.
v9.4.2bu-f12레벨테스트 판정 흐름 안정화
일본어 음성이 끝난 뒤에만 답변을 선택할 수 있도록 수정하고 TTS 시작 대기시간을 6초로 조정했습니다. 초급 조기 종료 진행률과 초급 5번 문항 난이도도 정리했습니다.
f9 → f11결과 단계 명칭 정리
결과 화면의 단계명을 초급(설렘) · 중급(익숙함) · 고급(자유로움)으로 정리하고, ‘설렘’을 다시 ‘초급 1’로 바꾸던 오래된 자동 치환 충돌을 제거했습니다.
f4 → f8레벨테스트 화면 재정비
레벨테스트를 앱·휴대폰 테마와 분리해 밝은 화면으로 정리하고, 파스텔 단계 색상과 Galaxy S25 Ultra 기준 문제 화면의 세로 공간을 조정했습니다.
안정화 · 복귀 · 성취 연출
v9.4.2bu안정 기준점 재확정
현재 단계의 학습·복습 기록만 초기화하고 레벨테스트 결과, 현재 단계, 다른 단계 기록과 설정은 보존하는 정상 작동 기준본으로 다시 고정했습니다.
v9.4.2bq → bu전체 블러 기준과 초기화 구조 정리
문장 학습 화면은 히라가나·뜻·긍정·부정까지 전체를 블러 처리하고 정답 보기에서 함께 공개하는 방향으로 고정했습니다. 이후 초기화 기능은 BU에서 현재 단계만 안전하게 초기화하도록 정리했습니다.
f1 → f25문장 성공 축하 이벤트
오늘 새 문장 5개를 완료하면 빰빠라와 꽃가루가 자동 실행되도록 추가했습니다. 중앙에서 터지는 꽃가루와 축하 메시지를 도입하고, 메시지는 효과가 끝난 뒤 나타나도록 순서를 조정했습니다.
f3장기 미접속 복귀모드 정돈
밀린 복습을 하루 최대 5개씩 나누고 다음 날 이어서 처리하도록 복귀 흐름을 정리했습니다. 취소 시 복귀 큐와 상태가 함께 복원되도록 보강하고 활동 시각 저장도 보완했습니다.
BV · BW · BX커스텀 초기화 확인창 실패와 롤백
예쁜 초기화 확인창을 적용하는 과정에서 버튼 먹통과 오버레이 충돌이 반복되었습니다. 해당 실험은 모두 폐기하고 정상 작동하던 BU의 기본 확인 방식으로 복귀했습니다.
설계 기록복습 정보·레이아웃·블러 세부 점검
복습 경과일 표시, 오늘의 브리핑, 홈·연습 화면 위치 조정, 온보딩 대상 강조와 블러 방식 등을 점검했습니다. 아직 검증되지 않은 변경은 기준본으로 승격하지 않는 원칙을 재확인했습니다.
레벨테스트 · 보상 · 사용자 정보
v9.4.2aw 계열레벨테스트 핵심 규칙 확정
초급 5문항과 중급 5문항의 10문항 듣기 진단을 확정했습니다. 초급 5/5 실패 시 중급 생략, 중급 0~2 정답은 중급, 3~5 정답은 고급으로 배정하고, 다시 듣기는 최대 2회, TTS 실패는 오답 처리하지 않는 원칙을 적용했습니다.
설계 기록닉네임·진도 계급 구상
캐릭터 옆에 닉네임을 표시하고, 학습 진도에 따라 계급 아이콘을 붙이는 방향을 설계했습니다. 다른 사용자가 캐릭터를 눌렀을 때 닉네임·학습 언어·단계 등을 보여주는 확장 아이디어도 정리했습니다.
기준본 복귀 · 테마 · 수익화
v8.5안정 기준본으로 롤백
v9.4.6~v9.4.8에서 시도한 카드 상태·헤더·캡 UI 변경을 모두 폐기하고, 정상성이 확인된 v8.5를 기준으로 필요한 기능만 다시 검증해 올리기로 결정했습니다.
폐기 기록v9.4.6 ~ v9.4.8 UI 실험 폐기
카드 탭, 헤더, 상단 캡 형태와 관련된 색상·레이아웃·CSS 실험이 안정성을 해쳐 전부 폐기했습니다. 이후에는 한 번에 많은 변경을 하지 않고 기준본에서 차근차근 올리는 방식을 채택했습니다.
테마 설계주간 블루 6단계 팔레트 확정
배경 #EAF5FF부터 주요 버튼 #2698EA까지 6단계 블루 파스텔 체계를 정하고, 주간에는 선택 테마를 사용하되 야간에는 자동 야간 모드로 전환하는 원칙을 확정했습니다.
사업 검토무료 출시와 수익화 방향 검토
무료 버전의 비용 구조와 구독·광고·프리미엄 기능 등 수익화 가능성을 검토하고, 스토어 등록과 PWA 설치 방식도 함께 정리하기 시작했습니다.
학습 원칙 · 서버 구조
학습 시스템새 문장 3회·복습 1회 원칙 확정
새 문장은 본문과 답변을 각각 3회 발음해 클리어하고, 복습 문장은 1회 발음 후 기억 여부를 판단하는 기본 학습 흐름을 확정했습니다.
복습 시스템복습 몰림 방지와 장기 복귀 개념 설계
복습 문장이 한꺼번에 몰리지 않도록 5개 단위로 재분배하고, 오래 쉬었다 돌아온 사용자는 최근 학습 지점에서 재개하면서 밀린 복습을 나눠 받는 복귀모드 방향을 설계했습니다.
백엔드Cloudflare Workers + D1 구조 진행
Worker ‘malhaebwa-api’, D1 ‘malhaebwa-prod’, 바인딩 ‘DB’를 기준으로 users, user_courses, sentence_progress, daily_study_stats, user_settings 구조를 준비했습니다.
로그인 정책15일 게스트 사용 원칙 확정
첫 사용일부터 15일 동안 게스트 사용을 허용하고, 익명 guest ID로 먼저 저장한 뒤 로그인 시 기존 데이터를 안전하게 이전·병합하는 정책을 확정했습니다.
음성 · 학습카드 안정화
초기 안정화음성인식과 문장 일치도 반복 점검
마이크 토글, 음성인식, 문장 일치도 반응을 반복 점검했습니다. 0% 고정, 낮은 일치도, 일부 버전의 83% 고정 같은 현상을 추적하며 정상 작동 조합을 찾았습니다.
UX 결정‘천천히’ 제거와 ‘내 목소리’ 강화
학습 화면의 ‘천천히’ 버튼은 제거하고, 원음과 자신의 발음을 비교하는 ‘내 목소리’ 기능을 더 크게 유지하는 방향을 확정했습니다.
초기 화면 · 학습카드
초기 제작홈·연습 화면 구조 다듬기
홈 화면과 연습 화면의 카드, 버튼, 헤더, 학습 진행 표시를 반복 수정하며 모바일 중심의 기본 화면 구도를 잡았습니다.
학습카드질문·긍정·부정 구조와 발음 흐름 정리
질문 문장과 긍정·부정 답변을 한 카드 안에서 학습하는 구조를 다듬고, 듣기·말하기·발음평가가 자연스럽게 이어지는 흐름을 점검했습니다.
웹앱 · 배포 · 브랜딩
웹앱/PWA브라우저 기반 앱 배포 테스트
웹앱을 실제 주소로 배포하고 PWA 설치, 아이콘, 모바일 실행 방식을 점검했습니다. 브라우저 저장만으로는 기기 간 동기화가 되지 않아 향후 로그인과 클라우드 저장이 필요하다는 점도 확인했습니다.
브랜딩‘말해봐 일본어’ 방향과 타이틀·아이콘 정리
앱의 목표를 ‘일본어를 공부하는 앱’보다 ‘실제로 입을 열어 말하게 하는 앱’으로 분명히 했습니다. 모던 미니멀 타이틀과 심플한 앱 아이콘 방향을 확정했습니다.
확장 구상한국어판과 공통 엔진 방향
일본어 학습 앱과 일본인이 쓰는 한국어 회화 앱을 같은 엔진에서 전환할 수 있도록 하고, 이후 중국어·대만어 등으로 확장 가능한 구조를 구상했습니다.
공식 개발 시작
Day 1‘말해봐 일본어’ 본격 제작 시작
실제 일본어 회화를 익히기 위한 앱을 직접 만들어 보기로 하고 첫 프로토타입 제작을 시작했습니다. 듣기, 말하기, 음성인식, 발음 확인, 학습 기록을 한 앱 안에 묶는 것이 출발점이었습니다.
초기 목표“공부보다 말하기” 원칙 설정
문법 설명을 많이 읽는 앱보다 사용자가 직접 문장을 듣고 입으로 말하게 만드는 것을 핵심 목표로 삼았습니다. 이후 모든 학습 시스템과 UI 판단의 기준이 된 출발 원칙입니다.