# [[Performance Optimization|Performance Optimization]] ## πŸ“Œ Brief Summary μ„±λŠ₯ μ΅œμ ν™”(Performance Optimization)λŠ” μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ‘œλ”© 속도λ₯Ό λ‹¨μΆ•μ‹œν‚€κ³  μ‚¬μš©μž μƒν˜Έμž‘μš©μ„ λ§€λ„λŸ½κ²Œ λ§Œλ“€κΈ° μœ„ν•΄ λΈŒλΌμš°μ € λ Œλ”λ§ κ³Όμ •κ³Ό λ¦¬μ†ŒμŠ€ 처리 방식을 κ°œμ„ ν•˜λŠ” 일련의 기술적 κ³Όμ •μž…λ‹ˆλ‹€ [1-3]. 주둜 초기 λ Œλ”λ§ μ‹œκ°„(Fast First Paint)을 μ•žλ‹ΉκΈ°κ³ , ν”„λ ˆμž„ λ“œλ‘­(Jank)을 λ°©μ§€ν•˜λ©°, μ΅œλŒ€ μ½˜ν…μΈ ν’€ 페인트(LCP)와 같은 핡심 μ›Ή λ°”μ΄νƒˆ(Core Web Vitals) μ§€ν‘œλ₯Ό ν–₯μƒν•˜λŠ” 것을 λͺ©ν‘œλ‘œ ν•©λ‹ˆλ‹€ [2-6]. λͺ¨λ˜ ν”„λ‘ νŠΈμ—”λ“œμ—μ„œλŠ” μ€‘μš” λ Œλ”λ§ 경둜(CRP)의 μ΅œμ†Œν™”, React와 같은 ν”„λ ˆμž„μ›Œν¬ μˆ˜μ€€μ—μ„œμ˜ λΆˆν•„μš”ν•œ λ Œλ”λ§ λ°©μ§€, 그리고 μ μ ˆν•œ μ„œλ²„/ν΄λΌμ΄μ–ΈνŠΈ λ Œλ”λ§ μ „λž΅(SSR, SSG λ“±)의 선택을 톡해 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€ [1, 7-9]. ## πŸ“– Core Content * **μ€‘μš” λ Œλ”λ§ 경둜(CRP) μ΅œμ ν™” 및 λΈŒλΌμš°μ € λ Œλ”λ§ μ œμ–΄** * λΈŒλΌμš°μ €κ°€ HTML, CSS, JavaScriptλ₯Ό ν™”λ©΄μ˜ ν”½μ…€λ‘œ λ³€ν™˜ν•˜λŠ” 'μ€‘μš” λ Œλ”λ§ 경둜(Critical Rendering Path)'λ₯Ό μ΅œμ ν™”ν•˜λŠ” 것이 κ°€μž₯ κΈ°λ³Έμž…λ‹ˆλ‹€ [1, 10]. 초기 λ Œλ”λ§ 속도λ₯Ό 높이기 μœ„ν•΄ λ Œλ”λ§μ„ μ°¨λ‹¨ν•˜λŠ” λ¦¬μ†ŒμŠ€λ₯Ό μ§€μ—°μ‹œν‚€κ±°λ‚˜ μ œκ±°ν•˜λ©°, λΆˆν•„μš”ν•œ DOM λ…Έλ“œμ˜ 깊이λ₯Ό μ΅œμ†Œν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€ [8, 11, 12]. * 특히 계산 λΉ„μš©μ΄ 큰 λ ˆμ΄μ•„μ›ƒ μž¬κ³„μ‚°μΈ **λ¦¬ν”Œλ‘œμš°(Reflow)**λ₯Ό μœ λ°œν•˜λŠ” 속성(예: width, height, margin μ‘°μž‘) μ‚¬μš©μ„ μ΅œμ†Œν™”ν•˜κ³ , μ‹œκ°μ  μ†μ„±λ§Œ λ³€κ²½ν•˜λŠ” 리페인트(Repaint)λ‚˜ GPU 가속 기반의 μ»΄ν¬μ§€νŒ…(Compositing) 기법을 ν™œμš©ν•˜μ—¬ μ„±λŠ₯ μ €ν•˜λ₯Ό λ°©μ§€ν•΄μ•Ό ν•©λ‹ˆλ‹€ [6, 12-20]. * **React ν”„λ ˆμž„μ›Œν¬ 레벨의 μ΅œμ ν™” 기법** * **λ¦¬λ Œλ”λ§ 폭포수(Re-render Cascade) λ°©μ§€:** λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœ λ³€ν™”κ°€ λ¬΄κ΄€ν•œ μžμ‹ μ»΄ν¬λ„ŒνŠΈλ“€μ˜ λ Œλ”λ§κΉŒμ§€ μœ λ°œν•˜λŠ” 것을 막기 μœ„ν•΄ `React.memo`, `useMemo`, `useCallback`을 μ‚¬μš©ν•˜μ—¬ 얕은 비ꡐλ₯Ό ν†΅ν•œ λ©”λͺ¨μ΄μ œμ΄μ…˜μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€ [21-25]. * **μžλ™ 일괄 처리 (Automatic Batching):** React 18λΆ€ν„° λ„μž…λœ κΈ°λŠ₯으둜, λ„€μ΄ν‹°λΈŒ 이벀트 ν•Έλ“€λŸ¬λΏλ§Œ μ•„λ‹ˆλΌ 비동기 μž‘μ—…(Promise, setTimeout λ“±) λ‚΄μ—μ„œ λ°œμƒν•˜λŠ” μ—¬λŸ¬ μƒνƒœ μ—…λ°μ΄νŠΈλ“€μ„ ν•˜λ‚˜λ‘œ λ¬Άμ–΄(Batching) 단 ν•œ 번의 λ¦¬λ Œλ”λ§λ§Œ λ°œμƒν•˜λ„λ‘ ν•˜μ—¬ λ Œλ”λ§ μ„±λŠ₯을 κ·ΉλŒ€ν™”ν•©λ‹ˆλ‹€ [26-33]. * **λ™μ‹œμ„± λ Œλ”λ§ (Concurrent Rendering):** `useTransition` 및 `useDeferredValue` 훅을 μ‚¬μš©ν•˜μ—¬ 무거운 연산을 ν›„μˆœμœ„λ‘œ 미루고(Non-urgent), μ‚¬μš©μžμ˜ νƒ€μ΄ν•‘μ΄λ‚˜ 클릭 같은 κΈ΄κΈ‰ν•œ μƒν˜Έμž‘μš©(Urgent)을 μš°μ„ μ μœΌλ‘œ μ²˜λ¦¬ν•¨μœΌλ‘œμ¨ UIκ°€ λ©ˆμΆ”λŠ” ν˜„μƒμ„ λ°©μ§€ν•©λ‹ˆλ‹€ [34-38]. * **가상화 및 μ½”λ“œ λΆ„ν• :** 수백 개 μ΄μƒμ˜ κΈ΄ λͺ©λ‘μ€ 화면에 λ³΄μ΄λŠ” ν•­λͺ©λ§Œ DOM λ…Έλ“œλ‘œ μƒμ„±ν•˜λŠ” 가상화(Virtualization)λ₯Ό μ μš©ν•˜λ©° [39, 40], `React.lazy()`λ₯Ό ν™œμš©ν•œ 라우트 μˆ˜μ€€μ˜ μ½”λ“œ λΆ„ν• (Code Splitting)둜 초기 μžλ°”μŠ€ν¬λ¦½νŠΈ λ²ˆλ“€ 크기λ₯Ό 쀄여 LCP 점수λ₯Ό κ°œμ„ ν•©λ‹ˆλ‹€ [41]. * **μ•„ν‚€ν…μ²˜ 및 λ Œλ”λ§ μ „λž΅ μ΅œμ ν™”** * μ• ν”Œλ¦¬μΌ€μ΄μ…˜ νŠΉμ„±μ— 맞좰 **CSR(ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λ Œλ”λ§)**, **SSR(μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§)**, **SSG(정적 μ‚¬μ΄νŠΈ 생성)**, **ISR(점진적 정적 μž¬μƒμ„±)** 등을 적절히 μ„ νƒν•˜κ±°λ‚˜ ν˜Όν•©(Hybrid)ν•˜μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€ [42-60]. * 졜근 λ„μž…λœ **[[React Server Components|React Server Components]] (RSC)**λŠ” λΈŒλΌμš°μ €λ‘œ μ „μ†‘λ˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ λ²ˆλ“€ 크기λ₯Ό '0 λ°”μ΄νŠΈ'둜 쀄이고 μ„œλ²„ μΈ‘ μžμ›(DB λ“±)에 직접 μ ‘κ·Όν•˜μ—¬ λ Œλ”λ§ 된 HTMLλ§Œμ„ 슀트리밍 ν˜•νƒœλ‘œ ν΄λΌμ΄μ–ΈνŠΈμ— μ „λ‹¬ν•˜λ―€λ‘œ, ν΄λΌμ΄μ–ΈνŠΈ 츑의 λ Œλ”λ§ 및 ν•˜μ΄λ“œλ ˆμ΄μ…˜(Hydration) λΆ€ν•˜λ₯Ό ν˜μ‹ μ μœΌλ‘œ μ œκ±°ν•©λ‹ˆλ‹€ [61-66]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Critical Rendering Path|Critical Rendering Path]], [[Reflow and Repaint|Reflow and Repaint]], [[Automatic Batching|Automatic Batching]], [[React Compiler|React Compiler]], [[Virtual DOM|Virtual DOM]], [[Server-Side Rendering (SSR)|Server-Side Rendering (SSR)]], [[React Server Components|React Server Components]] - **Projects/Contexts:** [[React 18 Concurrent Features|React 18 Concurrent Features]], [[Next.js App Router|Next.js App Router]] - **Contradictions/Notes:** κ³Όκ±°μ—λŠ” κ°œλ°œμžκ°€ μˆ˜λ™μœΌλ‘œ `useMemo`λ‚˜ `useCallback`, `React.memo`λ₯Ό μ‚½μž…ν•˜μ—¬ λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§μ„ μ΅œμ ν™”ν•΄μ•Ό ν–ˆμœΌλ‚˜, 졜근 μ•ˆμ •ν™”λœ **React Compiler**λŠ” λΉŒλ“œ νƒ€μž„μ— μ½”λ“œμ™€ 데이터 흐름을 λΆ„μ„ν•˜μ—¬ μ΄λŸ¬ν•œ λ©”λͺ¨μ΄μ œμ΄μ…˜ 경계λ₯Ό μžλ™μœΌλ‘œ μ‚½μž…ν•΄ μ€λ‹ˆλ‹€. λ”°λΌμ„œ 이제 μˆ˜λ™ λ©”λͺ¨μ΄μ œμ΄μ…˜μ€ 컴파일러의 μžλ™ μ²˜λ¦¬μ— μ˜μ‘΄ν•˜κ²Œ λ˜μ–΄ λŒ€λΆ€λΆ„ 제거될 수 μžˆμœΌλ‚˜, 효과적인 μ˜μ‘΄μ„± μ œμ–΄λ‚˜ μ„œλ“œνŒŒν‹° 라이브러리 톡합 λ“± νŠΉμˆ˜ν•œ μ˜ˆμ™Έ μƒν™©μ˜ '비상 νƒˆμΆœκ΅¬(Escape Hatch)' μš©λ„λ‘œλ§Œ μ œν•œμ μœΌλ‘œ λ‚¨κ²Œ λ©λ‹ˆλ‹€ [25, 67-72]. --- *Last updated: 2026-04-25*