# [[Reflow 맟 Repaint|Reflow 및 Repaint]] ## πŸ“Œ Brief Summary μ›Ή λΈŒλΌμš°μ €κ°€ 화면을 λ Œλ”λ§ν•˜λŠ” κ³Όμ •μ—μ„œ 'Reflow(λ ˆμ΄μ•„μ›ƒ)'λŠ” μš”μ†Œμ˜ μ •ν™•ν•œ 크기와 μœ„μΉ˜ λ“± κΈ°ν•˜ν•™μ  ꡬ쑰λ₯Ό κ³„μ‚°ν•˜λŠ” λ‹¨κ³„μž…λ‹ˆλ‹€. 반면 'Repaint(페인트)'λŠ” κ³„μ‚°λœ ꡬ쑰λ₯Ό λ°”νƒ•μœΌλ‘œ λ°°κ²½μƒ‰μ΄λ‚˜ ν…μŠ€νŠΈ 색상 같은 μ‹œκ°μ  μš”μ†Œλ₯Ό ν™”λ©΄μ˜ ν”½μ…€λ‘œ κ·Έλ €λ‚΄λŠ” κ³Όμ •μž…λ‹ˆλ‹€. 두 κ³Όμ • λͺ¨λ‘ μ—°μ‚° λΉ„μš©μ΄ λ“€λ©° ν”„λ ˆμž„ 속도와 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„±λŠ₯에 μ§κ²°λ˜λ―€λ‘œ, 이λ₯Ό μ΅œμ†Œν™”ν•˜λŠ” 것이 ν”„λ‘ νŠΈμ—”λ“œ λ Œλ”λ§ μ΅œμ ν™”μ˜ ν•΅μ‹¬μž…λ‹ˆλ‹€ [1-3]. ## πŸ“– Core Content - **λ Œλ”λ§ νŒŒμ΄ν”„λΌμΈμ˜ 이해:** λΈŒλΌμš°μ €λŠ” HTMLκ³Ό CSSλ₯Ό νŒŒμ‹±ν•˜μ—¬ 각각 DOMκ³Ό [[CSSOM|CSSOM]]을 κ΅¬μ„±ν•˜κ³ , 이λ₯Ό κ²°ν•©ν•΄ 화면에 보일 μš”μ†Œλ“€λ§Œ ν¬ν•¨ν•˜λŠ” λ Œλ” 트리([[Render Tree|Render Tree]])λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€ [4-7]. 이후 λ Œλ” 트리λ₯Ό 기반으둜 κΈ°ν•˜ν•™μ  ꡬ쑰λ₯Ό κ³„μ‚°ν•˜λŠ” Reflow 단계λ₯Ό 거쳐, ν”½μ…€λ‘œ λ³€ν™˜ν•˜λŠ” Repaint, 그리고 μ—¬λŸ¬ λ ˆμ΄μ–΄λ₯Ό ν•©μ„±ν•˜λŠ” Compositing λ‹¨κ³„λ‘œ λ Œλ”λ§μ„ λ§ˆμΉ©λ‹ˆλ‹€ [1, 7, 8]. - **Reflow (Layout) 상세:** - 뷰포트의 크기와 λ°•μŠ€ λͺ¨λΈμ„ 기반으둜 λͺ¨λ“  κ°€μ‹œμ  μš”μ†Œμ˜ x, y μ’Œν‘œ 및 λ„ˆλΉ„μ™€ 높이λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€ [1, 2]. - λΈŒλΌμš°μ € 창의 크기 쑰절, DOM μš”μ†Œμ˜ μΆ”κ°€ 및 제거, λ˜λŠ” λ„ˆλΉ„(width), 높이(height), μ—¬λ°±(margin, padding)κ³Ό 같이 λ ˆμ΄μ•„μ›ƒμ— 영ν–₯을 λ―ΈμΉ˜λŠ” CSS 속성 λ³€κ²½ μ‹œ λ°œμƒν•©λ‹ˆλ‹€ [2, 3, 9, 10]. - HTML μš”μ†Œλ“€μ€ 연속적인 λ¬Έμ„œ 흐름(Document Flow) μ•ˆμ— μ‘΄μž¬ν•˜λ―€λ‘œ, ν•œ μš”μ†Œμ˜ κΈ°ν•˜ν•™μ  λ³€ν™”κ°€ λ‹€λ₯Έ μš”μ†Œλ“€κΉŒμ§€ μ—°μ‡„μ μœΌλ‘œ μž¬κ³„μ‚°ν•˜κ²Œ λ§Œλ“€μ–΄ μ—°μ‚° λΉ„μš©μ΄ 맀우 λ†’μŠ΅λ‹ˆλ‹€ [1, 9, 11, 12]. - **Repaint (Paint) 상세:** - λ ˆμ΄μ•„μ›ƒ(ν¬κΈ°λ‚˜ μœ„μΉ˜)의 λ³€ν™” 없이, μš”μ†Œμ˜ μ‹œκ°μ  ν˜•νƒœλ§Œ 변경될 λ•Œ λ°œμƒν•©λ‹ˆλ‹€ [2, 3, 10]. - 배경색, ν…μŠ€νŠΈ 색상, 그림자(box-shadow), κ°€μ‹œμ„± λ³€κ²½ 등이 이에 ν•΄λ‹Ήν•©λ‹ˆλ‹€ [2, 3, 10]. - Reflowλ³΄λ‹€λŠ” μ—°μ‚° λΉ„μš©μ΄ 적게 λ“€μ§€λ§Œ, μž¦μ€ Repaint μ—­μ‹œ λ Œλ”λ§ νŒŒμ΄ν”„λΌμΈμ„ λ°©ν•΄ν•΄ μŠ€ν¬λ‘€μ΄λ‚˜ μ• λ‹ˆλ©”μ΄μ…˜ μ‹œ 화면이 λ²„λ²…κ±°λ¦¬λŠ” ν˜„μƒ(Jank)을 μ΄ˆλž˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [8, 11-13]. - **μ„±λŠ₯ μ΅œμ ν™” 기법 ([[Optimization|Optimization]] Strategies):** - **DOM μ‘°μž‘ μ΅œμ†Œν™”:** λΆˆν•„μš”ν•œ DOM 트리의 깊이λ₯Ό 쀄이고 λ³΅μž‘ν•œ ν•˜μœ„ CSS μ„ νƒμž μ‚¬μš©μ„ ν”Όν•΄μ•Ό ν•©λ‹ˆλ‹€ [13, 14]. DOM 읽기와 μ“°κΈ°λ₯Ό λ²ˆκ°ˆμ•„ ν•˜μ—¬ λ°œμƒν•˜λŠ” 'λ ˆμ΄μ•„μ›ƒ μŠ€λž˜μ‹±([[Layout Thrashing|Layout Thrashing]])'을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ μ‘°μž‘μ„ 일괄 처리([[Batching|Batching]])ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€ [2, 15]. - **GPU 가속 ν™œμš©:** `top`μ΄λ‚˜ `left` 속성 λŒ€μ‹  `transform`κ³Ό `opacity`λ₯Ό μ‚¬μš©ν•˜λ©΄, Reflow와 Repaintλ₯Ό μœ λ°œν•˜μ§€ μ•Šκ³  GPUλ₯Ό 톡해 μ• λ‹ˆλ©”μ΄μ…˜μ„ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [8, 12, 13, 16]. - **μŠ€νƒ€μΌ 및 μœ„μΉ˜ μ΅œμ ν™”:** Reflowλ₯Ό ν”Όν•˜λ©΄μ„œ μš”μ†Œλ₯Ό 숨길 λ•ŒλŠ” `display: none` λŒ€μ‹  `visibility: hidden`을 μ‚¬μš©ν•˜κ³  [16], λ³΅μž‘ν•œ λ Œλ”λ§ λ³€ν™”λ‚˜ μ• λ‹ˆλ©”μ΄μ…˜μ΄ μžˆλŠ” μš”μ†ŒλŠ” `position: absolute`λ‚˜ `position: fixed`λ₯Ό μ‚¬μš©ν•΄ λ¬Έμ„œμ˜ κΈ°λ³Έ νλ¦„μ—μ„œ 뢄리해야 ν•©λ‹ˆλ‹€ [14]. ## πŸ”— Knowledge Connections - **Related Topics:** `[[Critical Rendering Path|Critical Rendering Path]]`, `DOM 및 CSSOM`, `Render Tree`, `Compositing (GPU 가속)`, `[[Virtual DOM|Virtual DOM]]` - **Projects/Contexts:** `ν”„λ‘ νŠΈμ—”λ“œ μ„±λŠ₯ μ΅œμ ν™” ([[Web Performance Optimization|Web Performance Optimization]])`, `React μ»΄ν¬λ„ŒνŠΈ λ Œλ”λ§ μ•„ν‚€ν…μ²˜` - **Contradictions/Notes:** μ†ŒμŠ€ κ°„μ˜ μƒμΆ©λ˜λŠ” μ˜κ²¬μ€ μ—†μœΌλ©°, λͺ¨λ“  μžλ£Œκ°€ μΌκ΄€λ˜κ²Œ Reflow와 Repaint의 λ°œμƒ 횟수λ₯Ό μ΅œμ†Œν™”ν•˜λŠ” 것이 λΈŒλΌμš°μ €μ˜ λ Œλ”λ§ μ„±λŠ₯ 및 60 FPS μœ μ§€μ— ν•„μˆ˜μ μ΄λΌκ³  κ°•μ‘°ν•©λ‹ˆλ‹€ [8, 12, 17, 18]. --- *Last updated: 2026-04-25*