테크트리(TechTree)

Making of NewSwipe - Part 4: 잘 고치기보다 잘 참아야 하는 자동 수정 본문

NewSwipe/NewSwipe 정보

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 자동 수정을 만들며 고민한 과정이었습니다.

모든 오타를 완벽하게 고치지는 못하지만, 적어도 의도적으로 친 말은 거의 망가뜨리지 않아서 마음 놓고 켜 둘 수 있는 자동 수정을 목표로 했습니다.

다음 글에서는 쓸수록 나에게 맞춰지는 학습 기능과, 내가 치는 글자를 모두 보는 키보드가 개인정보를 어떻게 다루는지 이야기해 보겠습니다.

Comments