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

๋ชฉ๋ก๐Ÿ’ป๊ฐœ๋ฐœ ๋…ธํŠธ/๋‚˜๋งŒ์˜ ์‹œํ—˜์ง€ (21)

C-log

[FE] ๋‚˜๋งŒ์˜ ์‹œํ—˜์ง€ CRUD๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. - ํ•œ๋‹ฌ ๊ฐ„์˜ ์—ฌ์ •

๋ธ”๋กœ๊ทธ ํฌ์ŠคํŒ… ๊ธฐ์ค€ ๋„ˆ๋ฌด ๋‚˜๋„ ๊ธด ๊ณต๋ฐฑ์ด์—ˆ๋‹ค. ๋ธ”๋กœ๊ทธ ๊ธฐ์ค€์œผ๋ก  ๊ธด ์‹œ๊ฐ„ ๋™์•ˆ ์ž๋ฆฌ๋ฅผ ๋น„์› ์ง€๋งŒ ์ •๋ง ๋งŽ์€ ๊ฒƒ๋“ค์„ ์‹คํ–‰ํ•˜๊ณ  ์‹คํ—˜ํ•ด๋ดค๋‹ค. ๋ฌผ๋ก  ์ง€๋‚œ ๋‹ฌ 2์ฃผ ์ •๋„๋Š” ์ค‘๊ฐ„๊ณ ์‚ฌ ์‹œํ—˜์ด ์žˆ์–ด์„œ ๊ฑฐ๊ธฐ์— ๋งค์ง„์„ ํ•ด์•ผ ํ–ˆ์ง€๋งŒ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ์‹œํ—˜ ๊ณต๋ถ€๋ฅผ ๋’ท์ „์œผ๋กœ ๋‘๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‹œํ—˜๊ณต๋ถ€๋ฅผ ์•ผ๊ธˆ์•ผ๊ธˆ ์ง„ํ–‰ ํ–ˆ๋‹ค. 1๋‹ฌ๊ฐ„ ์ง„ํ–‰ ํ–ˆ๋˜ ์ฝ”๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ด์•ผ๊ธฐ๋ฅผ ํ’€์–ด๊ฐ€ ๋ณผ ๊ฒƒ์ด๋‹ค. ์•„์‰ฝ๊ฒŒ๋„ ์ค‘๊ฐ„ ์ค‘๊ฐ„ ์žˆ๋˜ ์ผ๋“ค์„ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ด์•„๋‚ด์ง€ ๋ชปํ–ˆ์„ ๋ฟ ๊ฒฐ๊ณผ๋ฅผ ์„ค๋ช…ํ•˜๋ฉด์„œ ๊ธฐ์–ต๋‚˜๋Š” ์ค‘์š”ํ•œ ๊ฒƒ๋“ค์„ ๋‹ด์•„ ๋‚ผ ๊ฒƒ์ด๋‹ค. ๋จผ์ € ์ง€๊ธˆ๊นŒ์ง€ ๋‚ด๊ฐ€ ์ œ์ž‘ํ•œ ์ฝ”๋“œ์˜ ๊ตฌ์กฐ๋„๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค.์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ์šฐ๋ฆฌ๊ฐ€ ์ค‘์ ์œผ๋กœ ๋ณด์•„์•ผํ•  ํŒŒ์ผ์€ EditorExam์ด๋‹ค. ์‹œ๊ฐ„์„ ๋งŽ์ด ๋“ค์˜€๋˜ ๋ถ€๋ถ„์ด๋‹ค. ์•„๋ฌด๋ž˜๋„ editor ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ง์ ‘ ํ•˜..

execCommand() : ์ง€์›์ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค: This feature is no longer recommended. Though some browsers might still support..

Document.execCommand() - Web API | MDNHTML ๋ฌธ์„œ๊ฐ€ designMode๋กœ ์ „ํ™˜๋˜๋ฉด ๋ฌธ์„œ์—์„œ execCommand ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š”๋ฐ ์ด๊ฒƒ์„ ์ด์šฉํ•ด์„œ ๋ฌธ์„œ์˜ ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ์˜์—ญ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋ช…๋ น์–ด๋Š” ๋ฌธ์„œ์˜ ์„ ํƒ ์˜์—ญ์— ์˜developer.mozilla.orgํ˜„์žฌ execCommand ์•ž์œผ๋กœ ์ง€์›์ด ์ค‘๋‹จ๋  ์˜ˆ์ •์ด๋‹ค. execCommand๋ฅผ ๋Œ€์‹ ํ•  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์€ ๋ฌด์ˆ˜ํžˆ ๋งŽ์ง€๋งŒ ์›ํ•˜๋Š” ํ˜•ํƒœ์™€ ์ฝ”๋“œ ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ๋งค์šฐ ๋ถˆํŽธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๊ธ‰์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํˆด๊ณผ ์—๋””ํ„ฐ๋ฅผ ์ œ์ž‘ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ execCommand๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ–ˆ์ง€๋งŒ ์ƒ๊ฐ๋ณด๋‹ค ๋งŽ์€ ๊ณ ๋ ค๋ฅผ ํ•ด์•ผํ•ด์„œ ์šฐ์„ ์€ execCommand ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ ํ›„..

[FE]๋‚˜๋งŒ์˜ ์‹œํ—˜์ง€์˜ ์—๋””ํ„ฐ์™€ ํˆด๋ฐ”๋ฅผ ์ง์ ‘ ์ œ์ž‘ํ•œ๋‹ค.(๊ธฐ๋ณธ ํˆด๋ฐ” ์ œ์ž‘)

์•ž์„œ ํฌ์ŠคํŒ…์—์„œ react-quill์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ง์ ‘ ์—๋””ํ„ฐ์™€ ํˆด๋ฐ”๋ฅผ ์ œ์ž‘ํ•˜๊ธฐ๋กœ ๊ฒฐ์ • ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‘๊ฐ€์ง€๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋กœ contentEditable๊ณผ execCommand์ด๋‹ค. # contentEditable contentEditable์€ HTML ์š”์†Œ์˜ ์†์„ฑ(attribute) ์ค‘ ํ•˜๋‚˜๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ์š”์†Œ์˜ ๋‚ด์šฉ์„ ์ง์ ‘ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์›ํ•˜๋Š” ํƒœ๊ทธ์— contentEditable="true"๋ฅผ ๊ธฐ์ž…ํ•˜๊ฒŒ ๋˜๋ฉด ์›น ํŽ˜์ด์ง€๋‚˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ…์ŠคํŠธ ์ž…๋ ฅ ์ƒ์ž๋‚˜ ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ์ปจํ…์ธ ๊ฐ€ ๋œ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ๋”ฐ๋ผ์„œ divํƒœ๊ทธ๊ฐ€ ํŽธ์ง‘์„ ํ• ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅ์„ ์ง์ ‘ ๊ธฐ์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ์—๋””ํ„ฐ๋กœ ์ง€์ •์ด ๋œ ๊ฒƒ์ด๋‹ค..

react-quill lib์ด๋ž€? react-quill์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž

์ด์ œ ๋‚˜๋งŒ์˜ ์‹œํ—˜์ง€๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€๋ฅผ ์ œ์ž‘ํ•  ๊ฒƒ์ด๋‹ค. ๋ชจ๋“  ๊ธฐ๋Šฅ์˜ ํˆด์„ ์ผ์ผ์ด ์ œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๊ฒ ์ง€๋งŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ๋น ๋ฅด๊ฒŒ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ข‹๊ฒŒ๋‹ค๊ณ  ํŒ๋‹จ์„ ํ–ˆ๋‹ค. FEํŒ€์›์ด ์•Œ์•„๋ด์ค€ ๊ฒฐ๊ณผ react-quill์ด๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ •๋ณด์™€ ์ž๋ฃŒ๊ฐ€ ๋งŽ๋‹ค๊ณ  ์ถ”์ฒœ์„ ํ•ด์ฃผ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” react-qull ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์šฐ์„  react-quill ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆด npm์œผ๋กœ ์„ค์น˜ํ•˜๊ณ  ๊ธฐ๋ณธ์ ์ธ ์„ธํŒ…์„ ํ•ด๋ณด๊ฒ ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ์„ธํŒ…์„ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. # setting react-quill import ReactQuill from "react-quill" export default function EditTestSplit() { return ( Test ) } ์œ„์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €๋กœ..