[DAY-8] JS ์ฃผ์ ๋ฌธ๋ฒ(8)
๐ ํท๊ฐ๋ ธ๋ & ๋ชฐ๋๋ ๋ถ๋ถ๋ค๋ง ์ ๋ฆฌํ๋ ๋๋ง์ TIL
๐ฏ ๋ชจ๋ ๊ฐ์ ๋ด์ฉ์ ์ ์ง ์์์!
์ค๋์ ์๊ฐ์?
๋๋์ด ์๊ณ ๋ฆฌ์ฆ๊ณผ ์๋ฃ๊ตฌ์กฐ ๊ฐ์๊ฐ ๋๋ฌ์ต๋๋ค ์!
์ ๋ง ์ ๋ง ์ ์ตํ ๋ด์ฉ์ด์์ง๋ง, ์ด์ง ํ์๊ณผ DP, ๊ทธ๋ฆฌ๋์ ๊น๋ ค ๋ญ๊ฐ์ก๋ ์ ๋ ์ฌํ๋ ๊ธฐ์ต์ด ์๋ค์...
๋จ์ํ ํธํ๋ค๋ ์ด์ ๋ง์ผ๋ก querySelector๋ฅผ ์ฌ์ฉํ์๋๋ฐ,
getElementby~~์ ๋ฌด์์ด ๋ค๋ฅธ์ง ์ ํํ๊ฒ ์๊ฒ ๋์์ต๋๋ค!
๊ฐ์ DOM์ ๋ํ ๊ฐ๋
์ด ๋ชจํธํ์๋๋ฐ, ์ด๋ฒ์ ํ์คํ๊ฒ ์กํ์ ์ข์ต๋๋ค.
๋์ค์ ๋๊ท๋ชจ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ฒ ๋๋ฉด ์ ๋ ์ฌ์ฉํด๋ณผ ๊ธฐํ๊ฐ ์ค๊ฒ ์ฃ ? ๐ฎ
[1] DOM
DOM์ด๋ Document Object Model์ ๋๋ค.
ํ์ค์ ์๋ ๊ฒ์ ํน์ ๊ด์ ์ผ๋ก ๋ฐ๋ผ๋ณด์ ๊ฐ์ฒด๋ก ๋ง๋๋ ๊ฒ์ ์ถ์ํ ํน์ ๋ชจ๋ธ๋ง์ด๋ผ๊ณ ํฉ๋๋ค.
์ด๋ ๊ฒ ๋ง๋ค์ด์ง ๊ฒ์ด ๋ฐ๋ก ๋ชจ๋ธ์
๋๋ค.
์ด์ฒ๋ผ HTML ๋ฌธ์๊ฐ ๋ชจ๋ธ๋ง๋์ด ๊ฐ์ฒด(ํธ๋ฆฌ ๊ตฌ์กฐ)๋ก ๋ง๋ค์ด์ง ๊ฒ์ด DOM์ ๋๋ค.
- DOM์ ๊ฐ ์์๋ key-value ํํ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. UI์ ์ํ, ๊ธฐ๋ฅ, ์์ฑ์ ๊ฐ์ฒด๋ก ๋ฝ์๋ธ ๊ฒ์ด๋ผ ๋ณผ ์ ์์ต๋๋ค.
- DOM ํธ๋ฆฌ๋ ์ ์์ํ๋ก ์กฐํ๋ฉ๋๋ค.
[1-1] DOM์ ๋ฑ์ฅ
- JS๊ฐ ํ์ํ๋ฉด์ ๊ฐ์ด ๋ฑ์ฅํ์ต๋๋ค.
๋ฐ๋ผ์ HTML ๋ฌธ์์ ์ํธ์์ฉ์ด ๊ฐ๋ฅํ๊ฒ ๋์์ต๋๋ค. - ํ์ค์์ 1998๋ ์ ๋ฑ์ฅํ๊ณ ๋๋ค์์ ๋ธ๋ผ์ฐ์ ์ ์ ์ฉ๋๊ธฐ๊น์ง ์๊ฐ์ด ์ค๋ ๊ฑธ๋ ธ์ต๋๋ค.
- ์ ์ฐจ ๋ฐ์ ํ์ฌ HTML ๋ฌธ์๋ฅผ ์ง์ ์์ ๊น์ง๋ ๊ฐ๋ฅํ๊ฒ ๋์์ต๋๋ค.
[1-2] DOM ๋ ๋๋ง
- ๋ธ๋ผ์ฐ์ ๋ HTML์ ์ฝ๊ณ ํ์ฑํ์ฌ DOM Tree๋ฅผ ๊ตฌ์ถํฉ๋๋ค.
- Style Sheets๋ฅผ ์ฝ๊ณ ํ์ฑํ์ฌ Style Rules๋ฅผ ๋ง๋ค์ด DOM Tree์ ์ ์ฉ์ํต๋๋ค. (Attachment)
- Layout ๊ณผ์ ์ ํตํด DOM node์ ์์น๋ฅผ ์ ํด์ฃผ์ด Render Tree๋ฅผ ๊ตฌ์ถํฉ๋๋ค.
- ๊ตฌ์ถ๋ Render Tree๋ฅผ ์ค์ ํ๋ฉด์ ๊ทธ๋ ค์ค๋๋ค. (Painting)
๐ ์ด์ ์ ๋ฆฌ๊ธ
>
๋ธ๋ผ์ฐ์ ์ ์๋ ์๋ฆฌ : https://jungjjeong.github.io/cs/web/frontend/Browser/
[1-3] DOM ์ ํ
(1) getElementById
- DOM Tree์์ ์์ ๋ ธ๋๋ฅผ ๋ฐ๋ก id๋ก ์ฐพ์ต๋๋ค.
- ์ ์ผ ๋จผ์ ์ฐพ์ ์์ ํ๋๋ฅผ ๋ฐํํฉ๋๋ค.
(2) getElementsByClassName
- DOM Tree์์ ์์ ๋ ธ๋๋ฅผ ์ผ์นํ๋ class๋ก ์ฐพ์ต๋๋ค.
- ์ผ์นํ๋ ์์๋ค์ ๋ฆฌ์คํธ๋ก ๋ฐํํฉ๋๋ค.
(3) getElementsByTagName
- DOM Tree์์ ์์ ๋ ธ๋๋ฅผ ํ๊ทธ ์ด๋ฆ์ผ๋ก ์ฐพ์ต๋๋ค.
- ์ผ์นํ๋ ์์๋ค์ ๋ฆฌ์คํธ๋ก ๋ฐํํฉ๋๋ค.
(4) querySelector
- DOM Tree์์ ์์ ๋ ธ๋๋ฅผ CSS Selector ๋ฌธ๋ฒ์ผ๋ก ์ฐพ์ต๋๋ค.
- ์ ์ผ ๋จผ์ ์ฐพ์ ์์ ํ๋๋ฅผ ๋ฐํํฉ๋๋ค.
(5) querySelectorAll
- DOM Tree์์ ์์ ๋ ธ๋๋ฅผ CSS Selector ๋ฌธ๋ฒ์ผ๋ก ์ฐพ์ต๋๋ค.
- ์ผ์นํ๋ ์์๋ค์ ๋ชจ๋ ๋ฐํํฉ๋๋ค.
(6) window.[id]
- id๊ฐ ์๋ ์์๋ window ๊ฐ์ฒด๋ฅผ ํตํด ์ฐพ์ ์ ์์ต๋๋ค.
- ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ๋ฆฌ์คํธ๋ก ๋ฐํ๋ฉ๋๋ค.
[1-4] DOM ํ์
(1) parentNode
- ์ ํํ ์์์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
(2) firstElementNode
- ์ ํํ ์์ ๋ ธ๋์ ์์ ์์ ๋ ธ๋ ์ค ์ฒซ ๋ฒ์งธ๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
- ์์ ๊ฒฝ์ฐ null์ ๋ฐํํฉ๋๋ค.
- ๋ง์ง๋ง ์์๋ฅผ ๋ถ๋ฌ์ค๋ lastElementNode๋ ์์ต๋๋ค.
(3) children
- ์ ํํ ์์ ๋ ธ๋์ ์์ ์์ ๋ ธ๋๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
- ์์ ๊ฒฝ์ฐ ๋น ๋ฐฐ์ด์ ๋ฐํํฉ๋๋ค.
(4) nextElementSibling
- ์ ํํ ์์ ๋ ธ๋์ ๋ค์ ํ์ ์์ ๋ ธ๋๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
- ์์ ๊ฒฝ์ฐ null์ ๋ฐํํฉ๋๋ค.
(5) previousElementSibling
- ์ ํํ ์์ ๋ ธ๋์ ์ด์ ํ์ ์์ ๋ ธ๋๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
- ์์ ๊ฒฝ์ฐ null์ ๋ฐํํฉ๋๋ค.
[1-5] DOM ์กฐ์
(1) Class ์ ๊ทผ
- ์ ํํ ์์ ๋ ธ๋์์ className๊ณผ classList๋ก ์์์ class ์์ฑ์ ๋ถ๋ฌ์ค๊ณ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
(2) hasAttribute
- ์ ํํ ์์ ๋ ธ๋์์ ์์ฑ์ ๊ฐ์ง๊ณ ์๋์ง ํ์ธ
(3) getAttribute
- ์ ํํ ์์ ๋ ธ๋์์ ์์ฑ์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
- ์์ผ๋ฉด null์ ๋ฐํํฉ๋๋ค.
(4) setAttribute
- ์ ํํ ์์ ๋ ธ๋์์ ์์ฑ์ ์ ์ํฉ๋๋ค.
(5) removeAttribute
- ์ ํํ ์์ ๋ ธ๋์ ์์ฑ์ ์ ๊ฑฐํฉ๋๋ค.
(6) textContent
- ์ ํํ ์์ ๋ ธ๋์์ ํ ์คํธ ๋ ธ๋์ ์ ๊ทผ, ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
(7) innerHTML
- ์ ํํ ์์ ๋ ธ๋ ๋ด๋ถ HTML์ ์์ ํฉ๋๋ค.
- XSS (Cross Site Scripting)์ ์ํ์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ๊ถ์ฅํ์ง ์์ต๋๋ค.
(8) createElement
- ์์ ๋ ธ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
(9) appendChild
- ์์ฑํ ์์ ๋ ธ๋๋ฅผ ์ ํํ ์์ ๋ ธ๋์ ๋ง์ง๋ง ์์ ์์๋ก ์ถ๊ฐํ๋ค.
(10) removeChild
- ์ ํํ ์์ ๋ ธ๋ ์์ ๋ ธ๋ ์ค ํด๋น๋๋ ์์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
XSS (Cross Site Scripting)
>
๊ด๋ฆฌ์๊ฐ ์๋ ๊ถํ์ด ์๋ ์ฌ์ฉ์๊ฐ ์น ์ฌ์ดํธ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํ๋ ๊ณต๊ฒฉ ๋ฐฉ์์ ๋๋ค.
[2] Virtual DOM
Virtual DOM์ ๋ฌด์์ผ๊น์?
VIrtual DOM์ ์ค์ DOM Tree๋ฅผ JS ๊ฐ์ฒด๋ก ๋ง๋ ๊ฒ์ผ๋ก ํ์ํ ์ ๋ณด๋ง ๋ด์ ๋ง๋ค์ด์ง๋๋ค.
DOM์ ์์ ํ ๋, ์ง์ DOM ํธ๋ฆฌ๋ฅผ ๋จผ์ ์กฐ์ํ์ง ์๊ณ
Virtual DOM์ ๋ฐ๋๋ ๋ถ๋ถ๋ง ์์ ํ ๋ค ๋ ๋๋ง ํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ํ๋ก์ธ์ค๊ฐ ์ค์ด๋ค๊ฒ ๋ฉ๋๋ค.
ReactJS์ VueJS์์๋ Virtual DOM์ ์ฌ์ฉํฉ๋๋ค.
- ๐ฎ ๊ทธ๋ ๋ค๋ฉด Virtual DOM์ด DOM๋ณด๋ค ๋น ๋ฅผ๊น์?
์๋๋๋ค.
๋จ์ง ์ ์ง๋ณด์๊ฐ ์ฉ์ดํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๋๋ก ๋์์ฃผ๊ณ , ๋๋ถ๋ถ์ ์ ์ค์ผ์ด์ค์ ์ถฉ๋ถํ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ Virtual DOM์ ์ฌ์ฉํฉ๋๋ค.
์คํ๋ ค Virtual DOM, DOM์ ๊ฐ๊ฐ ํ์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํ์ ์๊ฐ์ด 2๋ฐฐ๊ฐ ๋๋ฉฐ
๊ฐ๊ฐ ๋ฐ๋ก ๊ตฌ์ถ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ ๋ํ 2๋ฐฐ๊ฐ ๋ฉ๋๋ค.
ํ์ง๋ง ๋๋ถ๋ถ์ ์น์ฌ์ดํธ์์๋ ์ฑ๋ฅ ์ต์ ํ๋ณด๋ค ๊ฐ๋ฐ ํธ์์ฑ์ด ๋ ์ค์ํ ๋๊ฐ ๋ง์ต๋๋ค.
๋ฐ๋ผ์ Virtual DOM์ ์ฌ์ฉํฉ๋๋ค.
[2-1] createDocumentFragment()
JS์ DOM ๊ฐ์ฒด๋ ์ฐ์ฐ์ ์ํํ ๋ ๋ง๋ค DOM Tree์ ์ ๊ทผํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ์ ํ์ ์ฃผ๋ ์์ธ์
๋๋ค.
๋ฐ๋ผ์ JS์ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด์๋ DOM ๊ฐ์ฒด ์ ๊ทผ์ ์ต์ํ ํ๋๋ก ์ฝ๋๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
DocumentFragment ๋
ธ๋๋ฅผ ์์ฑํด์ ์ฌ์ฉํ๋ฉด DOM Tree ์ธ๋ถ์ ๊ฒฝ๋ํ๋ ๋ฌธ์ DOM์ ๋ง๋ค ์ ์์ต๋๋ค.
์ด๋ ๋ฉ๋ชจ๋ฆฌ์์์๋ง ์กด์ฌํ๋ ๋น ๋ฌธ์ ํ
ํ๋ฆฟ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์์ ๋ ธ๋๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์์ ์์ฝ๊ฒ ์กฐ์ํ ํ ์ค์ DOM์ ์ถ๊ฐํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, ์ค์ ๋ผ์ด๋ธ DOM ๊ฐ์ฒด์ ์ ๊ทผํ๋ ํ์๋ฅผ ์ต์ํํ ์ ์์ต๋๋ค.
Virtual DOM ์ญํ ์ ํ๋ DocumentFragment๊ฐ์ฒด๋ฅผ ์ด์ฉํ ์ ์์ต๋๋ค.
[+] ์ค์ต ์ฝ๋ - ๊ฐ๋จํ ์๋ํฐ
๋ฒํผ ํฌ๊ธฐ๊ฐ ๋ค๋ฅด๊ณ ,, width height๊ฐ ๊ณ ์ ๊ฐ์ผ๋ก ์ง์ ๋์ด ์๋ ๊ฑธ ์ ๋ชป๋ณด๊ฒ ๋
๋๋ ํน์ ์ด์ธ๊ณ์ ํ๋ก ํธ ๊ฐ๋ฐ์ ์ง๋ง์..? ๐
๋๊ธ๋จ๊ธฐ๊ธฐ