Show GN: Typescript – 한/영 키 누르기 귀찮아서 직접 만든 한·영·일 자동 판별 입력기
요약
개발자가 겪는 언어 전환 불편함을 해소하기 위해 직접 만든 자동 판별 입력기(IME)입니다. 이 입력기는 타이핑하는 문자 체계를 실시간으로 분석하여 한/영/일 언어를 자동으로 감지하고 변환합니다. 특히 영어 단어 뒤에 한국어 조사가 붙는 패턴이나 일본어 로마자 변환 등 복잡한 상황에서 높은 정확도를 보여줍니다.
핵심 포인트
- QWERTY 자판 그대로 타이핑하며 자동 언어 전환을 경험할 수 있습니다.
- 영어-한국어 조사 결합 패턴 분리 로직으로 정확도를 높였습니다.
- Rust와 mmap 기술을 활용하여 매우 낮은 인풋렉(Input Lag)을 구현했습니다.
- 특정 앱 환경에 맞춰 변환 임계값을 설정하는 등 사용자 편의성을 고려했습니다.
안녕하세요. 평소에 코딩하다가 슬랙이나 노션으로 넘어갈 때마다 한/영 키 안 눌러서 dkssudgktpdy 치고 백스페이스로 지우는 게 하루에도 수십 번씩 반복되다 보니, "그냥 내가 치는 걸 보고 입력기가 알아서 언어를 바꿔주면 안 되나?" 싶어서 직접 입력기를 하나 만들었습니다.
이름은 Typescript인데 마이크로소프트의 그 언어는 아니고요, 말 그대로 타이핑하는 문자 체계(Type + Script)를 알아서 맞춰준다는 뜻으로 지었습니다.
기존에도 오타가 나면 단축키를 눌러서 한/영을 뒤집어주는 프로그램들은 있었지만, 저는 아예 한/영 전환 키나 일본어 전환 키 자체를 머릿속에서 지우고 싶었습니다. 그래서 사후 변환 매크로가 아니라 아예 입력기(IME)로 접근했습니다.
그냥 한/영 키를 건드리지 않고 QWERTY 자판 그대로 쭉 치면, 단어 아래에 점선 밑줄로 현재 입력기가 판단한 결과를 실시간으로 보여주고 스페이스바나 구두점을 누르면 그대로 확정됩니다.
예를 들면 이런 식입니다.
dkssudgktpdy, hello world! -> 안녕하세요, hello world!
dlrjs githubdp commitgkf rjdi -> 이건 github에 commit할 거야
fltpssn ghkdlxld -> 리센느 화이팅
kyouhaiitenkidesune -> きょうはいいてんきですね
만들면서 제일 신경 썼던 부분들을 조금 공유해 봅니다.
영단어 뒤에 한국어 조사가 붙는 경우 (githubdp, commitgkf)
한국 개발자들이 채팅할 때 제일 많이 치는 패턴이 영어 단어 뒤에 조사를 바로 붙여 쓰는 건데, 단순히 단어 단위로만 영/한을 판별하니까 githubdp가 이상한 오타로 빠지거나 통째로 영어로 남는 문제가 있었습니다. 그래서 단어 뒷부분이 한국어 조사나 어미 패턴(약 30개 정도)이랑 맞고 앞부분이 유효한 영단어면 github + 에, commit + 할로 쪼개서 변환하는 분리 로직을 앞에 넣었더니 체감 정확도가 훨씬 좋아졌습니다. -
판별 방식과 일본어 한자 변환
기본 판별은 글자 3개 단위(Trigram) 출현 확률의 로그 우도 점수랑 영/한 어휘 사전 매칭, 그리고 바로 앞 단어가 어떤 언어였는지를 섞어서 점수를 매깁니다. 일본어의 경우에는 로마자를 가나로 바꾼 뒤, 스페이스바를 누르면 약 39만 개 표제어가 들어있는 IPADIC 사전 위에서 Viterbi 알고리즘을 돌리고 wordfreq 빈도 점수를 결합해서 실생활에서 많이 쓰는 한자 후보를 띄워줍니다. -
타건감을 해치지 않는 속도 (Rust + mmap)
입력기는 키를 누를 때마다 매번 개입하니까 1ms만 버벅거려도 타이핑할 때 바로 이질감이 느껴집니다. 그래서 코어 엔진은 전부 Rust로 작성했고, 단어 하나를 판별하는 decide() 함수 기준 한/영 모드는 평균 16.1µs(중앙값 8.1µs), 일본어까지 다 켜도 평균 34.8µs 정도 걸립니다. 1,500개 테스트 문장을 통째로 변환하는 데 119ms쯤 걸려서 실제 타이핑할 때 인풋렉은 사실상 없습니다.
사전 데이터도 프로세스 메모리에 다 올리면 무거워지니까 OS 페이지 캐시를 공유하는 mmap 바이너리 파일로 참조하게 만들었습니다. 덕분에 코어 DLL은 3.6MB 정도고, 한·영·일 3개 국어 팩을 다 올려도 실제 먹는 메모리는 4.7MB 안쪽입니다. -
직접 쓰면서 불편해서 넣은 예외 처리들
자동 판별 입력기를 실제로 일상에서 써보니 "안 바뀌어야 할 때 바뀌는 문제"가 제일 스트레스였습니다.
터미널에서 ls, cd, git 쳤는데 한글로 바뀌면 곤란하니까, apps.json 설정에서 windowsterminal.exe 같은 앱은 변환 임계값을 기본 0.5 대신 0.97처럼 높게 잡아서 확실한 한글 문장이 아니면 영어로 유지되게 했습니다.
입력기가 언어를 잘못 잡았을 때 Esc를 누르면 영어 -> 영어+조사 -> 한국어 -> 일본어 순으로 바뀌는데, VS Code나 Vim처럼 Esc를 숨 쉬듯 누르는 에디터에서는 이게 방해가 됩니다. 그래서 특정 앱에서는 Esc를 입력기가 가로채지 않고 바로 앱으로 넘기는 옵션을 분리해 두었습니다.
스페이스를 눌러서 단어를 확정한 직후라도 Esc를 한 번 누르면 방금 친 단어가 다음 언어로 즉시 뒤집힙니다. 그리고 똑같은 단어를 두 번 뒤집으면 입력기가 "아, 이 단어는 이 언어로 쓰는구나" 하고 개인 사전(lexicon.json)에 알아서 기억해서 세 번째부터는 안 틀립니다.
두 번 이상 쳤던 자주 쓰는 단어는 타이핑할 때 아래에 조그만 알약 모양으로 뜨는데 Tab 누르면 바로 자동완성됩니다.
설치하고 나서 typescript-config welcome을 실행하면 브라우저에서 간단한 대시보드가 열려서 쓸 언어 팩(ko, en, ja)이나 순서를 고를 수 있고, CLI에서도 typescript-config add ja 같은 명령어로 가볍게 관리할 수 있습니다.
아직 짧은 개발 약어랑 한글 오타가 우연히 겹치는 구간 같은 엣지 케이스들을 계속 다듬어 나가는 중입니다. 평소 한/영 키 누르는 게 귀찮으셨던 분들이나 다국어 자주 섞어 쓰시는 분들이 한번 써보시고, 불편한 점이나 안 되는 단어, 이슈나 PR 남겨주시면 정말 큰 도움이 될 것 같습니다. 감사합니다!
AI 자동 생성 콘텐츠
본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기