141: tweet overflow

플레인 텍스트의 매력과 2세대 마크다운 에디터의 한계

나는 플레인 텍스트를 좋아한다. 비단 나만 그런 것은 아니다. 프로그래머라면 대부분 플레인 텍스트를 좋아한다. 프로그래머가 아닌 사람들에게 플레인 텍스트라는 표현은 이상하게 들릴지도 모르겠다. 텍스트면 다 똑같은 텍스트이지 플레인 텍스트가 있고 아닌 게 따로 있을까. 플레인 텍스트는 일반적으로 서식이 없는 순수한 텍스트 집합을 의미한다. 미디어로서의 컴퓨터는 플레인 텍스트로부터 사람들에게 더 큰 자유를 부여하는 방향으로 가고 있는 것처럼 보이지만, 역설적으로 프로그래머들은 플레인 텍스트를 더 선호한다. 이 둘의 차이는 분명히 기술적인 문제를 내포하고 있지만, 이보다는 둘을 분리해서 바라볼 수 있는 세계관의 차이가 더 중요하다.

프로그래머는 소스 코드를 편집하고 이를 실행하는 과정에서 플레인 텍스트의 강력함에 눈을 뜬다. 플레인 텍스트의 제 1 원칙은 문자들로만 구성된다는 점이다. 프로그래밍 언어로 표현된 소스 코드는 서식을 가지지 않는다. 임의로 부여된 서식을 가지지 있지만 않지만, 텍스트 에디터는 코드를 분석하고 자동적으로 품사 별로 색을 입혀준다. 이 기능을 코드 하이라이팅이라고 부른다. 무미건조한 텍스트의 나열일 뿐인 코드가 화려해보이는 이유는 여기에 있다. 또한 플레인 텍스트는 범용적이다. 문자로만 구성된 문서는 어디에나 저장할 수 있고, 어떤 텍스트 에디터로도 편집할 수 있다.

텍스트 에디터 위의 소스 코드(플레인 텍스트)는 어떤 서식보다도 화려하다.

텍스트 에디터 위의 소스 코드(플레인 텍스트)는 어떤 서식보다도 화려하다.

이러한 범용성 덕분에 텍스트는 서로 다른 도구들 간의 가교 역할을 한다. 명시적인 프로토콜이 결정되어있지 않더라도 텍스트를 전달한다는 것을 보장함으로서 데이터를 처리할 수 있다. 그래서 플레인 텍스트의 제 2 원칙은 플레인 텍스트를 다루는 애플리케이션은 플레인 텍스트로 입력으로 받고 플레인 텍스트로 출력해야한다는 점이다. 오직 플레인 텍스트로 소통하는 타입 없는 평면적인 세계.1 GUI에만 익숙한 사람들에게 명령어를 직접 입력하고 텍스트밖에 출력되지 않는 CUI 환경은 부족해보일지 모르지만, CUI의 본질적인 강력함은 플레인 텍스트라는 전제를 공유함에 기반한다. 플레인 텍스트를 이해하지 못 한다면 CUI는 영원한 미스터리로 보일 것이다. 플레인 텍스트의 강력함은 프로그래머를 둘러싼 세계관이자, 세계 그 자체인 것이다.2

이러한 강력함으로부터 프로그래머들은 심지어 소스코드가 아닌 글도 플레인 텍스트로 작성하려고 한다. 그렇다고 서식을 버린 것은 아니다. HTML이나 TeX도 플레인 텍스트이지만 직접 작성하기에는 너무 복잡하다. 이에 대한 대안으로 글쓰기를 위한 경량 플레인 텍스트 포맷들이 존재한다. 경량 마크업 언어라고도 불린다.

예를 들어 어떤 플레인 텍스트 포맷은 서식을 문자로 표현하는 방법을 정의한다. *강조*와 같이 * 사이에 글자를 넣으면 볼드체가 되고, /기울임/과 같이 / 사이에 글자를 넣으면 이탤릭체가 된다. 3 이런 방식으로 글쓰기에만 집중할 수 있고 제약은 있지만 서식을 충분히 사용할 수 있다. 충분하다는 말은 이를 테면 이런 뜻이다. 글을 쓰다가 어떤 문자를 강조하고 싶을 때 1677만 색 중에 하나를 정확히 고를 수도 있겠지만, 플레인 텍스트 포맷에서는 애시당초에 그런 선택지가 제공되지 않는다. 또한 마크다운의 서식은 에디터 상에서 충분히 서식처럼 보인다. 제목은 제목처럼 보이고, 강조는 강조처럼 보이고, 목록은 목록처럼 보인다. (그리고 코드 하이라이팅은 더욱 더 그렇게 만들어준다)

하지만 가독성은 무엇보다도 중요하다. 마크다운은 문서는 그 자체로 플레인 텍스트로서 태그나 포맷팅 명령으로 보이는 것들 없이 퍼블리싱 될 수 있어야한다.

Readability, however, is emphasized above all else. A Markdown-formatted document should be publishable as-is, as plain text, without looking like it’s been marked up with tags or formatting instructions.

Markdown: Syntax , John Gruber

마크다운4도 경량 마크업 언어 중 하나이다. 글쓰기를 위한 경량 플레인 텍스트 포맷들이 언제부터 지금만큼 인기 있었는지는 모르겠지만5, 마크다운의 등장은 특히 중요한 역할을 했다. 프로그래머들도 마크다운을 좋아했고, 프로그래머가 아닌 사람들도 마크다운의 강력함을 깨닫기 시작한다.6 경량 마크업 언어(플레인 텍스트 포맷)와 글쓰기는 실제로 찰떡궁합이다. 리치 텍스트 에디터나 워드프로세서의 서식은 궁극적으로 유용하지만, 글을 쓰는 과정에서는 거추장스럽다. 몇 가지 마크다운 문법만 익히고 나면 서식에 대한 고민 없이 글쓰기에만 집중할 수 있다.

이에 발맞춰 마크다운에 최적화된 에디터들이 등장하기 시작했다. 나는 마크다운 등장 이전의 텍스트 에디터를 (소스 코드 편집에 주로 사용되던) 제 1세대 텍스트 에디터라고 부르고, 그리고 그 이후의 등장한 (마크다운을 지원하는) 글쓰기 도구를 2세대 마크다운 에디터라고 부른다.

여기까지는 플레인 텍스트 만능주의가 옳은 것처럼 보인다. 마크다운은 분명히 글쓰기에서 강력한 힘을 발휘했다. 1세대, 2세대 에디터 모두 마크다운으로 글을 쓰기에는 훌륭한 도구였다. 1세대 에디터들은 마크다운 에디터라기보다는 마크다운도 지원하는 에디터들이라고 보는 것이 정확하다.7 2세대 에디터는 플레인 텍스트의 철학을 유지하면서 마크다운으로 글을 쓰는 경험을 향상 시키기 위한 노력의 성과였다. 하지만 한 가지 면만을 바라봐서는 안 된다. 플레인 텍스트의 철학은 곧 마크다운 에디터의 한계가 되었다.

나는 마크다운의 가장 큰 장점이자 동시에 가장 큰 문제가 플레인 텍스트 포멧이라고 생각한다. 가장 치명적인 단점, 텍스트는 이미지를 표현하지 못 한다. 이는 GUI에 익숙한 사람들이 CUI를 의심하는 눈초리로 바라볼 때 느끼는 정확히 그 문제이다. 마크다운은 이미지를 표현하지 못 하고, 이는 앨런 케이가 컴퓨터를 모든 미디어를 표현할 수 있는 메타 미디엄이라고 정의했던 관점에서 바라보자면 명백한 굴욕이다. 명백히 텍스트 편집에만 관심을 두던 제 1세대 텍스트 에디터들은 이 문제에 관심을 두지 않았다. 안타깝게도 제 2세대 마크다운 에디터들조차 이 문제를 교묘하게 회피해버렸다.

텍스트 에디터는 이미지의 표현에 대해 완전하게 무관심했다.

텍스트 에디터는 이미지의 표현에 대해 완전하게 무관심했다.

미디어 표현의 문제는 두 겹의 층위를 가진다. 첫 번째 층위는 에디터에서 미디어를 표현할 능력이다. 이미지 출력이 불가능한 워드프로세서를 상상해보길 바란다. 마크다운 에디터가 그렇다. 마크다운 에디터에서는 이미지가 ![아름다운 이미지](http://IMAGE_URL)와 같은 문자열로 표현된다.8 아름다운 이미지가 아름다운지 아름답지 않은지를 문서 상에서 확인할 방법은 없다. 두 번째 층위는 미디어에 대한 참조만 가능하다는 점이다. 마크다운으로 작성된 문서는 .md.markdown 확장자로 저장되며, 이 파일 하나가 문서를 온전히 표현해야만한다. 이 원칙에 충실하기 때문에 문서는 미디어와 완전히 분리되어 있고, 그래야만 한다. 마크다운으로 글을 써본 사람이라면 이미지를 어디에 저장할지 고민해본 적이 있을 것이다. 이미지는 문서 이전에 참조 가능한 위치에 먼저 존재해야 한다. 특히 로컬 이미지를 참조하는 마크다운 문서를 다른 경로나 컴퓨터로 복사한다면 이미지 참조는 깨질 것이다. 이미지가 있는 마크다운 문서는 출력물로서는 완벽하지 않지만, 여전히 미디어조차 텍스트로 표현하는 마크다운 문서로서는 완벽하다. 이미지 참조가 깨져도 완벽한 이 얄궂은 플레인 텍스트여…

2세대 마크다운 에디터들은 미디어 표현의 두 번째 층위는 완전히 무시했으며, 첫 번째 층위는 제한적으로만 해결책을 제시했다. 나중에 개발된 일부 마크다운 에디터는 에디터에 참조된 이미지를 바로 보여주는 기능을 지원했다. 이 방법은 미디어 표현 문제의 첫 번째 층위에 대해서는 괜찮은 해답이었지만, 2번째 층위는 여전히 완전히 무시하고 있었다. 2세대 마크다운 에디터에서 가장 인기 있었던 방법은 라이브 프리뷰다. 하지만 라이브 프리뷰 역시 마크다운의 한계를 자백할 뿐이었다. 마크다운은 명백히 플레인 텍스트로만 이루어진 마크다운 문법만으로도 충분한 표현력을 가졌지만, 사람들은 최종적으로 HTML으로 렌더링된 결과물을 신경써야만 했다. 결국 라이브 프리뷰는 에디터에서 온전히 글쓰기에만 집중할 수 있다는 마크다운의 장점을 갉아먹는 접근 방법이었다.

2세대 마크다운 에디터들은 이미지를 간접적으로 보여주지만 이미지의 존재 여부를 보장해주지는 못 한다.

2세대 마크다운 에디터들은 이미지를 간접적으로 보여주지만 이미지의 존재 여부를 보장해주지는 못 한다.

라이브 프리뷰는 여러가지로 문제가 많았지만, 특히 긴 글을 쓸 때는 쥐약과 같았다. 긴 글을 쓸 대면 어김없이 에디터와 라이브 프리뷰의 스크롤은 일치하지 않는다. 자동 싱크를 사용하면 엉뚱한 위치를 가리키고, 그렇다고 수동으로 스크롤을 하면 현재 위치를 찾기가 힘들어진다. 글쓰기 도구로서 마크다운과 마크다운 에디터들에 대해서는 호평 일색이었고 이 도구들로 책을 쓴 사람들도 있었지만, 사실 긴 글을 쓰는 도구로서 마이크로소프트 워드나 스크리브너 같은 본격적인 글쓰기 도구의 진정한 경쟁자가 된 적은 없었다. 긴 글은 한 편의 글이 아니다. 글들이 모여서 이 되고 가 되고 이 된다. 이 정도 길이의 글을 쓸 때는 글들을 구성하는 기능이 필수적이다. 긴 글은 글들과 글들의 구성, 그리고 주변의 메타데이터들까지 한 데 어우러져 비로소 하나의 문서가 된다. 그런데 이런 배려를 갖춘 마크다운 에디터는 내가 아는 한 나오지 않았다.9

퍼블리싱은 어떤까? 마크다운 문서를 퍼블리싱하는 방법은 크게 두 가지가 있다. 마크다운을 지원하는 플랫폼에 마크다운으로 작성한 텍스트를 복사해서 넣는 것이다. 하지만 마크다운은 텍스트로서는 완전하지만 문서로서는 완전하지 않기 때문에 참조 파일들을 처리하는 게 상당히 고통스럽다. 플레인 텍스트의 부흥과 함께 스태틱 웹사이트 제네레이터들도 함께 성장했지만 이러한 도구들은 그저 프로그래머들의 장난감일 뿐이었다. 이런 도구는 프로그래머나 쓰는 것이다. 나도 한 때 이런 도구들을 찬양했지만, 프로그래머가 아닌 사람에게 이런 도구를 추천하는 장면을 목격한다면 냉소적인 감정을 느낄 것이다.

정리해보자. 경량 마크업 언어(플레인 텍스트 포맷)와 마크다운 에디터는 글쓰기에 좋다. 나는 마크다운으로 글을 작성하는 경험을 사랑한다. 하지만 어떠한 미디어도 포함하지 않는 한 편으로 구성된 짧은 글을 쓸 때 가장 유용하다. 플레인 텍스트는 만능이 아니다. 나사와 망치가 어울리지 않는 것처럼.

아담 하이드(Adam Hyde)는 신랄하게 이야기한다.

마크다운이 유용한 경우는 제한적이다. 깃허브에서 README 파일을 작성할 때나 마크다운을 사용하길 바란다.

Markdown is good for limited use cases. Use it for README files on github.

What’s Wrong with Markdown?, Adam Hyde

공감한다. 최상의 경험에 대한 기대와 실망의 시간들. 하지만 실망하기는 이르다.

다음 이야기는 율리시스(Ulysses)로부터 시작한다. 나는 율리시스를 제 3세대 마크다운 에디터로 정의한다.10 세대를 나누고자하는 시도는 그 둘 사이에 현저한 차이가 있기 때문이다. 플레인 텍스트 기반 글쓰기 도구들은 이제 여명을 맞이했을 뿐이다.


  1. 이것은 좋기도 하고, 나쁘기도 하다. 
  2. 물론 이러한 세계가 이상적인 세계는 아니다. 적절한 타입이 없다는 건 어떠한 데이터도 안전하지 않다는 의미가 될 수도 있다. 하지만 강력하다. 
  3. 이맥스(Emacs) org-mode. http://orgmode.org/ 
  4. 마크다운은 2004년 존 그루버(John Gruber)에 의해 발표되었다. 
  5. 멀리는 TeX나 roff까지 거슬러 올라가겠지만, 거기까지 고려하진 않는다. 
  6. 여기서부터 경량 마크업 언어라고 이야기하면 기본적으로 마크다운만을 이야기한다. 충분한 생태계를 가지고 있는 유일한 언어이기 때문이다. 
  7. 나는 특히 이맥스(Emacs)의 팬이었다. 모든 것을 이맥스로 해결하기를 원했지만, 그럴 수 없다는 것을 깨닫는 것은 오래 걸리지 않았다. 
  8. 대부분의 마크다운으로 글을 작성하는 사람들은 [] 사이에 들어갈 이미지를 설명하는 문구도 작성하지 않는다. 
  9. 내 생각에 마크다운으로 긴 글을 쓰는 가장 합리적인 방법이라면 스크리브너의 리치 텍스트 에디터 멀티마크다운으로 글을 쓰는 방법이다. 뭐라고? 리체 텍스트 에디터에서 플레인 텍스트 포맷으로 글을 쓴다고? 
  10. 나는 지금 이 글을 율리시스에서 쓰고 있다. 
, nacyot.

블로그nacyot이 운영합니다.