๐ŸŽ„ ์„ฑ์žฅ์ผ์ง€ 3.2

์ฑ… ํ–‰๋ณตํ•œ ์ด๊ธฐ์ฃผ์˜์ž(์›จ์ธ ๋‹ค์ด์–ด)์˜ ๋‚ด์šฉ์— ์ž๊ทน๋ฐ›์•„ ์‹œ์ž‘ํ•˜๋Š” ์†Œ๋ฐ•ํ•œ ์„ฑ์žฅ๊ธฐ๋ก

์‚ด์•„์žˆ๋Š” ๊ฝƒ๊ณผ ์ฃฝ์€ ๊ฝƒ์€ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ณ„ํ•˜๋Š”๊ฐ€?
์„ฑ์žฅํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์‚ด์•„ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
์ƒ๋ช…์˜ ์œ ์ผํ•œ ์ฆ๊ฑฐ๋Š” ์„ฑ์žฅ์ด๋‹ค!

๐ŸŒณ ํ‚ค์›Œ๋“œ (1.0)
์ตœ๋Œ€ํ•œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌ, ์ถ”ํ›„์— ๋ณด๋ฉด์„œ ์Šค์Šค๋กœ ์„ค๋ช…
๐Ÿ‰ ๊ฒฝํ—˜ ์œ„์ฃผ๋กœ (2.0)
๋‹จ์ˆœ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ๋ณด๋‹ค ๋ฌด์—‡์„ ๋ฐฐ์› ๊ณ  ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ์งง๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑ
โ„๏ธ ์ •ํ•ด์ง„ ํ…œํ”Œ๋ฆฟ์— ๋งž์ถฐ์„œ (3.0)
ํ‚ค์›Œ๋“œ, ๊ฒฝํ—˜ ๋ชจ๋‘ ์ข‹๋‹ค. ๋‹ค๋งŒ ๋งค์ผ ์ž‘์„ฑํ•˜๊ธฐ๋กœ ๋งˆ์Œ ๋จน์€๋งŒํผ ํ•ต์‹ฌ๋งŒ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ…œํ”Œ๋ฆฟ์„ ์ž‘์„ฑ
(3.1) 230102๋ถ€ํ„ฐ ์‹œ์ž‘๋˜๋Š” ํ•™์Šต์— ๊ด€ํ•œ ๋‚ด์šฉ ์ถ”๊ฐ€
(3.2) 230313๋ถ€ํ„ฐ ์ข€๋” ๊ฒฝํ—˜, ๊ฐ์ • ์œ„์ฃผ์˜ ๋‚ด์šฉ๋„ ๋‹ด๊ธฐ!

๐Ÿ”‘ ์˜ค๋Š˜์˜ ํ‚ค์›Œ๋“œ

DOM api๊ฐ€ ์กด์žฌํ•˜๋Š” ์ด์œ 

  • DOM Tree๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด JS๋กœ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๋ฉด ๋„ˆ๋ฌด ํž˜๊ณ  ๋ฒˆ๊ฑฐ๋กญ๋‹ค.
  • ํ•ด์„œ ๋ธŒ๋ผ์šฐ์ €์—์„œ DOM Tree๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ DOM api๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

textNode vs elementNode

  • DOM์˜ ๋…ธ๋“œ๋“ค์€ ๋Œ€๋ถ€๋ถ„ text ๋…ธ๋“œ์™€ element ๋…ธ๋“œ๋กœ ๋‚˜๋ˆ„์–ด์ง„๋‹ค.
  • firstChild, nextSibling ๋“ฑ์€ ํƒœ๊ทธ ์‚ฌ์ด์˜ ๊ณต๋ฐฑ์ธ textNode๊นŒ์ง€ ์ธ์‹ํ•œ๋‹ค.
  • firstElementChild, firstElementChild ๋“ฑ์€ textNode๋ฅผ ์ œ์™ธํ•œ elementNode๋งŒ ์ธ์‹ํ•œ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ์ฃผ๋กœ textNode๋ฅผ ์ด์šฉํ•  ์ผ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ฃผ๋กœ element๊ฐ€ ๋“ค์–ด๊ฐ„ api๋ฅผ ์ด์šฉํ•œ๋‹ค.

์ด๋ฒคํŠธ ์œ„์ž„

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

stopPropagation vs preventDefault

  • stopPropagation: ํŠน์ • ํƒœ๊ทธ์—์„œ ์ด๋ฒคํŠธ์˜ ์ „๋‹ฌ์„ ๋ง‰๋Š” api
  • preventDefault: ํ•ด๋‹น ํƒœ๊ทธ๊ฐ€ ๊ฐ€์ง„ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์„ ๋ง‰๋Š” api

๋ฒˆ๋“ค๋Ÿฌ - Vite

  • ๋ธŒ๋ผ์šฐ์ €์—์„œ ESM(ES Modules)์„ ์ง€์›ํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š”, JS ๋ชจ๋“ˆํ™”๋ฅผ ๋„ค์ดํ‹ฐ๋ธŒ ๋ ˆ๋ฒจ์—์„œ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.
  • ํ•ด์„œ ๊ฐœ๋ฐœ์ž๋“ค์€ ๋ฒˆ๋“ค๋ง(๋ชจ๋“ˆํ™”๋œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ๋กœ ๋ฌถ์–ด์ฃผ๋Š” ์ž‘์—…)์„ ์‚ฌ์šฉํ•  ์ˆ˜ ๋ฐ–์— ์—†์—ˆ๋‹ค.
  • ์ด๋Ÿฐ ๋ฒˆ๋“ค๋ง์„ ๋„์™€์ฃผ๋Š” ๋„๊ตฌ๋กœ Webpack, Rollup, Parcel ๋“ฑ์ด ๋“ฑ์žฅํ–ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ ์ฐจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐœ๋‹ฌํ•จ์— ๋”ฐ๋ผ ๋ชจ๋“ˆ ๊ฐฏ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์ง€๊ณ  ๋ฒˆ๋“ค๋ง ์‹œ๊ฐ„๋„ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ฒŒ ๋˜์—ˆ๋‹ค.
  • Vite๋Š” ์ด๋Ÿฐ ๋ณ€ํ™”์— ๋งž์ถฐ ๋น ๋ฅด๊ฒŒ ๋ฒˆ๋“ค๋งํ•˜๊ณ  ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค๋ฅผ ์ง€์›ํ•˜๋Š” ๋„๊ตฌ๋กœ ๋“ฑ์žฅ!!!

์ฐธ๊ณ 

๐Ÿ“ ์š”์•ฝ ๋ฐ ํ•˜๋ฃจ ๊ฐ„๋‹จ ํšŒ๊ณ 

์˜ค๋Š˜์€ ๋ฏธ์…˜ ๊ตฌํ˜„๋ณด๋‹ค๋Š” ์ฃผ๋กœ DOM๊ณผ ์ด๋ฒคํŠธ ์œ„์ž„ ๊ด€๋ จ ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ๋‚ด์šฉ ์ •๋ฆฌ๋ฅผ ํ–ˆ๋‹ค. ์‚ฌ์‹ค DOM๊ณผ ์ด๋ฒคํŠธ๋Š” ์–ด๋Š์ •๋„ ๊ณต๋ถ€ํ•ด์„œ ์ต์ˆ™ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ํ•œ๋™์•ˆ ์•ˆ๊ฑด๋“œ๋ฆฌ๋‹ˆ๊นŒ ์ƒ๊ฐ๋ณด๋‹ค ์ƒ์†Œํ–ˆ๋‹ค. ํŠนํžˆ DOM์—์„œ ์—ฌ๋Ÿฌ api๋กœ ์›ํ•˜๋Š” ๋…ธ๋“œ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๋“ ์ง€, DOM api ์ค‘์—์„œ textNode๊นŒ์ง€ ์„ ํƒํ•˜๋Š” api์™€ elementNode๋งŒ ์„ ํƒํ•˜๋Š” api์˜ ์ฐจ์ด, ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง๊ณผ ์บก์ณ๋ง์˜ ๊ฐœ๋… ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ํ™œ์šฉํ•œ ์œ„์ž„ ๋ฐฉ์‹ ๋“ฑ!!! ์ƒ๊ฐ๋ณด๋‹ค ๋‹ค์‹œ ๋จธ๋ฆฟ์†์— ์ •๋ฆฝ์ด ๋˜์–ด์„œ ์œ ์ตํ•œ ์‹œ๊ฐ„์ด์—ˆ๋‹ค.

์•„, ๊ทธ๋ฆฌ๊ณ  ์˜ค๋Š˜ typescript ํŒŒ์ผ์„ ๋ชจ๋“ˆํ™” ํ•˜๊ณ  importํ•˜๋Š”๋ฐ ts๋Š” importํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์† ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์ด ๋ถ€๋ถ„์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด import path๋„ ๊ณ„์† ์ˆ˜์ •ํ•ด๋ณด๊ณ  ๊ณต์‹๋ฌธ์„œ ๋ณด๋ฉด์„œ tsconfig์— ์—ฌ๋Ÿฌ ์กฐ๊ฑด๋“ค๋„ ๋ณ€๊ฒฝํ•ด๋ณด๊ณ , ํ™•์žฅ์ž๋ช…๋„ mts๋กœ ํ•ด๋ณด๊ณ โ€ฆ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์„ ์จ๋ดค์ง€๋งŒ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹ค.(ใ… ใ… ) ๊ทธ๋Ÿฌ๋‹ค ๋™๋ฃŒ์ธ ์Šค๋ˆ•์ด ts๋ฅผ ๋ชจ๋“ˆํ™”ํ• ๊ฑฐ๋ฉด ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์จ์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ๋งํ•ด์ฃผ์–ด์„œ ๋‚˜๋ฆ„ ์ต์ˆ™ํ•œ webpack์„ ์“ฐ๋ คํ–ˆ๋‹ค! ๊ทธ๋Ÿฐ๋ฐ ์Šค๋ˆ•์ด ์‚ฌ์šฉํ•œ vite๋ฅผ ์จ๋ณด๊ณ ์‹ถ์–ด ๊ทธ๋ƒฅ ๋ฌดํ„ฑ๋Œ€๊ณ  ๋ฐ”๋กœ npm installํ•˜๊ณ  ๊ณต์‹๋ฌธ์„œ ๋ณด๋ฉด์„œ ํ—ค๋งค๊ณ  ํ—ค๋งจ ๋์— ๋ฒˆ๋“ค๋ง์— ์„ฑ๊ณตํ–ˆ๋‹ค.(๊ฐ๊ฒฉ) ์•„์ง ๊ตฌ์ฒด์ ์ธ config๋ฅผ ๋งŒ์ง„๊ฑด ์•„๋‹ˆ์ง€๋งŒ ์ฒ˜์Œ ์›นํŽ™์„ ์ผ์„ ๋•Œ์˜ ๊ฐ๋™์ด ๋‹ค์‹œ ํ•œ๋ฒˆ ์ฐพ์•„์˜จ ๊ธฐ๋ถ„์ด์—ˆ๋‹ค.(์‚ฌ๋žŒ๋“ค์€ ์ฐธ ์–ด๋–ป๊ฒŒ ์ด๋Ÿฐ ๋ฒˆ๋“ค๋Ÿฌ๋ผ๋Š” ๊ฑธ ๊ฐœ๋ฐœํ•˜๊ณ  ๋งŒ๋“ค์—ˆ๋Š”์ง€โ€ฆ ์—ฌ๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘์— ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ์ œ์ผ ๋‚ด๋ถ€ ์ฝ”๋“œ๋ฅผ ๊นŒ๋ณด๊ณ ์‹ถ๋‹ค.)

์ถ”๊ฐ€๋กœ ๋™๋ฃŒ์ธ ๋‚˜๋‹ˆ์˜ ์–ฝํžˆ๊ณ  ์–ฝํžŒ git์„ 1 ~ 2์‹œ๊ฐ„์— ๊ฑธ์ณ์„œ ํ•ด๊ฒฐํ•œ ๊ฒƒ๋„ ๋„ˆ๋ฌด ์žฌ๋ฏธ์žˆ๋Š” ๊ฒฝํ—˜์ด์—ˆ๋‹ค!!(๋™๋ฃŒ๊ฐ€ ์ฒ˜ํ•œ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋“ค์„ ๊ฐ™์ด ํ•ด๊ฒฐํ•˜๋ฉด ์ •๋ง ๋ฐฐ์šฐ๋Š” ๊ฒŒ ๋งŽ๋‹ค ใ…‹ใ…‹ใ…‹)

์˜ค๋Š˜์˜ ์ž˜ํ•œ ์ 

  • ์›”์š”์ผ ๋‚˜๋ฆ„ ๊ณต๋ถ€ ๊ณ„ํš๋Œ€๋กœ ํ•œ ์ 
  • ์ƒˆ๋กœ์šด ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•ด๋ณธ ์ !!!(๋ฌดํ„ฑ๋Œ€๊ณ  ๋›ฐ์–ด๋“ค์–ด์„œ ํ•ด๋‚ธ ๊ธฐ๋ถ„์€ ์ •๋ง ์ตœ๊ณ ๋กœ ์ข‹๋‹ค)
  • ๋™๋ฃŒ์˜ ์–ด๋ ค์›€์„ ๊ฐ™์ด ํ•ด๊ฒฐํ•˜๊ณ  ๊ฑฐ๊ธฐ์„œ ๋‚˜๋„ ํ•จ๊ป˜ ๋ฐฐ์šด ์ 

์˜ค๋Š˜์˜ ์•„์‰ฌ์šด ์ 

  • ์ตœ๋Œ€ํ•œ ์‹œ๊ฐ„๊ด€๋ฆฌ๋ฅผ ํ•œ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ, ์กฐ๊ธˆ ๋” ์•„์ฃผ ์ชผ๊ธˆ๋งŒ ๋” ์ž˜ ๊ด€๋ฆฌํ•˜๋ฉด ์ข‹๊ฒ ๋‹ค.
  • ์ปคํ”ผ..! ์š”์ฆ˜ ๋„ˆ๋ฌด ๋งŽ์ด ๋งˆ์…จ๋‹ค. ์กฐ๊ธˆ ์ค„์ด์ž!