# [[Critical Rendering Path (CRP)|Critical Rendering Path (CRP]] ## πŸ“Œ Brief Summary [[Critical Rendering Path|Critical Rendering Path]] (CRP)λŠ” μ›Ή λΈŒλΌμš°μ €κ°€ HTML, CSS, JavaScript μ½”λ“œλ₯Ό μˆ˜μ‹ ν•˜μ—¬ ν™”λ©΄μ˜ ν”½μ…€λ‘œ λ³€ν™˜ν•˜κΈ° μœ„ν•΄ μ‹€ν–‰ν•˜λŠ” 일련의 λ‹¨κ³„μž…λ‹ˆλ‹€ [1, 2]. 이 κ²½λ‘œλŠ” DOM(λ¬Έμ„œ 객체 λͺ¨λΈ) 및 [[CSSOM|CSSOM]](CSS 객체 λͺ¨λΈ) ꡬ좕, λ Œλ” 트리 생성, λ ˆμ΄μ•„μ›ƒ 계산, ν™”λ©΄ νŽ˜μΈνŒ… λ“±μ˜ 핡심 κ³Όμ •μœΌλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€ [2]. CRPλ₯Ό μ΅œμ ν™”ν•˜λ©΄ 졜초 λ Œλ”λ§(Time to First Render) μ‹œκ°„μ„ λ‹¨μΆ•ν•˜κ³ , μ΄ˆλ‹Ή 60ν”„λ ˆμž„μ˜ μ›ν™œν•œ μƒν˜Έμž‘μš©μ„ 보μž₯ν•˜λ©°, μ„±λŠ₯ μ €ν•˜λ‚˜ λŠκΉ€(Jank)을 λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [2, 3]. ## πŸ“– Core Content - **[[DOM (Document Object Model)|DOM(Document Object Model]] ꡬ좕:** λΈŒλΌμš°μ €λŠ” HTML 데이터λ₯Ό μˆ˜μ‹ ν•˜λ©΄ 점진적 νŒŒμ‹±(incremental parsing)을 μ‹œμž‘ν•©λ‹ˆλ‹€ [3, 4]. μˆ˜μ‹ λœ λ°”μ΄νŠΈλ₯Ό 문자, 토큰, λ…Έλ“œλ‘œ λ³€ν™˜ν•œ λ’€ 계측적인 DOM 트리λ₯Ό κ΅¬μΆ•ν•©λ‹ˆλ‹€ [3, 4]. - **[[CSSOM(CSS Object Model)|CSSOM(CSS Object Model]] ꡬ좕:** CSSλŠ” HTMLκ³Ό 달리 μ μ§„μ μœΌλ‘œ μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©° λ Œλ”λ§ 차단(render-[[Blocking|Blocking]]) λ¦¬μ†ŒμŠ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€ [5, 6]. λΈŒλΌμš°μ €λŠ” 화면에 μŠ€νƒ€μΌμ΄ μ§€μ •λ˜μ§€ μ•Šμ€ μ½˜ν…μΈ κ°€ κΉœλΉ‘μ΄λŠ” ν˜„μƒ(FOUC)을 막기 μœ„ν•΄ λ Œλ” 트리λ₯Ό λ§Œλ“€κΈ° μ „ λͺ¨λ“  μ—°κ²°λœ μŠ€νƒ€μΌμ‹œνŠΈλ₯Ό λ‹€μš΄λ‘œλ“œν•˜κ³  ꡬ문 λΆ„μ„ν•˜μ—¬ CSSOM을 μ™„μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€ [5, 6]. - **λ Œλ” 트리([[Render Tree|Render Tree]]) 생성:** DOMκ³Ό CSSOM νŠΈλ¦¬κ°€ μ€€λΉ„λ˜λ©΄ 이λ₯Ό κ²°ν•©ν•˜μ—¬ λ Œλ” 트리λ₯Ό ν•©μ„±ν•©λ‹ˆλ‹€ [7, 8]. 이 νŠΈλ¦¬μ—λŠ” ν™”λ©΄ λ Œλ”λ§μ— ν•„μš”ν•œ κ°€μ‹œμ  λ…Έλ“œλ§Œ ν¬ν•¨λ˜λ©°, `