2026. 1. 24. 05:12ㆍAI Product Building/HalloGerman
이 글의 핵심
- 독일어 학습 앱에서 필기 입력을 타이핑과 분리한 이유
- Android에서 필기 입력을 안정적으로 구현하기 위한 설계 기준
11편에서 타이핑 기반 쓰기 학습을 다뤘다면, 이번 12편에서는 두 번째 쓰기 학습 방식인 필기 입력을 다룬다.
HalloGerman에서 필기 학습은 ‘보조 기능’이 아니라, 특정 사용자에게는 가장 강력한 기억 강화 도구다. 다만, 이 기능은 반드시 분리해서 설계해야 한다.
1. 필기 학습은 왜 별도 기능이어야 할까
많은 학습 앱들이 타이핑과 필기를 하나의 쓰기 기능으로 묶는다. 하지만 실제 사용성은 전혀 다르다.
- 타이핑은 빠르고 반복에 적합하다
- 필기는 느리지만 기억에 오래 남는다
- 사용자 선호도가 극단적으로 갈린다
이 차이를 무시하고 하나로 묶으면, 결국 둘 다 어중간해진다. 그래서 HalloGerman에서는 필기 학습을 완전히 분리된 단계로 설계했다.
2. 필기 입력의 현실적인 한계
필기 입력은 학습 효과는 높지만, 기술적으로는 매우 까다롭다.
- 손글씨 인식 정확도 문제
- 기기별 성능 차이
- 사용자 필체 편차
특히 외국어 학습에서는 필기 인식 오류가 학습 스트레스로 직결된다. 그래서 이 기능은 ‘정답 판별’보다 쓰기 행위 자체에 초점을 맞췄다.
3. HalloGerman의 필기 학습 설계 원칙
필기 학습을 구현하면서 정한 원칙은 명확하다.
- 인식 정확도를 강제하지 않는다
- 틀림을 오류로 취급하지 않는다
- ‘써보는 경험’을 최우선으로 둔다
즉, 필기 학습은 검사(test)가 아니라 연습(practice)다.
4. 필기 입력 UI 구조
필기 입력 화면은 손글씨에 집중할 수 있도록 단순하게 구성했다.
- Canvas 영역 (손글씨 입력)
- 지우기 버튼
- 다음으로 이동 버튼
텍스트 입력 필드나 자동 변환 결과는 의도적으로 노출하지 않았다. 필기의 목적은 ‘보여주기’가 아니라 ‘기억 강화’이기 때문이다.
4-1. Canvas 기반 필기 입력 코드 예시
override fun onTouchEvent(event: MotionEvent): Boolean {
val x = event.x
val y = event.y
when (event.action) {
MotionEvent.ACTION_DOWN -> path.moveTo(x, y)
MotionEvent.ACTION_MOVE -> path.lineTo(x, y)
}
invalidate()
return true
}
// Compose Canvas에서 MotionEvent를 직접 처리한다.
// 필기는 "그려지는 것"과 "학습 완료 여부"를 분리한다.
.pointerInteropFilter { event ->
when (event.actionMasked) {
MotionEvent.ACTION_DOWN -> {
currentPath.moveTo(event.x, event.y)
true
}
MotionEvent.ACTION_MOVE -> {
currentPath.lineTo(event.x, event.y)
true
}
MotionEvent.ACTION_UP -> {
// 하나의 획(stroke)이 끝났다고 판단
paths.add(Path().apply { addPath(currentPath) })
currentPath.reset()
true
}
else -> false
}
}
이 방식은 정교한 손글씨 인식보다 ‘직접 쓰는 행위’에 집중할 수 있게 해준다.
5. 필기 결과를 저장하지 않은 이유
처음에는 필기 결과를 이미지로 저장하는 방식도 고민했다. 하지만 곧 한계가 명확해졌다.
- 저장 데이터 용량 증가
- 학습 효과 대비 유지 비용 증가
- 개인정보·보안 이슈
그래서 HalloGerman에서는 필기 결과를 서버나 로컬에 저장하지 않는다. 필기 학습은 그 순간의 학습 경험으로 충분하다고 판단했다.
6. 타이핑 학습과 필기 학습의 역할 분담
쓰기 학습은 하나지만, 역할은 명확히 다르다.
- 타이핑 → 정확한 철자 훈련
- 필기 → 기억 강화 및 집중
이 두 가지가 분리되어 있기 때문에, 사용자는 자신의 학습 성향에 맞게 선택할 수 있다. 이 선택권이 학습 지속성을 만든다.
7. 필기 학습이 다른 기능과 연결되는 방식
필기 학습은
- 플래시 카드 암기
- 말하기 학습
- 홈 화면 진도 모니터링
과 함께 작동하며, 단어를 여러 감각으로 반복 노출시킨다. 이 다중 자극이 장기 기억 형성에 결정적인 역할을 한다.
8. 다음 편 예고
다음 13편에서는 쓰기·말하기와 연결되는 플래시 카드 기반 암기 기능을 다룬다. 단어를 ‘외우게 만드는 구조’를 어떻게 설계했는지 설명할 예정이다.
참고 자료
- Android MotionEvent 공식 문서
https://developer.android.com/reference/android/view/MotionEvent - Android Custom View 가이드
https://developer.android.com/guide/topics/ui/custom-components
'AI Product Building > HalloGerman' 카테고리의 다른 글
| [독일어 학습 앱 개발기 14편] 복습 로직 설계 – 왜 단순 반복 학습은 실패하는가 (1) | 2026.01.26 |
|---|---|
| [독일어 학습 앱 개발기 13편] 플래시 카드 암기 기능 – 단어를 ‘외우게 만드는’ 구조 설계 (0) | 2026.01.25 |
| [독일어 학습 앱 개발기 11편] 쓰기 학습 ① 타이핑 입력은 왜 가장 먼저 구현했을까 (0) | 2026.01.23 |
| [독일어 학습 앱 개발기 10편] 읽기 학습과 음성 인식은 왜 분리했을까 – 사용자가 말한 단어를 처리하는 구조 (0) | 2026.01.22 |
| [독일어 학습 앱 개발기 9편] 말하기 학습 구현 – Android 음성인식(STT)을 실제 서비스에 적용하는 방법 (0) | 2026.01.21 |