--- id: wiki-2026-0508-reflow-및-repaint title: Reflow 및 Repaint category: 10_Wiki/Topics status: needs_review canonical_id: self aliases: [] duplicate_of: none source_trust_level: A confidence_score: 0.92 tags: [uncategorized] raw_sources: [] last_reinforced: 2026-05-08 github_commit: pending inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08) tech_stack: language: unspecified framework: unspecified --- # [[Reflow 및 Repaint]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) μ›Ή λΈŒλΌμš°μ €κ°€ 화면을 λ Œλ”λ§ν•˜λŠ” κ³Όμ •μ—μ„œ 'Reflow(λ ˆμ΄μ•„μ›ƒ)'λŠ” μš”μ†Œμ˜ μ •ν™•ν•œ 크기와 μœ„μΉ˜ λ“± κΈ°ν•˜ν•™μ  ꡬ쑰λ₯Ό κ³„μ‚°ν•˜λŠ” λ‹¨κ³„μž…λ‹ˆλ‹€. 반면 'Repaint(페인트)'λŠ” κ³„μ‚°λœ ꡬ쑰λ₯Ό λ°”νƒ•μœΌλ‘œ λ°°κ²½μƒ‰μ΄λ‚˜ ν…μŠ€νŠΈ 색상 같은 μ‹œκ°μ  μš”μ†Œλ₯Ό ν™”λ©΄μ˜ ν”½μ…€λ‘œ κ·Έλ €λ‚΄λŠ” κ³Όμ •μž…λ‹ˆλ‹€. 두 κ³Όμ • λͺ¨λ‘ μ—°μ‚° λΉ„μš©μ΄ λ“€λ©° ν”„λ ˆμž„ 속도와 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„±λŠ₯에 μ§κ²°λ˜λ―€λ‘œ, 이λ₯Ό μ΅œμ†Œν™”ν•˜λŠ” 것이 ν”„λ‘ νŠΈμ—”λ“œ λ Œλ”λ§ μ΅œμ ν™”μ˜ ν•΅μ‹¬μž…λ‹ˆλ‹€ [1-3]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **λ Œλ”λ§ νŒŒμ΄ν”„λΌμΈμ˜ 이해:** λΈŒλΌμš°μ €λŠ” HTMLκ³Ό CSSλ₯Ό νŒŒμ‹±ν•˜μ—¬ 각각 DOMκ³Ό [[CSSOM]]을 κ΅¬μ„±ν•˜κ³ , 이λ₯Ό κ²°ν•©ν•΄ 화면에 보일 μš”μ†Œλ“€λ§Œ ν¬ν•¨ν•˜λŠ” λ Œλ” 트리([[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]] Strategies):** - **DOM μ‘°μž‘ μ΅œμ†Œν™”:** λΆˆν•„μš”ν•œ DOM 트리의 깊이λ₯Ό 쀄이고 λ³΅μž‘ν•œ ν•˜μœ„ CSS μ„ νƒμž μ‚¬μš©μ„ ν”Όν•΄μ•Ό ν•©λ‹ˆλ‹€ [13, 14]. DOM 읽기와 μ“°κΈ°λ₯Ό λ²ˆκ°ˆμ•„ ν•˜μ—¬ λ°œμƒν•˜λŠ” 'λ ˆμ΄μ•„μ›ƒ μŠ€λž˜μ‹±([[Layout Thrashing]])'을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ μ‘°μž‘μ„ 일괄 처리([[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]. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** `[[Critical Rendering Path]]`, `[[DOM 및 CSSOM]]`, `[[Render Tree]]`, `Compositing (GPU 가속)`, `[[Virtual DOM]]` - **Projects/Contexts:** `ν”„λ‘ νŠΈμ—”λ“œ μ„±λŠ₯ μ΅œμ ν™” ([[Web Performance Optimization]])`, `React μ»΄ν¬λ„ŒνŠΈ λ Œλ”λ§ μ•„ν‚€ν…μ²˜` - **Contradictions/Notes:** μ†ŒμŠ€ κ°„μ˜ μƒμΆ©λ˜λŠ” μ˜κ²¬μ€ μ—†μœΌλ©°, λͺ¨λ“  μžλ£Œκ°€ μΌκ΄€λ˜κ²Œ Reflow와 Repaint의 λ°œμƒ 횟수λ₯Ό μ΅œμ†Œν™”ν•˜λŠ” 것이 λΈŒλΌμš°μ €μ˜ λ Œλ”λ§ μ„±λŠ₯ 및 60 FPS μœ μ§€μ— ν•„μˆ˜μ μ΄λΌκ³  κ°•μ‘°ν•©λ‹ˆλ‹€ [8, 12, 17, 18]. --- *Last updated: 2026-04-25* ## πŸ€– LLM ν™œμš© 힌트 (How to Use This Knowledge) **μ–Έμ œ 이 지식을 μ“°λŠ”κ°€:** - *(TODO)* **μ–Έμ œ μ“°λ©΄ μ•ˆ λ˜λŠ”κ°€:** - *(TODO)* ## πŸ§ͺ 검증 μƒνƒœ (Validation) - **정보 μƒνƒœ:** needs_review - **좜처 신뒰도:** A - **κ²€ν†  이유:** *(P-Reinforce Phase 1 μžλ™ μ •κ·œν™”. λ³Έλ¬Έ 검증 ν•„μš”.)* ## 🧬 쀑볡 검사 (Duplicate Check) - **κΈ°μ‘΄ μœ μ‚¬ λ¬Έμ„œ:** *(TODO: μΈλ±μ„œ ν΄λŸ¬μŠ€ν„° 리포트 μ°Έμ‘°)* - **처리 방식:** UPDATE (μžλ™ μ •κ·œν™”) - **처리 이유:** Phase 1 μ •κ·œν™” β€” μ˜› ν…œν”Œλ¦Ώ/λˆ„λ½ ν•„λ“œ 보강. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & Updates) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μ—†μŒ - **μ •μ±… λ³€ν™”:** μ—†μŒ ## πŸ•“ λ³€κ²½ 이λ ₯ (Changelog) | λ‚ μ§œ | λ³€κ²½ λ‚΄μš© | 처리 방식 | 신뒰도 | |------|-----------|-----------|--------| | 2026-05-08 | P-Reinforce Phase 1 μ •κ·œν™” (frontmatter + 헀더 ν‘œμ€€ν™”) | UPDATE | A | ## πŸ’» μ½”λ“œ νŒ¨ν„΄ (Code Patterns) **νŒ¨ν„΄ 1:** *(TODO: 이 ν”„λ‘œμ νŠΈ μ»¨λ²€μ…˜ λ°˜μ˜ν•œ ꡬ쑰 μŠ€μΌˆλ ˆν†€)* ```text # TODO ``` ## πŸ€” μ˜μ‚¬κ²°μ • κΈ°μ€€ (Decision Criteria) **선택 Aλ₯Ό 써야 ν•  λ•Œ:** - *(TODO)* **선택 Bλ₯Ό 써야 ν•  λ•Œ:** - *(TODO)* **κΈ°λ³Έκ°’:** > *(TODO)* ## ❌ μ•ˆν‹°νŒ¨ν„΄ (Anti-Patterns) - **[μ•ˆν‹°νŒ¨ν„΄]:** *(TODO: 무엇을 ν•˜λ©΄ μ•ˆ λ˜λŠ”κ°€ + 이유 + λŒ€μ‹  무엇을)*