read

작년 5월부터 Emacs를 사용하기 시작했다.

첫 아이가 태어나고 아내와 함께 조리원에서 지내야 했던 것이 계기가 되었다. 조리원에 있는 컴퓨터에서 재택근무를 하려고 했었는데, 공용 컴퓨터에 개발환경을 셋팅하고 회사의 소스코드 등을 저장해놓는 것이 영 마음에 들지 않았다. 그래서 로컬 컴퓨터에 설치하고 내려받는 내용들이 가장 적은 방식으로 개발환경을 꾸미고 싶었다. 그래서 선택한 것이 회사에 개발서버를 셋팅해놓고, ssh로 터미널 접속을 해서 개발을 하는 것이었다. 처음에는 vim을 사용했었는데, 플러그인 없이 기본 셋팅으로 개발을 하려니 영 속도가 붙지 않았다. 그러다가 생각난 것이 Emacs였다. Emacs에서 Python을 개발하기 위한 환경을 갖추고 개발을 시작하는데, 꽤 작업할만 했다.

그렇게 점차 하나둘씩 활용도를 늘려가서 지금은 Emacs와 Jekyll로 블로깅도 하고 Org mode로 기록도 하고, MoinMoin 위키용 Major mode도 만들어서 위키 수정도 Emacs에서 하고 있다.

Emacs를 사용하면서 많은 부분에 감탄하게 된다.

첫번째로는 에디터를 해킹이 가능한 구조로 만들었다는 점이다. 요즘 나오는 웬만한 에디터들은 기본적으로 플러그인 구조를 채택하고 있지만, Emacs는 설정을 통해 코어 기능까지 변경할 수 있을만큼 플러그인 그 이상의 자유도를 허용한다.

두번째로는 살아있는 시스템이라는 점이다. Emacs 자체가 Lisp REPL 환경이다. 그래서 일종의 라이브 코딩을 할 수 있는 환경이 된다. 이는 마치 Smalltalk가 언어이기도 하지만 IDE이기도 하며 살아있는 시스템인 것과 같다. 에디터 어디에서나 특정한 내부 변수의 현재 값이 무엇인지 들여다볼 수도 있고, 수정할 수도 있고, 함수를 실행하거나 재정의할 수도 있다. 곧바로 디버깅을 해볼 수도 있다. 소프트웨어 개발을 하는 방법으로서 꽤 신선한 경험이었다.

세번째로는 텍스트를 사용하는 대상이라면 어떤 것이든 적용 가능하다는 점이다. 컴퓨터를 사용하는데 가장 기본적인 활동 중 하나인 텍스트를 다루는 작업에 대해 다양한 편의기능을 제공하기 때문에, 또 다양한 모듈들을 통해 확장이 가능하기 때문에, 텍스트를 다루는 작업에 Emacs를 사용하려고 시도하게 된다.

구체적인 예로, 개인적으로 자료를 정리하는데 MoinMoin 위키를 웹에 띄워놓고 사용한다. 자료 정리를 하다보면 페이지가 길어지기도 하고, 여러 마크업 표식들을 작성하게 된다. 그런데 웹 브라우저가 지원하는 Textarea는 편집기로서 엉망이다. Syntax highlighting은 차치하고, bullet list item을 편집할 때 엔터를 쳐도 다음줄 bullet이 자동으로 입력된다던지 하는 입력 편의기능도 하나도 없고, 실수로 backspace 키를 누르다가 이전 페이지로 이동해버려 작성해둔 내용을 모두 날리는 경우도 있다.

그래서 개인적으로 사용할 위키용 major mode를 작성하기도 했다. XML-RPC로 페이지의 모든 목록을 가져오고, 기존 페이지를 편집하기도 하고 새 페이지를 작성하기도 한다. 편집 도중에는 당연히 Emacs의 강력한 편집기능과 여타 mode들의 도움을 받아 편리하게 작성하고, 저장 키를 누르면 다시 XML-RPC로 원격 위키에 저장한다.

Java를 사용할 때는 Eclipse를 사용하고, 메일을 쓸 때는 다른걸 사용하고, 노트를 쓸 때는 Notepad++를 사용하고, 이렇게 서로 다른 편집기를 사용하던 것과는 다른 사용자 경험을 준다.

그래서 이것 저것 점점 Emacs 안에서 해결할 수 있는 방법을 찾게 된다. UML도 예전에는 GUI 도구를 사용했다면 이제는 PlantUML 언어로 텍스트를 작성한 후 랜더링하는 방식으로 처리한다던지. 거기에 Org babel을 같이 사용하면 금상첨화다.

Org mode와 Org babel은 텍스트를 주로 사용하는 Emacs에 날개를 달아주는 기능이다. Literate programming을 가능하게 해준다. IPython이 python을 사용한 분석 쪽에서 센세이션을 일으켰는데, Emacs는 그보다 훨씬 이전부터 literate programming을 지원하고 있었던 것이다.

다섯번째로는 이식성이 뛰어나다는 점이다. 많이 사용하는 대부분의 OS에서 동작하고, 심지어 GUI 뿐 아니라 터미널 환경에서도 거의 무리없이 동작한다. 터미널에서도 화면에 팝업으로 등장하는 코드 인텔리전스까지 약간의 모양 차이는 있어도 거의 동일하게 사용할 수 있다. 설정파일도 Emacs Lisp 구문이기 때문에 git으로 관리할 수 있다.

그래서 회사 업무용으로 사용하는 MacOS에서도, 집에서 사용하는 Windows에서도, 리눅스 터미널 환경에서도 동일한 패키지와 동일한 키 바인딩 등, 사용 경험이 같게 된다.

Youtube에 올라와 있는 Emacs 사용자 모임 발표 영상 주제 중 하나가 ‘평생에 걸쳐 사용하는 편집기 (Lifelong Editor)’였다. 1980년대에 처음 등장해서 30년이 넘게 살아남은 에디터이고, 그만큼 평생의 동반자로 가꿔가면서 사용할만하다는 이야기였다.

당연히 Emacs도 단점이 존재한다. 대표적으로는 Full featured IDE로서는 아쉬운 부분들이 있다. Java 구문을 의미적으로 이해하지는 못하기 때문에 Eclipse처럼 리팩토링 기능이 강력하지 못하다. 또 아무래도 지금 핫한 TextMate니 Sublime이니 Atom이니 하는 에디터들보다는 트렌디한 플러그인은 지원하지 않을 수도 있다. 하지만 살아있는 환경이라는 점 등, Emacs가 가지고 있는 독특함이 있고, 그것이 Emacs를 포기하기에는 아쉬운 점이다.

아마도 나는 앞으로도 계속 Emacs의 활용도를 넓혀가게 될 것 같다.

Blog Logo

Jeongsoo, Park


Published

Image

오름직한 동산

Think globally, act locally

Back to Overview