한글 조합이 깨지지 않는 에디터를 만드는 방법
한글로 길게 쓰다 보면 마지막 음절이 사라지거나 단어가 갈라지는 순간이 와요. 그건 오타가 아니라 에디터가 조합을 어디서 처리하느냐의 문제예요.

#가 흐리게 드러나 있고, 글자는 제목 크기와 굵기를 그대로 지켜요.한국어로 글을 쓰다 보면 이상한 순간을 만나곤 해요. 줄 끝에서 글자가 사라지고, 다른 창에 다녀오면 마지막 음절이 두 번 입력돼요. 입력하는 중에 커서가 엉뚱한 곳으로 움직이기도 하고요.
처음에는 내 실수라고 생각하기 쉬워요. 하지만 대부분 손의 문제가 아니에요. 에디터가 한글의 ‘조합’을 제대로 다루지 못해서 생겨요.
한글 한 글자를 입력하려면 자음과 모음을 여러 번 눌러야 해요. 음절이 완성되기 전까지는 화면에 보이지만 아직 확정된 글자가 아니에요. 이 상태를 조합이라고 해요.
영어에서는 드문 상태지만, 한국어를 쓸 때는 거의 항상 조합 중이에요. 그래서 조합 처리에 작은 문제가 있어도 한국어 사용자에게는 큰 불편이 돼요.
공개된 이슈만 봐도 그래요. Typora에는 macOS에서 한글 단어가 갈라져 입력되는 이슈(#4251)와 조합 중 캐럿이 튀는 이슈(#788)가 있어요. Obsidian에는 우분투에서 한글이 무작위로 누락되는 이슈(#79528), Wayland에서 한글 입력이 되지 않는 이슈(#84391), 줄바꿈 지점에서 입력이 무시된다는 포럼 글(#114224)이 있고요.
앱은 달라도 자리는 비슷했어요. 에디터가 브라우저 엔진 위에서 조합 이벤트를 다시 해석하고 있었어요.
확정되지 않은 글자는 문서에 넣지 않아요
mote의 리눅스 셸은 한글 조합을 직접 해석하지 않아요. 자음과 모음을 음절로 만드는 일은 운영체제의 입력기에 맡겨요.
조합 중인 글자는 화면에만 보여요. 음절이 확정된 뒤에야 문서에 들어가요.
이 원칙 하나로 여러 문제가 사라졌어요.
조합할 때마다 되돌리기 기록이 생기지 않아요. 자동 저장이 완성되지 않은 음절을 파일에 쓰지도 않아요. 마크다운 기능이 아직 확정되지 않은 글자를 꾸미려 들지도 않고요.
자동 저장을 생각하면 차이가 더 분명해요. 한국어를 입력하는 동안에는 잠깐 멈춘 순간에도 음절이 조합 중일 수 있어요. 조합 중인 글자가 문서에 들어간다면 반쪽짜리 음절이 저장될 수 있어요. 되돌리기를 한 번 눌렀는데 자모 하나만 지워질 수도 있고요.
조합을 문서 밖에 두면 이런 예외를 따로 처리할 필요가 없어요. 확정되지 않은 글자는 아직 문서가 아니니까요.
입력하는 동안에도 화면을 흔들지 않아요
처음에는 조합 중인 줄에서 마크다운 꾸밈을 모두 없앴어요. 안전해 보였지만 새로운 문제가 생겼어요.
제목에 한글을 입력하면 그 줄이 갑자기 본문 크기로 작아졌어요. 입력을 마쳐야 다시 제목으로 돌아왔고요. 한국어 사용자는 계속 조합하며 입력하기 때문에, 줄 높이도 쓰는 내내 오르내렸어요.
지금은 조합 중인 글자를 줄 안에 넣은 모습 그대로 계산해요. 제목을 입력하면 조합 중인 음절에도 제목 스타일이 유지돼요. 굵은 글씨 안에서 입력해도 굵기는 바뀌지 않아요. 숨겨진 마크다운 기호가 조합 중인 글자를 덮지도 않고요.
조합 중인 글자 아래에 표시되던 파란 밑줄도 없앴어요. 한글을 쓰는 내내 문장 아래가 깜빡이는 것처럼 보였기 때문이에요. 밑줄이 없어도 조합 기능은 그대로 작동해요.
이건 단순한 화면 효과가 아니에요. 글자는 모두 입력되더라도 줄이 계속 흔들리면 쓰는 흐름이 끊겨요. 화면이 조용해야 문장에 집중할 수 있어요.

** 마커가 회색으로 드러나 있고, 그 안의 '굵게'는 굵기를 그대로 지키고 있어요.“한글 지원” 대신 실제 동작을 확인해요
“한글을 지원해요”라는 말만으로는 부족해요.
글자만 입력되면 되는지, 입력하는 동안 화면도 안정적이어야 하는지 알 수 없어요. 다른 창에 다녀와도 마지막 음절이 사라지거나 두 번 들어가지 않는지도 확인하기 어렵고요.
그래서 mote는 막연한 약속을 구체적인 검사 항목으로 바꿨어요. 릴리스할 때마다 실제 입력기와 실제 화면에서 한글을 직접 입력해요. 9가지 상황에서 12개 조건을 확인하고, 결과는 스크립트가 파일로 남겨요. 최근 실행에서는 12개 조건을 모두 통과했어요.
검사 항목도 상상으로 만들지 않았어요. 다른 에디터에 공개된 한글 입력 문제와 mote에서 실제로 문제가 생길 수 있는 화면을 바탕으로 정했어요.
강조 안에서 입력할 때 커서가 움직이지 않는지 확인해요. 다른 창에 다녀왔을 때 마지막 음절이 정확히 한 번만 확정되는지도 봐요. 찾기 창에서 한글을 입력한 뒤 편집 화면으로 돌아오는 상황도 검사해요. 표의 셀, 목록 다음 줄, 제목에서도 같은 과정을 반복하고요.
검사는 구체적이에요. 예를 들어 음절을 조합하는 중에 Enter를 누르면, 완성된 음절은 첫째 줄에 남고 새로 입력한 자모만 둘째 줄로 가야 해요. ‘한’을 조합하던 중 Backspace를 한 번 누르면 글자 전체가 사라지는 대신 ‘하’가 되어야 하고요.
자모와 완성된 글자를 혼동하면 바로 실패해요.

확인하지 않은 환경은 된다고 말하지 않아요
릴리스마다 직접 확인하는 환경은 리눅스 셸의 X11과 ibus 조합이에요.
Wayland와 fcitx5는 별도의 실험 환경 8종에서 기본적인 조합 동작을 확인해요. 하지만 검사 범위가 같지는 않아요. macOS와 Windows 셸도 아직 개발 중이에요. 각 운영체제의 입력 방식은 검증을 마치기 전까지 지원한다고 말하지 않아요.
mote가 고칠 수 없는 문제도 있어요. 입력기가 새 입력창을 열 때마다 영문 모드로 시작하는 동작이 대표적이에요. 찾기 창을 닫고 편집 화면으로 돌아왔을 때 한/영 키를 다시 눌러야 할 수 있어요.
이 문제는 GTK 앱에서 공통으로 나타나고, 입력기 설정에서 바꿀 수 있어요. 우리 버그가 아닌 것을 우리 버그처럼 적지 않아요. 대신 어디에 있는 설정인지를 적어 둬요.
한글이 입력되는 에디터와 한글로 쓰기 좋은 에디터는 달라요.
앞의 것은 글자가 들어가요. 뒤의 것은 치는 동안에도 글이 흔들리지 않아요.