๐ŸŒฒBrowser Rendering Process

๐Ÿค๐Ÿฉถ์šฉ์–ด ๋จผ์ € ์ •๋ฆฌํ•˜๊ธฐ!๐Ÿฉถ๐Ÿค

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

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

๐Ÿฉถํ† ํฐ: ๋ฌธ๋ฒ•์ ์œผ๋กœ ๋” ์ด์ƒ ๋‚˜๋ˆŒ ์ˆ˜ ์—†๋Š” ๊ธฐ๋ณธ์ ์ธ ์–ธ์–ด ์š”์†Œ

๐Ÿคnode: ๋ฐ์ดํ„ฐ ํ†ต์‹  ๋„คํŠธ์›Œํฌ ๋‚ด์—์„œ ๊ต์ฐจ/์—ฐ๊ฒฐ ์ง€์  ( = ์ปดํ“จํ„ฐ ๊ณผํ•™์— ์“ฐ์ด๋Š” ๊ธฐ์ดˆ์ ์ธ ๋‹จ์œ„) ์ดํ›„ DOM์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋ณธ ์š”์†Œ๊ฐ€ ๋œ๋‹ค.

๐ŸฉถDOM: HTML ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ํ˜•ํƒœ์˜ ๊ฒฐ๊ณผ๋ฌผ HTML element๋“ค์„ treeํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ *์ž๋ฃŒ๊ตฌ์กฐ ํ˜•ํƒœ - ๋…ธ๋“œ๋“ค๋กœ ๊ตฌ์„ฑ๋œ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ


โœ…์›นํŽ˜์ด์ง€ ๋นŒ๋“œ ๊ณผ์ •(๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ Œ๋”๋ง ํ•˜๋Š” ๊ณผ์ •)

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

๋ฌธ์„œ๋ฅผ ์ฝ์–ด ๋“ค์—ฌ ๊ทธ๊ฒƒ์„ ํŒŒ์‹ฑํ•˜๊ณ  ์–ด๋–ค ๋‚ด์šฉ์„ ํŽ˜์ด์ง€์— ๋ Œ๋”๋งํ• ์ง€ ๊ฒฐ์ •

  • Html ํŒŒ์‹ฑ & DOM ์ƒ์„ฑ (๋ธŒ๋ผ์šฐ์ €) html ํŒŒ์ผ ์š”์ฒญ (์„œ๋ฒ„) HTML ํŒŒ์ผ์„ ์ฝ์–ด ๋“ค์—ฌ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ ํ›„ ๋ฐ”์ดํŠธ๋กœ ์‘๋‹ต (๋ธŒ๋ผ์šฐ์ €) metaํƒœ๊ทธ์˜ charset attribute๋กœ ์ง€์ •ํ•ด ๋‘” ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹(ex. UTF-8)์„ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ 'ํ† ํฐ(token)'๋“ค๋กœ ๋ถ„ํ•ด ํ† ํฐ๋“ค์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋…ธ๋“œ ์ƒ์„ฑ ์ค‘์ฒฉ๊ด€๊ณ„๊ฐ€ ํ˜•์„ฑ๋˜์–ด ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ตฌ์„ฑ โ‡’ DOM

  • HTML ๋ฌธ์„œ ๋‚ด์—์„œ <style></style> ๋งŒ๋‚˜๋ฉด โ†’ CSS ํŒŒ์‹ฑ & CSSOM ์ƒ์„ฑ ๋ Œ๋”๋ง ์—”์ง„์€ ์œ„์—์„œ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ํŒŒ์‹ฑํ•˜๋ฉฐ DOM์„ ์ƒ์„ฑํ•œ๋‹ค. ์ด๋•Œ, ์ค‘๊ฐ„์— CSS๋ฅผ ๋กœ๋“œํ•˜๋Š” link๋‚˜ style ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด DOM ์ƒ์„ฑ์„ ์ผ์‹œ ์ค‘๋‹จ. ๊ทธ ํ›„ HTML๊ณผ ๋™์ผํ•œ ํŒŒ์‹ฑ๊ณผ์ •์„ ๊ฑฐ์ณ CSSOM(CSS Object Model)์„ ์ƒ์„ฑ. ํŒŒ์‹ฑ์ด ์™„๋ฃŒ๋˜๋ฉด HTML ํŒŒ์‹ฑ์ด ์ค‘๋‹จ๋œ ์‹œ์ ์œผ๋กœ ๋Œ์•„๊ฐ€ ๋‹ค์‹œ HTML์„ ํŒŒ์‹ฑ.

  • <script></script> ๋งŒ๋‚  ๋•Œ โ†’ JS ํŒŒ์‹ฑ & ์‹คํ–‰ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ† ํฐ์œผ๋กœ ๋ถ„ํ•ด ๋ฐ ํŒŒ์‹ฑ โ†’ AST(์ถ”์ƒ์  ๊ตฌ๋ฌธ ํŠธ๋ฆฌ) ์ƒ์„ฑ โ†’ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰ (์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก)

โ€ป ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์— DOM์ด๋‚˜ CSSOM์„ ๋ณ€๊ฒฝํ•˜๋Š” DOM API๊ฐ€ ์‚ฌ์šฉ๋œ ๊ฒฝ์šฐ DOM์ด๋‚˜ CSSOM์ด ๋ณ€๊ฒฝ ๋ณ€๊ฒฝ๋œ DOM๊ณผ CSSOM์€ ๋‹ค์‹œ ๋ Œ๋” ํŠธ๋ฆฌ๋กœ ๊ฒฐํ•ฉ๋˜๋ฉฐ ๋ฆฌ๋ Œ๋”๋ง โ‡’ reflow(๋ ˆ์ด์•„์›ƒ ๋‹ค์‹œ ๊ณ„์‚ฐ), repaint(์žฌ๊ฒฐํ•ฉ๋œ ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค์‹œ ํŽ˜์ธํŠธ)

2. Render tree ์ƒ์„ฑ

์ตœ์ข… ๋ Œ๋”๋ง ํŠธ๋ฆฌ ์ถœ๋ ฅ DOM๊ณผ CSSOM์€ ๋ Œ๋”๋ง์„ ์œ„ํ•ด ๋ Œ๋” ํŠธ๋ฆฌ(Render Tree)๋กœ ๊ฒฐํ•ฉ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ๋ Œ๋”๋ง ๋˜๋Š” ๋…ธ๋“œ๋งŒ์œผ๋กœ ๊ตฌ์„ฑ = ๋ณด์ด๋Š” ๊ฒƒ๋งŒ ํฌํ•จ ์ œ์™ธ) HTML meta ํƒœ๊ทธ, CSS์˜ display: none ๋“ฑ

HTML ์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ(์œ„์น˜์™€ ํฌ๊ธฐ)์„ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ ์‚ฌ์šฉ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ํ”ฝ์…€์„ ๋ Œ๋”๋ง ํ•˜๋Š” ํŽ˜์ธํŒ… ์ฒ˜๋ฆฌ์— ์ž…๋ ฅ๋œ๋‹ค.

3. Layout

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํŽ˜์ด์ง€์— ํ‘œ์‹œ๋˜๋Š” ๊ฐ ์š”์†Œ์˜ ํฌ๊ธฐ, ์œ„์น˜ ๊ณ„์‚ฐ โ†’ ๋…ธ๋“œ ๋ฐฐ์น˜

4. Paint

๋…ธ๋“œ UI ๊ทธ๋ฆฌ๊ธฐ = ์‹ค์ œ ํ™”๋ฉด์— ๊ทธ๋ฆฌ๊ธฐ

5. Composition

Render tree์— ์žˆ๋Š” node๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๊ตฌ์„ฑ

6. ์›น ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฐ๊ณผ ํ™”๋ฉด ์ถœ๋ ฅ


#๏ธโƒฃ๊ฐ€์ƒ๋”(Virtual Dom)

์‹ค์ œ DOM์„ ๋ฉ”๋ชจ๋ฆฌ์— ๋ณต์‚ฌํ•ด๋‘” ๊ฒƒ

๊ฐ€์ƒ๋”์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

DOM ์กฐ์ž‘(์ˆ˜์ •๋˜์–ด์•ผ ํ•  ๋ถ€๋ถ„)์€ HTML์—์„œ element๋ฅผ ์ฐพ๊ณ  ์ œ๊ฑฐ๋œ ํ›„ ์ˆ˜์ •๋œ element๋กœ ๊ต์ฒดํ•œ๋‹ค. ํŠธ๋ฆฌ์— ์žˆ๋Š” ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธ ์‹œํ‚จ๋‹ค๋Š” ์ ์—์„œ ๋ฌด๋ฆฌ ์žˆ๋Š” ์ž‘์—…์€ ์•„๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ์ž‘์—…์ด ๋ฐ˜๋ณต๋œ๋‹ค๋ฉด ๋ฌด๊ฑฐ์›Œ์ง„๋‹ค. (๋ฌธ์ œ) ๊ทธ๋ž˜์„œ ์ง์ ‘ ๋ธŒ๋ผ์šฐ์ €์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋ณต์‚ฌ๋ณธ์ธ ๊ฐ€์ƒ๋”์„ ์‚ฌ์šฉํ•˜์—ฌ ํšจ์œจ์„ฑ์„ ๋†’์ธ๋‹ค.

์ž‘๋™ ๋ฐฉ์‹

state๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๊ฐ€์ƒ๋”์€ ๋ฆฌ๋ Œ๋”๋ง๋˜๊ณ  ์ด์ „์— ์ƒ๊ธด ๊ฐ€์ƒ๋”๊ณผ ๋น„๊ตํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ DOM์— ์ ์šฉ์‹œํ‚จ๋‹ค. - ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„์„ ์ฐพ๋Š” ๊ณผ์ •: Diffing - ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ ๋”์— ์ ์šฉ์‹œ์ผœ ์ฃผ๋Š” ๊ฒƒ: ์žฌ์กฐ์ •(reconciliation)

ํšจ์œจ์ ์ธ ์ด์œ 

Batch Update: ๋ณ€๊ฒฝ๋œ ๋ชจ๋“  Element๋“ค์„ ์ง‘๋‹จํ™”์‹œ์ผœ ์ด๋ฅผ ํ•œ๋ฒˆ์— ์‹ค์ œ DOM์— ์ ์šฉํ•˜๋Š” ๋ฐฉ์‹

DOM์กฐ์ž‘์— ๋น„์šฉ์ด ๊ฐ€์žฅ ๋งŽ์ด ๋ฐœ์ƒํ•˜๋Š” ์ง€์ ์€ ๋ธŒ๋ผ์šฐ์ €์— ํ™”๋ฉด์„ ๊ทธ๋ ค์ฃผ๋Š” ์ž‘์—…์ธ ๋งŒํผ Batch Update๋Š” ๋ณ€๊ฒฝ๋œ Element๋ฅผ ๋ณ„๊ฐœ๋กœ ๊ทธ๋ ค์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ํ•œ ๋ฒˆ์— ๋ฐ›์•„์™€ ์ด๋ฅผ ์‹ค์ œ DOM์— ํ•œ๋ฒˆ์— ์ ์šฉ์‹œ์ผœ์ค€๋‹ค๋Š” ์ ์ด ํšจ์œจ์ ์ด๋‹ค.


์ •๋ฆฌ

์ด์ „ ๊ฐ€์ƒ DOM๊ณผ ๋น„๊ตํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„์„ ์‹๋ณ„ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ์„ ์‹ค์ œ DOM์— ์ ์šฉ โ†’ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ DOM ์กฐ์ž‘๋งŒ์„ ์ˆ˜ํ–‰ ์ด๋Š” ๋ถˆํ•„์š”ํ•œ ์ž‘์—…์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š”๋ฐ ๋„์›€์ด ๋œ๋‹ค.


์ฐธ๊ณ  ์‚ฌ์ดํŠธ

[JavaScript] ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ •(์›๋ฆฌ)

Last updated