6์›” 15์ผ

HSKwonยท2022๋…„ 6์›” 15์ผ
0
post-thumbnail

๐Ÿ’ก ์—ฌ๋Ÿฌ ์›น์‚ฌ์ดํŠธ๋“ค์„ ๋ณด๋ฉด ๊ตต๊ธฐ, ๋ฐ‘์ค„, ๊ธฐ์šธ์ž„ ๋“ฑ์„ ์ ์šฉํ•˜๋Š” ๊ธ€์“ฐ๊ธฐ(์›น ์—๋””ํ„ฐ) ๊ฒฝํ—˜์„ ํ•  ์ˆ˜ ์žˆ๋‹ค!!!

  • ์›น์—๋””ํ„ฐ(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)๋ฅผ ์ ์šฉํ•ด๋ณด์ž!
  • ํ•˜์ด๋“œ๋ ˆ์ด์…˜์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋Š” ์™œ ์ƒ๊ธฐ๊ณ  ์–ด๋–ป๊ฒŒ ํ•ธ๋“ค๋งํ•ด์•ผ ํ•˜๋Š”์ง€

wysiwyg(what you see is what you get, ๋ณด๋Š” ๋Œ€๋กœ ์–ป๋Š”๋‹ค)

1๏ธโƒฃ react-draft-wysiwyg

2๏ธโƒฃ React-Quill (์‚ฌ์šฉํ•  ์—๋””ํ„ฐ)

3๏ธโƒฃ Toast-ui-editor (NHN์—์„œ ๋งŒ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)

๊ทธ๋Ÿฐ๋ฐ ReactQuill์„ importํ•ด์˜ค๋ฉด ์ด๋Ÿฐ์‹์œผ๋กœ error๊ฐ€ ๋œธ

// document๋„ ๋ธŒ๋ผ์šฐ์ €์— ์žˆ๋Š”๊ฒƒ, localStorage๋„ ๋ธŒ๋ผ์šฐ์ €์— ์žˆ๋Š”๊ฒƒ.
// ์ ‘์†ํ–ˆ์„๋•Œ ์ ‘์†์ด ์•ˆ๋œ ์ด์œ ๊ฐ€
๋ธŒ๋ผ์šฐ์ €์—์„œ ํ”„๋ก ํŠธ์—”๋“œ๋กœ ์ ‘์†ํ•ด์„œ html, css ๋ฐ›์•„์˜ค๊ธฐ ์ „์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ ‘๊ทผํ•ด์„œ document is not defined๋ผ๊ณ  ๋œจ๋Š” ํ˜„์ƒ

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•....?

๐Ÿ’ก dynamic-import!!!

1๏ธโƒฃ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง(quill ์—†์ด), 2๏ธโƒฃ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ Œ๋”๋ง(quill ๊ฐ™์ด ๋ Œ๋”๋ง) ๋‘๊ฐœ๋ฅผ ๋‚˜๋ˆ ์ค˜์•ผํ•จ
=>์„œ๋ฒ„์—์„œ ๋ Œ๋”๋งํ• ๋•Œ๋Š” react quill import ํ•˜๋ฉด ์•ˆ๋˜๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ Œ๋”๋ง ํ• ๋•Œ๋Š” react quill import ํ•˜๊ธฐ
- dynamic importํ•˜๊ธฐ

๋“ฑ๋กํ•˜๊ธฐ ๋ฒ„ํŠผ ํด๋ฆญํ•˜๋ฉด ํ†ต์งธ๋กœ db์— ๋“ค์–ด๊ฐ€๊ณ , query ์š”์ฒญ ๋ณด๋‚ผ๋•Œ๋„ ํ†ต์งธ๋กœ ์š”์ฒญํ•ด์„œ ๊ฐ€์ ธ์˜ค๊ธฐ

๐Ÿ’ก ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…('์ชผ๊ฐœ๋‹ค')

  • ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์‹คํ–‰๋œ๋‹ค๊ณ  ๊ฐ€์ •
  • ๋ถˆํ•„์š”ํ•œ ๊ฒƒ๋“ค์„ ๋ฏธ๋ฆฌ importํ•˜์ง€ ์•Š๊ณ  ํด๋ฆญํ•ด์„œ ํ•„์š”ํ• ๋•Œ importํ•ด์˜ค๊ธฐ ์œ„ํ•ด dynamic import๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ž„
  • ๊ทธ๋ž˜์„œ! ๋ฏธ๋ฆฌ ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ importํ•ด์˜ค์ง€ ์•Š๊ณ  ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”ํ• ๋•Œ dynamic import ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์„œ ์ ์‹œ์— importํ•ด์˜ค๋ฉด ์„ฑ๋Šฅ๋„ ๋”์šฑ ํ–ฅ์ƒ๋œ๋‹ค!
import AAA from 'aaa'
const onClickQQQ = () => {
	const AAA = dynamic(()=>import('aaa')
}

dynamic import๋ฅผ react-hook-form๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ธฐ


ReactQuill์—๋Š” {...register("contents")}์™€ ๊ฐ™์ด ์Šคํ”„๋ ˆ๋“œํ•ด์„œ react-hook-form ๊ธฐ๋Šฅ์„ ๋ฐ”๋กœ ์ ์šฉํ•  ์ˆ˜ ์—†์Œ. ์˜ค๋ฅ˜๋‚จ!

๊ทธ๋ž˜์„œ! react-hook-form์˜ register์— value๋ฅผ ๋„ฃ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ?


๊ฐ•์ œ๋กœ setValueํ•ด์„œ contents๋ผ๋Š” state์— value๋ฅผ ๋„ฃ์–ด์ค˜


๐Ÿ’ก ๋ˆˆ์— ๋ณด์ด์ง€๋Š” ์•Š์ง€๋งŒ ์ฝ˜์†”์„ ๋ณด๋ฉด ๊ฐ’์ด ์ž…๋ ฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— yup์„ ์ด์šฉํ•ด์„œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ๋„์šธ ์ˆ˜ ๊ฐ€ ์—†๊ฒŒ๋จ.

  • ๊ทธ๋ž˜์„œ value๊ฐ€ ์ €๋Ÿฐ์‹์œผ๋กœ ๋“ค์–ด์™”์„๋•Œ ๋น„์–ด์žˆ๋‹ค๊ณ  ์•Œ๋ ค์ค˜์•ผํ•จ


๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€ ํƒˆ์ทจ

๐Ÿ’ก ๋ฉด์ ‘๋•Œ ์ข…์ข… ์ถœ์ œ๋˜๋Š” ์ฃผ์ œ๋“ค

๐Ÿ’ก SQL-Injection


๐Ÿ’ก Hydration Issue

  • ํ”„๋ฆฌ๋ Œ๋”๋งํ• ๋•Œ html ํƒœ๊ทธ๋ฅผ ์œ„์ฃผ๋กœ ๊ทธ๋ฆฐ๋‹ค. (๋ชจ๋“ ๊ฑธ ๋‹ค ๊ทธ๋ฆฌ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ํƒœ๊ทธ์˜ ์œ„์น˜๋“ค ์œ„์ฃผ๋กœ)
  • ํ”„๋ก ํŠธ์—”๋“œ์—์„œ๋Š” ๋Œ€๋žต์ ์ธ html ํƒœ๊ทธ๋งŒ ๊ทธ๋ ค์กŒ๋‹ค๋ฉด,๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ํƒœ๊ทธ์˜ ๋‚ด์šฉ๋“ค์ด ๊ทธ๋ ค์ง„๋‹ค.

๐Ÿ’ก Hydration Issue ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

  • ๋ธ”๋ก ๊ฐœ์ˆ˜(ํƒœ๊ทธ ๊ฐœ์ˆ˜)๋ฅผ ๋งž์ถฐ์ค˜์•ผํ•จ
  • front-end์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด์ง€๋งŒ ์ ์–ด๋„ div์˜ ๊ฐœ์ˆ˜๋Š” ๋งž์ถฐ์ค˜์•ผ Hydration issue ๋ฐฉ์ง€ ๊ฐ€๋Šฅํ•จ!! (๊ฐ€์งœ div ๋ผ๋„ ๋งŒ๋“ค์–ด์„œ ๊ฐฏ์ˆ˜๋ฅผ ๋งž์ถฐ์ค˜์•ผํ•จ)
profile
๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์ด๋‚˜ ๊ด€์‹ฌ ์žˆ๋Š” ์ •๋ณด๋ฅผ ๊ธ€๋กœ ์ •๋ฆฌํ•˜๋ฉฐ ์ต์ˆ™ํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€