Emacs에서 hanspell-cli로 한국어 맞춤법 교정 삽질기 (feat. Antigravity CLI)

AI, Emacs, Emacs Lisp // 2026년 07월 23일 작성

Emacs에서 글쓰기 환경을 만들어 놓고 꽤 오래 쓰고 있는데 이 환경은 여느 블로그 글쓰기 환경과 비교해서 압도적으로 편하고 가볍다. 그저 이미지 끌어다 놓기로 이미지를 올리던 기능이 고장 나서 그걸 못 쓰고 있다는 점 정도만 빼면 그야말로 완전체에 가깝다. 그야 오랜 기간 개인 취향에 맞게 여러 손질(?)을 당해왔으니 당연하다.

하지만 딱 하나 부족한 게 있었다면 바로 한국어 맞춤법 교정이다. 티스토리든 네이버 블로그든 글을 올리기 전에 꼭 맞춤법 검사를 해서 교정을 하고 올리는데 이건 글쟁이의 의무라고 생각하기도 하기 때문이다. 하지만 Emasc에서는 적절한 맞춤법 검사기가 없었다. 해봤자 hunspell 정도가 있는데 단어 단위 교정만 가능하지 한국어 맞춤법 교정기는 아니었다.

그러다 최근 알게 된 것이 바로 hanspell이다. 특히 여기에 포함되어 있는 hanspell-cli는 네이버나 다음의 맞춤법 검사기를 터미널에서 사용할 수 있게 만들어 놨는데 Emacs에서 한국어 맞춤법에 대한 갈증을 제대로 해소해 준 물건이었다. 이런 좋은 도구를 만들어 준 것에 정말 무한 감사를 드리고 싶다.

하지만 터미널에서만 쓰다 보니 약간의 불편함이 있긴 했었다. 커맨드와 파일 이름을 직접 입력했어야 했으니 말이다.

그래서 약간의 개선을 해보기로 했다. Emacs에서 익숙한 방식으로 그것도 편집 중인 버퍼를 대상으로 약간은 자동으로 동작하도록 말이다.

1차 개선

그리하여 만들어진 게 아래와 같은 Emacs Lisp 코드다.

(defun seorenn/hanspell-current-file ()
  (interactive)
  ;; (require 'multi-term)
  (let ((buffer (make-term "*hanspell*"
                           "/bin/zsh"
                           nil
                           "-c"
                           (concat "tput reset; cat " (buffer-file-name) " | hanspell-cli 2>&1 > /dev/null | grep -- '->'"))))
    (display-buffer-in-side-window
     buffer `((window-height . ,multi-term-dedicated-window-height)))
    (select-window (get-buffer-window buffer))
    (evil-force-normal-state)))

위 코드는 그냥 터미널 팝업을 띄워서 현재 버퍼 파일 경로를 이용해 hanspell-cli를 실행시키는 게 전부다. 그러니까 그저 터미널에서 커맨드를 직접 입력하는 것만큼은 도와줄 수 있는 코드다.

참고로 마지막 줄의 evil-force-normal-state는 evil 혹은 Doom Emacs를 쓴다면 입력 모드로 전환되어 있을 수 있기 때문에 이를 노멀 모드로 바꿔주는 의미라서 상황에 따라 불필요할 수도 있다.

이렇게 함수는 만들었지만 그냥 함수를 호출해서 쓰는 건 당연히 아니었다. Doom Emacs에 맞는 식으로 단축키를 바인딩해서 사용했다. 따라서 Emacs 안에서는 단축키를 이용해 굉장히 빠르게 한국어 맞춤법 제안을 볼 수는 있었다.

한동안은 이 함수 하나로도 잘 견뎠다. 글이 길지 않거나 자주 쓰지 않는다면 이 정도로도 충분히 의미 있는 작업을 할 수도 있었으니 말이다. 다시금 hanspell-cli 제작자 분께 감사를 표하고 싶다.

물론 그럼에도 일부 불편함은 여전히 남아있었다. 가장 큰 단점은 제안 내용을 직접 손으로 수정해야 했다는 점이다. 단지 Emacs 내부에서 윈도우를 옮겨서 제안 내용을 선택해서 복사해서 붙여 넣을 때는 좀 더 빠르게 작업할 수는 있었지만 선택하는 것 자체는 마우스가 더 편한 일이라 역시 별 이점이 없었다.

특히 긴 글을 쓰게 되어 제안 내용이 많아지게 되면 일일이 필요한 것만 골라서 적용하는 것도 꽤나 인력과 시간을 잡아먹는 일이 되었다.

그래서 이대로는 안 되겠다는 생각으로 이어졌다.

2차 개선: sr-hanspell-mode

이대로는 뭔가 더 좋은 답은 사실 없었다. 그래서 아예 개인 취향에 맞는 Emacs 메이저모드 확장을 만들어 보기로 했다. 그것도 기왕 하는 김에 처음부터 끝까지 Antigravity CLI를 이용해 보기로 했다. 직접 하기엔 여러 지식이나 경험적 문제도 있었고 말이다.

그 결과물로 탄생한 것이 sr-hanspell-mode다. Emacs용 확장을 처음 만들어 본 것이라 어떻게 해야 할지를 전혀 모르는 상태에서 나온 결과물이라 좀 미숙한 점이 있을 것 같긴 하다는 건 고려하자.

이 글을 작성하던 도중 실제로 sr-hanspell-mode를 사용해 본 모습
이 글을 작성하던 도중 실제로 sr-hanspell-mode를 사용해 본 모습

이 확장을 이용하면서 이제 한국어 맞춤법 검사 결과로 나온 제안 내용을 원본 버퍼에서 찾아서 반영까지 하는 기능을 단축키로 모조리 진행할 수 있게 되었다. 너무너무 편해졌고 작업도 빨라졌다. 삶의 질을 완벽하게 개선시켜 준 놀라운 작업으로 왜 이걸 진작 하지 않았을까 후회했을 정도였다.

그나저나 AI 에이전트의 발전이 정말 눈부시다. 특히 내가 쓴 이상한 말을 찰떡같이 알아듣는 모습이 정말 놀라웠다. 한 번은 엔터를 잘못 눌러서 프롬프트를 쓰다가 중간에 잘렸는데 이것 조차 의도를 정확하게 이해하는 놀라움을 보여줬다. 물론 코드 자체를 만들어 내는 것도 훌륭했고 말이다. 문제의 원인을 추측하는 것도 꽤나 잘하는 게 이제 정말 사람이 직접 작업하는 것은 의미가 없는 게 아닌가 생각되기도 했다.

여담

원래 이 글은 저 메이저모드를 소개하는 글로써 작성하고 싶었는데 하다 보니 좀 부끄러워졌다. Emacs 메이저 모드에 대해 너무나 모르는 것도 많았다. 아니 Emacs Lisp 자체에 대해 무지한 것이 많았다. 그래서 이렇게 빙빙 돌려서 삽질기 형태의 글이 탄생하게 되었다.

이런 상황에서 좀 더 공부하는 하는 게... 물론 AI 에이전트가 한 일을 검증하는 데 있어 분명 필요하고 중요한 일인 것은 맞겠지만 그만큼 공부에 시간을 더 투자하는 것도 일부 낭비가 있는 것이 아닌가 하는 생각이 들 정도다. 세상이 너무 바뀌었나 보다.

Antigravity CLI로 일을 처리한 것에 대해서는 다음 글에서 좀 더 상세히 적어볼 예정이다. 누군가에게 조금이라도 이런 글이 도움이 될 수 있다면 참 좋을 것 같다.

Seorenn Logo
Seorenn (Konrad Seo)
개발자 주제에 경제나 먹거리 관련 글을 주로 쓰는 사람