| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 드론
- 제주도 자전거 종주
- 제주도 자전거 여행
- misakax
- 드론 비행승인
- 드론 자격증
- 드론 초보자
- UX튜토리얼
- 픽셀
- DJI
- iPadOS
- 로갈리
- 드론 법
- 엘라이x
- 비행승인
- 제주도 자전거
- 드론 촬영
- 로그 엘라이
- 구글 픽셀
- 제주환상자전거길
- DJI 드론
- 드론 사진
- 제주도 자전거 일주
- 촬영허가
- DJI 신제품
- UX디자인
- 드론 서류
- 드론 법규
- 미사카x
- 드론 촬영허가
- Today
- Total
테크트리(TechTree)
Making of NewSwipe - Part 4: 잘 고치기보다 잘 참아야 하는 자동 수정 본문
Making of NewSwipe - Part 4: 잘 고치기보다 잘 참아야 하는 자동 수정
Alternative_TechTree 2026. 10. 18. 16:26안녕하세요, Alternative입니다.
2026년 한글날을 맞아, 새로운 한글 입력 시스템 NewSwipe를 출시하였습니다.
https://github.com/TechTree-Alt/NewSwipe
GitHub - TechTree-Alt/NewSwipe: Modern, lightweight, and comfortable Korean Input System.
Modern, lightweight, and comfortable Korean Input System. - TechTree-Alt/NewSwipe
github.com
이번 글에서는 NewSwipe의 자동 수정이 오타를 어떻게 찾아 고치는지, 그리고 그보다 더 중요한 "언제 고치지 않는지"를 설명하고자 합니다.
이 글의 내용은 새로운 단어 추천, 자동수정 엔진이 들어가는 NewSwipe 1.5.0 이상의 버전에 해당됩니다. 추후 버전에서 수정될 수 있습니다.
이 글은 Claude Opus 5.5의 도움을 받아 작성하였습니다.
잘하면 본전, 못하면 욕먹는 기능
자동 수정은 잘 돌아가면 있는 줄도 모릅니다. 대충 쳐도 글이 멀쩡하게 나오니까요. 그런데 맞게 친 말을 한 번이라도 엉뚱하게 바꿔 버리면 그 기억은 오래갑니다. 메신저에 '같애'라고 보냈는데 '같이'로 바뀌어 있으면 짜증이 날 수밖에 없죠.
그래서 NewSwipe의 자동 수정은 처음부터 확실할 때만 고치기로 했습니다. 처음 설치하면 꺼져 있는 것도 그래서입니다. 필요하신 분만 켜서 쓰시면 됩니다.
오타도 다 같은 오타가 아니다
오타를 고치려면 먼저 친 말과 사전 단어가 얼마나 다른지 재야 합니다. 보통은 글자를 몇 개 바꾸고 빼고 더해야 같아지는지 셉니다. 이걸 편집 거리라고 부릅니다.
한글은 여기서 한 단계를 더 거쳐야 합니다. '안녕'과 '안넝'은 글자로 보면 한 글자가 다르지만, 실제로는 ㅕ 대신 ㅓ를 친 키 하나 차이입니다. 그래서 글자를 키 단위(자모)로 풀어서 견줍니다.
- 안녕 → ㅇㅏㄴㄴㅕㅇ
- 안넝 → ㅇㅏㄴㄴㅓㅇ
그리고 실수마다 무게를 다르게 두어, 자주 하는 실수일수록 가볍게 쳤습니다.
- 가장 가벼운 실수: 같은 키를 다르게 민 것, 소리가 같은 모음 (ㄷ↔ㅌ↔ㄸ, ㅈ↔ㅊ↔ㅉ)
- 가벼운 실수: 자판에서 바로 옆 키 (ㅐ↔ㅔ)
- 무거운 실수: 엉뚱한 키, 글자를 빠뜨리거나 더 친 것
- 가장 무거운 실수: 자음 자리에 모음을 친 것
같은 키를 다르게 민 실수를 가장 가볍게 본 건 NewSwipe의 입력 근간이 밀기라서입니다. 지난 글에서 설명했듯 NewSwipe 단모음에서는 ㄷ을 오른쪽으로 밀면 ㅌ, 아래로 밀면 ㄸ이 나옵니다. 방향을 살짝 잘못 밀거나, 밀려다가 그냥 눌러 버리는 실수가 흔합니다.
옆 키도 미리 정해 둔 표를 쓰지 않고 지금 쓰는 자판 배열을 보고 계산합니다. 배열을 바꾸거나 자판을 편집하면 오타 판단도 그 배열을 따라갑니다. 그래서 NewSwipe는 배열을 바꿔도, 새로운 배열을 써도 정확하게 계산합니다.
이 부분에서 웃지 못할 버그도 있었습니다. 기본 단모음 자판은 셋째 줄 맨 왼쪽이 Shift 자리라서 ㅋ이 ㄴ 바로 밑에 오는데, 오타 판단 쪽에서는 이걸 한 칸 왼쪽으로 잘못 알고 있었습니다. 그래서 화면에서는 한참 떨어진 ㅜ와 ㄹ을 옆 키로 여기고 있었죠. 화면에 실제로 놓인 칸 위치대로 계산하게 고치고 나서야 제대로 동작했습니다.
무엇으로 고칠까
오타 후보를 찾았다고 바로 고치지는 않습니다. 몇 가지 관문을 거칩니다.
- 흔한 단어로만 고칩니다. 드문 단어로 고치면 맞게 친 말을 망치기 쉽습니다. 다만 앞 단어와 자연스럽게 이어지는 단어라면 조금 덜 흔해도 봐줍니다.
- 짧은 말은 키 하나 차이까지만 고칩니다. 두세 글자짜리 말은 키 두 개만 달라져도 전혀 다른 흔한 말이 되기 쉽습니다. '현타'가 '한다'로, '파도'가 '봐도'로 바뀌는 식이죠.
- 앞 단어를 봅니다. 추천과 같은 순위 계산을 쓰니, 문맥에 맞는 쪽으로 고칩니다.
- 애매하면 손대지 않습니다. 1등과 2등 후보가 엇비슷하면 고치지 않습니다. 사용자가 뭘 치려 했는지 모르는데 찍어서 바꾸느니 그대로 두는 편이 낫습니다.
잘못 고친 말을 모아 보니
여기까지 만들고 사람이 쓴 대화 문장으로 평가를 돌렸더니, 맞게 친 말을 잘못 고치는 일이 생각보다 잦았습니다. 그래서 잘못 고친 사례를 하나하나 모아 봤는데, 뜻밖의 사실이 드러났습니다.
잘못 고친 말은 대부분 오타가 아니었습니다.
- 같애 → 같이
- 간대 → 근데
- 망했다 → 말했다
- 화장 → 가장
다 멀쩡한 말입니다. 사전에 없었을 뿐이죠. 한국어는 활용형이 끝도 없고, 구어체는 더 그렇습니다. 사전에 없다는 이유로 오타 취급을 하니 탈이 났던 겁니다.
그래서 고치기 전에 한국어로 말이 되는지부터 따져 보게 했습니다. 사전에 없더라도 아래처럼 풀리면 그대로 둡니다.
- 더 긴 단어의 앞부분: '화장'으로 시작하는 화장실, 화장품이 사전에 많으니 아직 치는 중일 수 있습니다
- 명사 + 조사: 고민이야, 사람인듯, 친구예요
- 동사 + 어미: 사전에 있는 동사 줄기에 흔한 어미가 붙은 말
- 받침에 녹아든 어미: 간대 = 가 + ㄴ대, 갈게 = 가 + ㄹ게, 됨 = 되 + ㅁ
- 과거형: 망했다 = 망하 + 았다, 떨어졌대 = 떨어지 + 었대
- 줄여 쓴 꼴: 보내줘야 = 보내 + 주 + 어야, 힘들어져 = 힘들 + 어 + 지 + 어
특히 '간대', '갈게'처럼 어미가 앞 글자 받침으로 녹아든 말이 까다로웠습니다. 마지막 몇 글자에서 받침을 하나씩 떼어 보고, 남은 부분이 사전에 있는 동사인지 확인하는 식으로 풀었습니다.
효과는 확실했습니다. 맞게 친 말을 잘못 고치는 비율이 0.45%에서 0.22%로 절반이 됐습니다.
재미있는 일은 그다음에 일어났습니다. 잘못 고치는 일이 줄어 여유가 생기니, "흔한 단어로만 고친다"는 기준을 조금 낮출 수 있었습니다. 그랬더니 일부러 넣은 오타를 고치는 비율이 15%에서 23%로 올랐습니다. 덜 고치게 했더니 오히려 더 많이 고치게 된 셈입니다. 자동 수정은 고치는 기술보다 참는 기술이 중요하다는 걸 이때 실감했습니다.
사전에 틀린 말이 섞이면
같은 이유로 사전을 만들 때도 신경 쓴 부분이 있습니다. 구어체를 보강하려고 사람이 쓴 글(영화 리뷰 등)을 사전에 섞었는데, 사람이 쓴 글에는 '봣는데', '재밋다', '할께', '됬어' 같은 맞춤법 실수도 많습니다.
이런 말이 사전에 들어가면 자동 수정은 그 말을 "사전에 있는 맞는 말"로 알고 고치지 않습니다. 그래서 사전에 넣을 때는 이미 아는 조각으로 깔끔하게 풀리는 말만 넣고, 자주 틀리는 맞춤법은 따로 걸러냈습니다.
언제든 되돌릴 수 있게
아무리 조심해도 자동 수정은 틀릴 수 있습니다. 그래서 고쳐진 걸 쉽게 알아채고 쉽게 되돌릴 수 있게 하는 데도 공을 들였습니다.
- 미리 보기: 스페이스를 누르면 바뀔 단어가 추천란 맨 앞에 굵게 뜹니다. 누르기 전에 어떻게 바뀔지 알 수 있습니다.
- 지우기 한 번으로 되돌리기: 고친 직후 지우기 키를 누르면 처음 친 말로 돌아갑니다. 그 말은 이번에는 다시 고치지 않습니다.
- 두 번 되돌리면 배우기: 같은 말을 두 번 되돌리면 "내가 쓰는 말"로 학습해서, 그 뒤로는 더 고치지 않습니다. 한 번은 실수로 되돌렸을 수도 있으니 바로 배우지는 않습니다.
- 내 말은 그대로 두기: 학습한 단어는 물론이고, 학습한 단어에 조사가 붙은 말('민수가', '짝남이야')도 고치지 않습니다.
아직 아쉬운 점
알고리즘과 철학 특성상 부족한 부분도 있습니다.
- 한 단어에 오타가 두 개 넘게 있으면 잘 못 고칩니다. 안전하게 고치려다 보니 생긴 한계입니다.
- 띄어쓰기를 빼먹은 데다 오타까지 난 말에도 약합니다.
- 영어 자동 수정은 한국어보다 단순한 편입니다. 공은 대부분 한국어 쪽에 들였습니다.
이런 부분은 트랜스포머 모델을 가져와야 해결할 수 있을 것 같은데, 그러면 NewSwipe 철학과 정면으로 위배되기 때문에 더 좋은 방안을 계속 고민하고 있습니다.
지금까지 NewSwipe 자동 수정을 만들며 고민한 과정이었습니다.
모든 오타를 완벽하게 고치지는 못하지만, 적어도 의도적으로 친 말은 거의 망가뜨리지 않아서 마음 놓고 켜 둘 수 있는 자동 수정을 목표로 했습니다.
다음 글에서는 쓸수록 나에게 맞춰지는 학습 기능과, 내가 치는 글자를 모두 보는 키보드가 개인정보를 어떻게 다루는지 이야기해 보겠습니다.
'NewSwipe > NewSwipe 정보' 카테고리의 다른 글
| Making of NewSwipe - Part 5: 내 말버릇을 배우는 키보드와 개인정보 (0) | 2026.10.18 |
|---|---|
| Making of NewSwipe - Part 3: 한국어 단어 추천이 유독 어려운 이유 (0) | 2026.10.18 |
| Making of NewSwipe - Part 2: NewSwipe 단모음 배열의 개발 과정 (0) | 2026.10.16 |
| Making of NewSwipe - Part 1: 왜 만들었는가 (0) | 2026.10.12 |
