๐ ํด๋ฆญํด๋ด! ๋๋ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง์ 100์ ์ง๋ฆฌ ๋๋ต์ ํ ์ ์์ด!!
Web์ ๋ํด ๊ณต๋ถํ๋ฉด์ ๋ ๋๋ง์ด ๋ฌด์์ด๊ณ ์ด๋ป๊ฒ ์๋๋๋๊ฐ? ์ ๋ํ ๊ถ๊ธ์ฆ์ ๊ฐ์ง์ง ๋ชปํ๋ค. ์ทจ์ ์ ํด์ผ๋๋ค๋ ๋ง์ฐํ ์๊ฐ๋๋ฌธ์ ๊ณผ์ ์์ด ๋ฉด์ ์ ์์ฃผ๋์ค๋ ํค์๋๋ง ์๊ธฐํ๋ค.
CS์ ๊ธฐ์ด์ง์์ด ์์ผ๋ ๋๊ตฐ๊ฐ์๊ฒ ๋๋ตํ๋ ํ์์ผ๋ก ๋ฌ๋ฌ ์ธ์ฐ๊ธฐ๋ง ํ๋ค. ์กฐ๊ธ๋ง ์์ฉ๋์ด๋ ์ด๋ก ์ด ๋ณต์กํ๊ฒ ๊ผฌ์ฌ ๋ฒ๋ ธ๋ค. ๊ทธ๋์ ์ธ์ ๊ฐ๋ ์ด๋ฐ ์ ๋ฆฌ ์ ๋ ๋ด ์ง์์ ์ ๋ฆฌํด์ผ์ง๐ฅ๐ฅ ๋ผ๋ ๊ณํ์ ํ๋ค ์ด๋ฒ์ ๋ ๋๋ง์ด๋ผ๋ ํค์๋๋ฅผ ์ฐ๊ด์ฑ์ ๋ง์ถฐ์ ์์ธํ๊ฒ ๊ธฐ๋กํด๋ณด๋ ค๊ณ ํ๋ค.
์์ ์๋ง์ด๋ผ๋ฉด ๋ ๋๋ง, ๋ธ๋ผ์ฐ์ , DOM ๋ฑ ๋ค์ํ ํค์๋์ ๋ํด ๊ถ๊ธํ ๋ ๋์ ๊ธ์ด ์๊ฐ๋๊ณ ํ๋ฆ์ ํ์ ํ๋ฉด ์ข๊ฒ ๋ค.

์น ๋ ๋๋ง์ด๋ผ๋ ์ฃผ์ ๋ฅผ ์ ํ ํ ์ด๋ ํ ์์๋ก ์น ๋ ๋๋ง์ ๋ํด์ ๊ธ์ ์จ์ผ ํ ๊น? ์ ๋ํด ๋ง์ ๊ณ ๋ฏผ์ ํ์๋ค. ์ด๋ก ์ ์ธ ๋จ๊ณ๋ก ์ธ ์ ์๊ณ , ์ค์ํ ์์๋๋ก๋ ์ธ ์ ์๋ค. ํ์ง๋ง ๋ด๊ฐ ์ ํํ ๋ฐฉ๋ฒ์ ๋ด๊ฐ ๊ณต๋ถํ๋ฉด์ ๋๊ผ๋ ํค์๋์ ์ฐ๊ด์ฑ์ ํ๋ฆ์ ๋ง์ถฐ์ ๊ธฐ๋กํด๋ณด๋ ค ํ๋ค.
์๋ฅผ๋ค์ด! ๐ ์ฌ๊ณผ์ ๋ํด์ ๊ธ์ ์ฐ๊ณ ์ถ์๋ ์ฌ๊ณผ๋ ์ด๋ฆ์ด ์ ์ฌ๊ณผ๊ณ => ์ด๋ ํ ํน์ฑ์ด ์๊ณ => ๊ทธ๋์ ์ด๋ ํ๋ค ๋ผ๋ ํ๋ฆ์ผ๋ก ์ฌ๊ณผ๋ฅผ ์์๋ณด๋ ๊ฒ์ด ์๋, ์ฌ๊ณผ๋ ๋ญ๊น? => ์ฌ๊ณผ๋ ๊ณผ์ผ์ด๊ตฌ๋, ๋ญ ๊ณผ์ผ์ด๋ผ๊ณ ํ์ง? => ๊ณผ์ผ์ ๋ ์ด๋ค ๊ฒ ์์๊น? ์ด๋ฐ ์์ผ๋ก ์ง๋ฌธ์ ๊ผฌ๋ฆฌ์ ๊ผฌ๋ฆฌ๋ฅผ ๋ฌด๋ ๋ฐฉ์(๊ผฌ๊ผฌ๋ฌด)์ผ๋ก ๊ธ์ ์์ฑํ ์์ ์ด๋ค!!
์๋ก ์ด ๋๋ฌด ๊ธธ์๋ค!! ์์นซํ๋ฉด ๋๋ฌด ์ด๋ ต๊ณ , ์ง๋ถ ํ ์ ์๋ ๋ด์ฉ์ด์ง๋ง ๋๊ตฐ๊ฐ์๊ฒ ํ์ํ ๊ฒ์ด๋ผ ์๊ฐํด ์์ธํ ์ค๋ช
ํด๋ณด๋ ค๊ณ ํ๋ค. ๋ง์ฝ ํ์ํ ๋ด์ฉ๋ง ์ฐพ๊ณ ์ถ์ผ๋ฉด ๋ชฉ์ฐจ, command + f , ctrl+f ๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํด์ ํ์ํ ๋ด์ฉ์ ์์ฐจ๊ฒ ์ฐพ์๊ฐ๋ฉด ์ข๊ฒ ๋ค!!
์ค์ํ๊ฒ ์์์ผ ๋ ํค์๋
ํ์ฑ๊ณผ ๋ ๋๋ง
ํ์ฑ์ HTML ํ์ผ์ ํด์ํ์ฌ DOM(Document Object Model) Tree๋ฅผ ๊ตฌ์ฑํ๋ ๋จ๊ณ๋ฅผ ๋งํ๊ณ , ๋ ๋๋ง์ด๋ HTML, CSS, JS๋ก ์์ฑ๋ ๋ฌธ์๋ฅผ ํ์ฑํ์ฌ ๋ธ๋ผ์ฐ์ ์ ์ฌ์ฉ์๊ฐ ๋์ผ๋ก ๋ณผ ์ ์๋๋ก ์๊ฐ์ ์ผ๋ก ์ถ๋ ฅํ๋ ๊ฒ์ ๋งํ๋ค.
์์ฒญ๊ณผ ์๋ต

๋ธ๋ผ์ฐ์ ์ URL์ ์ ๋ ฅํ๋ฉด URL์ ์ ํ ๊ฐ์ ํ์ฑํ๊ณ HTTP ์์ฒญ ๋ฉ์์ง๋ฅผ ๋ง๋ค์ด ์น ์๋ฒ๋ก ์ ์กํ๋ค. ๋ธ๋ผ์ฐ์ ๋ ๋ฉ์์ง๋ฅผ ๋คํธ์ํฌ์ ์ง์ ์ก์ถํ ์ ์๊ธฐ๋๋ฌธ์ OS์ ์๋ขฐํด์ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ค. OS์ ์ก์ ์ ์๋ขฐํ๊ธฐ ์ํด์๋, IP ์ฃผ์๋ก ๋ฉ์์ง๋ฅผ ๋ฐ์ ์๋๋ฅผ ์ง์ ํด์ผ๋๊ธฐ ๋๋ฌธ์, DNS(Domain Name Server)๋ฅผ ์กฐํํด์ผ ํ๋ค.
์ดํ, ๋ธ๋ผ์ฐ์ ๊ฐ ์์ฒญํ ๋ฉ์์ง๊ฐ ์น์๋ฒ ์ธก LAN์ ๋์ฐฉํ๋ฉด ๋ฐฉํ๋ฒฝ์ด ๊ฒ์ฌ๋ฅผ ํ๋๋ฐ, ์บ์์๋ฒ๋ฅผ ํตํด ์น์๋ฒ๊น์ง ๊ฐ์ผํ๋ ์ง ์๋์ง ์กฐ์ฌํ๋ค. ํ์ด์ง์ ๋ฐ์ดํฐ ์ค ๋ค์ ์ด์ฉํ ์ ์๋ ๊ฒ์ ์บ์ ์๋ฒ์ ์ ์ฅ๋๊ณ ์ก์ธ์คํ ํ์ด์ง์ ๋ฐ์ดํฐ๊ฐ ์บ์์๋ฒ์ ์์ผ๋ฉด ์น์๋ฒ์ ์๋ขฐํ์ง ์๊ณ ๋ฐ๋ก ๊ฐ์ ์ฝ์ ์ ์๋ค.
์น์๋ฒ์ ๋์ฐฉํ๋ฉด ํจํท์ ๋ด๊ธด ๋ฉ์์ง๋ฅผ ๋ณต์ํด์ WAS์ ๋๊ธฐ๊ณ , WAS์ ์์ฒญ ๋ฉ์์ง์ ๋ฐ๋ฅธ ๋ฐ์ดํฐ๋ฅผ ์๋ต ๋ฉ์์ง์ ๋ฃ์ด ํด๋ผ์ด์ธํธ๋ก ๋ค์ ๋ณด๋ธ๋ค. ์น ๋ธ๋ผ์ฐ์ ๋ ์ญ์ผ๋ก ์น ์๋ฒ๋ก๋ถํฐ HTTP๋ฅผ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ ์ก๋ฐ๊ณ , ๋ ๋๋ง ์์ง์ ์ฌ์ฉํด ์ด๋ฅผ ํ ์คํธ ๋ฐ ์ด๋ฏธ์ง ๋ฑ์ผ๋ก ๋ณํํ๋ค. ๋ธ๋ผ์ฐ์ ๋ ์ต์ข ํ๋ฉด์ ์ฌ์ฉ์์๊ฒ ํ์ํ๋ ์ญํ ์ ํ๋ค.
ํ๋ง๋๋ก ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด๊ณ URL์ ์ ๋ ฅํ๋ ์๊ฐ๋ถํฐ HTTP ์์ฒญ(Request)์ด ์์๋๊ณ , ๋ธ๋ผ์ฐ์ ๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ URL์ฃผ์์ ํด๋นํ๋ ๋ชฉ์ ์ง(์น์๋ฒ)์ ๋์ฐฉํด์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ , ๊ทธ ๋ชฉ์ ์ง(์น์๋ฒ)์์ ์๋ตํ ๋ฐ์ดํฐ๋ฅผ ์๋ต ๋ฐ์์(Response) ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ฒ ๋๋ค.
๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์

์ฐ๋ฆฌ๋ ์ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ ์ ์๋ฆฌ๋ฅผ ์์์ผํ ๊น??
C์ธ์ด, JAVA์ ๊ฐ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ OS๋ ๊ฐ์๋จธ์ ์์์ ์คํ๋๋ค. ๋ฌผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ฐํ์ ํ๊ฒฝ์์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ด์ผ๊ธฐ๊ฐ ๋ค๋ฅด๊ฒ ์ง๋ง ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ๊ด์ ์์๋ ์น ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ค. ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ค๋ฃจ๋ ํ๋ก ํธ์๋ ์ ์ฅ์์๋ ์ด๋ ์์ ์์ ์ด๋ป๊ฒ ๋ ๋๋ง์ด ๋๋์ง ํ์ ํ๊ณ ์์ด์ผ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ณ , ์์ ํ ์ ์๋ค.
๋ธ๋ผ์ฐ์ ๊ฐ ๋ ๋๋ง์ ํ๊ฒ ๋๋ฉด DOM(The Document Object Model) ์ ๋ง๋ค์ด๋ด๋๋ฐ ๋ง๋ค์ด์ง๋ ๊ณผ์ ์ ๋ํด ์์๋ณด์.
๐๐ปโโ๏ธ ์ ๊น! DOM์ ๋ฌด์์ผ๊น?
๋ฌธ์์ ๊ตฌ์กฐํ๋ ํํ์ ์ ๊ณตํ๋ฉฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ DOM ๊ตฌ์กฐ์ ์ ๊ทผํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ๊ทธ๋ค์ด ๋ฌธ์ ๊ตฌ์กฐ, ์คํ์ผ, ๋ด์ฉ ๋ฑ์ ๋ณ๊ฒฝํ ์ ์๊ฒ ๋๋๋ค.
nodes์ objects๋ก ๋ฌธ์๋ฅผ ํํํ๋๋ฐ ์ด๋ค์ ์น ํ์ด์ง๋ฅผ ์คํฌ๋ฆฝํธ ๋๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์์ ์ฌ์ฉ๋ ์ ์๊ฒ ์ฐ๊ฒฐ์์ผ์ฃผ๋ ์ญํ ์ ๋ด๋นํ๋ค.
HTML ํ์ฑ
HTML ํ์ฑ์ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ์์ ๋ฐ์ HTML ๋ฌธ์๋ฅผ ๋ฌธ์์ด๋ก ๋ฐ์๋ค์ด๊ณ , ์ด๋ฅผ ํ์ฑํ์ฌ ์ดํด ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ก ๋ณํํ๋ ๊ณผ์ ์ ์๋ฏธํ๋๋ฐ ๋ธ๋ผ์ฐ์ ๋ HTML ๋ฌธ์๋ฅผ ์์์ ์๋๋ก ์ฝ์ผ๋ฉฐ, ํ๊ทธ์ ๋ด์ฉ์ ํ์ ํ๊ณ ๊ฐ ์์์ ์๋ฏธ์ ๊ด๊ณ๋ฅผ ์ดํดํ๋ค.
โ ๏ธ ํ์ฑ(Parsing)์ ์ปดํจํฐ ๊ณผํ ๋ฐ ํ๋ก๊ทธ๋๋ฐ์์ ํน์ ํ์์ผ๋ก ๊ตฌ์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ณ ๊ทธ ์๋ฏธ๋ฅผ ์ดํดํ๋ ๊ณผ์ ์ ์๋ฏธํ๋ค. ๊ทธ ์ค์์ HTML ํ์ฑ์ ๋ํด์ ์ค๋ช ํ ๊ฒ ๋ฟ์ด๋ ๐ ์ฌ๊ธฐ์์์ ์์ธํ ๋ด์ฉ์ ์ฐพ์๋ณด๋ ๊ฒ์ ๊ถ์ฅํ๋ค
์ด ๊ณผ์ ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ ๋ ์ค๋ฅ ๋ณต๊ตฌ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ต๋ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ , ์ ํจํ HTML ๋ฌธ์ ๊ตฌ์กฐ๋ฅผ ๋ง๋ ๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก HTML ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์ DOM ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๋ ๋ฒ์ญํ๋ ๊ณผ์ (DOM ์์ฑ ๊ณผ์ )์ด ํ์ํ๋ค
DOM ์์ฑ ๊ณผ์

- ์๋ฒ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์์ฒญํ HTML ํ์ผ์ ์ฝ์ด ๋ค์ฌ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ ๋ค์, ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๋ฐ์ดํธ(2์ง์)๋ก ์๋ตํ๋ค.
- ๋ธ๋ผ์ฐ์ ๋ ์๋ต๋ฐ์ ๋ฐ์ดํธ ํํ์ HTML ๋ฌธ์๋ฅผ metaํ๊ทธ์ charset ์ดํธ๋ฆฌ๋ทฐํธ๋ก ์ง์ ํด ๋ ์ธ์ฝ๋ฉ ๋ฐฉ์(ex. UTF-8)์ ๊ธฐ์ค์ผ๋ก ๋ฌธ์์ด๋ก ๋ณํํ๋ค.
- ๋ฌธ์์ด๋ก ๋ณํ๋ HTML ๋ฌธ์๋ฅผ ์ฝ์ด ๋ค์ฌ ๋ฌธ๋ฒ์ ์ผ๋ก ๋ ์ด์ ๋๋ ์ ์๋ ๊ธฐ๋ณธ์ ์ธ ์ธ์ด ์์์ธ ํ ํฐ(token)๋ค๋ก ๋ถํดํ๋ค.
- ๊ฐ ํ ํฐ๋ค์ ๊ฐ์ฒด๋ก ๋ณํํ์ฌ ์ปดํจํฐ ๊ณผํ์ ์ฐ์ด๋ ๊ธฐ์ด์ ์ธ ๋จ์์ธ ๋ ธ๋(node)๋ฅผ ์์ฑํ๋ค. ๋ ธ๋๋ ์ดํ DOM์ ๊ตฌ์ฑํ๋ ๊ธฐ๋ณธ ์์๊ฐ ๋๋ค.
- ์ด๋ฌํ ๋ ธ๋๋ค์ body ํ๊ทธ ์์ div๋ฅผ ๋ฃ๊ณ ๊ทธ ์์ ๋ p๋ฅผ ๋ฃ๋ฏ์ด ์ค์ฒฉ๋ ์ ์๋๋ฐ, ์ด๋ฌํ ์ค์ฒฉ ๊ด๊ณ์ ์ํด ๋ถ์๊ด๊ณ๊ฐ ํ์ฑ๋๋ค. ๋ถ์๊ด๊ณ๋ฅผ ๋ฐ์ํ์ฌ ๋ชจ๋ ๋ ธ๋๋ค์ ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ๋ก ๊ตฌ์ฑํ๋ค.
CSSํ์ฑ๊ณผ CSSOM(CSS Object Model) ์์ฑ

๋ ๋๋ง ์์ง์ ์ฒ์๋ถํฐ ํ ์ค์ฉ ์์ฐจ์ ์ผ๋ก ํ์ฑํ๋ฉฐ DOM์ ์์ฑํ๋๋ฐ, ์ค๊ฐ์ CSS๋ฅผ ๋ก๋ํ๋ link๋ style ํ๊ทธ๋ฅผ ๋ง๋๋ฉด DOM ์์ฑ์ ์ผ์ ์ค๋จํ๋ค.
๊ทธ ํ CSS ํ์ผ์ ์๋ฒ์ ์์ฒญํ๊ณ ์๋ต๋ฐ์ CSS ํ์ผ์ HTML๊ณผ ๋์ผํ ํ์ฑ๊ณผ์ ์ ๊ฑฐ์น๋ฉฐ ํด์ํด CSSOM์ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ CSS ํ์ฑ์ด ์๋ฃ๋๋ฉด HTML ํ์ฑ์ด ์ค๋จ๋ ์์ ์ผ๋ก ๋์๊ฐ ๋ค์ HTML์ ํ์ฑํ๋ค.
๋ธ๋ผ์ฐ์ ์์ง
๋ธ๋ผ์ฐ์ ์์ ์น ์ฝํ ์ธ ์ ํ์ ๋ฐ ์ํธ ์์ฉ์ ์ฒ๋ฆฌํ๋ ์ํํธ์จ์ด ๊ตฌ์ฑ์์์ด๋ค. ์ฌ๊ธฐ์๋ ๋คํธ์ํน ๊ณ์ธต, JS ์์ง ๋ฐ ๋ ๋๋ง ์์ง๊ณผ ๊ฐ์ ์ฌ๋ฌ ๊ตฌ์ฑ ์์๊ฐ ํฌํจ๋๋ค.
์น ์๋ฒ์์ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๊ณ , HTML, CSS, JS ๋ฐ ๊ธฐํ ์น ๊ธฐ์ ์ ํ์ฑํ๊ณ , ์ฌ์ฉ์ ์ฅ์น์์ ์ฝํ ์ธ ๋ฅผ ๋ ๋๋งํ๋ ์ญํ ์ ํ๋ค.
๋ ๋๋ง ์์ง
์น ์ฝํ ์ธ ์ ๋ ๋๋ง์ ์ฒ๋ฆฌํ๋ ๋ธ๋ผ์ฐ์ ์์ง์ ํน์ ๊ตฌ์ฑ ์์์ด๋ค. HTML ๋ฐ CSS ์ฝ๋ ๊ตฌ๋ฌธ ๋ถ์, DOM ํธ๋ฆฌ ๋ฐ CSSOM ์์ฑ, ํ์ด์ง์ ์์ ๋ฐฐ์น ๋ฐ ์คํ์ผ ์ง์ , ์ต์ข ์ ์ผ๋ก ์ฌ์ฉ์ ์ฅ์น์ ํ์ด์ง ๋ ๋๋ง์ ๋ด๋นํ๋ค.
๊ฒฐ๊ณผ: ๋ ๋๋ง ์์ง์ ๋ธ๋ผ์ฐ์ ์์ง์ ํฌํจ๋๋ ๊ฐ๋ ์ธ ๊ฒ ๊ฐ๋ค!
๋ ๋ ํธ๋ฆฌ

๋ ๋๋ง ํธ๋ฆฌ ๊ตฌ์ถ
- DOM ํธ๋ฆฌ์ ๋ฃจํธ์์๋ถํฐ ์์ํ์ฌ ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋๋ฐ ํ์ํ ๋ ธ๋๋ง ๋จ๊ธฐ๋๋ฐ ์ด๋ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ ๋ฉํ ํ๊ทธ ๊ฐ์ ์์๋ ๋ ๋๋ง์ ๋ฐ์๋์ง ์๊ณ , css์ display: none; ์์ฑ๋ ๋ ๋๋ง ํธ๋ฆฌ์ ํฌํจ๋์ง ์๋ (โ ๏ธ visibility: hidden;์ ๋ณด์ด์ง๋ ์์ง๋ง ๊ณต๊ฐ์ ์ฐจ์งํ๊ธฐ ๋๋ฌธ์ ๋ ๋๋ง ํธ๋ฆฌ์ ํฌํจ)
- ํ๋ฉด์ ํ์๋๋ ๋ชจ๋ ๋ ธ๋์ ์ปจํ ์ธ ๋ฐ ์คํ์ผ ์ ๋ณด๋ค์ ํฌํจํ๋ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ง ๋ ๋๋ง ํธ๋ฆฌ๊ฐ ์ต์ข ์ ์ผ๋ก ๊ตฌ์ถ๋๋ค.
๋ ๋๋ง ํธ๋ฆฌ ๋ฐฐ์น
- ์ฌ์ฉ์์ ๋ทฐํฌํธ ๊ธฐ์ค์ผ๋ก ๋ ๋๋ง ํธ๋ฆฌ๊ฐ ๊ทธ๋ ค์ง ์์น์ ํฌ๊ธฐ๋ค์ ๊ณ์ฐํ๋ ๋จ๊ณ์ด๋ค.
- ํ์ด์ง์์ ๊ฐ ๊ฐ์ฒด์ ์ ํํ ํฌ๊ธฐ์ ์์น๋ฅผ ํ์ ํ๊ธฐ ์ํด ๋ ๋๋ง ์์ง์ ๋ค์ ๋ ๋๋ง ํธ๋ฆฌ์ ๋ฃจํธ์์๋ถํฐ ๊ณ์ฐ์ ๋ค์ด๊ฐ๋ค.
- ๊ฐ ๋ ธ๋๋ค์ ์ ํํ ์์น์ ํฌ๊ธฐ๊ฐ ๊ณ์ฐ๋์ด ๋ ์ด์์์ด ์๋ฃ๋๋ฉด ๋ ๋๋ง ์์ง์ Paint Setup ๋ฐ Paint ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ๋ค.
๋ ๋๋ง ํธ๋ฆฌ ๊ทธ๋ฆฌ๊ธฐ
- ์ด ๊ณผ์ ์์ ์คํ์ผ์ด ๋ณต์กํ ์๋ก ํ์ธํ ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ๋์ด๋๋ค. ์ด๋ ๊ฒ ๋ ๋๋ง ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋๋ฉฐ ๋ง์ฝ DOM์ด๋ CSSOM์ด ์์ ๋๋ฉด ํ๋ฉด์ ๋ค์ ๋ ๋๋งํ ํ์๊ฐ ์๋ ํฝ์ ์ ํ์ ํ๋ ค๋ฉด, ์ ๋ถ ์ฒ์๋ถํฐ ๋ฐ๋ณตํด์ผํ๋ค.
โ Render Tree์ DOM Tree์ ์ฐจ์ด์
- Render Tree๋ DOM๊ณผ CSSOM์ ํฉํ ํ์ ์ต์ข ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์ ํ๊ธฐํ ๋ ธ๋๋ค๋ง ์ ๋ณ๋์ด ํธ๋ฆฌ๊ฐ ์์ฑ์ด ๋๋ค.
- Render Tree๋ ๋ธ๋ผ์ฐ์ ์ ๋ณด์ด์ง๋ง, DOM์ ๋ธ๋ผ์ฐ์ ์ ๋ณด์ด์ง ์๋๋ค
- ๋ทฐํฌํธ์ ๋ฌด์์ ๋ ๋๋งํ ์ง ๊ฒฐ์ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ฒ์ด DOM์ด๊ณ Render Tree๋ ๋ทฐํฌํธ์ ๋ฌด์์ ๋ ๋๋งํ ์ง ๊ฒฐ์ ๋ ์ต์ข ์ ์ธ ํธ๋ฆฌ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง ์ฒ๋ฆฌ ๋ฐฉ์
DOM API๋ DOM์ ๊ฐ ๋
ธ๋์ ์ํธ์์ฉํ๊ธฐ ์ํ ์ธํฐํ์ด์ค, ๋๋ HTML์ JS์์ ์ ์ดํ๊ธฐ ์ํ ๋ช
๋ น๋ค์ ์งํฉ์ด๋ฉฐ ๋ํ์ ์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ์์ ์์ฃผ ์ฌ์ฉํ๋ document.querySelector() ๋ฑ์ ์๋ก ๋ค ์ ์๋ค. ์ด๋ฌํ DOM API๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ ์์ฑ๋ DOM์ ๋์ ์ผ๋ก ์กฐ์ํ ์ ์๋ค.
CSS๋ฅผ ํ์ฑํ ๋ DOM ์์ฑ์ ๋ฉ์ถ๊ณ CSSOM์ ์์ฑํ ๊ฒ์ฒ๋ผ script ํ๊ทธ๋ ๋์ผํ๋ค. ํ์ง๋ง CSSOM์ ๋ ๋๋ง ์์ง์ด ๋ง๋ค์๊ณ , script๋ ๋ ๋๋ง ์์ง์ด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์๊ฒ ์ ์ด๋ฅผ ๋๊ฒจ์ HTML ํ์ฑ์ด ์ค๋จ๋ ์์ ๋ถํฐ ๋ค์ DOM ์์ฑ์ ์์ํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง ์ฒ๋ฆฌ ์์
- ํ ํฐํ(Tokenization): ์ฝ๋๋ฅผ ํ ํฐ ๋จ์(๋ณ์, ํค์๋, ์ฐ์ฐ์ ๋ฑ์ ์๋ฏธ ์๋ ๋จ์)๋ก ๋๋๋ ๊ณผ์
- ํ์ฑ(Parsing): ํ ํฐ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ ๋๋ AST(์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ณ ํธ๋ฆฌ๋ก ํํํ๋ ๊ณผ์ )๋ก ๋ณํ
- ์ปดํ์ผ(Compilation): ์ผ๋ถ ์์ง์ AST๋ฅผ ์ค๊ฐ ์ฝ๋๋ก ์ปดํ์ผํ๋๋ฐ ์ด ๋จ๊ณ์์ ์ต์ ํ๊ฐ ์ํ๋๊ธฐ๋ ํจ
- ์คํ(Execution)
- ํ์ฑ๋ ์ฝ๋๋ฅผ ์คํํ๋ ๋จ๊ณ๋ก, ์์ง์ ํ์ฑ๋ AST๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค์ ๋ก ์ฝ๋๋ฅผ ์คํํ๋ฉฐ, ์ด๋ฅผ ์ํด ๋ค์ํ ์์ ์ ์ํํจ
- ๋ณ์์ ํจ์๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ๊ณ , ์ฐ์ฐ์ ์ํํ๋ฉฐ, ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ๋ณต๋ฌธ์ ์คํํ๋ ๋ฑ์ด ํฌํจ๋๊ณ , ์คํ ๋จ๊ณ์์๋ ์ฝ๋์ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๊ณ ๋ฐํํจ
์๋ฐ์คํฌ๋ฆฝํธ ๋ฆฌํ๋ก์ฐ, ๋ฆฌํ์ธํธ
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ DOM์ด๋ CSSOM์ ๋ณ๊ฒฝํ๋ DOM API๊ฐ ์ฌ์ฉ๋ ๊ฒฝ์ฐ DOM์ด๋ CSSOM์ด ๋ณ๊ฒฝ๋๋ค. ๋ณ๊ฒฝ๋ DOM๊ณผ CSSOM์ ๋ค์ ๋ ๋ ํธ๋ฆฌ๋ก ๊ฒฐํฉ๋๋ฉฐ ๋ฆฌ๋ ๋๋ง์ด ๋๋๋ฐ ์ด๊ฒ์ ๋ ์ด์์์ ๋ค์ ๊ณ์ฐํด์ฃผ๋ ๋ฆฌํ๋ก์ฐ ์ ์ฌ๊ฒฐํฉ๋ ๋ ๋ ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค์ ํ์ธํธ ํด์ฃผ๋ ๋ฆฌํ์ธํธ๊ฐ ์๋ค.

๋ฆฌํ๋ก์ฐ(Reflow)
๋ ์ด์์์ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํด๋น ์์์ ๊ทธ ์์ ์์์ ์์น์ ํฌ๊ธฐ๋ฅผ ๋ค์ ๊ณ์ฐํ๋ ๊ณผ์ ์ ๋งํ๋ฉฐ ํ์ด์ง์ ๋ ์ด์์์ ์ฌ์กฐ์ ํ๋ฏ๋ก ๋น์ฉ์ด ๋ง์ด ๋๋ ์์ ์ด๊ณ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์ผ๋ ์ฃผ์ํด์ผ ํ๋ค. ๋ฆฌํ๋ก์ฐ๊ฐ ๋ฐ์ํ๋ ์ํฉ์ ์๋์ ๊ฐ์ผ๋ ์ฃผ์ํด์ผํ๋ค!
- ์์์ ํฌ๊ธฐ, ์์น, ํน์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ
- ์๋์ฐ์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๊ฑฐ๋ ์คํฌ๋กค์ ํ๋ ๊ฒฝ์ฐ
- ์์์ ์ถ๊ฐ, ์ ๊ฑฐ, ์จ๊น, ๋ณด์๊ณผ ๊ฐ์ ๋ ์ด์์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ
- CSS ์์ฑ ๋ณ๊ฒฝ์ด ๋ฐ์ํ์ฌ ๋ ์ด์์์ ์ํฅ์ ์ฃผ๋ ๊ฒฝ์ฐ
๋ฆฌํ์ธํธ(Repaint)
์์์ ์คํ์ผ์ด ๋ณ๊ฒฝ๋์ด ์๋ก์ด ํฝ์ ๋ก ๊ทธ๋ ค์ง๋ ๊ณผ์ ์ ๋งํ๋ค. ํ์ง๋ง ์์์ ํฌ๊ธฐ๋ ์์น๋ ๋ณ๊ฒฝ๋์ง ์๋๋ค. ๋ฆฌํ์ธํธ๋ ๋ฆฌํ๋ก์ฐ๋ณด๋ค ๋น์ฉ์ด ์ ๊ฒ ๋๋ ์์ ์ด์ง๋ง, ๋ ๋๋ง ์ฑ๋ฅ์๋ ์ํฅ์ ๋ฏธ์น๋ค. ๋ฆฌํ์ธํธ๊ฐ ๋ฐ์ํ๋ ์ํฉ์ ์๋์ ๊ฐ๋ค!
- ์์์ ์์, ํฌ๋ช ๋, ๊ทธ๋ฆผ์ ๋ฑ์ ์คํ์ผ ์์ฑ์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ.
- ์์์ ํด๋์ค๊ฐ ๋ณ๊ฒฝ๋์ด ์คํ์ผ์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ.
- ๋ธ๋ผ์ฐ์ ์ฐฝ์ด ํ์ฑํ๋๊ฑฐ๋ ์จ๊ฒจ์ง ์์๊ฐ ๋ค์ ํ์๋๋ ๊ฒฝ์ฐ.
๋ง๋ฌด๋ฆฌ
์ฌ์ค ์ฌ๊ธฐ์ ์น ๋ ๋๋ง ๋ฐฉ์(CSR, SSR ๋ฑ) ์ ๋ํ ๊ฒ๊ณผ React Virtual DOM์ ๋ํด์๋ ๊ธฐ๋กํ๊ณ ๊ณต๋ถํ๋ ค๊ณ ํ๋ค. ํ์ง๋ง ๊ณต๋ถํ๋ค ๋ณด๋ ๋ธ๋ผ์ฐ์ ์์ฒด์ ๋ ๋๋ง ๋ฐฉ์๋ ์์์ผ ํ ๊ฒ๋ค์ด ๋ง๋ค๊ณ ์๊ฐํด์ ์ฃผ์ ๋ฅผ ๋ถ๋ฆฌํด์ ๊ธฐ๋ก, ๊ณต๋ถํ ์์ ์ด๋ค.


๋ธ๋ผ์ฐ์ ์ ๊ดํด์ ๊ณต๋ถ๋ฅผ ํด๋ณด๋ฉด์ Javascript ์ธ์ด๋ก ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ํ ๋ ๋ ๋๋ง์ ๋ค๋ฃจ๋ ๊ฒ์ ๋ํด์ ์ ์๊ณ ์์ด์ผ ๋๋ค๊ณ ์๊ฐํ๊ธฐ๋ ํ์ง๋ง, ๋ฆฌ ๋ ๋๋ง์๊น์ง ์๊ฐํ์ง๋ ๋ชปํ๊ณ ๊ธ๊ธํ๊ฒ ๋ ๋๋ง์ด๋ผ๋ 1์ฐจ ๋ชฉํ๋ง ๋ค๋ค๋ค๊ณ ์๊ฐํ๋ค. React์์ hook์ ๋ค๋ฃจ๊ฑฐ๋ ๋ณต์กํ ์ฝ๋๋ฅผ ๋ค๋ฃฐ์๋ก ์๋, ํธ์ถ ๋ฐฉ์์ ์ ๊ฒฝ์ ์จ์ผ ๋๋๋ฐ ์ข์ ๊ฐ๋ฐ์(์ฌ์ฌ์ฉ์ฑ์ด ๋์ ์ฝ๋๋ฅผ ์์ฑํ๋)๊ฐ ๋๊ธฐ ์ํด์ ์ด๋ค ๊ฒ์ ๊ด์ฌ์ ๋์ด์ผ ํ ๊น๋ฅผ ์๊ฐํด๋ณผ ์ข์ ๊ธฐํ์๋ค๊ณ ์๊ฐํ๋ค.
์๊ธ์ 24๋ 4์ 9์ผ์ ๋ง๋ฌด๋ฆฌ๋ฅผ ์ง์์ง๋ง, ๋ช ๋ฒ ์ฝ์ผ๋ฉด์ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง์ ๊ดํด ๋ด์ฉ์ด ํ์ํ๋ฉด ๋ ๊ธฐ๋กํด๋ด์ผ๊ฒ ๋ค. ๋ถ๋ฆฌํด์ ์์ฑํ ํ์๋ฅผ ๋๋ผ๋ฉด ๋งํฌ๋ฅผ ๋จ๊ฒจ๋๊ฒ ๋ค!
