리프 Markdown Guide
리프 Markdown Guide

리프의 마크다운 가이드

2004년, 존 그루버는 "읽히는 소스코드"라는 하나의 아이디어로 기술 문서의 판을 바꿨다. 이 페이지는 그 마크다운의 모든 것을 담고 있다. 기초 문법부터 Mermaid 다이어그램, LaTeX 수식까지.

표준 + 확장 문법 완벽 수록 복사해서 바로 쓰는 예제 Mermaid & LaTeX 포함

마크다운의 탄생

2004년 12월, 블로거이자 작가인 존 그루버(John Gruber)에런 스워츠(Aaron Swartz)와 함께 마크다운을 세상에 내놓았다. 그들의 철학은 단순했다:

"마크다운 형식의 문서는, 변환하지 않고 그 자체로도 읽힐 수 있어야 한다."

HTML을 직접 쓰는 건 고통이었다. <p>, <strong>, <a href="..."> 같은 태그가 글 사이사이를 메우면, 정작 내용은 태그 속에 묻혀버린다. 그루버는 이메일 문화에서 영감을 받았다. 이메일에서 인용할 때 >를 쓰고, 강조할 때 *별표*로 감싸는 그 관습. 이미 사람들이 쓰고 있는 평문 표기법을 정리하면 되는 거였다.

에런 스워츠는 변환 엔진의 핵심 로직을 설계했다. 그는 당시 불과 17세였다. 나중에 RSS 1.0 명세 공동 저자, Creative Commons 설립 참여, Reddit 합병 등을 이끈 천재 해커이기도 했다.

마크다운은 두 가지를 동시에 가리킨다:

  1. 일반 텍스트 서식 지정을 위한 문법(syntax)
  2. 그 텍스트를 HTML로 변환하는 펄(Perl) 스크립트

CommonMark와 GFM으로의 진화

원본 마크다운에는 한 가지 문제가 있었다. 명세가 모호했다. 같은 마크다운 문서를 파서마다 다르게 해석하는 일이 빈번했다. 2014년, 존 맥팔레인(John MacFarlane)을 중심으로 CommonMark 프로젝트가 출범했다. 600개 이상의 테스트 케이스로 구성된 엄밀한 명세를 만들어, "이 마크다운은 반드시 이렇게 렌더링되어야 한다"를 정의했다.

GitHub는 여기서 한 발 더 나갔다. CommonMark를 기반으로 표(Tables), 작업 목록(Task Lists), 취소선, 자동 링크 등을 추가한 GFM(GitHub Flavored Markdown)을 만들었다. 오늘날 대부분의 개발자가 "마크다운"이라고 부르는 것은 사실 GFM이다.

timeline title 마크다운의 진화 2004 : 존 그루버 & 에런 스워츠 : Markdown 1.0 공개 2007 : GitHub 설립 : README.md 문화 시작 2012 : CommonMark 논의 시작 2014 : CommonMark 0.1 명세 발표 2017 : GFM 공식 명세 발표 : GitHub가 CommonMark 기반 확장 2020s : Obsidian, Notion 등 : 마크다운 기반 도구 폭발적 성장

제목 (Headers)

# 기호의 개수로 제목 수준을 정한다. # 하나면 가장 큰 제목(h1), 여섯 개면 가장 작은 제목(h6). 반드시 # 뒤에 공백을 넣어야 한다.

마크다운 결과
# 제목 1 (h1) ## 제목 2 (h2) ### 제목 3 (h3) #### 제목 4 (h4) ##### 제목 5 (h5) ###### 제목 6 (h6)

제목 1 (h1)

제목 2 (h2)

제목 3 (h3)

제목 4 (h4)

제목 5 (h5)
제목 6 (h6)

대안 문법으로, h1은 텍스트 아래 ===, h2는 ---를 써도 된다:

제목 1
======

제목 2
------
Tip: 문서당 # h1은 하나만 사용하는 것이 SEO와 접근성 모두에 좋다. 나머지는 ##부터 시작하자.

강조 (Emphasis)

문법결과설명
*기울임* 또는 _기울임_기울임이탤릭
**굵게** 또는 __굵게__굵게볼드
***굵은 기울임***굵은 기울임볼드 + 이탤릭
~~취소선~~취소선GFM 확장
마크다운 결과
이 문장에서 *이 부분*은 기울어지고, **이 부분**은 굵어지며, ***이 부분***은 둘 다 적용된다. ~~이건 취소된 텍스트~~다.
이 문장에서 이 부분은 기울어지고, 이 부분은 굵어지며, 이 부분은 둘 다 적용된다. 이건 취소된 텍스트다.
주의: 단어 중간에 밑줄(_)을 쓰면 일부 파서에서 의도치 않게 변환될 수 있다. 안전하게 *를 쓰자.

목록 (Lists)

순서 없는 목록 (Unordered)

-, *, + 중 아무거나 쓸 수 있다. 하나로 통일하는 게 좋다.

마크다운 결과
- 첫 번째 항목 - 두 번째 항목 - 중첩 항목 (들여쓰기 2칸 또는 탭) - 또 다른 중첩 - 세 번째 항목
  • 첫 번째 항목
  • 두 번째 항목
    • 중첩 항목 (들여쓰기 2칸 또는 탭)
    • 또 다른 중첩
  • 세 번째 항목

순서 있는 목록 (Ordered)

숫자 + 마침표. 실제 번호는 상관없다 — 파서가 자동으로 매긴다. 하지만 1.부터 시작하는 것이 관례.

마크다운 결과
1. 커피를 준비한다 2. 물을 끓인다 3. 드립한다 1. 뜸을 들인다 (30초) 2. 천천히 붓는다
  1. 커피를 준비한다
  2. 물을 끓인다
  3. 드립한다
    1. 뜸을 들인다 (30초)
    2. 천천히 붓는다

이미지 (Images)

링크 문법 앞에 !를 붙이면 이미지가 된다.

![대체 텍스트](이미지URL)
![대체 텍스트](이미지URL "캡션")


<img src="image.png" alt="설명" width="400">
Tip: 순수 마크다운에는 이미지 크기 조절 문법이 없다. 크기가 중요하면 HTML <img> 태그를 직접 쓰자.

인용구 (Blockquotes)

줄 앞에 >를 붙인다. 중첩도 가능하다.

마크다운 결과
> 마크다운은 읽기 쉬운 문서를 위해 태어났다. > > > 중첩된 인용구도 된다. > > — 존 그루버
마크다운은 읽기 쉬운 문서를 위해 태어났다.
중첩된 인용구도 된다.
— 존 그루버

코드 (Code)

인라인 코드

백틱(`` ` ``) 하나로 감싼다: `console.log("hello")`console.log("hello")

코드 블록 (Fenced Code Block)

백틱 세 개(```)로 감싸고, 첫 줄에 언어를 명시하면 구문 강조가 적용된다.

마크다운 결과
```javascript function greet(name) { return `Hello, ${name}!`; } console.log(greet("Markdown")); ```
function greet(name) {
  return `Hello, ${name}!`;
}

console.log(greet("Markdown"));

지원되는 언어: javascript, python, java, html, css, bash, json, sql, go, rust, typescript 등.

가로선 (Horizontal Rules)

세 개 이상의 ---, ***, ___ 중 아무거나 쓴다.

---
***
___

모두 동일하게 렌더링된다:


이스케이프 (Escape)

마크다운 문법에 사용되는 특수 문자를 그대로 출력하려면 앞에 \를 붙인다.

\*이건 기울임이 아니다\*
\# 이건 제목이 아니다
\[이건 링크가 아니다\](url)

이스케이프 가능한 문자: \ ` * _ { } [ ] ( ) # + - . ! |

표 (Tables)

파이프(|)와 하이픈(-)으로 구성한다. 정렬은 콜론(:)으로 지정.

마크다운 결과
| 기능 | 마크다운 | HTML | |:------------|:----------:|-------------:| | 제목 | `# text` | `<h1>` | | 굵게 | `**text**` | `<strong>` | | 기울임 | `*text*` | `<em>` | > :--- 왼쪽 정렬, :---: 가운데, ---: 오른쪽
기능마크다운HTML
제목# text<h1>
굵게**text**<strong>
기울임*text*<em>

작업 목록 (Task Lists)

GFM 확장. - [ ]는 미완료, - [x]는 완료.

마크다운 결과
- [x] 마크다운 기초 학습 - [x] 확장 문법 학습 - [ ] Mermaid 다이어그램 작성 - [ ] 블로그에 적용
  • 마크다운 기초 학습
  • 확장 문법 학습
  • Mermaid 다이어그램 작성
  • 블로그에 적용

취소선 (Strikethrough)

물결표 두 개(~~)로 감싼다.

~~이 기능은 더 이상 지원되지 않습니다.~~

결과: 이 기능은 더 이상 지원되지 않습니다.

각주 (Footnotes)

본문에 [^1]을 넣고, 문서 어딘가에 [^1]: 설명을 추가한다.

마크다운은 존 그루버가 만들었다[^1].

[^1]: John Gruber, Daring Fireball, 2004년.
주의: 각주는 CommonMark 표준이 아니다. GitHub, Obsidian, Jekyll 등 일부 환경에서만 지원된다.

수학 공식 (LaTeX)

인라인: $E = mc^2$, 블록: $$로 감싼다.

인라인 수식: $f(x) = x^2 + 2x + 1$

블록 수식:
$$
\int_0^\infty e^{-x^2} dx = \frac{\sqrt{\pi}}{2}
$$

GitHub, Obsidian, Notion, Jupyter Notebook 등에서 지원. 일반 마크다운 에디터에서는 MathJax 또는 KaTeX 라이브러리가 필요하다.

이모지 (Emoji)

콜론으로 감싼 단축코드를 쓴다 (GitHub, Slack 등 지원):

마크다운이모지마크다운이모지
:smile:😄:rocket:🚀
:fire:🔥:warning:
:+1:👍:bug:🐛
:star::memo:📝

다이어그램 (Mermaid)

마크다운 코드 블록에 mermaid 언어를 지정하면 다이어그램이 렌더링된다. GitHub, GitLab, Obsidian, Notion 등에서 네이티브 지원.

플로우차트 (Flowchart)

```mermaid
graph TD
    A[시작] --> B{조건 확인}
    B -->|Yes| C[실행]
    B -->|No| D[종료]
    C --> D
```
graph TD A[시작] -->B{조건 확인} B -->|Yes| C[실행] B -->|No| D[종료] C --> D

시퀀스 다이어그램

```mermaid
sequenceDiagram
    사용자->>서버: 로그인 요청
    서버->>DB: 사용자 조회
    DB-->>서버: 결과 반환
    서버-->>사용자: 인증 토큰
```
sequenceDiagram 사용자->>서버: 로그인 요청 서버->>DB: 사용자 조회 DB-->>서버: 결과 반환 서버-->>사용자: 인증 토큰

파이 차트

```mermaid
pie title 마크다운 사용처
    "GitHub" : 40
    "기술 블로그" : 25
    "문서 도구 (Notion, Obsidian)" : 20
    "기타" : 15
```
pie title 마크다운 사용처 "GitHub" : 40 "기술 블로그" : 25 "문서 도구 (Notion, Obsidian)" : 20 "기타" : 15

Git 그래프

```mermaid
gitGraph
    commit
    commit
    branch develop
    commit
    commit
    checkout main
    merge develop
    commit
```
gitGraph commit commit branch develop commit commit checkout main merge develop commit

베스트 프랙티스

1. 공백 관리

  • # 뒤에 반드시 공백 — # 제목 (O), #제목 (X)
  • 단락 사이에 빈 줄 하나 — 붙어 있으면 하나의 단락으로 합쳐진다
  • 목록 앞뒤에 빈 줄 — 일부 파서에서 목록이 깨지는 것을 방지
  • 줄바꿈은 줄 끝에 공백 2개, 또는 <br>

2. 문서 구조화 전략

  • h1은 문서당 1개 — 문서 제목에만 사용
  • h2 ~ h4로 계층 구조 — h2는 대주제, h3는 소주제, h4는 세부 항목
  • 계층을 건너뛰지 않는다 — h2 다음에 바로 h4가 오면 안 된다
  • 목차(TOC) — 긴 문서에는 상단에 목차를 넣는다

3. 실무에서 자주 쓰는 패턴

접이식 섹션 (HTML 혼용)

<details>
<summary>클릭하면 열립니다</summary>

숨겨진 내용. **마크다운도 됩니다.**

- 목록도 되고
- `코드`도 된다

</details>

뱃지 (Shield.io)

![Build](https://img.shields.io/badge/build-passing-brightgreen)
![License](https://img.shields.io/badge/license-MIT-blue)

키보드 키

<kbd>Ctrl</kbd> + <kbd>C</kbd>로 복사

결과: Ctrl + C로 복사

치트시트

한눈에 보는 마크다운 문법 요약. 복사해서 바로 쓸 수 있다.

요소문법
제목# h1   ## h2   ### h3
굵게**텍스트**
기울임*텍스트*
취소선~~텍스트~~
링크[텍스트](URL)
이미지![alt](URL)
인용> 인용문
인라인 코드`코드`
코드 블록```언어 ... ```
순서 목록1. 항목
비순서 목록- 항목
작업 목록- [x] 완료   - [ ] 미완료
가로선---
| A | B | + |---|---|
각주[^1] + [^1]: 설명
수학$수식$   $$블록$$
이모지:emoji_name:
이스케이프\*   \#   \[