๊ด€๋ฆฌ ๋ฉ”๋‰ด

C-log

[FE] MarkDown lib๋ฅผ ์ ์šฉํ•ด ์‹œํ—˜์ง€ ์ •๋ ฌ ๋ณธ๋ฌธ

๐Ÿ’ป๊ฐœ๋ฐœ ๋…ธํŠธ/๋‚˜๋งŒ์˜ ์‹œํ—˜์ง€

[FE] MarkDown lib๋ฅผ ์ ์šฉํ•ด ์‹œํ—˜์ง€ ์ •๋ ฌ

4:Bee 2024. 2. 25. 13:47
728x90

๋งˆํฌ๋‹ค์šด์„ ์ด์šฉํ•ด์„œ ์‹œํ—˜์ง€์˜ ์ด๋ฏธ์ง€์™€ ์‹œํ—˜ ์ž๋ฃŒ๋“ค์„ ๋ถˆ๋Ÿฌ ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•๋“ค์„ ๋ชจ์ƒ‰ํ•˜๋‹ค ๋งˆํฌ๋‹ค์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๊ณ ์ž ํ–ˆ๋‹ค. ์˜ˆ์‹œ๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ์ •๋ ฌ๋œ ๋ชจ์Šต์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค.

์™ผ์ชฝ ํ•ด๋‹น ์ •๋ ฌ๋œ ๋ชจ์Šต์€ ๋ฆฌ์•กํŠธ์—์„œ ๋งˆํฌ๋‹ค์šด์ด ์•„๋‹Œ css๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค. ์˜ค๋ฅธ์ชฝ์€ ๋งˆํฌ๋‹ค์šด๊ณผ Html๊ณผ ํ˜ผ์šฉํ•ด์„œ css๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ์ •๋ ฌ์„ ๋งˆํฌ๋‹ค์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•˜๋ฉด ์ข‹๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๋งˆํฌ๋‹ค์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ๋งŽ์€ ์ž๋ฃŒ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” react-markdown์„ ์‚ฌ์šฉํ–ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ ์˜ˆ์‹œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

import ReactMarkdown from "react-markdown";
 
const markdown = `
  # Heading 1
  This is a **bold** text and this is a *italic* text.
`;

return (
    <div>
      <ReactMarkdown>{markdown}</ReactMarkdown>
    </div>
 );

react-markdown์„ importํ•˜๊ณ  ๋ณ€์ˆ˜๋กœ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ธ€์„ ๋งˆํฌ๋‹ค์šด์œผ๋กœ ์ž‘์„ฑํ•˜๊ณ  ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ReactMarkdown ์ปดํฌ๋„ŒํŠธ ์•ˆ์— ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๊ทธ๋งŒ์ด๋‹ค. ๋งˆํฌ๋‹ค์šด์˜ ๊ฒฐ๊ณผ๋Š” ์ž˜ ๋„์ถœ์ด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” html์„ ํ˜ผ์šฉํ•ด์„œ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋ฉด html์„ ๋ Œ๋”๋งํ•˜์ง€ ์•Š๊ณ  html ๊ทธ ๋Œ€๋กœ ์ถœ๋ ฅ์ด ๋œ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋ณด์•ˆ์ƒ์˜ ๋ฌธ์ œ๋กœ ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ๋งˆํฌ๋‹ค์šด ํ”Œ๋ ›ํผ์—์„œ html ๋ Œ๋”๋ง์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. (react-markdown Appendix A: HTML in markdown ์ฐธ๊ณ )๋”ฐ๋ผ์„œ ReactMarkdown์€ html์„ ์ง€์›ํ•˜์ง€ ์•Š๊ณ  ์žˆ๊ธฐ์— ์ปดํฌ๋„ŒํŠธ๋กœ ์ด๋ฏธ์ง€๋“ค์„ ์ถœ๋ ฅํ•˜๊ณ  ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์— ์ง์ ‘ ์ ์œผ๋กœ css๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ๋˜ํ•œ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

๊นƒํ—ˆ๋ธŒ์˜ ๋ Œ๋”๋ง์€ ๋ฌด์—‡์ธ์ง€ ์˜๋ฌธ์˜ ๋“ค ๊ฒƒ์ด๋‹ค. ๊นƒํ—ˆ๋ธŒ๋Š” mdํŒŒ์ผ์„ ์ž์ฒด๋ฅผ ๋ Œ๋”๋งํ•œ ๊ฒฐ๊ณผ์ด๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊นƒํ—ˆ๋ธŒ์˜ ๋ฐฉ์‹๋Œ€๋กœ๋ผ๋ฉด ์šฐ๋ฆฌ๋Š” mdํŒŒ์ผ์—์„œ js์—†์ด ๊ฐœ๋ฐœํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, react-markdown๊ณผ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์€ ๋งˆํฌ๋‹ค์šด์˜ ๊ธฐ๋Šฅ ์ผ๋ถ€๋ฅผ js์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค„ ๋ฟ ์ด๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์˜ˆ์ƒํ–ˆ๋˜ ๊ฒฐ๊ณผ๋“ค์„ lib์˜ ๋ณด์•ˆ์ƒ์˜ ์ด์œ ๋กœ ๋„์ถœ ํ•  ์ˆ˜ ์—†์—ˆ์œผ๋ฉฐ ๋‹ค๊ฐ๋„๋กœ css๋ฅผ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ถˆ๊ฐ€ํ”ผํ•จ๋“ค์ด ์žˆ์–ด์„œ markdown lib๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ถ€์ ํ•ฉํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

728x90
Comments