230313(์)
๐ ์ฑ์ฅ์ผ์ง 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์๊ฐ์ ๊ฑธ์ณ์ ํด๊ฒฐํ ๊ฒ๋ ๋๋ฌด ์ฌ๋ฏธ์๋ ๊ฒฝํ์ด์๋ค!!(๋๋ฃ๊ฐ ์ฒํ ๋ค์ํ ๋ฌธ์ ๋ค์ ๊ฐ์ด ํด๊ฒฐํ๋ฉด ์ ๋ง ๋ฐฐ์ฐ๋ ๊ฒ ๋ง๋ค ใ ใ ใ )
์ค๋์ ์ํ ์
- ์์์ผ ๋๋ฆ ๊ณต๋ถ ๊ณํ๋๋ก ํ ์
- ์๋ก์ด ๋ฒ๋ค๋ฌ๋ฅผ ์ฌ์ฉํด๋ณธ ์ !!!(๋ฌดํฑ๋๊ณ ๋ฐ์ด๋ค์ด์ ํด๋ธ ๊ธฐ๋ถ์ ์ ๋ง ์ต๊ณ ๋ก ์ข๋ค)
- ๋๋ฃ์ ์ด๋ ค์์ ๊ฐ์ด ํด๊ฒฐํ๊ณ ๊ฑฐ๊ธฐ์ ๋๋ ํจ๊ป ๋ฐฐ์ด ์
์ค๋์ ์์ฌ์ด ์
- ์ต๋ํ ์๊ฐ๊ด๋ฆฌ๋ฅผ ํ๋ค๊ณ ํ๋๋ฐ, ์กฐ๊ธ ๋ ์์ฃผ ์ชผ๊ธ๋ง ๋ ์ ๊ด๋ฆฌํ๋ฉด ์ข๊ฒ ๋ค.
- ์ปคํผ..! ์์ฆ ๋๋ฌด ๋ง์ด ๋ง์ จ๋ค. ์กฐ๊ธ ์ค์ด์!