๐Ÿ“„
โ† ๊ฐ€์ด๋“œ ๋ชฉ๋ก์œผ๋กœ

Markdown์„ HTML๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•: ์ „์ฒด ๊ฐ€์ด๋“œ

ยท ํƒœ๊ทธ: markdown-to-html, markdown-converter, static-site-generator, jekyll-markdown, markdown-processing

Markdown์„ HTML๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

Markdown์€ ๊ธ€์“ฐ๊ธฐ๋ฅผ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์ง€๋งŒ, ์›น์€ HTML ์œ„์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  Markdown ๋ฌธ์„œ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ‘œ์‹œํ•˜๊ธฐ ์ „์— HTML๋กœ ๋ณ€ํ™˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ๋Š” Markdown์„ HTML๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ฃผ์š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• 1: ๋ช…๋ น์ค„ ๋„๊ตฌ

Pandoc

Pandoc์€ ์ˆ˜์‹ญ ๊ฐ€์ง€ ํ˜•์‹์„ ์ง€์›ํ•˜๋Š” ๋ฒ”์šฉ ๋ฌธ์„œ ๋ณ€ํ™˜๊ธฐ์ž…๋‹ˆ๋‹ค.

# Basic conversion
pandoc input.md -o output.html

# Standalone HTML with <html> and <body> tags
pandoc input.md -o output.html -s

# With table of contents
pandoc input.md -o output.html -s --toc

Python-Markdown

pip install markdown
python -m markdown input.md > output.html
import markdown
with open("input.md", "r") as f:
    text = f.read()
html = markdown.markdown(text, extensions=["fenced_code", "tables"])

CommonMark (JavaScript)

npm install commonmark
const commonmark = require("commonmark");
const reader = new commonmark.Parser();
const writer = new commonmark.HtmlRenderer();
const parsed = reader.parse("# Hello\nThis is **bold**.");
const html = writer.render(parsed);

๋ฐฉ๋ฒ• 2: ์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ๊ธฐ

Jekyll

Jekyll์€ GitHub Pages๋ฅผ ๊ตฌ๋™ํ•ฉ๋‹ˆ๋‹ค. _posts ๋˜๋Š” ์ปฌ๋ ‰์…˜์˜ Markdown ํŒŒ์ผ์„ HTML๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

gem install jekyll bundler
jekyll new my-site
jekyll build
jekyll serve

๋™์  ์ฝ˜ํ…์ธ ๋ฅผ ์œ„ํ•ด Liquid ํ…œํ”Œ๋ฆฟ๊ณผ ํ•จ๊ป˜ Kramdown ํ”„๋กœ์„ธ์„œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Hugo

Hugo๋Š” ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„์˜ ๋นŒ๋“œ ์†๋„๋กœ ์œ ๋ช…ํ•œ Go ๊ธฐ๋ฐ˜ ์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ๊ธฐ์ž…๋‹ˆ๋‹ค.

hugo new site my-site
hugo new posts/my-first-post.md
hugo server -D

ํ…Œ์ด๋ธ”, ํŽœ์Šค ์ฝ”๋“œ ๋ธ”๋ก, ๊ฐ์ฃผ๋ฅผ ์ง€์›ํ•˜๋Š” Goldmark๋ฅผ ๊ธฐ๋ณธ Markdown ๋ Œ๋”๋Ÿฌ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Next.js (MDX)

Next.js๋Š” Markdown ์•ˆ์— React ์ปดํฌ๋„ŒํŠธ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” MDX๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

npm install next @next/mdx @mdx-js/loader

MDX๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์„œ์— ๋ผ์ด๋ธŒ ์ฝ”๋“œ ์˜ˆ์ œ, ์ฐจํŠธ, ํผ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• 3: ์˜จ๋ผ์ธ ๋ณ€ํ™˜๊ธฐ

๋„๊ตฌ ์„ค์น˜ ์—†์ด ์ผํšŒ์„ฑ ๋ณ€ํ™˜์„ ์›ํ•œ๋‹ค๋ฉด, ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜ ๋ณ€ํ™˜๊ธฐ๊ฐ€ ์ฆ‰๊ฐ์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  1. ํŽธ์ง‘๊ธฐ ํŒจ๋„์— Markdown์„ ๋ถ™์—ฌ๋„ฃ๊ฑฐ๋‚˜ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  2. HTML ์ถœ๋ ฅ์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  3. ์ƒ์„ฑ๋œ HTML์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ชจ๋“  ์›น ํŽ˜์ด์ง€๋‚˜ CMS์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Markdown ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋„๊ตฌ๋Š” GitHub Flavored Markdown(ํ…Œ์ด๋ธ”, ์ฝ”๋“œ ๋ธ”๋ก, ์ž‘์—… ๋ชฉ๋ก, ์ทจ์†Œ์„ )์„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์™„์ „ํžˆ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• 4: ํŽธ์ง‘๊ธฐ ํ”Œ๋Ÿฌ๊ทธ์ธ

| ํŽธ์ง‘๊ธฐ | ๊ธฐ๋Šฅ | ๋ช…๋ น์–ด | |--------|---------|---------| | VS Code | ๋‚ด์žฅ ๋ฏธ๋ฆฌ๋ณด๊ธฐ | Ctrl+Shift+V | | Sublime Text | MarkdownPreview | Alt+M | | IntelliJ IDEA | ๋‚ด์žฅ ์ง€์› | Quick Documentation | | Vim | vim-markdown | :MarkdownPreview |

์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ

์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ๊ธฐ๊ฐ€ Markdown์„ HTML๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŒŒ์ดํ”„๋ผ์ธ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค:

Markdown โ†’ Parse to AST โ†’ Apply extensions โ†’ Render to HTML โ†’ Apply template โ†’ Output page

๊ธฐ๋Šฅ์ด ์˜ˆ์ƒ๋Œ€๋กœ ๋ Œ๋”๋ง๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋ฌธ์ œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํŒŒ์„œ(ํ•ด๋‹น ๋ฌธ๋ฒ•์„ ์ง€์›ํ•˜์ง€ ์•Š์Œ)๋‚˜ ๋ Œ๋”๋Ÿฌ(์˜ˆ์ƒ์น˜ ๋ชปํ•œ HTML์„ ์ถœ๋ ฅํ•จ)์— ์žˆ์Šต๋‹ˆ๋‹ค.

Markdown์„ HTML๋กœ ์˜จ๋ผ์ธ ๋ณ€ํ™˜

Markdown ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Markdown์„ HTML๋กœ ์ฆ‰์‹œ ๋ณ€ํ™˜ํ•˜์„ธ์š”. ํŽธ์ง‘๊ธฐ์— Markdown์„ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ๋ถ™์—ฌ๋„ฃ์œผ๋ฉด ๋ Œ๋”๋ง๋œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

Markdown์„ HTML๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•: ์ „์ฒด ๊ฐ€์ด๋“œ - CoolTool