๋ผ์ด๋ธŒ ์ง€์นจ - MDX ๋ฐ ๊ธฐํƒ€ ํ”„๋ ˆ์ž„์›Œํฌ

์ตœ๊ณ ์˜ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ข‹์€ ๋ฌธ์„œ๊ฐ€ ์—†์œผ๋ฉด ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์‚ฌ๋ฌด์‹ค์—์„œ๋Š” ๋ฌธ์„œ๋ฅผ ์ž˜ ์ž‘์„ฑํ•˜๋ฉด ๋™์ผํ•œ ์งˆ๋ฌธ์— ๋‹ตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œํ™”๋Š” ์ฃผ์š” ์ง์›์ด ํšŒ์‚ฌ๋ฅผ ๋– ๋‚˜๊ฑฐ๋‚˜ ์—ญํ• ์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ ์‚ฌ๋žŒ๋“ค์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ์ƒํ™œ ์ง€์นจ์€ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๊ธด ํ…์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ Markdown์€ HTML์˜ ํ›Œ๋ฅญํ•œ ๋Œ€์•ˆ์ž…๋‹ˆ๋‹ค. ๋•Œ๋•Œ๋กœ Markdown ๊ตฌ๋ฌธ๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋‚ด๋ถ€์— HTML์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋งž์ถค ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ ์›น ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ…์ŠคํŠธ ๋ฌธ์„œ์— ์‰ฝ๊ฒŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. React(๋˜๋Š” Preact๋‚˜ Vue์™€ ๊ฐ™์€ ๋‹ค๋ฅธ JSX ํ”„๋ ˆ์ž„์›Œํฌ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ MDX์—์„œ๋„ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์„œ๋Š” ๋ฌธ์„œ ์ž‘์„ฑ ๋ฐ ์ง€์นจ ์ž‘์„ฑ์„ ์œ„ํ•œ ๋„๊ตฌ์— ๋Œ€ํ•œ ๊ด‘๋ฒ”์œ„ํ•œ ๊ฐœ์š”์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋‚˜์—ด๋œ ๋ชจ๋“  ๋„๊ตฌ๊ฐ€ MDX๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ๋ฌธ์„œํ™” ๋„๊ตฌ์— MDX๊ฐ€ ์ ์  ๋” ๋งŽ์ด ํฌํ•จ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

MDX๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

ํŒŒ์ผ .mdx Markdown๊ณผ ๋™์ผํ•œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋Œ€ํ™”ํ˜• JSX ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์™€ ์ฝ˜ํ…์ธ ์— ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Vue ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ์ง€์›์€ ์•ŒํŒŒ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. MDX ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด โ€œCreate React Appโ€์„ ์„ค์น˜ํ•˜์„ธ์š”. Next.js ๋ฐ Gatsby์šฉ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Docusaurus์˜ ๋‹ค์Œ ๋ฒ„์ „(๋ฒ„์ „ 2)๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

Docusaurus๋กœ ๋ฌธ์„œ ์ž‘์„ฑํ•˜๊ธฐ

Docusaurus๋Š” Facebook์— ๊ธ€์„ ์ผ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ React๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์—์„œ ์ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํšŒ์‚ฌ ์™ธ๋ถ€์—์„œ๋Š” Redux, Prettier, Gulp ๋ฐ Babel์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ ์ง€์นจ - MDX ๋ฐ ๊ธฐํƒ€ ํ”„๋ ˆ์ž„์›ŒํฌDocusaurus๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ.

Docusaurus๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธ€์„ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฌธ์„œ๋Š” ํ”„๋ŸฐํŠธ์—”๋“œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‚ด๋ถ€์ ์œผ๋กœ React๊ฐ€ ์žˆ์ง€๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ต์ˆ™ํ•ด์งˆ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. Markdown ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋งˆ์ˆ ์ฒ˜๋Ÿผ ์ž˜ ๊ตฌ์กฐํ™”๋˜๊ณ  ํ˜•์‹ํ™”๋˜๊ณ  ์ฝ๊ธฐ ์‰ฌ์šด ์•„๋ฆ„๋‹ค์šด ๋””์ž์ธ์˜ ๋ฌธ์„œ๊ฐ€ ์ค€๋น„๋ฉ๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ ์ง€์นจ - MDX ๋ฐ ๊ธฐํƒ€ ํ”„๋ ˆ์ž„์›Œํฌ
Redux ์›น์‚ฌ์ดํŠธ์—์„œ ํ‘œ์ค€ Docusaurus ํ…œํ”Œ๋ฆฟ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Docusaurus๋กœ ๊ตฌ์ถ•๋œ ์›น์‚ฌ์ดํŠธ์—๋Š” Markdown ๊ธฐ๋ฐ˜ ๋ธ”๋กœ๊ทธ๋„ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Prism.js๋Š” ๊ตฌ๋ฌธ ๊ฐ•์กฐ๋ฅผ ์œ„ํ•ด ์ฆ‰์‹œ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. Docusaurus๊ฐ€ ๋น„๊ต์  ์ตœ๊ทผ์— ๋“ฑ์žฅํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  StackShare์—์„œ๋Š” 2018๋…„ ์ตœ๊ณ ์˜ ๋„๊ตฌ๋กœ ์ธ์ •๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

๊ธฐํƒ€ ์ฝ˜ํ…์ธ  ์ƒ์„ฑ ์˜ต์…˜

Docusaurus๋Š” ๋ฌธ์„œ ์ž‘์„ฑ์„ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์›น์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ์ˆ˜์—†์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์–ธ์–ด, CMS๋กœ ์ž์‹ ๋งŒ์˜ ์†”๋ฃจ์…˜์„ ๋ฐฐํฌํ•˜๊ฑฐ๋‚˜ ์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด React, IBM ๋””์ž์ธ ์‹œ์Šคํ…œ, Apollo ๋ฐ Ghost CMS์— ๋Œ€ํ•œ ๋ฌธ์„œ์—์„œ๋Š” ๋ธ”๋กœ๊ทธ์— ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ๊ธฐ์ธ Gatsby๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Vue๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ VuePress๊ฐ€ ์ข‹์€ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์€ Python์œผ๋กœ ์ž‘์„ฑ๋œ ์ƒ์„ฑ๊ธฐ์ธ MkDocs๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜คํ”ˆ ์†Œ์Šค์ด๋ฉฐ ๋‹จ์ผ YAML ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. GitBook๋„ ์ข‹์€ ์˜ต์…˜์ด์ง€๋งŒ ๊ณต๊ณต ๋ฐ ๋น„์ƒ์—…์  ํŒ€์—๊ฒŒ๋งŒ ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค. Git์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ mardown ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๊ณ  Github์—์„œ ์ž‘์—…ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์„œํ™” ๊ตฌ์„ฑ ์š”์†Œ: Docz, Storybook ๋ฐ Styleguidist

์ง€์นจ, ์‹œ์Šคํ…œ ์„ค๊ณ„, ๊ตฌ์„ฑ ์š”์†Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ ๋ฌด์—‡์ด๋ผ๊ณ  ๋ถ€๋ฅด๋“  ์ตœ๊ทผ์—๋Š” ๋งค์šฐ ์ธ๊ธฐ๊ฐ€ ๋†’์•„์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. React์™€ ๊ฐ™์€ ๊ตฌ์„ฑ์š”์†Œ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ์—ฌ๊ธฐ์— ์–ธ๊ธ‰๋œ ๋„๊ตฌ์˜ ์ถœํ˜„์œผ๋กœ ์ด๋ฅผ ํ—ˆ์˜์‹ฌ ํ”„๋กœ์ ํŠธ์—์„œ ์œ ์šฉํ•œ ๋„๊ตฌ๋กœ ๋ณ€๋ชจ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

Storybook, Docz ๋ฐ Styleguidist๋Š” ๋ชจ๋‘ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋Œ€ํ™”ํ˜• ์š”์†Œ๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ํ•ด๋‹น API๋ฅผ ๋ฌธ์„œํ™”ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์—๋Š” ์ƒํƒœ์™€ ์Šคํƒ€์ผ์ด ์„œ๋กœ ๋‹ค๋ฅธ ์ˆ˜์‹ญ ๋˜๋Š” ์ˆ˜๋ฐฑ ๊ฐœ์˜ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์‚ฌ๋žŒ๋“ค์ด ํ•ด๋‹น ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์นดํƒˆ๋กœ๊ทธํ™”ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ง€์นจ์€ ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ๊ฐœ์š”๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‹œ๊ฐ์  ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋„๊ตฌ๋Š” ๋‹ค์–‘ํ•œ ์ƒํƒœ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™˜๊ฒฝ์—์„œ ๊ตฌ์„ฑ ์š”์†Œ์˜ ๊ฐ ์ƒํƒœ๋ฅผ ์žฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํด๋ฆญํ•˜๋Š” ๋Œ€์‹  ๋ณ„๋„์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋„๋‹ฌํ•˜๊ธฐ ์–ด๋ ค์šด ์ƒํƒœ(์˜ˆ: ๋กœ๋”ฉ ์ƒํƒœ)๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์–‘ํ•œ ์ƒํƒœ ๋ฐ ์†์„ฑ ๋ชฉ๋ก์˜ ์‹œ๊ฐ์  ๋ฐ๋ชจ์™€ ํ•จ๊ป˜ ์ฝ˜ํ…์ธ ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์„ค๋ช…(์„ค๊ณ„ ๊ทผ๊ฑฐ, ์‚ฌ์šฉ ์‚ฌ๋ก€ ๋˜๋Š” ์‚ฌ์šฉ์ž ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ์„ค๋ช…)์„ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋งˆํฌ๋‹ค์šด์€ ๋ฐฐ์šฐ๊ธฐ๊ฐ€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ ์ง€์นจ์€ ๋””์ž์ด๋„ˆ์™€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๋ฆฌ์†Œ์Šค์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. Docz, Styleguidist ๋ฐ Storybook์€ Markdown์„ ๊ตฌ์„ฑ ์š”์†Œ์™€ ์‰ฝ๊ฒŒ ํ˜ผํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์„œ

ํ˜„์žฌ Docz๋Š” React์—์„œ๋งŒ ์ž‘๋™ํ•˜์ง€๋งŒ Preact, Vue ๋ฐ ์›น ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ํ™œ๋ฐœํ•œ ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. Docz๋Š” ์„ธ ๊ฐ€์ง€ ๋„๊ตฌ ์ค‘ ๊ฐ€์žฅ ์ตœ์‹  ๋„๊ตฌ์ด์ง€๋งŒ Github์—์„œ 14๊ฐœ ์ด์ƒ์˜ ๋ณ„์„ ์ˆ˜์ง‘ํ–ˆ์Šต๋‹ˆ๋‹ค. Docz๋Š” ๋‘ ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. <Playground> ะธ < Props >. ํŒŒ์ผ๋กœ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. .mdx.

import { Playground, Props } from "docz";
import Button from "../src/Button";

## You can _write_ **markdown**
### You can import and use components

<Button>click</Button>

์ž์‹ ๋งŒ์˜ React ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ž˜ํ•‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. <Playground>๋‚ด์žฅ๋œ CodePen ๋˜๋Š” CodeSandbox์˜ ์•„๋‚ ๋กœ๊ทธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ณด๊ณ  ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<Playground>
  <Button>click</Button>
</Playground>

<Props> ํŠน์ • React ๊ตฌ์„ฑ ์š”์†Œ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์†์„ฑ, ๊ธฐ๋ณธ๊ฐ’ ๋ฐ ์†์„ฑ์ด ํ•„์š”ํ•œ์ง€ ์—ฌ๋ถ€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

<Props of={Button} />

๊ฐœ์ธ์ ์œผ๋กœ ์ €๋Š” ์ด MDX ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ๋ฐฉ์‹์ด ๊ฐ€์žฅ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์ž‘์—…ํ•˜๊ธฐ ๊ฐ€์žฅ ์‰ฝ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ ์ง€์นจ - MDX ๋ฐ ๊ธฐํƒ€ ํ”„๋ ˆ์ž„์›Œํฌ

Gatsby ์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ๊ธฐ์˜ ํŒฌ์ด๋ผ๋ฉด Docz๊ฐ€ ํ›Œ๋ฅญํ•œ ํ†ตํ•ฉ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์Šคํƒ€์ผ ๊ฐ€์ด๋“œ

Docz์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์˜ˆ์ œ๋Š” Markdown ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. Styleguidist๋Š” ์ผ๋ฐ˜ ํŒŒ์ผ์—์„œ Markdown ์ฝ”๋“œ ๋ธ”๋ก(์‚ผ์ค‘๋”ฐ์˜ดํ‘œ)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. .md MDX๊ฐ€ ์•„๋‹Œ ํŒŒ์ผ.

```js
<Button onClick={() => console.log('clicked')>Push Me</Button>

Markdown์˜ ์ฝ”๋“œ ๋ธ”๋ก์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ฝ”๋“œ๋งŒ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. Styleguidist๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์–ธ์–ด ํƒœ๊ทธ๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ์ฝ”๋“œ ๋ธ”๋ก js, jsx ๋˜๋Š” javascript React ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค. Docz์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ฝ”๋“œ๋„ ํŽธ์ง‘ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ฆ‰์‹œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ ์ง€์นจ - MDX ๋ฐ ๊ธฐํƒ€ ํ”„๋ ˆ์ž„์›Œํฌ

Styleguidist๋Š” PropTypes, Flow ๋˜๋Š” Typescript ์„ ์–ธ์—์„œ ์†์„ฑ ํ…Œ์ด๋ธ”์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ ์ง€์นจ - MDX ๋ฐ ๊ธฐํƒ€ ํ”„๋ ˆ์ž„์›Œํฌ

Styleguidist๋Š” ํ˜„์žฌ React์™€ Vue๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์Šคํ† ๋ฆฌ ๋ถ

์Šคํ† ๋ฆฌ๋ถ์€ 'UI ์ปดํฌ๋„ŒํŠธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ'์œผ๋กœ ์ž๋ฆฌ๋งค๊น€ํ•ฉ๋‹ˆ๋‹ค. Markdown ๋˜๋Š” MDX ํŒŒ์ผ ๋‚ด์— ์˜ˆ์ œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋Œ€์‹  ๋‹ค์Œ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์—ญ์‚ฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ๋‚ด๋ถ€. ์ด์•ผ๊ธฐ ๊ตฌ์„ฑ ์š”์†Œ์˜ ํŠน์ • ์ƒํƒœ๋ฅผ ๋ฌธ์„œํ™”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ตฌ์„ฑ ์š”์†Œ์—๋Š” ๋กœ๋“œ๋œ ์ƒํƒœ์™€ ๋น„ํ™œ์„ฑํ™”๋œ ์ƒํƒœ์— ๋Œ€ํ•œ ๊ธฐ๋ก์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์‚ฌ์šฉ).

storiesOf('Button', module)
  .add('disabled', () => (
    <Button disabled>lorem ipsum</Button>
  ))

Storybook์€ Styleguidist ๋ฐ Docz๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋™์‹œ์— ์ด๊ฒƒ์€ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ์˜ต์…˜์ด๋ฉฐ ์ด ํ”„๋กœ์ ํŠธ๋Š” Github์—์„œ 36๊ฐœ ์ด์ƒ์˜ ๋ณ„์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. 000๋ช…์˜ ๊ธฐ์—ฌ์ž์™€ ์ •๊ทœ ์ง์›์ด ์ฐธ์—ฌํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. Airbnb, Algolia, Atlassian, Lyft ๋ฐ Salesforce์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Storybook์€ React, React Native, Vue, Angular, Mithril, Ember, Riot, Svelte ๋ฐ ์ผ๋ฐ˜ HTML ๋“ฑ ๊ฒฝ์Ÿ์‚ฌ๋ณด๋‹ค ๋” ๋งŽ์€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์—๋Š” Docz ๋ฐ MDX์˜ ๊ธฐ๋Šฅ์ด ๋„์ž…๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

# Button

Some _notes_ about your button written with **markdown syntax**.

<Story name="disabled">
  <Button disabled>lorem ipsum</Button>
</Story>

Storybook์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์€ ์•ž์œผ๋กœ ๋ช‡ ๋‹ฌ์— ๊ฑธ์ณ ์ ์ง„์ ์œผ๋กœ ์ถœ์‹œ๋  ์˜ˆ์ •์ด๋ฉฐ ์ด๋Š” ํฐ ์ง„์ „์ด ๋  ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ

ํŒจํ„ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ด์ ์€ Medium์˜ ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ๊ธฐ์‚ฌ์—์„œ ๊ทน์ฐฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ž˜ ์ˆ˜ํ–‰๋˜๋ฉด ๊ด€๋ จ ์ œํ’ˆ์„ ๋งŒ๋“ค๊ณ  ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค. ๋ฌผ๋ก , ์ด๋Ÿฌํ•œ ๋„๊ตฌ ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ๋งˆ๋ฒ•์ฒ˜๋Ÿผ ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ์ƒ์„ฑํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ์‹ ์ค‘ํ•œ ๋””์ž์ธ๊ณผ CSS๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํšŒ์‚ฌ ์ „์ฒด๊ฐ€ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค ๋•Œ๊ฐ€ ๋˜๋ฉด Docz, Storybook ๋ฐ Styleguidist๊ฐ€ ํ›Œ๋ฅญํ•œ ์„ ํƒ์ž…๋‹ˆ๋‹ค.

๋ฒˆ์—ญ๊ฐ€๋กœ๋ถ€ํ„ฐ. ์ด๊ฒƒ์ด Habrรฉ์— ๋Œ€ํ•œ ๋‚˜์˜ ์ฒซ ๊ฒฝํ—˜์ž…๋‹ˆ๋‹ค. ๋ถ€์ •ํ™•ํ•œ ๋‚ด์šฉ์„ ๋ฐœ๊ฒฌํ–ˆ๊ฑฐ๋‚˜ ๊ธฐ์‚ฌ ๊ฐœ์„ ์„ ์œ„ํ•œ ์ œ์•ˆ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐœ์ธ ๋ฉ”์‹œ์ง€๋กœ ์ €์—๊ฒŒ ํŽธ์ง€๋ฅผ ๋ณด๋‚ด์ฃผ์„ธ์š”.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€