๐ ๋ธ๋ผ์ฐ์ ์ ๊ณตํต์ ์ธ ๊ตฌ์กฐ

- User Interface : ์ฃผ์ ํ์์ค, ์ด์ /๋ค์/์๋ก๊ณ ์นจ ๋ฒํผ ๋ฑ ์นํ์ด์ง๋ฅผ ์ ์ธํ๊ณ ์ฌ์ฉ์์ ์ํธ์์ฉ ํ๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค
- Broswer Engine : ์ ์ ์ธํฐํ์ด์ค์ ๋ ๋๋ง ์์ง์ ์ฐ๊ฒฐํ๋ ๋ธ๋ผ์ฐ์ ์์ง
- Rendering Engine : HTML๊ณผ CSS๋ฅผ ํ์ฑํ์ฌ ์์ฒญํ ์น ํ์ด์ง๋ฅผ ํ์ํ๋ ๋ ๋๋ง ์์ง
- Networking : ๋คํธ์ํฌ ์์ฒญ์ ์ํ
- Javascript Interpreter : ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์คํํ๋ ์ธํฐํ๋ฆฐํฐ(ex. ํฌ๋กฌ์์ V8)
- UI Bacend : ์ฒดํฌ๋ฐ์ค๋ ๋ฒํผ๊ณผ ๊ฐ์ ๊ธฐ๋ณธ์ ์ธ ์์ ฏ์ ๊ทธ๋ ค์ฃผ๋ UI Backend
- Data Persistance : ๋ก์ปฌ์คํ ๋ฆฌ์ง๋ ์ฟ ํค์ ๊ฐ์ด ๋ณด์กฐ ๊ธฐ์ต์ฅ์น์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ํํธ
๐ ๋ ๋๋ง ์์ง - ํฌ๋กฌ ๊ธฐ์ค ์ค๋ช
๋ธ๋ผ์ฐ์ ๋ง๋ค ๋ค๋ฆ
Safari : Webkit
Firefox : Gecko
Chrome : Blink(์นํท์์ ํ์)
โ ๋ ๋๋ง ์์ง์ ๋ชฉ์
1. HTML, CSS, JS, ์ด๋ฏธ์ง ๋ฑ ์นํ์ด์ง์ ํฌํจ๋ ๋ชจ๋ ์์๋ค์ ํ๋ฉด์ ๋ณด์ฌ์ค๋ค.
2. ์ ๋ฐ์ดํธ๊ฐ ํ์ํ ๋, ํจ์จ์ ์ผ๋ก ๋ ๋๋ง์ ํ ์ ์๋๋ก ์๋ฃ๊ตฌ์กฐ๋ฅผ ์์ฑํ๋ค.
โ ๋ ๋๋ง ์์ง์ ๋์ ๊ณผ์ - Critical Rendering Path

1. Dom Tree ์์ฑ
i. html ์ฝ๋๋ ์ดํ ๋ถ์์ ํตํด html5 ํ์ค์ ์ง์ ๋ ๊ณ ์ ํ ํ ํฐ์ผ๋ก ๋ณํ๋จ(ํ ํฐํ)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๋์ ๊ณผ์ </title>
</head>
<body>
<!--์ฃผ์-->
<h1>๋ธ๋ผ์ฐ์ ๋ ๋๋ง</h1>
<p>์์</p>
</body>
</html>

- StartTag : htmlํ๊ทธ๊ฐ ์ด๋ฆผ
- EndTag : htmlํ๊ทธ๊ฐ ๋ซํ
ii. ๋ธ๋ผ์ฐ์ ์ ๋ ์ฑ(๊ตฌ๋ฌธ ๋ถ์) ๊ณผ์ - ํ ํฐ์ด ํด๋น ์์ฑ๊ณผ ๊ท์น์ ์ ์ํ๋ ๋ ธ๋ ๊ฐ์ฒด๋ก ๋ณํ

iii. ๊ฐ ๋ ธ๋๊ฐ ์๋ก ์ฐ๊ด์ฑ์ ๊ฐ์ง ์ ์๋๋ก ํธ๋ฆฌ๋ฅผ ์์ฑ - Dom Tree

- ์ต์์๋ document ๊ฐ์ฒด
- ํ๊ทธ๋ element node
- ํ๊ทธ์ ์์๋ attribute node
- ํ ์คํธ๋ text node
- ์ฃผ์์ comment node
2. CSSOM Tree ์์ฑ
body {
margin: 0;
padding: 0;
text-align: center;
}
h1 {
color: red;
}
body {
font-size: 20px;
text-align: right;
}
div {
width: 50%;
margin: 0 auto;
}
span {
display: none;
}

3. Render Tree ์์ฑ = Dom Tree + Cssom Tree
- ํ๋ฉด์ ํ์๋์ด์ผ ํ ๋ชจ๋ ๋ ธ๋์ ์ปจํ ์ธ , ์คํ์ผ ์ ๋ณด๋ฅผ ํฌํจํ๋ ํธ๋ฆฌ
- ๋๋ต์ ์ธ ๊ณผ์
document ๋ถํฐ ๊ฐ ๊ฐ์ฒด๋ฅผ ์ํํ๋ฉด์ ๊ฐ๊ฐ์ ๋ง๋ cssom์ ์ฐพ์์ ๊ท์น์ ์ ์ฉ
→ ๋ ๋์ ๊ด๋ จ๋ ์์๋ฅผ ๋ ๋ ํธ๋ฆฌ์ ํฌํจ
→ meta ํ๊ทธ๋ display:none ์์ฑ์ ๊ฐ์ง ์์๋ ๋ ๋์ ๊ด๊ณ๊ฐ ์์ผ๋ฏ๋ก ๋ ๋ํธ๋ฆฌ์ ํฌํจx

4. Layout(Reflow)
- ๋ทฐํฌํธ ๋ด์ ์์๋ค์ ์ ํํ ์์น์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐ
- ๋ฐ์ค๋ชจ๋ธ์ ๋ฐ๋ผ ํ ์คํธ๋ ์์์ ๋ฐ์ค๊ฐ ํ๋ฉด์์ ์ฐจ์งํ๋ ์์ญ์ด๋ ์ฌ๋ฐฑ ๊ทธ๋ฆฌ๊ณ ์ด์ธ์ ์คํ์ผ ์์ฑ์ด ๊ณ์ฐ๋จ
- ํผ์ผํธ๋, em์ ํฝ์ ๋จ์๋ก ๋ณํ๋จ
5. Paint
- ๋ ๋ํธ๋ฆฌ์ ํฌํจ๋ ์์๋ ํ ์คํธ, ์ด๋ฏธ์ง ๋ฑ์ด ์ค์ ํฝ์ ๋ก ๊ทธ๋ ค์ง๋๋ก ๋ณํํ๋ ๊ณผ์
๐ ์ธ์ฌ์ดํธ
Critical Rendering Path์ ์๊ฐ์ ์ค์ด๋ฉด, ๋ธ๋ผ์ฐ์ ๊ฐ ์น ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ๋ ์ค์ผ ์ ์๋ค.
โ UI๊ฐ ์ ๋ฐ์ดํธ ๋๋ 3๊ฐ์ง ์ํฉ
JavaScript → Style → Layout → Paint → Composite
1. ๋ค์ Layout์ด ๋ฐ์
ex. ์ฃผ๋ก ์์์ ํฌ๊ธฐ๋ ์์น๊ฐ ๋ฐ๋ ๋, ํน์ ๋ธ๋ผ์ฐ์ ์ฐฝ์ ํฌ๊ธฐ๊ฐ ๋ฐ๋์์ ๋ ๋ค์ ๋ฐ์
JavaScript → Style → Layout → Paint → Composite
2. Paint ๋ถํฐ ๋ค์ ๋ฐ์
ex. ์ฃผ๋ก ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ ํ ์คํธ ์์, ๊ทธ๋ฆผ์ ๋ฑ ๋ ์ด์์์ ์์น์๋ ๋ณํ๋ฅผ ์ผ์ผํค์ง ์๊ณ ์คํ์ผ์ ๋ณ๊ฒฝ์ด ์ผ์ด๋ฌ์ ๊ฒฝ์ฐ
JavaScript → Style → Layout → Paint → Composite
3. *๋ ์ด์ด์ ํฉ์ฑ๋ง ๋ค์ ๋ฐ์
- ์ฑ๋ฅ์์ผ๋ก ๊ฐ์ฅ ํฐ ์ด์ ์ ๊ฐ์ง
*๋ ์ด์ด?
- ํ์ธํ ํ ์์ญ์ ๋๋์ด ๋์ ๊ฒ์ ๋ ์ด์ด๋ผ๊ณ ํจ
- ๋ ๋ ํธ๋ฆฌ์ ์๋ ๋ ธ๋๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ์ด์ด์ ํฌํจ ๋จ, ๋ ์ด์ด ๋ํ ํธ๋ฆฌ ํํ๋ก ๊ตฌ์ฑ
- ๋ ๋๋ง ์์ง์ด ํ์ธํ ๊ณผ์ ์์ ๋ ์ด์ด๋ฅผ ๊ฐ๊ฐ ๊ทธ๋ฆฌ๊ณ ํ๋์ ๋นํธ๋งต์ผ๋ก ์ปดํฌ์ง ์์ผ์ ํ์ด์ง๋ฅผ ์์ฑ
์ฆ, CSS ์์ฑ์ด ๋ณ๊ฒฝ๋์์ ๋ 3๊ฐ์ง ๋ฐฉ๋ฒ ์ค ์ด๋์๋ถํฐ ์ ๋ฐ์ดํธ ๋๋์ง๋ฅผ ์ ์ ์๋ ์ฌ์ดํธ๋ฅผ ํ์ฉํด์ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์๋ ์์๋ก ์คํ์ผ๋ง์ ํด๋ณด๋ ๊ฒ ๋ํ ์ฑ๋ฅ ์ต์ ํ์ ํ ๋ฐฉ๋ฒ์ด ๋ ์ ์์
- ex. ์ ๋๋ฉ์ด์ ์์ฑ์ left๋ฅผ ๋จน์ด๋ฉด, ํ์ธํธ ๊ณผ์ ๋ถํฐ ๋ค์ ์ผ์ด๋๋ค. ํ์ง๋ง transform์์ฑ์ ๋จน์ด๋ฉด composite ๊ณผ์ ๋ง์ผ๋ก๋ ์ ๋ฐ์ดํธ๊ฐ ๊ฐ๋ฅํ๋ค ์ด๋ด ๊ฒฝ์ฐ transform์ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์จ์
- css ํธ๋ฆฌ๊ฑฐ : https://csstriggers.com
CSS Triggers List - What Kind of Changes You Can Make
Check out our ultimate list of CSS triggers and learn which changes you can make on your website and it will affect your properties.
csstriggers.com
์ฐธ๊ณ : ๋ ๋๋ง ๊ณผ์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด๋ป๊ฒ ๋์ํ๋๊ฐ?
- HTML/CSS ํ์ฑ ๊ณผ์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ ๋๋ง ์์ง์ HTML์ ํ ์ค์ฉ ์์ฐจ์ ์ผ๋ก ํ์ฑํ๋ฉฐ DOM์ ์์ฑํด ๋๊ฐ๋ค๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ก๋ํ๋ <script> ํ๊ทธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ฝํ ์ธ ๋ก ๋ด์ <script> ํ๊ทธ๋ฅผ ๋ง๋๋ฉด DOM ์์ฑ์ ์ผ์ ์ค๋จํ๋ค.
- ๊ทธ๋ฆฌ๊ณ <script> ํ๊ทธ์ src ์ดํธ๋ฆฌ๋ทฐํธ์ ์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ์๋ฒ์ ์์ฒญํ์ฌ ๋ก๋ํ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ด๋ <script> ํ๊ทธ ๋ด์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํ์ฑํ๊ธฐ ์ํด โก ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ ์ด๊ถ์ ๋๊ธด๋ค. ์ดํ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ฑ๊ณผ ์คํ์ด ์ข ๋ฃ๋๋ฉด โ ๋ ๋๋ง ์์ง์ผ๋ก ๋ค์ ์ ์ด๊ถ์ ๋๊ฒจ HTML ํ์ฑ์ด ์ค๋จ๋ ์ง์ ๋ถํฐ ๋ค์ HTML ํ์ฑ์ ์์ํ์ฌ DOM ์์ฑ์ ์ฌ๊ฐํ๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ ํ์ฑ๊ณผ ์คํ์ โ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ์์ง์ด ์๋ โก ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์ฒ๋ฆฌํ๋ค. โก ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํ์ฑํ์ฌ CPU๊ฐ ์ดํดํ ์ ์๋ ์ ์์ค ์ธ์ด(low-level language)๋ก ๋ณํํ๊ณ ์คํํ๋ ์ญํ ์ ํ๋ค.
- โก ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํด์ํ์ฌ AST(Abstract Syntax Tree: ์ถ์์ ๊ตฌ๋ฌธ ํธ๋ฆฌ)๋ฅผ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ AST๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธํฐํ๋ฆฌํฐ๊ฐ ์คํํ ์ ์๋ ์ค๊ฐ ์ฝ๋(intermediate code)์ธ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์คํํ๋ค.
- ๋ฆฌํ๋ก์ฐ์ ๋ฆฌํ์ธํธ
- ๋ง์ฝ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ DOM์ด๋ CSSOM์ ๋ณ๊ฒฝํ๋ DOM API๊ฐ ์ฌ์ฉ๋ ๊ฒฝ์ฐ DOM์ด๋ CSSOM์ด ๋ณ๊ฒฝ๋๋ค.
- ์ด๋ ๋ณ๊ฒฝ๋ DOM๊ณผ CSSOM์ ๋ค์ ๋ ๋ ํธ๋ฆฌ๋ก ๊ฒฐํฉ๋๊ณ ๋ณ๊ฒฝ๋ ๋ ๋ ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ ์ด์์๊ณผ ํ์ธํธ ๊ณผ์ ์ ๊ฑฐ์ณ ๋ธ๋ผ์ฐ์ ์ ํ๋ฉด์ ๋ค์ ๋ ๋๋งํ๋ค. ์ด๋ฅผ ๋ฆฌํ๋ก์ฐ(reflow), ๋ฆฌํ์ธํธ(repaint)๋ผ ํ๋ค.
์ฐธ๊ณ
junh0328, ํ๋ก ํธ์๋๊ธฐ์ ๋ฉด์ ํธ๋๋ถ
GitHub - junh0328/prepare_frontend_interview: ๐ ํ๋ก ํธ์๋ ๊ธฐ์ ๋ฉด์ ์ ์ํ ํธ๋๋ถ ๋ง๋ค๊ธฐ
๐ ํ๋ก ํธ์๋ ๊ธฐ์ ๋ฉด์ ์ ์ํ ํธ๋๋ถ ๋ง๋ค๊ธฐ. Contribute to junh0328/prepare_frontend_interview development by creating an account on GitHub.
github.com
์ฒดํ, ์ฐ์ํํ ํฌ 10๋ถํ ํฌํก
https://www.youtube.com/watch?v=sJ14cWjrNis
https://velog.io/@moonshadow/CSSOM
CSSOM?
DOM, CSSOM, Render Tree์ ๋ํด ๊ฐ๋จํ ์ ๋ฆฌํด๋ณด๋ ๊ธ
velog.io
'CS ๊ณต๋ถ - front' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [JS] var vs let vs const (0) | 2023.02.15 |
|---|---|
| [React] ํจ์ํ๊ณผ ํด๋์คํ์ ์ฅ๋จ์ ๋น๊ต (0) | 2023.02.15 |
| [JS] ๋๊ธฐ ์ฒ๋ฆฌ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ (0) | 2023.02.02 |
| [JS] ์ฝ๋ฐฑ ํจ์ (0) | 2023.02.02 |
| [JS]๋ณ์ ์ ์ธ์ ์คํ ์์ ๊ณผ ๋ณ์ ํธ์ด์คํ (0) | 2023.01.31 |