KR_CS_Browser - somaz94/DevOps-Engineer GitHub Wiki

Q1: ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ๋™์ž‘ ์›๋ฆฌ (๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ)

์งˆ๋ฌธ: ์‚ฌ์šฉ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ์— ์ ‘์†ํ•  ๋•Œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๊ธฐ๊นŒ์ง€์˜ ์ „์ฒด ๊ณผ์ •์„ Construction๊ณผ Operation ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„์–ด ์„ค๋ช…ํ•˜์„ธ์š”.


์ฃผ์š” ์šฉ์–ด

์šฉ์–ด ์„ค๋ช…
DOM HTML์„ ํŒŒ์‹ฑํ•˜์—ฌ ์ƒ์„ฑํ•œ ํŠธ๋ฆฌ ๊ตฌ์กฐ
CSSOM CSS๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ์ƒ์„ฑํ•œ ํŠธ๋ฆฌ ๊ตฌ์กฐ
Render Tree DOM + CSSOM์„ ๊ฒฐํ•ฉํ•œ ๋ Œ๋”๋ง์šฉ ํŠธ๋ฆฌ
AST JavaScript ์ฝ”๋“œ๋ฅผ ํŒŒ์‹ฑํ•œ ์ถ”์ƒ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ
Construction HTML/CSS/JS ํŒŒ์‹ฑ ๋ฐ Render Tree ์ƒ์„ฑ ๋‹จ๊ณ„
Operation Layout, Painting, Composition์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ Œ๋”๋ง ๋‹จ๊ณ„
CRP Critical Rendering Path โ€” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML/CSS/JS๋ฅผ ํ”ฝ์…€๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ผ๋ จ์˜ ๋‹จ๊ณ„

์ „์ฒด ํ๋ฆ„

์‚ฌ์šฉ์ž URL ์ž…๋ ฅ
    โ†“
DNS Resolution (๋„๋ฉ”์ธ โ†’ IP)
    โ†“
TCP 3-Way Handshake + TLS Handshake (HTTPS)
    โ†“
HTTP Request / Response
    โ†“
[Construction ๋‹จ๊ณ„]
    HTML ํŒŒ์‹ฑ โ†’ DOM Tree
    CSS ํŒŒ์‹ฑ  โ†’ CSSOM Tree
    JS ์‹คํ–‰   โ†’ AST ์ƒ์„ฑ / DOMยทCSSOM ์ˆ˜์ • ๊ฐ€๋Šฅ
    DOM + CSSOM โ†’ Render Tree
    โ†“
[Operation ๋‹จ๊ณ„]
    Layout   โ†’ ๊ฐ ์š”์†Œ์˜ ์œ„์น˜ยทํฌ๊ธฐ ๊ณ„์‚ฐ
    Paint    โ†’ ํ”ฝ์…€๋กœ ๋ณ€ํ™˜ (๋ž˜์Šคํ„ฐํ™”)
    Composite โ†’ ๋ ˆ์ด์–ด ํ•ฉ์„ฑ โ†’ ์ตœ์ข… ํ™”๋ฉด ์ถœ๋ ฅ

Construction ๋‹จ๊ณ„

HTML ํŒŒ์‹ฑ โ†’ DOM Tree

๋ธŒ๋ผ์šฐ์ €๋Š” HTML์„ ๋ฐ”์ดํŠธ โ†’ ๋ฌธ์ž โ†’ ํ† ํฐ โ†’ ๋…ธ๋“œ โ†’ DOM ์ˆœ์„œ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

ํŒŒ์„œ ๋ธ”๋กœํ‚น ์ฃผ์˜:

  • <link rel="stylesheet"> ๋ฐœ๊ฒฌ ์‹œ โ†’ CSS ํŒŒ์‹ฑ ์™„๋ฃŒ๊นŒ์ง€ DOM ์ƒ์„ฑ ์ผ์‹œ ์ค‘์ง€ (Render Blocking)
  • <script> ๋ฐœ๊ฒฌ ์‹œ โ†’ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์™„๋ฃŒ๊นŒ์ง€ DOM ์ƒ์„ฑ ์™„์ „ ์ค‘์ง€ (Parser Blocking)
  • ํ•ด๊ฒฐ: <script defer> (DOM ์™„์„ฑ ํ›„ ์‹คํ–‰) / <script async> (๋น„๋™๊ธฐ ๋‹ค์šด๋กœ๋“œ)

CSS ํŒŒ์‹ฑ โ†’ CSSOM Tree

  • Cascading ๊ทœ์น™(์ƒ์†, ์šฐ์„ ์ˆœ์œ„) ์ ์šฉ
  • Computed Value ๊ณ„์‚ฐ (16px ๋“ฑ ์‹ค์ œ ํ”ฝ์…€ ๊ฐ’)
  • CSSOM ์™„์„ฑ๊นŒ์ง€ ๋ Œ๋”๋ง ์ฐจ๋‹จ (Render Blocking Resource)

JavaScript ์‹คํ–‰

  • Source โ†’ Tokenization โ†’ AST โ†’ Bytecode (V8 Ignition) โ†’ ์ตœ์ ํ™” ์ปดํŒŒ์ผ (TurboFan)
  • DOM/CSSOM ์ˆ˜์ • ๊ฐ€๋Šฅ โ†’ Render Tree ์žฌ๊ตฌ์„ฑ ํ•„์š”

Render Tree ์ƒ์„ฑ

  • DOM + CSSOM ๊ฒฐํ•ฉ
  • ์‹œ๊ฐ์  ์š”์†Œ๋งŒ ํฌํ•จ (<head>, display:none ์ œ์™ธ)
  • ์œ„์น˜ยทํฌ๊ธฐ ์ •๋ณด๋Š” ์—†์Œ (Layout ๋‹จ๊ณ„์—์„œ ๊ณ„์‚ฐ)

Operation ๋‹จ๊ณ„

Layout (Reflow)

Render Tree ๊ฐ ๋…ธ๋“œ์˜ ํ™”๋ฉด์ƒ ์ •ํ™•ํ•œ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

  • Position, Dimensions, Overflow, Font Metrics ๋“ฑ ๊ณ„์‚ฐ
  • DOM Read โ†’ Write โ†’ Read ๋ฐ˜๋ณต ์‹œ Layout Thrashing ๋ฐœ์ƒ โ†’ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ๋กœ ํ•ด๊ฒฐ

Paint

Layout ๊ฒฐ๊ณผ๋ฅผ ์‹ค์ œ ํ”ฝ์…€๋กœ ๋ณ€ํ™˜ (๋ž˜์Šคํ„ฐํ™”).

  • Background, Content, Effects, Composite Layer ์ˆœ์„œ๋กœ ๊ทธ๋ฆผ
  • transform, opacity ์†์„ฑ์€ GPU์—์„œ ์ฒ˜๋ฆฌ โ†’ ๋ณ„๋„ ๋ ˆ์ด์–ด๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋น ๋ฆ„

Composite

์—ฌ๋Ÿฌ Paint ๋ ˆ์ด์–ด๋ฅผ GPU์—์„œ ํ•ฉ์„ฑํ•˜์—ฌ ์ตœ์ข… ํ”„๋ ˆ์ž„ ์ถœ๋ ฅ.

  • Compositor Thread๊ฐ€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์™€ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘
  • ์Šคํฌ๋กค, transform ์• ๋‹ˆ๋ฉ”์ด์…˜์„ 60fps๋กœ ์ฒ˜๋ฆฌ

Critical Rendering Path ์ตœ์ ํ™”

๋ณ‘๋ชฉ ์›์ธ ํ•ด๊ฒฐ
CSS Render Blocking <link> ํƒœ๊ทธ media ์†์„ฑ์œผ๋กœ ์กฐ๊ฑด๋ถ€ ๋กœ๋”ฉ, Critical CSS ์ธ๋ผ์ธ
JS Parser Blocking <script> ํƒœ๊ทธ defer / async ์†์„ฑ ์‚ฌ์šฉ
Layout Thrashing Read-Write ๋ฐ˜๋ณต ๋ฐฐ์น˜๋กœ Read ํ›„ ์ผ๊ด„ Write
๋ถˆํ•„์š”ํ•œ Reflow ์žฆ์€ DOM ์กฐ์ž‘ DocumentFragment ์‚ฌ์šฉ

์ฐธ๊ณ 

โš ๏ธ **GitHub.com Fallback** โš ๏ธ