Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

마크다운

Q's Laboratory

개요

마크다운은 John Gruber와 Aaron Swartz가 2004년에 개발한 마크업 언어입니다. 복잡하고 표기가 어려운 마크업 언어에 대한 반발심이 명칭 자체에 담겨있을만큼 직관적이고 쉬운 문서 작성을 지향하고 있습니다. 마크다운 공식 문서

마크업 언어(markup language)란 문서의 형식이나 구조를 지정하는 데에 사용하는 언어를 의미합니다. 언어의 표현 자체로는 컴퓨터를 움직일 수 없다는 점에서 프로그래밍 언어와 구별되는 개념입니다. 가장 가까운 마크업 언어의 예는 HTML이고, 수식을 표현하는 데에 사용하는 LaTeX도 마크업 언어의 일종입니다.

마크다운은 보통의 텍스트 에디터로 작성할 수 있으나, 작성한 문서를 마크다운 규칙에 따라 표현하는 작업이 필요한데 이를 "렌더링(rendering)"이라고 합니다. 기본적인 텍스트 에디터로는 렌더링이 불가능하고, 실시간 렌더링이나 미리보기를 지원하는 플러그인을 설치하여 기능을 추가해야 최종적으로 완성된 문서를 확인할 수 있습니다.

마크다운은 작성이 쉽고 렌더링을 하지 않은 상태에서도 내용을 쉽게 파악할 수 있다는 점에서 컴퓨터 개발자들 사이에서 널리 활용되는 문서 작성 방식입니다. 특히, 오픈소스 코드가 활발하게 유통되는 깃허브(GitHub)에서 마크다운 렌더링을 기본으로 지원하고 있는데, 이 때문에 본인이 작성한 코드를 설명하기 위해 README.md 파일을 작성하는 경우가 많습니다. 또, 주피터 노트북에서 코드가 아닌 텍스트 셀을 입력할 때에도 마크다운 문법을 지원하기 때문에 주피터 노트북을 하나의 문서처럼 만드는 경우도 많습니다.

최근에는 생성형 AI를 이용하여 결과물을 받는 경우에 마크다운 문법을 이용하여 결과물을 표시하는데, 챗GPT의 경우에 출력된 결과물을 그대로 복사하는 경우 마크다운 문법이 표함된 상태로 텍스트가 복사되기 때문에 이 결과물을 그대로 워드 프로세서(아래아 한글이나 MS 워드 등)에 입력하면 브라우저에 표시된 결과물과 다른 결과물이 나오는 경우가 있습니다. 이 때문에 복사한 내용을 원본과 동일하게 재현하고 싶을 때에는 텍스트 에디터에 복사한 내용을 붙여넣고 렌더링하는 순서로 작업을 진행해야 합니다.


문법의 종류

제목 표시

마크다운에서는 ‘#’ 기호를 이용하여 제목을 표시합니다. '#'의 개수는 제목의 위계를 나타내며, 에디터의 종류에 따라 1~2단계부터 5~6단계까지 구분할 수 있습니다. 다만, 1~3단계 이후에는 렌더링했을 때에 위계에 따른 가시적인 차이가 잘 보이지 않기 때문에 번호 목차를 함께 달아주는 경우가 많습니다.

본 문서에서는 '마크다운’이 1단계, '문법의 종류’가 2단계, '제목 표시’가 3단계의 위계를 가진 제목 표기입니다.


문단 구분

마크다운 문법에서 문단 구분은 줄바꿈 두 번 또는 빈 칸 두 개로 표시합니다. 통상적으로 텍스트 에디털르 이용하는 경우 줄바꿈을 이용하여 문단을 구분할 수 있지만, 경우에 따라서는 빈 칸 두 개를 넣어야 줄바꿈이 되는 경우도 있습니다.(rmarkdown의 경우) 이 경우에는 컴퓨터의 설정에 따라 스페이스를 두 번 연속으로 입력하면 '.'이 자동으로 입력되는 경우가 있기 때문에 문서 편집 과정에서 혼란이 생기는 경우가 많습니다.


글자 모양 변경

마크다운에서는 글자에 강조를 주거나 취소선을 넣는 등의 간단한 모양 변경이 가능합니다.

마크다운에서는 폰트 설정은 지원하지 않습니다. 서식의 목적상 화려한 문서 작성과는 거리가 있기 때문입니다. 다만, 플러그인으로 렌더링하는 방식에서는 플러그인의 자체 설정을 이용하여 렌더링할 때에 사용하는 폰트를 바꿀 수 있습니다. 일반적으로 마크다운으로 작성한 문서를 html로 변환하면 브라우저에서 사용하는 폰트로 표시됩니다.


코드

본문과 다른 종류의 코드를 입력하기 위해서는 ‘`’(백틱이라고 부르며, 영문 키보드 상태에서 숫자 1의 왼쪽에 위치한 키입니다) 세 개를 이용하여 코드블록을 만들 수 있습니다. 코드블록 시작점 앞에는 어떤 종류의 언어인지를 표기하면 렌더링을 지원하는 언어는 명령어와 변수 등에 다른 종류의 렌더링이 이루어집니다. 코드블록이 끝날 때에는 다시 ‘`’ 세 개를 입력합니다.

별도로 블록을 만들지 않고 본문 중간에 코드를 넣으려면 ‘`’ 한 개로 코드 텍스트를 감싸면 import pandas as pd과 같이 음영이 들어가고 코드블록과 동일한 폰트 타입으로 표현할 수 있습니다.


하이퍼링크

하이퍼링크는 "[표시할 텍스트](링크 주소)"의 형식으로 입력합니다. 링크 주소는 표시되지 않고 텍스트에 하이퍼링크가 걸린 형태로 렌더링됩니다.

하이퍼링크는 인터넷 주소뿐만 아니라 문서 내의 목차 위계로도 연결할 수 있습니다. 이때에 링크 주소는 '#'와 목차 텍스트에 있는 빈칸 대신 '-'를 결합한 형태로 입력합니다. 예를 들어 "[지원 소프트웨어](#지원-소프트웨어)"라고 입력하면 지원 소프트웨어라는 링크가 생기고, 이 링크를 클릭하면 문서 내의 ‘지원 소프트웨어’ 제목이 있는 위치로 이동합니다.


그림 넣기

그림은 "![표시할 텍스트](그림 파일 경로 또는 링크 주소)"의 형식으로 입력합니다. 그림의 파일 경로는 컴퓨터의 절대 경로 또는 상대 경로로 입력할 수 있고, 인터넷에 있는 그림은 링크 주소를 입력할 수 있습니다.

마크다운에서는 그림의 크기를 조절할 수 없습니다. 다만, 렌더링 플러그인의 별도 설정을 이용하여 입력하려는 그림의 크기를 조절할 수 있는 경우도 있습니다.

그림 객체에 하이퍼링크를 입힐 수도 있습니다. 그림을 입력한 전체 문장을 []로 감싸고 그 뒤에 ()로 링크 주소를 입력하면 그림을 클릭했을 때에 다른 주소로 이동할 수 있습니다.


표 만들기

마크다운에서는 ‘|’ 기호와 ‘-’ 기호를 이용하여 표를 만들 수 있습니다.

표의 제목은 각 열을 ‘|’ 기호로 구분하여 입력하고, 그 아래 줄에는 ‘-’ 기호를 이용하여 각 열의 구분선을 만듭니다. 구분선을 기준으로 윗줄은 제목 줄이 되고 아랫줄은 내용 줄이 됩니다. 내용 줄은 제목 줄과 동일한 방법으로 입력합니다.

| 제목 1 | 제목 2 | 제목 3 |

|--------|--------|--------|

| 제목 1 | 제목 2 | 제목 3 |


수식 작성

마크다운에서는 LaTeX 표기법을 이용하여 수식을 입력할 수 있습니다. 수식은 인라인 수식(본문 텍스트 중간에 나타나는 수식)과 블록 수식(본문과 별도의 문단을 이루고 표기하는 수식)으로 표시할 수 있습니다. 인라인 수식은 ‘$’ 하나로 수식 앞뒤를 감싸는 방법으로 표시하고, 블록 수식은 ‘$’ 두 개로 수식 앞뒤를 감싸는 방법으로 표시합니다.


지원 소프트웨어

가장 널리 사용하는 마크다운 지원 소프트웨어는 VSCode입니다. VSCode에서는 플러그인을 추가로 설치하면 실시간으로 렌더링된 결과물을 보여주기 때문에 마크다운 문서를 작성하는 것이 매우 편리합니다.

프로그래밍용으로 사용하는 텍스트 에디터(Notepad++, Sublime Text 등)에서도 플러그인을 설치하여 마크다운 문서를 렌더링하여 미리보기 할 수 있습니다.

깃허브에서도 마크다운 문서를 생성할 수 있습니다. 사용하는 레포에서 Add file → Create new file을 선택하고, 파일 이름을 '파일이름.md’로 입력하면 텍스트 에디터에서 입력하는 내용을 Preview 탭에서 렌더링하여 보여줍니다.