-
๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ๊ณผ์ & Render Tree์ DOM Tree์ ์ฐจ์ด์ ๊ฐ๋ฐ 2022. 3. 15. 20:36
๐ฒ ๋ ๋๋ง ํธ๋ฆฌ ์์ฑ ๊ณผ์
1. ๊ฐ์ฒด ๋ชจ๋ธ (Object Model) ์์ฑ
<< DOM ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํ๋ ๊ณผ์ >>
- ๋ณํ
HTML ์ฝ๋๊ฐ ์์ผ๋ฉด ๋ ๋๋ง ์์ง์ HTML์ ์์ ๋ฐ์ดํธ๋ฅผ ๋์คํฌ๋ ๋คํธ์ํฌ์์ ์ฝ์ด์์, ํด๋น ํ์ผ์ ๋ํด ๊ฐ๋ณ ๋ฌธ์๋ก ๋ณํํ๋ค. - ํ ํฐํ
๊ฐ๋ณ ๋ฌธ์๋ก ๋ณํ๋ ๊ฒ์ HTML5 ํ์ค์ผ๋ก ์ง์ ๋ ๊ณ ์ ํ ํฐ์ผ๋ก ๋ณํํ๋ค. ๊ฐ ํ ํฐ์ ๊ณ ์ ํ ์๋ฏธ์ ๊ท์น์ ๊ฐ์ง๋ค. - DOM ์์ฑ
๋ง์ง๋ง์ผ๋ก HTML ๋งํฌ์ ์ด ์ฌ๋ฌ ํ๊ทธ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํ๊ธฐ ๋๋ฌธ์ ์์ฑ๋ ๊ฐ์ฒด๋ ํธ๋ฆฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ด์ ์ฐ๊ฒฐ๋๋ค.
์ด ํธ๋ฆฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ์๋ ๋งํฌ์ ์ ์ ์๋ ์์-ํ์ ๊ด๊ณ๋ฅผ ํฌํจํ๋ค. (ex: HTML ๊ฐ์ฒด๋ body ๊ฐ์ฒด์ ์์๋ผ๋ ๊ด๊ณ๋ค.)
์ด๋ ๊ฒ ๊ตฌ์ฑ๋ DOM ํธ๋ฆฌ๋ HTML ๋ฌธ์ ๋งํฌ์ ์ ์์ฑ๊ณผ ๊ฐ ๋ ธ๋์ ๊ด๊ณ์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง, ์์ง ์ด ์์๋ค์ด ๋ ๋๋ง ๋ ๋ ์ด๋ป๊ฒ ํ์ํ ์ง์ ๋ํด์๋ ์ ์๊ฐ ์๋ค. ์ด๋ CSSOM์ ์ญํ ์ด๋ค.
<< CSSOM ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํ๋ ๊ณผ์ >>
๋ ๋๋ง ์์ง์ด HTML DOM์ ์์ฑํ๋ฉด์ ์ธ๋ถ CSS StyleSheet ํ์ผ์ ์ฐธ์กฐํ๋ <head> ์น์ ์์ ๋งํฌ ํ๊ทธ๋ฅผ ์ ํ๋ฉด, ์ด ๋ฆฌ์์ค์๋ํ ์์ฒญ์ ๋คํธ์ํฌ ๋ ์ด์ด์ ์ฆ์ ๋ฐ์กํ๊ณ ์์ฒญ์ ๊ฒฐ๊ณผ๋ก css ํ์ผ์ ์๋ต๋ฐ๋๋ค.
HTML๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ ๋ CSS๊ท์น์ ๋ ๋๋ง ์์ง์ด ์ดํดํ๊ณ ์ฒ๋ฆฌํ ์ ์๋ ํ์์ผ๋ก ๋ณํํด์ผ ํ๋ค.HTML์ฒ๋ผ CSS๋ ๋ฐ์ดํธ๊ฐ ๋ฌธ์๋ก ๋ณํ๋๊ณ -> ํ ํฐ์ผ๋ก ๋ณํ -> ๋ ธ๋๋ก ๋ณํ -> ๋ง์ง๋ง์ผ๋ก CSSOM์ด๋ผ๋ ํธ๋ฆฌ ๊ตฌ์กฐ์ ๋งํฌ๊ฐ ๋๋ค. CSSOM์ด ํธ๋ฆฌ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ ์ด์ ๋, ์ต์์ ๋ ธ๋์์ ํ์๋ก ๋ด๋ ค๊ฐ์๋ก ๋์ฑ ๊ตฌ์ฒด์ ์ธ ๊ท์น์ ์ ์ฉํ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ฆ, ์คํ์ผ์ ํํฅ์์ผ๋ก ๊ตฌ์ฒดํํ๋ค. ๋ ์ฌ๊ธฐ์ ๊ตฌ์ฑ๋ CSSOM ํธ๋ฆฌ๋ ๊ฐ๋ฐ์๊ฐ ์คํ์ผ์ํธ์์ ์ ์ํ๋๋ก ์ง์ ์์ฑํ ์คํ์ผ๋ง ํ์๊ฐ ๋๋ค.
2. Rendering Tree ๊ตฌ์ถ, ๋ฐฐ์น, ๊ทธ๋ฆฌ๊ธฐ
DOM ํธ๋ฆฌ์ CSSOM ํธ๋ฆฌ๋ ๋ ๋ฆฝ์ ์ธ ๊ฐ์ฒด๋ค. ์ด ๋ ๊ฐ์ง๋ฅผ ๊ฒฐํฉํ์ฌ ๋ ๋๋ง ํธ๋ฆฌ๋ฅผ ํ์ฑํด์ผ ๋ธ๋ผ์ฐ์ ๊ฐ ํ๋ฉด์ ํฝ์ ์ ๋ ๋๋ง ํ ์ ์๋ค.
<< ๋ ๋๋ง ํธ๋ฆฌ ๊ตฌ์ถ >>
DOM ํธ๋ฆฌ์ ๋ฃจํธ์์๋ถํฐ ์์ํ์ฌ ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋๋ฐ ํ์ํ ๋ ธ๋๋ง ๋จ๊ธด๋ค.
์คํฌ๋ฆฝํธ ํ๊ทธ๋ ๋ฉํ ํ๊ทธ ๊ฐ์ ์์๋ ๋ ๋๋ง์ ๋ฐ์๋์ง ์๊ณ , css์ display: none; ์์ฑ๋ ๋ ๋๋ง ํธ๋ฆฌ์ ํฌํจ๋์ง ์๋๋ค.
ํ์ง๋ง visibility: hidden;์ ๋ณด์ด์ง๋ ์์ง๋ง ๊ณต๊ฐ์ ์ฐจ์งํ๊ธฐ ๋๋ฌธ์ ๋ ๋๋ง ํธ๋ฆฌ์ ํฌํจ๋๋ค.
ํ๋ฉด์ ํ์๋๋ ๋ชจ๋ ๋ ธ๋์ ์ปจํ ์ธ ๋ฐ ์คํ์ผ ์ ๋ณด๋ค์ ํฌํจํ๋ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ง ๋ ๋๋ง ํธ๋ฆฌ๊ฐ ์ต์ข ์ ์ผ๋ก ๊ตฌ์ถ๋๋ค.<< ๋ ๋๋ง ํธ๋ฆฌ ๋ฐฐ์น >>
์ฌ์ฉ์์ ๋ทฐํฌํธ ๊ธฐ์ค์ผ๋ก ๋ ๋๋ง ํธ๋ฆฌ๊ฐ ๊ทธ๋ ค์ง ์์น์ ํฌ๊ธฐ๋ค์ ๊ณ์ฐํ๋ ๋จ๊ณ์ด๋ค.
ํ์ด์ง์์ ๊ฐ ๊ฐ์ฒด์ ์ ํํ ํฌ๊ธฐ์ ์์น๋ฅผ ํ์ ํ๊ธฐ ์ํด ๋ ๋๋ง ์์ง์ ๋ค์ ๋ ๋๋ง ํธ๋ฆฌ์ ๋ฃจํธ์์๋ถํฐ ๊ณ์ฐ์ ๋ค์ด๊ฐ๋ค.
๊ฐ ๋ ธ๋๋ค์ ์ ํํ ์์น์ ํฌ๊ธฐ๊ฐ ๊ณ์ฐ๋์ด ๋ ์ด์์์ด ์๋ฃ๋๋ฉด ๋ ๋๋ง ์์ง์ Paint Setup ๋ฐ Paint ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ๋ค.<< ๋ ๋๋ง ํธ๋ฆฌ ๊ทธ๋ฆฌ๊ธฐ >>
์ด ๊ณผ์ ์์ ์คํ์ผ์ด ๋ณต์กํ ์๋ก ํ์ธํ ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ๋์ด๋๋ค. ์ด๋ ๊ฒ ๋ ๋๋ง ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋๋ฉฐ ๋ง์ฝ DOM์ด๋ CSSOM์ด ์์ ๋๋ฉด ํ๋ฉด์ ๋ค์ ๋ ๋๋งํ ํ์๊ฐ ์๋ ํฝ์ ์ ํ์ ํ๋ ค๋ฉด, ์ ๋ถ ์ฒ์๋ถํฐ ๋ฐ๋ณตํด์ผํ๋ค.
๐ฌ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ ( Browser Rendering Process )
์ฌ์ฉ์๊ฐ ์ฃผ์ํ์์ค์ URL์ ์ ๋ ฅํ๊ณ ์ํฐ๋ฅผ ์น๋ ์๊ฐ๋ถํฐ ๋ธ๋ผ์ฐ์ ์ ๊ฐ ์์๋ ์ํธ์์ฉ์ ํ๋ฉฐ ์นํ์ด์ง๋ฅผ ํ๋ฉด์ ๋์ด๋ค.
1. ๋ธ๋ผ์ฐ์ ์์ง์ด ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ก๋ถํฐ URI๋ฅผ ๋ฐ์ ์๋ฃ ์ ์ฅ์๋ฅผ ์ฐพ๋๋ค.
** URI ์ URL์ ์ฐจ์ด์ **
URI: URI๋ ํน์ ๋ฆฌ์์ค๋ฅผ ์๋ณํ๋ ํตํฉ ์์ ์๋ณ์(Uniform Resource Identifier)๋ฅผ ์๋ฏธํ๋ค. ์น ๊ธฐ์ ์์ ์ฌ์ฉํ๋ ๋ ผ๋ฆฌ์ ๋๋ ๋ฌผ๋ฆฌ์ ๋ฆฌ์์ค๋ฅผ ์๋ณํ๋ ๊ณ ์ ํ ๋ฌธ์์ด ์ํ์ค๋ค.
URL: URL์ ํํ ์น ์ฃผ์๋ผ๊ณ ๋ ํ๋ฉฐ, ์ปดํจํฐ ๋คํธ์ํฌ ์์์ ๋ฆฌ์์ค๊ฐ ์ด๋ ์๋์ง ์๋ ค์ฃผ๊ธฐ ์ํ ๊ท์ฝ์ด๋ค. URI์ ์๋ธ์ ์ด๋ค.์ฌ์ฉ์๊ฐ ์ฃผ์์ฐฝ์ ์ ๋ ฅํ๋ ์๊ฐ ๋ธ๋ผ์ฐ์ ์์ง์๊ฒ ์ ๋ฌํ๊ณ , ๋ธ๋ผ์ฐ์ ์์ง์ ์ฃผ์ ๊ฐ์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ์๋ฃ ์ ์ฅ์์์ ์ฐพ์๋ณธ๋ค.
์ฌ์ฉ์๊ฐ URI๋ฅผ ์ ๋ ฅํ ๋๋ง๋ค ํญ์ ์๋ฒ๋ก ๊ฐ์ ๋๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ค๋๊ฒ ์๋๋ผ, ๋ถํ์ํ ํต์ ์ ์ค์ด๊ธฐ ์ํด ์๋ฃ ์ ์ฅ์์ ์์ฃผ ๋ฐฉ๋ฌธํ๋ ์ฌ์ดํธ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด๋๋ค. ์ด๊ฒ์ ์บ์ฑ์ด๋ผ๊ณ ํ๋ค.
์บ์์ ๋ํด ๋ ์์๋ณด๊ธฐ ์ํด ์ฐธ๊ณ ํ ๋งํฌ
๋ฐ๋ผ์, ๋ธ๋ผ์ฐ์ ์์ง์ URI์ ํด๋นํ๋ ์๋ฃ๋ฅผ ์๋ฃ ์ ์ฅ์์์ ์ฐพ๊ณ , ์์ผ๋ฉด ๊ทธ๋๋ก ๋ ๋๋ง ์์ง์๊ฒ ์ค๋ค.
2. ๋ ๋๋ง ์์ง์ด ๋ธ๋ผ์ฐ์ ์์ง ๋๋ ๋คํธ์ํฌ ๋ ์ด์ด๋ก๋ถํฐ ์๋ฃ๋ฅผ ๋ฐ๋๋ค.
์บ์ฑ๋ ์๋ฃ๊ฐ ์๋ค๋ฉด ? ๋ ๋๋ง ์์ง์ ๋ธ๋ผ์ฐ์ ์์ง์ผ๋ก๋ถํฐ ์๋ฃ๋ฅผ ๋ฐ์ HTML, CSS, image ๋ฑ์ ํ์ฑ.
์บ์ฑ๋ ์๋ฃ๊ฐ ์๋ค๋ฉด ? ์๋ฒ์ ์์ฒญํด์ ์๋ฃ๋ฅผ ์ฐพ์์จ๋ค.
์ด ๊ฒฝ์ฐ ๋ ๋๋ง ์์ง์๊ฒ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ฃผ์๊ฐ(URI)๋ฅผ ์ ๋ฌํ๊ณ ๋ ๋๋ง ์์ง์ ํต์ ๋ ์ด์ด์ ์ ๋ฌํ๋ค.
ํต์ ๋ ์ด์ด๋ URI ์ฃผ์ ๊ฐ์ผ๋ก ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ต์ผ๋ก ์ฃผ์ ๊ฐ์ ํด๋นํ๋ HTML, CSS, JS ๊ฐ์ ๋ฐ์ผ๋ฉด ๋ ๋๋ง ์์ง์๊ฒ ์ค๋ค.3. ๋ ๋๋ง ์์ง์ด ์๋ฐ์คํฌ๋ฆฝํธ ํด์๊ธฐ ๋ฐ ๋คํธ์ํฌ์ ์ํตํ๋ฉฐ ๋ ๋๋ง ๊ตฌ์กฐ๋ฅผ ๊ทธ๋ ค UI ๋ฐฑ์๋์ ๋๊ธด๋ค.
UI ๋ฐฑ์๋๋?
๋ ๋๋ง ์์ง์์ ์์ฑ๋ ๋ ๋ ํธ๋ฆฌ๋ฅผ ๋ธ๋ผ์ฐ์ ์ ๊ทธ๋ฆฌ๋ ์ญํ ์ ํ๋ค. (ํ์ธํธ ์์ )๋ ๋๋ง ๊ณผ์ ์ ์ค์ถ ์ญํ ์ ํ๋ ๋ ๋๋ง ์์ง์ด HTML๊ณผ CSS๋ฅผ ํ์ฑํ์ฌ ๋ ๋๋ง ํธ๋ฆฌ๋ก ๋ณํํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
๋ ๋๋ง ์์ง์ ๋ธ๋ผ์ฐ์ ์์ง์ผ๋ก ๋ฐ๊ฑฐ๋ ํต์ ๋ ์ด์ด๋ก๋ถํฐ ๋๊ฒจ๋ฐ์ ๋ฆฌ์์ค ์ค, HTML๊ณผ CSS๋ ์ง์ ํ์ฑํ๊ณ , JS๋ ํฌ๋กฌ ๊ธฐ์ค V8์์ง์ผ๋ก ํ์์๊ฒ ์ ๋ฌํ์ฌ ํ์ฑํ๋ค. ํ์ฑํ ๊ฒฐ๊ณผ๋ฅผ ๋ ๋๋ง ์์ง์๊ฒ ๋ค์ ์ ๋ฌํ์ฌ, ํ์ฑํ HTML์ ๊ฒฐ๊ณผ์ธ DOM Tree๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์กฐ์ํ๋ค. ์กฐ์์ด ์๋ฃ๋ DOM ํธ๋ฆฌ ๊ตฌ์ฑ์์๋ ๋ ๋๋ง ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๋ณํ๋๊ณ , ์ด๋ ๊ฒ ์ต์ข ์ ์ผ๋ก ๋ง๋ค์ด์ง Render Object๋ฅผ ๋ ๋๋ง ์์ง์ด UI ๋ฐฑ์๋์ ์ฃผ์ด์ ํ๋ฉด์ ํ์ธํ ํด์ค๋ค.
Render Tree์ DOM Tree์ ์ฐจ์ด์
- Render Tree๋ DOM๊ณผ CSSOM์ ํฉํ ํ์ ์ต์ข ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์ ํ๊ธฐํ ๋ ธ๋๋ค๋ง ์ ๋ณ๋์ด ํธ๋ฆฌ๊ฐ ์์ฑ์ด ๋๋ค.
- DOM์ ๋ธ๋ผ์ฐ์ ์ ๋ณด์ด๋ ๊ฒ์ด ์๋๊ณ Render Tree๋ ๋ธ๋ผ์ฐ์ ์ ๋ณด์ด๋ ๊ฒ์ด๋ค.
- ๋ทฐํฌํธ์ ๋ฌด์์ ๋ ๋๋งํ ์ง ๊ฒฐ์ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ฒ์ด DOM์ด๊ณ Render Tree๋ ๋ทฐํฌํธ์ ๋ฌด์์ ๋ ๋๋งํ ์ง ๊ฒฐ์ ๋ ์ต์ข ์ ์ธ ํธ๋ฆฌ๋ค.
'๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Execution Context ์์๋ณด๋ฉฐ ๋ํํ ๋ฌป๋ QA (0) 2022.03.16 DOM ์์๋ณด๋ฉฐ ๋ํํ ๋ฌป๋ QA (0) 2022.03.15 GraphQL - [ useQuery & useLazyQuery ] (0) 2021.02.17 API Documentation - PostMan (0) 2021.01.27 React-Navigation ํ๋ฉด ํฌ์ปค์ค ๊ฐ์ง ๋ฌธ์ ํด๊ฒฐ (6) 2020.11.25 - ๋ณํ