๋ฐ˜์‘ํ˜•

๐ŸŽˆ dangerouslySetInnerHTML

 

dangerouslySetInnerHTML์€ React์—์„œ HTML์„ ์ง์ ‘์ ์œผ๋กœ DOM์— ์‚ฝ์ž…ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ์ด๋‹ค. ์ด ์ด๋ฆ„์— dangerously๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ๋“ค์–ด๊ฐ„ ์ด์œ ๋Š” HTML์„ ์ง์ ‘ ์กฐ์ž‘ํ•  ๋•Œ ๋ณด์•ˆ ์œ„ํ—˜์ด ์žˆ์„ ์ˆ˜ ์žˆ์Œ์„ ๊ฐ•์กฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋‹ค.

์‚ฌ์šฉ๋ฒ•

dangerouslySetInnerHTML์€ ๊ฐ์ฒด๋ฅผ ์†์„ฑ ๊ฐ’์œผ๋กœ ๋ฐ›๊ณ , ์ด ๊ฐ์ฒด๋Š” __html ํ‚ค๋ฅผ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค. ์ด ํ‚ค์˜ ๊ฐ’์œผ๋กœ๋Š” HTML ๋ฌธ์ž์—ด์ด ๋“ค์–ด๊ฐ„๋‹ค. ์™ธ๋ถ€์—์„œ ๊ฐ€์ ธ์˜จ HTML์„ ์‚ฝ์ž…ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š”๋ฐ, React๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง์ ‘์ ์ธ HTML ์‚ฝ์ž…์„ ๋ฐฉ์ง€ํ•ด์„œ XSS ๊ณต๊ฒฉ์„ ๋ง‰์œผ๋ ค๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

function MyComponent() {
  return <div dangerouslySetInnerHTML={{ __html: '<strong>์•ˆ๋…•ํ•˜์„ธ์š”</strong>' }} />;
}

์žฅ์ 

  • ์ง์ ‘์ ์ธ HTML ์‚ฝ์ž…: ๊ธฐ์กด HTML ๋ฌธ์ž์—ด์„ DOM์— ๋ฐ”๋กœ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์–ด์„œ, ์„œ๋ฒ„๋‚˜ ์™ธ๋ถ€์—์„œ ๊ฐ€์ ธ์˜จ ๋งˆํฌ์—…์„ ๊ทธ๋Œ€๋กœ ๋ Œ๋”๋งํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.
  • ์œ ์—ฐ์„ฑ: ํŠน์ • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ๋„๊ตฌ์—์„œ ์ƒ์„ฑ๋œ HTML์„ React ์ปดํฌ๋„ŒํŠธ์™€ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์ 

  • ๋ณด์•ˆ ์œ„ํ—˜: XSS ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•˜๋‹ค. ์™ธ๋ถ€์—์„œ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฒ€์ฆ๋˜์ง€ ์•Š์œผ๋ฉด ์•…์˜์ ์ธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค.
  • SEO ์ตœ์ ํ™”: ์ •์ ์ธ ํŽ˜์ด์ง€ ์ƒ์„ฑ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค. ํฌ๋กค๋Ÿฌ๊ฐ€ JavaScript๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • ์„ฑ๋Šฅ ๋ฌธ์ œ: React์˜ ๊ฐ€์ƒ DOM๊ณผ์˜ ๋™๊ธฐํ™” ๋ฌธ์ œ๋กœ ์ธํ•ด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.

๋Œ€์ฒด ๋ฐฉ๋ฒ•

  • React ์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉ: HTML์„ React ์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ XSS ๊ณต๊ฒฉ์˜ ์œ„ํ—˜์„ ์ค„์ด๊ณ , React์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • DOMPurify์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ: ์™ธ๋ถ€ HTML์„ ์‚ฝ์ž…ํ•˜๊ธฐ ์ „์— ํด๋ฆฐ์—…ํ•˜๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ์œ„ํ—˜ํ•œ ํƒœ๊ทธ์™€ ์†์„ฑ์„ ์ œ๊ฑฐํ•˜์—ฌ ์•ˆ์ „ํ•œ HTML๋งŒ ์‚ฝ์ž…๋˜๋„๋ก ํ•œ๋‹ค.
  • Markdown ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ: ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ Markdown ํ…์ŠคํŠธ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ HTML๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์ด๋‚˜ ์ฝ”๋ฉ˜ํŠธ ์‹œ์Šคํ…œ์— ์œ ์šฉํ•˜๋‹ค.

dangerouslySetInnerHTML์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ณด์•ˆ์„ ํŠนํžˆ ์ฃผ์˜ํ•ด์•ผ ํ•˜๊ณ , ๊ฐ€๋Šฅํ•˜๋ฉด ์•ˆ์ „ํ•œ ๋Œ€์ฒด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ์ข‹๋‹ค.

๋ฐ˜์‘ํ˜•

+ Recent posts