마크다운 문법 기본 가이드
마크다운 기본 문법은 John Gruber가 2004년 오리지널 설계 문서에서 정의한 11가지 서식 요소로 구성되며, 2026년 현재도 거의 모든 Markdown 애플리케이션이 이 전체 세트를 지원합니다. 11가지 요소는 제목, 단락, 줄바꿈, 강조, 인용, 목록, 코드, 수평선, 링크, 이미지, 문자 이스케이프입니다. 각 요소는 키보드에 이미 있는 문장부호만으로 작성할 수 있고, 각각 특정 HTML 태그로 변환됩니다. 프로세서마다 작은 차이가 있으므로, 이 가이드에서는 어디서나 동일하게 렌더링되는 방식을 짚어 드립니다. 아래의 모든 예제는 실시간 미리보기를 지원하는 마크다운 에디터에 그대로 붙여 넣을 수 있으며, 입력과 동시에 렌더링 결과가 나타납니다.
제목(헤딩)
제목은 1개에서 6개의 샵 기호(#)와 공백으로 시작하며, 기호의 개수가 H1부터 H6까지의 레벨을 결정합니다.
# Heading level 1
## Heading level 2
### Heading level 3
#### Heading level 4
##### Heading level 5
###### Heading level 6
각 줄은 대응하는 HTML 태그로 변환되므로 # Page Title은 h1 요소로, ###### Fine Print는 h6 요소로 렌더링됩니다. 마크다운 제목에는 상위 2개 레벨에 한해 대체 문법도 있습니다. 텍스트 아래 줄에 등호를 몇 개든 나열하면 H1, 하이픈을 나열하면 H2가 됩니다. # 형식은 ATX 스타일, 밑줄 형식은 Setext 스타일이라고 부릅니다.
Heading level 1
===============
Heading level 2
---------------
모범 사례: 모든 제목의 앞뒤에 빈 줄을 넣고, 샵 기호와 텍스트 사이에 공백을 1칸 유지하면 어떤 애플리케이션에서도 제목이 올바르게 렌더링됩니다.
단락
단락은 위아래에 빈 줄을 둔 1줄 이상의 연속된 텍스트이며, 별도의 표시가 전혀 필요 없습니다.
The first paragraph ends here.
A blank line above this sentence starts a second paragraph.
렌더러는 각 블록을 p 태그로 감싸므로 위의 블록 2개는 서로 다른 HTML 단락 2개가 됩니다. 블록 안의 단순 줄바꿈은 하나의 이어진 텍스트로 합쳐지므로, 소스를 80자에서 줄바꿈해도 출력은 끊기지 않는 하나의 단락으로 유지됩니다.
모범 사례: 단락은 항상 왼쪽 여백에 붙여서 작성합니다. 줄 앞에 공백이 4칸 이상 들어가면 단락이 코드 블록으로 바뀌기 때문입니다.
줄바꿈
단락 안에서 줄을 바꾸려면 줄 끝에 공백을 2칸 이상 넣거나 HTML 태그 <br>을 사용합니다.
This line ends with 2 trailing spaces.
This line appears directly below it.
This line ends with a br tag.<br>
This line also sits inside the same paragraph.
두 방법 모두 br 요소로 렌더링되어, 두 번째 줄이 단락 간격 없이 첫 줄 바로 아래에 표시됩니다. 아무것도 붙이지 않은 단순 줄바꿈은 두 줄을 하나로 합칩니다. CommonMark는 줄 끝 백슬래시도 줄바꿈으로 인정하지만 구형 프로세서는 무시하므로, 어디서나 통하는 방법은 줄 끝 공백과 <br> 태그 2가지입니다.
모범 사례: 복사 붙여넣기와 코드 리뷰를 거쳐도 유지되어야 하는 줄바꿈에는 <br> 태그를 선택합니다. 줄 끝 공백은 대부분의 에디터에서 보이지 않기 때문입니다.
강조(굵게, 기울임)
마크다운에서 굵게 표시하려면 양쪽에 별표 2개를 쓰고, 기울임은 1개, 굵은 기울임은 3개를 씁니다. 단어 전체를 감쌀 때는 밑줄 기호도 동일하게 사용할 수 있습니다.
This word is **bold** and so is this __word__.
This word is *italic* and so is this _word_.
This phrase is ***bold and italic***.
렌더러는 이 기호를 strong 태그와 em 태그로 변환합니다. **bold**는 <strong>bold</strong>가 되고 *italic*은 <em>italic</em>이 되며, 3개짜리 기호는 한 태그를 다른 태그 안에 중첩합니다. 강조는 단어 중간에서도 동작하므로 un*believ*able은 가운데 6글자만 기울임으로 표시합니다.
모범 사례: 단어 중간을 강조할 때는 밑줄 기호 대신 별표를 사용합니다. 단어 내부의 별표는 모든 주요 프로세서가 동일하게 처리하지만, 내부 밑줄 기호는 처리 방식이 제각각이기 때문입니다.
인용
인용은 줄 시작의 부등호 기호(>)로 시작하며, 인용하는 각 줄마다 기호를 붙입니다.
> A single-paragraph quote needs 1 marker per line.
>
> A marked blank line continues the quote into a second paragraph.
>
>> Two markers push this paragraph 1 level deeper as a nested quote.
출력은 blockquote 요소이며, 기호를 2개 겹치면 첫 번째 인용 안에 두 번째 인용이 1레벨 더 깊게 중첩됩니다. 인용 안에서는 다른 마크다운도 사용할 수 있습니다. 각 줄이 > 기호로 시작하기만 하면 제목, 목록, 굵은 텍스트가 인용 안에서도 정상적으로 렌더링되므로, 구조를 갖춘 인용 이메일이나 출처 있는 인용문에 적합합니다.
모범 사례: 모든 인용의 앞뒤를 빈 줄로 감싸면 각 프로세서가 인용의 시작과 끝을 정확하게 감지합니다.
목록
순서 있는 목록은 각 항목 앞에 숫자와 마침표를 놓고, 순서 없는 목록은 각 항목 앞에 하이픈, 별표 또는 더하기 기호를 놓습니다.
1. First step
2. Second step
3. Third step
1. Indented sub-step
- Bullet item
- Bullet item
- Nested bullet
순서 있는 목록은 ol 요소로 렌더링되고 처음 입력한 숫자부터 세기 시작하므로, 1, 8, 3으로 작성한 목록도 출력은 1, 2, 3이 됩니다. 마크다운 목록 중 순서 없는 목록은 3가지 기호 중 무엇을 쓰든 ul 요소로 렌더링됩니다. 공백 4칸 또는 탭 1개 들여쓰기로 하위 목록이 중첩되며, 같은 들여쓰기로 다른 요소도 목록 항목 안에 넣을 수 있습니다. 단락과 인용은 공백 4칸이 필요하고, 목록 안의 코드 블록은 공백 8칸이 필요합니다. 표준 코드 들여쓰기 4칸이 목록 들여쓰기 위에 더해지기 때문입니다.
모범 사례: 하나의 목록에서는 기호 스타일을 1가지로 통일하고, 순서 있는 목록의 숫자 뒤에는 괄호가 아닌 마침표를 사용합니다. 마침표 형식은 모든 Markdown 애플리케이션에서 동작하기 때문입니다.
코드
인라인 코드는 백틱 1개씩으로 감싸고, 코드 블록은 공백 4칸 이상 또는 탭 1개로 들여 쓴 연속된 줄입니다.
Type `git status` to check the working tree.
<html>
<head></head>
</html>
백틱 한 쌍은 고정폭 글꼴의 code 요소로 렌더링되고, 들여 쓴 블록은 모든 공백을 보존한 채 pre 태그와 code 태그 안에 렌더링됩니다. 백틱 자체를 포함하는 코드 조각은 백틱 2개로 감싸야 하므로 the outer pair displays `code` literally처럼 작성합니다. 백틱 3개를 쓰는 펜스형 코드 블록은 확장 문법에 속하며, 공백 4칸 들여쓰기가 오리지널 방식입니다.
모범 사례: 문자 그대로의 백틱은 백틱 2개로 감쌉니다. 그러면 코드 스팬이 일찍 닫히지 않고 안쪽 문자가 그대로 출력됩니다.
수평선
수평선은 별표, 하이픈 또는 밑줄 기호를 3개 이상 한 줄에 단독으로 놓아 만듭니다.
***
---
___
3가지 버전 모두 동일한 hr 요소, 즉 전체 너비의 구분선으로 렌더링됩니다. 기호는 3개를 넘겨 얼마든지 반복해도 출력이 달라지지 않으므로, 하이픈 20개짜리 줄도 3개와 같은 선을 만듭니다. 제목을 쓰기에는 무거운 장면 전환이나 섹션 경계를 표시할 때 이 선을 사용합니다.
모범 사례: 각 수평선의 위아래에 빈 줄을 남깁니다. 텍스트 바로 아래에 하이픈만 있는 줄을 두면 그 텍스트가 H2 제목으로 바뀌기 때문입니다.
링크
인라인 링크는 링크 텍스트를 대괄호로 감싸고 바로 뒤에 괄호로 URL을 붙이며, 따옴표로 감싼 제목은 선택 사항입니다.
Read the [original spec](https://daringfireball.net/projects/markdown/ "Gruber's 2004 spec").
Reference style keeps prose clean: read the [original spec][1].
[1]: https://daringfireball.net/projects/markdown/
Bare addresses work in angle brackets: <https://example.com> and <mail@example.com>
모든 형식이 a 요소로 렌더링되며, 제목 텍스트는 마우스를 올렸을 때 툴팁으로 나타납니다. 참조 스타일 링크는 URL을 문장에서 분리합니다. [1] 라벨은 파일 어디에나 둘 수 있는 정의를 가리키므로, 긴 URL이 가득한 단락도 소스 상태 그대로 읽기 쉽게 유지됩니다. 꺾쇠괄호는 원시 URL이나 이메일 주소를 추가 텍스트 없이 클릭 가능한 링크로 바꿉니다. 링크에는 서식도 적용할 수 있어, 구문 전체를 별표로 감싸면 굵은 링크가 되고 대괄호 안을 백틱으로 감싸면 코드로 렌더링됩니다.
모범 사례: URL 안의 공백은 %20으로 인코딩합니다. 그래야 전체 주소가 모든 프로세서에서 유지됩니다.
이미지
이미지는 느낌표, 대괄호 안의 대체 텍스트, 괄호 안의 이미지 경로 또는 URL 순서로 작성합니다.

[](https://example.com/report)
첫 줄은 대체 텍스트를 접근성 라벨로, 따옴표 안의 제목을 마우스 오버 텍스트로 갖는 img 요소로 렌더링됩니다. 이 문법은 링크 앞에 문자 1개만 더한 형태입니다. 둘째 줄은 이미지 구문 전체를 링크 안에 중첩한 것으로, 그림을 클릭하면 대상 URL이 열립니다.
모범 사례: 대체 텍스트에는 이미지 내용을 설명하는 문장을 씁니다. 스크린 리더와 검색 엔진이 그림 대신 이 텍스트를 읽기 때문입니다.
문자 이스케이프
서식 문자 앞에 백슬래시()를 놓으면 그 문자는 마크다운 기능을 실행하지 않고 문자 그대로 표시됩니다.
\* This line shows a literal asterisk, not a bullet point.
1968\. The escaped period stops this year from starting an ordered list.
백슬래시 자체는 출력에 전혀 나타나지 않고 뒤의 문자만 인쇄됩니다. 마크다운이 백슬래시 이스케이프를 허용하는 문자는 12가지입니다. 백슬래시, 백틱, 별표, 밑줄 기호, 중괄호, 대괄호, 괄호, 샵 기호, 더하기 기호, 빼기 기호, 마침표, 느낌표가 그 대상입니다. 위의 두 번째 예제는 흔한 함정을 해결합니다. 숫자와 마침표로 시작하는 줄은 이스케이프가 없으면 목록 항목이 되어 버리기 때문입니다.
모범 사례: 이스케이프는 12가지 목록에 있는 문자에만 사용합니다. 그 외의 문자 앞에 놓인 백슬래시는 눈에 보이는 백슬래시로 출력되기 때문입니다.
자주 묻는 질문
마크다운 기본 문법이란 무엇입니까?
기본 문법은 John Gruber의 2004년 마크다운 설계 문서에서 나온 11가지 요소의 기능 세트이며, 거의 모든 Markdown 애플리케이션이 이를 전부 지원합니다. 11가지 요소는 프로세서 간에 일관되게 동작하므로, 여러 플랫폼을 오가는 문서에는 기본 세트가 가장 안전한 선택입니다.
마크다운 제목은 몇 레벨까지 지원합니까?
마크다운은 1개에서 6개의 샵 기호로 작성하는 6개의 제목 레벨을 지원하며, HTML 태그 h1부터 h6까지 직접 대응합니다. 밑줄을 쓰는 대체 문법은 상위 2개 레벨만 지원합니다. 등호는 H1, 하이픈은 H2입니다.
새 단락을 만들지 않고 줄만 바꾸려면 어떻게 합니까?
줄 끝에 공백 2칸을 넣거나 HTML 태그 <br>을 사용합니다. 두 방법 모두 현재 단락 안에 br 요소를 렌더링합니다. 빈 줄은 효과가 다릅니다. 단락을 닫고 새 단락을 엽니다.
기본 문법이면 충분합니까, 아니면 확장 문법이 필요합니까?
표준 문서는 기본 문법으로 충분하며, 확장 문법은 표, 펜스형 코드 블록, 각주 등 GFM 같은 후속 명세의 요소를 추가합니다. 호환성을 극대화하려면 기본 세트로 시작한 뒤, 대상 플랫폼의 지원 여부를 확인하고 확장 요소를 추가합니다.
