마크다운은 표준이 아니라 계보입니다
2004년 존 그루버의 원래 마크다운에는 공식 명세가 없었고 많은 경우가 정의되지 않은 채 남았습니다. 그래서 구현마다 갈라졌습니다. 결과적으로 같은 문서가 어디에 붙여넣느냐에 따라 다르게 렌더링되며, 어느 방언을 위해 쓰고 있는지 아는 것만으로 대부분의 놀라움을 피할 수 있습니다.
CommonMark는 그 모호함을 정밀한 명세와 테스트 모음으로 못 박기 위해 등장했습니다. GitHub Flavored Markdown(GFM)은 CommonMark 위에서 사람들이 현대적 편집기에 실제로 기대하는 기능, 표, 취소선, 체크리스트, 자동 링크, 을 더합니다.
이 편집기가 지원하는 것
미리보기는 GFM을 렌더링하며, 알아 둘 만한 확장 두 가지가 더해집니다.
표, 체크리스트, 취소선
셋 다 원래 마크다운에는 없습니다. 표는 파이프와 구분 행으로 만들고, 구분 행의 콜론이 열 정렬을 정합니다. 체크리스트는 - [ ]와 - [x]를 씁니다. 취소선은 물결표 두 개로 감쌉니다. 셋 다 GFM에서 왔고, 셋 다 엄격한 CommonMark 렌더러에서는 조용히 실패해 문자 그대로의 기호로 보입니다.
수식
LaTeX 표기가 KaTeX로 렌더링됩니다. 달러 기호 하나로 감싸면 문장 안에, 둘로 감싸면 가운데 정렬된 별도 블록으로 놓입니다. 마크다운을 기술 노트에 쓸 만하게 만들어 주는 부분이며, 어떤 마크다운 표준에도 속하지 않는 그 위의 한 겹입니다.
다이어그램
mermaid로 태그한 코드 펜스는 코드가 아니라 다이어그램으로 렌더링됩니다. 순서도, 시퀀스 다이어그램, 간트 차트를 모두 텍스트로 기술하므로 버전 관리에 텍스트로 남고 의미 있게 diff됩니다. 많은 팀이 이미지 삽입보다 이쪽을 선호하는 이유입니다.
사람들이 걸려 넘어지는 규칙들
- 줄바꿈 한 번은 줄바꿈이 아닙니다. 마크다운은 연속된 줄을 한 문단으로 합칩니다. 빈 줄이 새 문단을 시작하고, 줄 끝의 공백 두 개가 문단 안에서 줄을 나눕니다.
- 목록 앞에는 빈 줄이 필요합니다. 없으면 많은 렌더러가 목록을 앞 문단에 흡수해 버립니다.
- 목록에서 들여쓰기는 의미가 있습니다. 중첩이 여기에 달려 있고, 탭과 공백을 섞으면 렌더러마다 결과가 달라집니다.
- 단어 안의 밑줄은 처리가 갈립니다. GFM은
snake_case_name을 강조로 보지 않지만, 오래된 렌더러 중에는 가운데를 기울여 버리는 것이 있습니다.
다르게 보이는 곳들
여기서 맞아 보이는 마크다운이 다른 곳에서는 아닐 수 있습니다. GitHub과 GitLab 모두 GFM을 지원하지만 일부 확장에서 갈립니다. Reddit, Discord, Slack은 각각 제한된 부분집합을 쓰는데, 특히 Slack은 별표 하나를 기울임이 아니라 굵게로 처리해 표준과 정반대입니다. 정적 사이트 생성기는 플러그인 설정에 따라 달라집니다.
실용적인 접근은 필요한 것 중 가장 엄격한 대상에 맞춰 쓰는 것입니다. CommonMark에서 유효한 것은 어디서나 렌더링되고, 확장으로 들어갈수록 특정 렌더러에 기대게 됩니다.
평문이 편집기보다 오래 남는 이유
워드프로세서 대신 마크다운으로 쓰는 논거는 문법이 우아해서가 아닙니다. 그 파일이 그것을 만든 소프트웨어 없이도 읽힌다는 점 때문입니다. .md 파일은 어디서나 열리고, 버전 관리에서 줄 단위로 diff되며, 20년 뒤에도 읽을 수 있습니다. 어떤 독점 문서 형식에 대해서도 자명하게 참이라고 하기 어려운 성질이죠.
README, 기술 문서, 정적 사이트 콘텐츠, 메모 앱에서 마크다운이 기본이 된 이유가 이것입니다. 서식은 부수 효과이고 내구성이 요점입니다.
이 편집기는 전적으로 브라우저에서 실행되므로 입력한 내용은 전송되거나 저장되지 않습니다. 온라인 서비스에 붙여넣고 싶지 않은 메모와 문서를 초안 잡는 데 쓸 수 있다는 뜻입니다.