1편. 마크다운 알아보기

들어가기에 앞서

현재 보고 계시는 페이지는 글쓴이가 Markdown으로 글을 작성한 후 Hexo라는 HTML Generator로 자동 생성하여 만들어진 페이지이다.

웹브라우저의 개발자 도구를 이용하여 소스코드를 볼 수 있으신 분은 아시겠지만, 페이지의 코드 자체는 상당히 복잡하다. 하지만 작성은 Markdown으로 매우 쉽게 작성하였다.

HTML Generator는 Single Site Generator, Static Site Generator라고 불리며 이에 관련된 이야기는 다른 주제에서 언급하려 한다.



Markdown과 Markup 이야기

Markdown 이야기를 하기에 앞서… 소프트웨어를 공부하다보면 ‘Mark-up은 Script에 가까운데 대체 왜 언어(Language)라고 부르는 거지?’하는 생각이 드는데 그에 대한 이야기를 먼저 해 볼까 한다.

MarkdownMarkup 언어의 한 종류이다. Mark-up이란건 흔히 ‘화장한다’는 의미로 쓰이는 말인 Make-up과 유사하게 이해하면 되는데, 문서에 특정 부분을 ‘표시(Mark)한다’ 정도의 의미로 이해하면 대충 옳다.

이는 본래 인류가 컴퓨터를 사용한 후 문서를 전자화하는 과정에서 오랜 시간 동안 동일한 구조의 문서를 보기 위해 만들어진 표준에서 유래했다. 그렇게 개발한 Markup 언어의 표준은 SGML(Standard Generalized Markup Language, ISO 8879:1986)이라 부른다.

SGML이 등장해야 했던 이유는 이렇다. 인간들이 전쟁을 위한 무기 체계를 만들거나, 혹은 인공위성이나 의료기기, 아니면 어떤 국가의 법률을 정리하기 위한 전자 문서를 작성하는 큰 프로젝트는 한 번 시작하면 종료까지 10년이 걸릴 지, 20년이 걸릴 지 알 수 없다. 그리고 그 기간 동안 발전할 컴퓨터의 하드웨어 기술과 소프트웨어 기술을 생각하면 “10년에 거쳐 읽을 수 있는 전자 문서 규격”이 필요했던 것이고, 그것이 바로 일반 텍스트(Text) 문서에 특정 표시(Mark)로 문서를 표현하는 Markup 규격이었던 것이다. 그리고 그것이 발생하는 시점에는 충분히 ‘프로그래밍 언어’로서 불릴만한 규격이었다.

이 Markup 규격은 1990년 팀 버너스 리(Sir. Timothy John Tim Burners-Lee)가 서버와 클라이언트 기반의 월드와이드웹(World Wide Web) 구조를 만들 때 차용된다. 이에 대한 자세한 이야기는 한글 위키디아 - HTML을 참고하시기 바란다. 해당 위키피디아 페이지의 한 구절은 아래와 같다.

1980년, 유럽 입자 물리 연구소(CERN)의 계약자였었던 물리학자 팀 버너스리가 HTML의 원형인 인콰이어를 제안하였다. 인콰이어는 CERN의 연구원들이 문서를 이용하고 공유하기 위한 체계였다. 1989년에 팀 버너스리는 인터넷 기반 하이퍼텍스트 체계를 제안하는 메모를 작성했다.

팀 버너스리가 ‘하이퍼텍스트 체계’로 만든 최초의 규격 이름은 「HTML」이 되었고, 이는 2021년 기준 인류가 인터넷이라 부르는 가상의 네트워크 공간에 문서를 공유하는 방식의 표준이 되었다.

그러나, HTML이 가진 태생적 문제가 있었다. Markup 언어는 본디 정적인 문서(Static Document)를 처리하는 데 적합한 문서였다. 그런데 인터넷이라는 네트워크 공간은 점점 동적인(Dymanic) 방식으로 발전하였다. HTML 3.5는 JavaScript 및 CSS를 조합하여 동적인 언어를 표현할 수 있도록 발전했다. 그래서 3.5 버전은 D-HTML이라고도 불리며, 여기에서의 D는 Dynamic(동적인)을 의미한다. 이후 HTML 4.0이 되면서 본격적으로 HTML은 JavaScript 및 여러 웹 기술들과 함께 동적인 구조의 문서를 표현하기 시작한다.

그리고, 그래서 결국 HTML은 Markup의 원래 목적인 “Text 기반의 - 아주 오랜 기간 동안 호환되는 - 간단하고 가벼운”이라는 특성을 잃게 되고, 복잡하고 배우기 어려운 규격이 되어 버렸다. 대부분의 사이트에서 HTML 코드는 보기 쉽게 작성해 놔도 토나올 정도로 복잡해 보이곤 한다. 이를 해결하기 위해 서기 2000년을 전후로 Text-to-HTML / HTML-to-Text 변환 기술들이 나타나기 시작하였다. 여기에서부터 Markdown의 역사가 시작된다. 복잡함을 제거하고 원래 Markup의 취지인 단순함으로 돌아가는 규격이 바로 Markdown이다.

그래서 Markdown은 Makrup 언어의 한 종류라고 하는 것이다.

※ 참고 - 팀 버너스리는 인터넷을 사유화하지 않고 대중에 기술을 모두 공개한 공로를 인정 받아 영국 왕실로부터 ‘기사작위’를 받았고, 그래서 이름 앞에 Sir.가 붙게 된다. 한국 말로 하면 ‘팁 버너스리 경(卿)’이 되겠다.



Markdown 개요

Markdown은 2004년에 John Gruber (Blog)와 Aaron Swartz (Blog, Github)에 의해 발표되었다. Markdown의 기획 의도는 「쓰기 쉽고(easy-to-write), 읽기 편한(easy-to-read) 웹문서를 만들기」였다고 한다.

Markdown은 일반 텍스트를 웹(Web)상에서 예쁘게 변환해 주는 text-to-HTML 변환 도구이다. 조금 더 쉽게 설명하자면, 일반 텍스트 작성 후 텍스트에 몇 가지 표시를 해 주면, HTML로 변환된 형태로 표현해준다는 의미이다. Text를 HTML로 변환해주는 Markdown은 Perl-언어로 작성되었다고 한다.

Markdown이 등장하기 전에도 이미 text-to-HTML 관련 기법/도구 등이 많이 나와 시도되고 있었다. 왜냐하면 웹 환경이 변화하고, 더 많은 사용자들이 웹을 사용하다보니, 웹문서로 사용하는 대표적인 마크업 언어인 HTML이 너무 복잡해 짐에 따라 쉽게 읽거나 작성할 수가 없게 되기 때문이다. 또한 모바일 환경의 등장으로 여러 크기의 디스플레이 사이즈에 맞도록 너무 복잡한 스타일(Style)들이 선언되는 등 Markup 언어 본연의 목적인 이식성, 편의성 등이 약해지게 되었다.

그렇기 때문에 Markdown의 경량화된 문법은 당시 유형하던, 그리고 개발자들 사이에서 인정 받던 여러 text-to-HTML 도구들에서 사용하던 Formatted Text 방식의 문법을 차용하게 되었다.

Markdown은 제작자의 블로그에 공지된 바와 같이「BSD 라이언스 (Ref1, Ref2, Ref3)」의 무료 소프트웨어이다.



Markdown 로고 이미지

인터넷을 검색하면 Markdown의 로고는 여러 종류가 나오는데, 가장 대표적인 로고는 Dustin Curtis (Github)가 만든 아래의 버전이다.

Markdown LogoMarkdown Logo Solid



Markdown의 장점

이런 장점 덕분에 Markdown은 Github, GitLab, Jupyter-Notebook, Discord, Wordpress, Tistory 등 최근 Markdown을 지원하는 서비스들이 많아졌다.

  1. 문법이 간결하다.
  • 간결한 문법으로 누구나 쉽게 웹문서를 작성할 수 있다.
  1. 텍스트 기반으로 작성하므로 특정 기술에 종속적이지 않다.
  • 그래서 용량이 작다.
  • 별도의 도구 없이 테스트 에디터 만으로 작성이 가능하다.
  • 그래서 특정 도구나 OS에 종속적이지 않고 범용으로 사용 가능하다.
  1. 이식성이 높다.
  • Markdown은 Markup 언어(language)의 한 종류이기 때문에 Markup 언어의 주요 장점인 높은 이식성을 보인다.
  • 이게 무슨 의미냐면, Github에서 작성한 Markdown 페이지의 내용을 그대로 GitLab, Tistory 등으로 이동시켜도 거의 동일한 방식으로 페이지의 내용이 표현된다는 의미이다.



Markdown의 단점

단점이라고는 하지만 쓰는 사람이 잘 쓰면 되는 정도의 수준이다.

  1. 통용되는 표준이 없다.
  • 대표적으로 사용되는 de facto 표준도 존재하지 않는다.
  • 2021년 기준으로 “딱~ 이거다” 라고 중심점을 잡아주는 라이브러리가 존재하지 않음은 아직 가야할 길이 멀다는 의미이다.
  • 그래서 중심이 되는 문법이 없다. (물론 Github Markdown인 GFM이 de facto가 되어가고 있는 느낌이다.)
  1. 경량화된 문법이라곤 하지만, 사용하기 위해서는 여전히 여러가지 공부하고 외워야 한다.
  2. HTML의 복잡성을 대신하기 위해 개발되었다보니, HTML에서처럼 복잡한 구조의 문서를 만들 수 없다.
  3. 페이지 내 컨텐츠가 많아지면 결국 복잡해진다.
  • 그래서 그냥 Markdown으로 쓰면 더 복잡해지는 경우 Markdown 문서 내에 HTML 문법을 섞어 사용하기도 한다.
  • 대표적으로 table의 규모가 커지면 Markdown 문법보다 HTML 문법이 훨씬 읽기 쉽다.



Markdown의 확장자

Markdown 파일의 확장자는 .md 혹은 .markdown을 사용한다.



아이러니한 지점, 그리고 저의 계획

아이러니하게도 Markdown의 지향점이 읽기 쉬운 문서 작성이었어서 아주 경량화된 기능을 가지고 있다보니, 웹에서 사용하기에 기능 제약이 있고 이에 대한 불편함이 있어 Markdown Extra, Multi-Markdown, CommonMark, RMarkdown 등이 등장했다.

일단 본 블로그의 서비스 창구인 Github와 Github Pages에서 지원되는 Markdown들을 위주로 정리하며 공부할 계획이라 확장판까지 다루지는 않을 거 같다. (현재로서는 그렇다.) 본 글은 “뭔가를 남에게 쉽게 알려줄 수 있을 만큼 정리해야 진짜 아는 것.” 이라 생각하는 개인적인 철학 때문에 정리하는 문서이므로, 딱 그만큼만 하려 한다. 😉



주요 참고 자료