Web

๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ณผ์ •

presentKey 2024. 3. 26. 01:11

๐Ÿ“ ๋ Œ๋”๋ง์ด๋ž€?

HTML, CSS, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์„ฑ๋œ ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์— ์‹œ๊ฐ์ ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ

ํŒŒ์‹ฑ(parsing, ๊ตฌ๋ฌธ ๋ถ„์„): ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๋ฌธ๋ฒ•์— ๋งž๊ฒŒ ์ž‘์„ฑ๋œ ํ…์ŠคํŠธ ๋ฌธ์„œ๋ฅผ ์ฝ์–ด ๋“ค์—ฌ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ…์ŠคํŠธ ๋ฌธ์„œ์˜ ๋ฌธ์ž์—ด์„ ํ† ํฐ์œผ๋กœ ๋ถ„ํ•ดํ•˜๊ณ , ํ† ํฐ์— ๋ฌธ์ ‘์  ์˜๋ฏธ์™€ ๊ตฌ์กฐ๋ฅผ ๋ฐ˜์˜ํ•˜์—ฌ ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ธ ํŒŒ์Šค ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ผ๋ จ์˜ ๊ณผ์ •

 

๐Ÿ“ ๋ Œ๋”๋ง ๊ณผ์ •

1. ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ HTML ํŒŒ์ผ์„ ๋ฐ›๋Š”๋‹ค.

2. HTML์„ ํŒŒ์‹ฑํ•˜๋ฉด์„œ CSS, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ, ์ด๋ฏธ์ง€ ๋“ฑ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญ.

3. DOM ํŠธ๋ฆฌ ์ƒ์„ฑ

4. CSSOM ํŠธ๋ฆฌ ์ƒ์„ฑ

5. DOM ํŠธ๋ฆฌ์™€ CSSOMํŠธ๋ฆฌ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ Render ํŠธ๋ฆฌ ์ƒ์„ฑ

6. Layout - HTML ์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ(์œ„์น˜์™€ ํฌ๊ธฐ) ๊ณ„์‚ฐ

7. Paint - ํ™”๋ฉด์— HTML ์š”์†Œ ๊ทธ๋ฆฌ๊ธฐ

8. Composite - Paint ๋‹จ๊ณ„์—์„œ ๋‚˜๋ˆ„์–ด์ง„ ๋ ˆ์ด์–ด๋“ค์„ ํ•ฉ์„ฑํ•ด์„œ ํŽ˜์ด์ง€ ์™„์„ฑ

 

๐Ÿ“Œ 1. ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ HTML ํŒŒ์ผ์„ ๋ฐ›๋Š”๋‹ค.

1. ์„œ๋ฒ„๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์š”์ฒญํ•œ HTML ํŒŒ์ผ์„ ์ฝ์–ด ๋“ค์—ฌ ๋ฐ”์ดํŠธ(2์ง„์ˆ˜)๋ฅผ ์‘๋‹ตํ•œ๋‹ค.

 

๐Ÿ“Œ 2. HTML์„ ํŒŒ์‹ฑํ•˜๋ฉด์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•œ๋‹ค.

1. ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฐ”์ดํŠธ ํ˜•ํƒœ์˜ HTML ๋ฌธ์„œ๋ฅผ ์ง€์ •๋œ ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์„ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

<meta charset='UTF-8'>

2. ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜๋œ HTML ๋ฌธ์„œ๋ฅผ ์ฝ์–ด ์ฝ”๋“œ์˜ ์ตœ์†Œ ๋‹จ์œ„์ธ ํ† ํฐ๋“ค๋กœ ๋ถ„ํ•ดํ•œ๋‹ค.

ํ† ํฐ(Token): ๋ฌธ๋ฒ•์ ์œผ๋กœ ๋”๋Š” ๋‚˜๋ˆŒ ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ์˜ ๊ธฐ๋ณธ ์š”์†Œ

3. ๊ฐ ํ† ํฐ๋“ค์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋…ธ๋“œ(node)๋“ค์„ ์ƒ์„ฑํ•œ๋‹ค. 

4. ์ด ๋…ธ๋“œ๋“ค๋กœ ๊ตฌ์„ฑ๋œ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ DOM(Document Object Model)์„ ์ƒ์„ฑํ•œ๋‹ค.

  • ๋ Œ๋”๋ง ์—”์ง„์€ HTML์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ํ•œ ์ค„์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ํŒŒ์‹ฑํ•˜์—ฌ DOM์„ ์ƒ์„ฑํ•˜๋Š”๋ฐ, <link />, <img />, <script /> ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด DOM ์ƒ์„ฑ์„ ์ค‘์ง€ํ•˜๊ณ  ์„œ๋ฒ„์— ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•œ๋‹ค.
- 1, 2๋ฒˆ ๊ณผ์ •
๋ฐ”์ดํŠธ → ๋ฌธ์ž → ํ† ํฐ → ๋…ธ๋“œ → DOM

 

๐Ÿ“Œ 3. DOM ํŠธ๋ฆฌ ์ƒ์„ฑ

HTML ์š”์†Œ๋Š” ์ค‘์ฒฉ ๊ด€๊ณ„๋ฅผ ๊ฐ–๋Š”๋ฐ, ์ด ๊ด€๊ณ„์— ์˜ํ•ด ์š”์†Œ ๊ฐ„ ๋ถ€์ž ๊ด€๊ณ„๊ฐ€ ํ˜•์„ฑ๋œ๋‹ค. ์ด๋Ÿฌํ•œ HTML ์š”์†Œ ๊ฐ„์˜ ๋ถ€์ž ๊ด€๊ณ„๋ฅผ ๋ฐ˜์˜ํ•˜์—ฌ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์„ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค.

 

์ด ๋…ธ๋“œ๋“ค๋กœ ๊ตฌ์„ฑ๋œ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ DOM(Document Object Model)์ด๋ผ ํ•œ๋‹ค. ์ฆ‰, DOM์€ HTML ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•œ ๊ฒฐ๊ณผ๋ฌผ์ด๋‹ค.

 

๐Ÿ“Œ 4. CSSOM ํŠธ๋ฆฌ ์ƒ์„ฑ

์„œ๋ฒ„์— ์š”์ฒญํ•œ CSS ํŒŒ์ผ์ด๋‚˜, style ํƒœ๊ทธ ๋‚ด์˜ CSS๋ฅผ HTML๊ณผ ๋™์ผํ•œ ํŒŒ์‹ฑ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉฐ CSSOM(CSS Object Model)์„ ์ƒ์„ฑํ•œ๋‹ค.

๋ฐ”์ดํŠธ → ๋ฌธ์ž → ํ† ํฐ → ๋…ธ๋“œ → CSSOM

 

CSS ํŒŒ์‹ฑ์ด ์™„๋ฃŒํ•˜๋ฉด HTML ํŒŒ์‹ฑ์ด ์ค‘๋‹จ๋œ ์ง€์ ๋ถ€ํ„ฐ ๋‹ค์‹œ HTML์„ ํŒŒ์‹ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•˜์—ฌ DOM ์ƒ์„ฑ์„ ์žฌ๊ฐœํ•œ๋‹ค.

 

๐Ÿ“Œ 5. DOM ํŠธ๋ฆฌ์™€ CSSOMํŠธ๋ฆฌ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ Render ํŠธ๋ฆฌ ์ƒ์„ฑ

Render ํŠธ๋ฆฌ๋Š” ๋ Œ๋”๋ง์„ ์œ„ํ•œ ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ๋ Œ๋”๋ง ๋˜์ง€ ์•Š๋Š” ๋…ธ๋“œ(<meta />, <script /> ํƒœ๊ทธ ๋“ฑ)์™€ CSS์— ์˜ํ•ด ๋น„ํ‘œ์‹œ(display: none)๋˜๋Š” ๋…ธ๋“œ๋“ค์€ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

๐Ÿ“Œ 6. Layout - HTML ์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ(์œ„์น˜์™€ ํฌ๊ธฐ) ๊ณ„์‚ฐ

Render ํŠธ๋ฆฌ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ฐ ์š”์†Œ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. (%, rem ๋‹จ์œ„ → px ๋‹จ์œ„)

 

๋…ธ๋“œ ์ถ”๊ฐ€/์‚ญ์ œ, ์š”์†Œ์˜ ํฌ๊ธฐ/์œ„์น˜ ๋ณ€๊ฒฝ, ์œˆ๋„์šฐ ๋ฆฌ์‚ฌ์ด์ง• ๋“ฑ ๋ ˆ์ด์•„์›ƒ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ๋ ˆ์ด์•„์›ƒ์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์„ reflow๋ผ๊ณ  ํ•œ๋‹ค.

reflow: Layout → Paint → Composite ๊ณผ์ • ์žฌ์‹คํ–‰
css ์†์„ฑ: position, left, top, marign, font-size ๋“ฑ๋“ฑ

 

๐Ÿ“Œ 7. Paint - ํ™”๋ฉด์— HTML ์š”์†Œ ๊ทธ๋ฆฌ๊ธฐ

ํ™”๋ฉด์„ ์—ฌ๋Ÿฌ Layer๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค. ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด๋กœ ๋‚˜๋ˆ„๋Š” ์ด์œ ๋Š” ํŠน์ • ์š”์†Œ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์„ ๋•Œ, ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•œ ๋ ˆ์ด์–ด๋งŒ ์ˆ˜์ •ํ•˜์—ฌ ๋ฆฌ๋ Œ๋”๋ง ๋น„์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋ ˆ์ด์•„์›ƒ์— ์˜ํ–ฅ์ด ์—†๋Š” ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ๋‹ค์‹œ ํŽ˜์ธํŠธ ํ•˜๋Š”๊ฒƒ์„ repaint๋ผ๊ณ  ํ•œ๋‹ค.

repaint: Paint → Composite ๊ณผ์ • ์žฌ์‹คํ–‰
css ์†์„ฑ: background, border-radius ๋“ฑ๋“ฑ

 

๐Ÿงท ์ฐธ๊ณ 

1. ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive 38์žฅ

2. https://web.dev/articles/critical-rendering-path/render-tree-construction?hl=ko

3. https://www.youtube.com/watch?v=Mqh13dNI8jc

4. https://www.youtube.com/watch?v=z1Jj7Xg-TkU

5. https://www.youtube.com/watch?v=TZz9VHjJzMk