1๏ธโฃ๋ธ๋ผ์ฐ์ ์ ์ฃผ์ ๊ธฐ๋ฅ์ ์ฌ์ฉ์๊ฐ ์ ํํ ์์์ ์๋ฒ์ ์์ฒญํ๊ณ ๋ธ๋ผ์ฐ์ ์ ํ์ํ๋ ๊ฒ์ด๋ค. ์์์ ๋ณดํต HTML ๋ฌธ์์ง๋ง PDF๋ ์ด๋ฏธ์ง ๋๋ ๋ค๋ฅธ ํํ์ผ ์ ์๋ค. ์์์ ์ฃผ์๋ URI(Uniform Resource Identifier)์ ์ํด ์ ํด์ง๋ค.
2๏ธโฃ๋ธ๋ผ์ฐ์ ๋ HTML๊ณผ CSS ๋ช ์ธ์ ๋ฐ๋ผ HTML ํ์ผ์ ํด์ํด์ ํ์ํ๋๋ฐ ์ด ๋ช ์ธ๋ ์น ํ์คํ ๊ธฐ๊ตฌ์ธ W3C(World Wide Web Consortium)์์ ์ ํ๋ค. ๊ณผ๊ฑฐ์๋ ๋ธ๋ผ์ฐ์ ๋ค์ด ์ผ๋ถ๋ง ์ด ๋ช ์ธ์ ๋ฐ๋ผ ๊ตฌํํ๊ณ ๋ ์์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ํ์ฅํจ์ผ๋ก์จ ์น ์ ์์๊ฐ ์ฌ๊ฐํ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ๊ฒช์์ง๋ง ์ต๊ทผ์๋ ๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ค ๋ช ์ธ๋ฅผ ๋ฐ๋ฅธ๋ค.
์์ฝ์ ๋ฆฌ
1. DOM, CSSOM์์ฑ: ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ๋จ๊ณ๋ก ์๋ฒ๋ก๋ถํฐ ๋ฐ์ HTML, CSS๋ฅผ ๋ค์ด๋ฐ๋๋ค
→ ๋จ์ํ ํ ์คํธ์ธ HTML, CSSํ์ผ์ Object Model๋ก ๋ง๋ ๋ค. HTML์ DOM์ผ๋ก, CSS๋ CSSOM์ผ๋ก ๋ง๋ค์ด์ง๋ค. (html์ด ์ฌ๊ธฐ์ ํ์ฑ๋๋ค) DOM Tree์ CSSOM Tree๊ฐ ๋ง๋ค์ด์ง๋ค
2. Render Tree์์ฑ: DOM Tree์ CSSOM Tree๊ฐ ๋ง๋ค์ด์ก์ผ๋ฉด ๊ทธ ๋ค์์ผ๋ก๋ ์ด ๋์ ์ด์ฉํ์ฌ Render Tree๋ฅผ ์์ฑํ๋ค. ๋ ๋ํธ๋ฆฌ์๋ ์คํ์ผ ์ ๋ณด๊ฐ ์ค์ ๋์ด์๊ณ , ์ค์ ํ๋ฉด์ ํํ๋๋ ๋ ธ๋๋ค๋ก ๊ตฌ์ฑ๋๋ค.
3. Layout ๋จ๊ณ: ๋ธ๋ผ์ฐ์ ์ ๋ทฐํฌํธ(Viewport) ๋ด์์ ๊ฐ ๋ ธ๋๋ค์ ์ ํํ ์์น์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ๋ค. ์์ฑ๋ Render Tree ๋ ธ๋๋ค์ด ๊ฐ์ง๊ณ ์๋ ์คํ์ผ๊ณผ ์์ฑ์ ๋ฐ๋ผ์ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ์ด๋์์น์ ์ด๋ํฌ๊ธฐ๋ก ์ถ๋ ฅ๋ ์ง ๊ณ์ฐํ๋ ๋จ๊ณ์ด๋ค.(reflow ๋จ๊ณ) ๋ ์ด์์ ๋จ๊ณ์์ %, vh, vw์ ๊ฐ์ด ์๋์ ์ธ ์์น, ํฌ๊ธฐ ์์ฑ์ ์ค์ ํ๋ฉด์ ๊ทธ๋ ค์ง๋ ํฝ์ ๋จ์๋ก ๋ณํ๋๋ค.
4. Paint: Layout ๊ณ์ฐ์ด ์๋ฃ๋๋ฉด ์ด์ ์์๋ค์ ์ค์ ํ๋ฉด์ ๊ทธ๋ฆฌ๊ฒ ๋๋ค.(repaint ๋จ๊ณ) ์ฒ๋ฆฌํด์ผํ๋ ์คํ์ผ์ด ๋ณต์กํ ์๋ก paint ๋จ๊ณ์ ์์๋๋ ์๊ฐ์ด ๊ธธ๋ค. (๊ฐ๋ น ๊ทธ๋ผ๋ฐ์ด์ , ๊ทธ๋ฆผ์ ํจ๊ณผ > ๋จ์ ๋ฐฐ๊ฒฝ)
๋ธ๋ผ์ฐ์ ๋์ ์๋ฆฌ
- ์๋ฒ์์ ์๋ต์ผ๋ก ๋ฐ์ HTML ๋ฐ์ดํฐ๋ฅผ ํ์ฑํ๋ค.
- HTML ๋งํฌ์
์ ์ฒ๋ฆฌํ๊ณ
DOMํธ๋ฆฌ๋ฅผ ๋น๋ํ๋ค. ("๋ฌด์์" ๊ทธ๋ฆด์ง ๊ฒฐ์ ํ๋ค. ex] ๊ฑด์ถ๋ฌผ์ ๊ตฌ์กฐ) - ํ์ฑํ๋ ์ค CSS ํ์ผ ๋งํฌ๋ฅผ ๋ง๋๋ฉด CSS ํ์ผ์ ์์ฒญํด์ ๋ฐ์์จ๋ค
- CSS ๋งํฌ์
์ ์ฒ๋ฆฌํ๊ณ
CSSOM(CSS Object Model)ํธ๋ฆฌ๋ฅผ ๋น๋ํ๋ค. ("์ด๋ป๊ฒ" ๊ทธ๋ฆด์ง ๊ฒฐ์ ํ๋ค. ex] ๊ฑด์ถ๋ฌผ์ ์ธํ ๋ฆฌ์ด) - DOM ๋ฐ CSSOM ์ ๊ฒฐํฉํ์ฌ Render Tree๋ฅผ ํ์ฑํ๋ค.
- Render Tree์ ์๋ ๊ฐ๊ฐ์ ๋ ธ๋๋ค์ด ํ๋ฉด์ ์ด๋์ ์ด๋ป๊ฒ ์์นํ ์ง๋ฅผ ๊ณ์ฐํ๋ Layout๊ณผ์ ์ ๊ฑฐ์ณ,
- ๊ฐ๋ณ ๋ ธ๋๋ฅผ ํ๋ฉด์ ํ์ธํธํ๋ค.
๋ ๋๋ง ์์ง ๋์ ์๋ฆฌ
๋ ๋๋ง ์์ง
๋ ๋๋ง ์์ง์ ์์ ํ์์ ๋ณด๋๊ฒ ์ฒ๋ผ ์์ฒญ๋ฐ์ ๋ด์ฉ์ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ํ์ํด์ฃผ๋ ์ญํ ์ ํ๋ค.
๋ธ๋ผ์ฐ์ ๋ง๋ค ์ฌ์ฉํ๋ ๋ ๋๋ง ์์ง์ด ๊ฐ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์, ๋ชจ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋์ผํ๊ฒ ๊ทธ๋ ค์ฃผ์ง ์๊ณ ์์ง๋ง๋ค ์ฝ์ ์ ์๋ ์ฝ๋์ ๋ฒ์ ๋ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง ์ด์๊ฐ ๋ฐ์ํ๊ธฐ๋ ํ๋ค.
๋ธ๋ผ์ฐ์ ๋ ๋๋ง ์์ง ์ข ๋ฅ
IE | Trident |
Edge | EdgeHTML, Blink |
Chrome | Webkit, Blink(๋ฒ์ 28 ์ดํ) |
Safari | Webkit |
FireFox | Gecko |
์๋ฒ์์ ์๋ต๋ฐ์ HTML ๋ฐ์ดํฐ ํ์ฑ
<html>
<head>
<meta charset="utf-8">
<link href="./style.css" rel="stylesheet">
</head>
<body>
<p>Hello World!!</p>
<div>
<img src="./image.png">
</div>
</body>
</html>
๋ธ๋ผ์ฐ์ ์ฃผ์์ฐฝ์ url ์ ๋ ฅ ํ ์ ์ก -> ๋ธ๋ผ์ฐ์ ๋ ํด๋น ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๊ฒ ๋จ.
์์ฒญ์ ๋ํ ์๋ต์ผ๋ก๋ ์์ ๊ฐ์ ํํ์ HTML๋ฌธ์๋ฅผ ๋ฐ์์ค๊ฒ ๋๊ณ , ์ด๊ฑธ ํ๋ํ๋ ํ์ฑparsingํ๊ธฐ ์์ํ๋ฉด์ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ๊ณผ์ ์ด ์์.
- ๋ฏธ๋์ด ํ์ผ์ ๋ง๋๋ฉด ์ถ๊ฐ๋ก ์์ฒญ์ ๋ณด๋ด์ ๋ฐ์์ต๋๋ค.
- JavaScript ํ์ผ์ ๋ง๋๋ฉด ํด๋น ํ์ผ์ ๋ฐ์์์ ์คํํ ๋๊น์ง ํ์ฑ์ด ๋ฉ์ถฅ๋๋ค.
HTML์์ DOM Tree๋ก
์ ์ฌ์ง๊ณผ ๊ฐ์ ๊ณผ์ ์ด ๋๋๋ฉด Tree๋ชจ์์ DOM(Document Object Model)์ด ์์ฑ๋๊ฒ ๋ฉ๋๋ค.
CSS์์ CSSOM์ผ๋ก
HTML์ ํ์ฑํ ๊ฒ๊ณผ ์ ์ฌํ ๊ณผ์ ์ ๊ฑฐ์ณ์ ์ญ์ Treeํํ์ CSSOM์ผ๋ก ๋ง๋ค์ด์ง๋๋ค. CSS ํ์ฑ์ CSS ํน์ฑ์ ์์ ๋
ธ๋๋ค์ด ๋ถ๋ชจ ๋
ธ๋์ ํน์ฑ์ ๊ณ์ํด์ ์ด์ด๋ฐ๋(cascading) ๊ท์น์ด ์ถ๊ฐ๋๋ค๋ ๊ฒ์ ๋นผ๊ณ ๋ HTMLํ์ฑ๊ณผ ๋์ผํ๊ฒ ์ด๋ฃจ์ด์ง๋๋ค.
์ด๋ ๊ฒ CSSOM์ ๊ตฌ์ฑํ๋ ๊ฒ์ด ๋๋์ผ, ๋น๋ก์ ์ดํ์ Rendering ๊ณผ์ ์ ์์ํ ์ ์์ต๋๋ค.
(๊ทธ๋์ CSS๋ rendering์ blocking ์์๋ผ๊ณ ํฉ๋๋ค.)
DOM(Content) + CSSOM(Style) = Render Tree
DOM๊ณผ CSSOM๋ฅผ ํฉ์ณ์ Render Tree๋ฅผ ๋ง๋ญ๋๋ค.
Render Tree๋ DOM Tree์ ์๋ ๊ฒ๋ค ์ค์์ ํ๋ฉด์ ์ค์ ๋ก '๋ณด์ด๋' ์น๊ตฌ๋ค๋ง์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
๋ง์ฝ CSS์์
display: none ์ผ๋ก ์ค์ ํ๋ฉด, ๊ทธ ๋ ธ๋(์ ๊ทธ ์์ ๋ ธ๋ ์ ๋ถ)๋ Render Tree์ ์ถ๊ฐ๋์ง ์๋๋ค.
(๋ณด์ด์ง ์๊ธฐ ๋๋ฌธ)
๋ง์ฐฌ๊ฐ์ง๋ก ํ๋ฉด์ ๋ณด์ด์ง ์๋ <head> ํ๊ทธ ์์ ๋ด์ฉ๋ค๋ Render Tree์๋ ์ถ๊ฐ๋์ง ์๋๋ค.
Layout(reflow)
ํ๋ฉด์ ๋ณด์ด๋ ๋ ธ๋๋ค๋ง์ ๊ฐ์ง๊ณ ์๋ Render Tree๊ฐ ๋ค ๋ง๋ค์ด์ง๋ฉด, ์ด์ Render Tree์ ์๋ ๊ฐ๊ฐ์ ๋ ธ๋๋ค์ด ํ๋ฉด์ ์ด๋์ ์์นํ ์ง๋ฅผ ๊ณ์ฐํ๋ Layout๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค. CSSOM์์ ๊ฐ์ ธ์จ ์คํ์ผ ์ ๋ณด๋ค๋ก ์ด๋ฏธ ์๊ฐ ์ด๋ป๊ฒ ์๊ฒจ์ผ ํ๋ค๋ ๊ฒ์ ๋ชจ๋ ์๊ณ ์์ง๋ง, ๊ทธ๋์ ํ์ฌ ๋ณด์ด๋ ๋ทฐํฌํธ (๋ด๊ฐ๋ณด๋ ๋ธ๋ผ์ฐ์ ํ๋ฉด)์ ๊ธฐ์ค์ผ๋ก ์ค์ ๋ก ๋์ผ๋ ค๋ฉด ์๊ฐ ์ด๋์ ๊ฐ์ผํ๋ ์ง๋ ๊ณ์ฐ์ ํด์ผํ๊ธฐ ๋๋ฌธ.
์ฌ๊ธฐ์์ CSS box model์ด ์ฐ์ด๋ฉฐ, position(relative, absolute, fixed..), width, height ๋ฑ๋ฑ ํ๊ณผ ์์น์ ๊ด๋ จ๋ ๋ถ๋ถ๋ค์ด ๊ณ์ฐ๋ฉ๋๋ค.
๋ง์ฝ width: 50% ๋ก ๋์ด์๋๋ฐ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ฆฌ์ฌ์ด์ฆํ๋ค๊ณ ํ๋ฉด, ๋ณด์ด๋ ์์๋ค์ ๋ณํจ์ด ์์ผ๋ Render Tree๋ ๊ทธ๋๋ก์ธ ์ํ์์, layout๋จ๊ณ๋ง ๋ค์ ๊ฑฐ์ณ ์์น๋ฅผ ๊ณ์ฐํด์ ๊ทธ๋ฆฌ๊ฒ ๋ฉ๋๋ค.
์ด๋ด๊ฒฝ์ฐ ๊ฐ ์์๋ค์ ํฌ๊ธฐ์ ์์น๋ฅผ ๋ค์ ๊ณ์ฐํ๊ฒ ๋๋๋ฐ ์ด ๊ณผ์ ์ Reflow, ๊ทธ๋ฆฌ๊ณ Reflow ๋ ๋ ๋ ํธ๋ฆฌ๋ฅผ ๋ค์ ํ๋ฉด์ ๊ทธ๋ ค์ฃผ๋ ๊ณผ์ ์ Repaint๋ผ๊ณ ํ๋ค.
์ด๋ ๊ฒ ํ๋ฉด์ ๋ณด์ด๋ ์์ ๊ฐ๊ฐ์ด ์ด๋์ ์ด๋ป๊ฒ ์์นํ ์ง๋ฅผ ์ ํด์ฃผ๋ ๊ณผ์ ์ Webkit์์๋ layout์ผ๋ก, Gecko์์๋ reflow๋ก ๋ถ๋ฅด๊ณ ์์ต๋๋ค.
Paint(or Repaint )
๊ทธ๋ฆฌ๊ณ ๋๋์ด Render Tree์ ๊ฐ ๋ ธ๋๋ค์ ์ค์ ๋ก ํ๋ฉด์ ๊ทธ๋ฆฌ๊ฒ ๋ฉ๋๋ค.
(visibility, outline, background-color๊ฐ์ด ์ ๋ง๋ก ๋์ ๋ณด์ด๋ ํฝ์
๋ค์ด ์ฌ๊ธฐ์์ ๊ทธ๋ ค์ง๋๋ค.)
์ฐธ๊ณ ์๋ฃ
https://m.post.naver.com/viewer/postView.nhn?volumeNo=8431285&memberNo=34176766
https://d2.naver.com/helloworld/59361
๋ง๋ฌด๋ฆฌ!!
๋ธ๋ผ์ฐ์ ๊ฐ ๋ ๋๋ง์ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ํ ์ ์๊ฒ ๊ฐ๋ฐํ๊ธฐ ์ํด์๋ Reflow๊ณผ์ ์ ์ต์ํ ์ํค๋ ๊ฒ์ด ์ข๋ค.
Reflow๊ฐ ๋ฐ์ํ๋ฉด Repaint๊ฐ ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ๋ ๋๋ง ์ต์ ํ์ ์ข์ง ์์ ์ํฅ์ ์ค๋ค.
๋ฐ๋ผ์ Reflow๋ฅผ ์ต์ํ ํ๋ ๊ณ ๋ฏผ์ ํ๋ฉด์ ํ๋ก ํธ๊ฐ๋ฐ์ ํ๋ค๋ฉด ์น ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ๊ณผ์ ์ ์กฐ๊ธ ๋ ์ต์ ํ ํ๋ค๋ฉด
์ข์ ํ์ด์ง๊ฐ ๋ ์ ์์ ๊ฒ์ด๋ค.
'๋ธ๋ก๊ทธ์ด์ > ๐Technical interview(Front)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํธ์ด์คํ ์ด๋? (0) | 2022.10.22 |
---|