2019년 이후 업데이트가 끊기고 마켓에서도 내려간 밀기글(Milgeegle) 한글 입력 방식을 최신 Android에서 다시 쓰려고, 자음을 밀어서 모음을 붙이는 15키 한글 키보드 잇키(ItKey)를 새로 만들었습니다. 입력 방식, 밀기 실수에 맞춘 오타 교정, 개인정보 보호 원칙과 기술 구성을 정리했습니다.

myapps Android - IME - ItKey - Kotlin - 밀기글 - 오타 교정 - 잇키 - 키보드 - 한글 키보드

예전에 Android에서 밀기글(Milgeegle) 이라는 한글 키보드를 즐겨 썼습니다. 자음 키를 누른 채 위·아래·왼쪽·오른쪽으로 밀면 모음이 붙는 방식이라, 익숙해지면 손가락 하나로 음절을 한 번에 입력할 수 있는 독창적인 키보드였습니다.

그런데 밀기글은 2019년을 마지막으로 업데이트가 확인되지 않고, 지금은 공식 앱 마켓에서도 배포되지 않습니다. 최신 Android 환경에서 계속 쓰기 어려운 상황이 된 것이죠. 이 입력 방식이 그대로 사라지는 게 아까워서, 밀기글의 입력 방식에서 영감을 받아 최신 Android에 맞는 키보드를 새로 만들었습니다. 이름은 잇키(ItKey) 입니다.

잇키 - 밀면, 글자가 된다

잇키는 기존 밀기글의 공식 후속작이 아니며, 원 개발사와 제휴하거나 승인을 받은 제품도 아닙니다. 원본 APK의 코드·이미지·리소스는 전혀 사용하지 않았으며, 입력 엔진과 사용자 인터페이스를 처음부터 새롭게 구현하였습니다.

어떻게 입력하나

자판은 자음 14개와 ㅣㅡ 키 하나, 모두 15키입니다. 모음 키가 따로 없고, 자음을 누른 채 미는 방향이 곧 모음입니다.

 ㄱ   ㄴ   ㄷ   ㄹ   ㅁ
 ㅂ   ㅅ  [ㅣㅡ]  ㅇ   ㅈ
 ㅊ   ㅋ   ㅌ   ㅍ   ㅎ
[잇] [모드] [  스페이스  ] [엔터] [⌫]

예를 들어 ㄹ을 오른쪽으로 밀면 라, 손을 떼고 한 번 더 밀면 랴, 밀던 손가락을 ㅇ까지 끌고 가서 놓으면 랑이 됩니다. 손가락 동작 한 번으로 음절 하나가 완성됩니다.

동작 결과 예
한번밀기 ↑ ↓ ← → ㅗ ㅜ ㅓ ㅏ ㄱ→ = 가
두번밀기 (손 떼고 0.45초 안에 같은 방향으로 다시) ㅛ ㅠ ㅕ ㅑ 가 → 갸
멀티밀기 (손 떼지 않고 방향 꺾기) ㅘ ㅙ ㅝ ㅟ 등 ↑→ = ㅘ, ↓← = ㅝ
이어밀기 (다른 자음까지 끌어서 놓기) 받침 ㄱ→ 끌어 ㅇ = 강
빠르게 두 번 누르기 쌍자음 ㄲ ㄸ ㅃ ㅆ ㅉ
ㅣㅡ 키 세로 / 가로 밀기 ㅣ / ㅡ 라 + ㅣ = 래
다시 밀기 (같은 자음을 다른 방향으로) 앞 음절 모음 확장 가 + ↓ = 개, 고 + → = 과
길게 누르기 숫자·이모티콘·상용구 ㄴ…ㅎ = 1…0

키보드는 한 번의 터치를 단순히 네 방향으로만 나누지 않습니다. 손가락마다 경로를 상하좌우 구간으로 쪼개고, 꺾임 → 다시 밀기 → 도착 키를 차례로 해석합니다. 오른쪽으로 밀다가 아래로 꺾는 동작은 무시하는 식으로, 이어밀기 도중 랑이 랭으로 바뀌는 일도 막았습니다.

잇키 밀기 문법 - 한번밀기, 두번밀기, 멀티밀기, 이어밀기, 쌍자음, 모음밀기, 다시 밀기, 길게 누르기

기능 키도 밀어서 씁니다.

  • 모드 키: 밀기 한 번으로 한글·영문·숫자·기호·이모지 자판을 바로 엽니다. 같은 방향으로 두 번 밀면 하위 자판(모음판, 대문자, 기호2 등)이 열립니다.
  • ⌫ 키: 누르면 자모 단위로 지우고, ↑로 밀면 이전 단어, ←로 밀면 전체 삭제입니다.
  • 스페이스: 누르면 띄어쓰기, 밀면 커서 이동(유지하면 반복)입니다.

밀기 규칙은 코드에 박혀 있지 않고 JSON 규칙표(itkey_rules.json)에 들어 있어서, 규칙표만 고치면 동작이 바뀝니다.

처음 익힐 때 따라 해 볼 단어

설명보다 한 번 밀어 보는 게 빠릅니다. 키를 누르면 지금 손을 떼면 입력될 글자와 네 방향으로 밀었을 때의 글자가 십자 모양으로 나타나서, 처음에는 이 미리보기를 보면서 밀면 금방 익숙해집니다.

잇키 자판과 연습 과제

아래 단어를 차례로 입력해 보면 한번밀기부터 이어밀기, 멀티밀기, 쌍자음까지 한 바퀴 익힐 수 있습니다.

  1. 사랑: ㅅ → 밀기, ㄹ → 민 뒤 손을 떼지 말고 아래 ㅇ에서 놓기
  2. 강: ㄱ을 → 로 밀고 그대로 ㅇ까지 끌어 놓기
  3. 과: ㄱ에서 ↑ 민 뒤 손을 떼지 않고 → 로 꺾기
  4. 랴: ㄹ을 → 로 밀고, 손을 뗐다가 곧바로 한 번 더 →
  5. 꽃: ㄱ을 빠르게 두 번 눌러 ㄲ을 만든 뒤, ㄱ에서 ↑ 민 뒤 아래 ㅊ까지 끌어 놓기
  6. 음: ㅇ 누르기 → ㅣㅡ를 가로로 밀어 ㅁ까지 끌어 놓기

앱 설정 화면의 밀기 연습 영역에서는 키보드를 시스템에 켜기 전에도 이렇게 밀어 보면서 판정 결과와 감도를 확인할 수 있습니다.

밀기 실수를 이해하는 오타 교정

밀기글을 쓸 때 아쉬웠던 점 중 하나가 오타 교정이었습니다. 쿼티 키보드의 오타는 대개 “옆 키를 눌렀다"지만, 밀기 키보드의 오타는 “덜 밀었다”, “한 번만 밀었다”, “꺾임이 빠졌다” 같은 종류입니다. 그래서 키 사이의 거리 대신 손동작의 실수 유형에 비용을 매기는 교정 모델을 만들었습니다.

실수 유형 비용
1단계↔2단계 모음 (ㅏ↔ㅑ) 0.35
쌍자음↔평음 (ㄱ↔ㄲ) 0.35
ㅣ 누락 (ㅔ↔ㅓ) 0.40
받침 누락 0.45
멀티밀기 누락 (ㅘ↔ㅗ) 0.55
반대 방향 (ㅗ↔ㅜ) 0.75
일반 삽입·삭제 1.20

값이 작을수록 흔한 실수로 보고 쉽게 고칩니다. 교정은 네 단계로 나뉩니다.

  1. 제스처 분석 (항상, 기기 내): 두번밀기 경계나 대각선처럼 애매했던 밀기는 다른 해석 후보도 함께 남겨 두고, 그 음절의 교정 비용을 낮춥니다.
  2. 한국어 사전 (항상, 오프라인): 기기 안에 들어 있는 57,059단어 빈도 사전에서 음절 단위 편집 거리로 후보를 찾습니다. 띄어쓰기 분리, 단어 완성, 사용자 사전도 여기서 처리합니다.
  3. 기기 내 AI (지원 기기만): ML Kit GenAI Proofreading(Gemini Nano)을 씁니다. 지원하지 않는 기기에서는 사유를 설정 화면에 표시하고 사전 교정으로 대신합니다.
  4. 클라우드 LLM (기본 꺼짐, 동의 필요): OpenAI 호환 API를 쓰고, 문장 단위로 ✓ 버튼을 눌렀을 때만 전송합니다. 실시간 키 입력은 보내지 않습니다.

잇키 오타 교정 - 제스처 분석, 한국어 사전, 기기 내 AI, 클라우드 LLM과 밀기 실수 비용 모델

실제 앱 사전으로 확인한 교정 결과는 이렇습니다.

입력 결과 유형
안녕하세여 안녕하세요 자동 교정
괜찬아 괜찮아 받침 누락
고맙습니댜 고맙습니다 ㅑ↔ㅏ 단계
사랑헤 사랑해 ㅔ↔ㅐ
학교가방 학교 가방 띄어쓰기
가바 가방 · 가발 후보만 표시

아래는 실제 휴대폰에서 잇키로 입력하다가 일부러 “볼게요"를 “봉게요"로 틀려 본 화면입니다. 받침이 ㄹ 대신 ㅇ으로 들어간 실수인데, 후보 줄 맨 앞에 볼게요가 올라오고 볼께요, 뵐게요, 거요, 보네요가 뒤를 잇습니다.

실제 앱 화면 - 봉게요를 입력하자 후보 줄에 볼게요가 첫 번째로 표시된 잇키 키보드

후보 줄 양 끝에는 도구 모음 버튼이 있습니다. 왼쪽은 🎤 음성 입력, 오른쪽은 차례로 📋 클립보드, 💬 상용구, ✓ 문장 교정입니다. 자판 아래쪽에는 잇 메뉴 키, 방향마다 영문·숫자·한글·이모지가 적힌 모드 키, 밀어서 커서를 옮기는 스페이스, 엔터, ⌫가 있습니다.

기본은 후보만 추천하고, 자동 교정 모드에서도 신뢰도가 높을 때(기본 75%)만 적용합니다. 자동 교정 직후 ⌫를 한 번 누르면 원래 단어로 돌아가고, 같은 교정은 다시 하지 않습니다.

매일 쓰는 키보드로 쓰려고 넣은 기능

시연용이 아니라 기본 키보드로 일상에서 쓰는 것이 목표라, 밀기 입력 외에도 필요한 기능을 같이 넣었습니다.

  • 배치: 세로 모드는 밀기 자판 또는 쿼티, 가로 모드는 일반 쿼티나 세로형 자판을 고를 수 있습니다. 세로형 자판 두 개를 양쪽에 두고 양손으로 입력하는 분할 배치와 한 손 모드도 있습니다. 높이·너비·간격은 가로·세로를 따로 저장합니다.
  • 십자 미리보기: 키를 누르면 키보드 바깥 말풍선에 지금 입력될 글자와 네 방향 글자가 뜨고, 미는 동안 실시간으로 바뀝니다(ㄹ → 라 → 랑).
  • 밀기 감도와 연습장: 낮음·보통·높음 프리셋 또는 최소 거리, 방향 각도, 다시 밀기 간격, 두 번 누르기 시간 등을 직접 조절하고, 설정 화면의 밀기 연습 영역에서 바로 판정 결과를 확인할 수 있습니다.
  • 입력칸 인식: 입력칸 종류를 보고 숫자·전화·날짜 전용 자판, 이메일·URL용 빠른 기호, 엔터 동작(완료·다음·검색·전송)을 자동으로 고릅니다.
  • 음성 입력: 도구 모음의 마이크 버튼으로 시작하고, 기기 내 음성 인식을 우선 씁니다.
  • 상용구·클립보드: ㅁ을 길게 누르면 상용구 자판이 열립니다. 클립보드 기록은 동의한 경우에만 남기고, 고정과 자동 삭제를 지원합니다.
  • 스킨: 기본 스킨 5종과 배경·키·글자 색, 글자 크기, 모서리를 직접 바꾸는 사용자 스킨을 제공합니다.
  • 접근성: TalkBack을 켜면 키마다 사용자 지정 작업이 붙어서, 밀기 없이도 모든 글자를 입력할 수 있습니다.
  • 백업과 복원: 설정·배치·감도·스킨·사용자 사전·상용구를 파일로 내보내고 가져옵니다. API Key와 클립보드는 일반 백업에서 제외합니다.

키보드는 모든 입력을 보기 때문에

키보드 앱은 비밀번호, 메시지, 인증번호까지 사용자가 입력하는 모든 것을 봅니다. 그래서 외부로 나갈 수 있는 기능은 모두 기본으로 꺼 두고, 사용자가 명시적으로 동의해야 켜지도록 했습니다. 핵심 입력과 사전 교정은 인터넷 없이 완전히 동작합니다.

  • 보호 모드 자동 전환: 비밀번호 칸, 인증번호(OTP) 같은 민감 입력칸, 앱이 학습 금지를 요청한 입력칸에서는 클라우드 교정·학습·후보·클립보드 저장·음성 입력을 멈춥니다. 잇 메뉴에서 직접 켤 수도 있습니다.
  • 외부 SDK 없음: 광고·분석·크래시 수집 SDK를 넣지 않았습니다.
  • API Key 암호화: Android Keystore의 추출 불가능한 AES-256-GCM 키로 암호화해 저장하고, 백업과 기기 이전에서 제외합니다.
  • AI 응답 검증: 설명을 덧붙였거나 원문에서 지나치게 바뀐 응답은 거부하고, 미리보기에서 “적용"을 눌러야 반영합니다. 분석하는 사이 더 입력했다면 늦게 도착한 결과는 버립니다.
  • 진단 로그: 문제 해결용 로그에는 제스처 판정 통계나 오류만 남기고, 입력한 문장·비밀번호·API Key·클립보드·음성 원문은 기록하지 않습니다.

기술 구성

터치 처리와 한글 조합은 네트워크나 AI 응답을 기다리지 않도록 분리했습니다. 키보드는 Canvas 커스텀 뷰로 그리고, 교정·AI·저장은 코루틴으로 백그라운드에서 처리합니다.

  • 언어·플랫폼: Kotlin, InputMethodService, 최소 Android 8.0(API 26), target API 36
  • 설정 앱: Jetpack Compose, Material 3
  • 데이터: DataStore(설정), Room(상용구·클립보드·사용자 사전)
  • 네트워크: Retrofit, OkHttp, kotlinx.serialization
  • AI·음성: ML Kit GenAI Proofreading, Android SpeechRecognizer
app/src/main/java/com/isulnara/itkey/
  gesture/      멀티 포인터 제스처 엔진과 분류기
  hangul/       한글 조합기 (초·중·종성, 겹모음, 겹받침)
  rules/        JSON 규칙표 해석기
  ime/          InputMethodService, 키보드 뷰, 후보·자동 교정
  layout/       자판 배열, 입력칸 분석, 한 손·세로형·분할 배치
  correction/   한국어 사전 Trie, 교정 엔진, 사용자 사전
  ai/           ML Kit 로컬 교정, OpenAI 호환 클라우드 교정, 응답 검증
  speech/       음성 입력
  privacy/      보호 모드 정책, Keystore 비밀 저장소
  backup/       백업 형식(스키마 버전, 마이그레이션)과 SAF 입출력
  diagnostics/  내용 없는 진단 로그, 크래시 기록
  settings/     설정 모델과 Compose 설정 앱

사전은 FrequencyWords(CC BY-SA 4.0)에서 한글 단어 49,313개를 추리고, 국립국어원 한국어기초사전(CC BY-SA 2.0 KR) 표제어 중 빠진 7,746개를 보충해 만들었습니다.

마치며

밀기글은 손에 익으면 정말 빠르고 편한 키보드였는데, 업데이트가 멈추고 마켓에서 사라지면서 새 휴대폰에서는 더 이상 쓸 수 없게 되었습니다. 잇키는 그 입력 방식이 계속 쓰일 수 있도록 최신 Android 환경에 맞춰 새로 만든 키보드이고, 여기에 밀기 실수에 맞춘 오타 교정, AI 문장 교정, 가로 자판 배열, 세세한 감도 설정을 더했습니다.

밀기글을 써 보셨던 분이라면 손이 기억하는 그 느낌이 잇키에서도 살아나는지 궁금합니다. 직접 오래 써 보면서 사용 후기와 함께 다시 정리해 보겠습니다.