Markdown ========= ## 개요 마크다운은 아마도 세계에서 가장 유명한 마크업 언어 중 하나일 것이다[^1]. 마크다운은 다른 마크업 언어와 달리, **가독성**에 충실하기 위해 노력한 언어이다. 즉 마크다운으로 쓰여진 문서는 따로 파싱과 렌더링이 없어도 인간이 읽기에 불편함이 없다. 혹은 그러한 목적으로 디자인되었다. 이 점이 마크다운의 장점과 단점을 모두 규정한다. 왜냐하면 마크업 언어는 필연적으로, 가독성과 직관성 간의 모순에 직면하게 되고, 둘 중 하나를 선택해야 할 수밖에 없기 때문이다[^2]. 마크다운은 가독성에 거의 모든 것을 희생하는 접근방식을 택했다. 기본적인 마크다운 문법은 매우 단순하며, 최소한의 html element만을 지원한다. 테이블 등 필요한 문법은 그냥 html을 사용하거나 확장기능을 도입해야 한다. 역설적으로, 마크다운은 그 덕분에 성공할 수 있었다. 수많은 사람들이 구현체를 만들어내며 독자적인 문법을 붙였고, 이러한 '사투리'들이 폭발적인 확산 속도를 견인했기 때문이다. ## 문제점 그러나 마크다운은 결코 잘 설계된 언어는 아니다. 존 그루버가 아론 슐츠와 처음 명세서와 펄 스크립트를 발표한 이래, 이 마크업을 다듬으려는 시도는, 최소한 창시자들 자신들에 의해서는, 결코 이루어지지 않았다. 기본적으로 마크다운은 플레인 텍스트를 html로 렌더링하기 위한 것이다. 그러나 명세서나 스크립트에서 정의한 것만으로는 불확실성을 해소하기가 어려운 점이 많았고, 심지어 명세서와 스크립트 간에도 구현이 다르게 이루어지는 경우가 있다. 이러한 불확실성은 제3자에 의해 제작된 많은 구현체들 간에, 추가된 것이 아닌 기본적인 문법 하에도, 렌더링되는 결과가 다르다는 문제점을 안게 되었다. 이것은 사투리(예컨대 가장 널리 쓰이는 사투리 중 하나인 GFM)의 문제가 아니다. 명세서에 정의되지 않았기 때문에 고민할 필요가 없었던 부분들이 빚어내는 모순이다. ## Commonmark 커먼마크는 마크다운의 '사투리'라기 보다는, 또 다른 '명세서'에 가깝다. 즉 기존 마크다운 문법 하에서 발생할 수 있는 불확실한 사례들을 찾아 나열하고, 이를 렌더링하는 방법을 제시한 revision에 해당한다. 자세한 내용은 [[https://likejazz.com/post/103592702708/markdown-commonmark|여기]]와 [[https://blog.codinghorror.com/standard-markdown-is-now-common-markdown/|여기]]를 참고하라. [^1]: 가장 많이 쓰는 마크업 언어는 아닐 수도 있다. 왜냐하면, 위키백과가 사용하는 [[tech:mediawiki|미디어위키]]가 있기 때문이다. 물론 정확한 통계는 없으나, 가능성은 충분하다. [^2]: 여기에서 직관성은 가독성과는 다른 결에서의 덕목을 뜻한다. 즉 가독성은 마크업에 대한 사전지식이 없어도 문서를 쉽게 해석할 수 있음을 뜻하며, 직관성은 마크업의 문법을 일관성있게 학습할 수 있는지에 대한 것이다. 개인적인 관점에서 직관성이 가장 뛰어난 언어는 [[wiki:language:orgmode]]다. 마크다운은 하술하겠지만 문법의 허술함 덕분에 직관성이 가독성에 비길 정도는 아니다.