# [[Performance Optimization]] ## πŸ“Œ Brief Summary μ„±λŠ₯ μ΅œμ ν™”(Performance Optimization)λŠ” ν”„λŸ°νŠΈμ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ Œλ”λ§ 속도, λ„€νŠΈμ›Œν¬ λ‘œλ”© μ‹œκ°„, 그리고 λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ κ°œμ„ ν•˜μ—¬ μ›ν™œν•œ μ‚¬μš©μž κ²½ν—˜μ„ μ œκ³΅ν•˜λŠ” 핡심 κ³Όμ •μž…λ‹ˆλ‹€. React μƒνƒœκ³„μ—μ„œλŠ” λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§ λ°©μ§€, μ½”λ“œ μŠ€ν”Œλ¦¬νŒ…, 효율적인 μƒνƒœ 관리, 가상화(Virtualization) 기법 λ„μž… 등을 톡해 ν™•μž₯ κ°€λŠ₯ν•˜κ³ (scalable) λΉ λ₯Έ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬μΆ•ν•©λ‹ˆλ‹€. μ΅œμ ν™”λ₯Ό μ μš©ν•˜κΈ° μ „μ—λŠ” 항상 ν”„λ‘œνŒŒμΌλ§ 도ꡬλ₯Ό 톡해 병λͺ© ν˜„μƒμ„ λ¨Όμ € μΈ‘μ •ν•˜κ³  λΆ„μ„ν•˜λŠ” 것이 μ›μΉ™μž…λ‹ˆλ‹€. ## πŸ“– Core Content * **λ Œλ”λ§ 및 λ©”λͺ¨μ΄μ œμ΄μ…˜ μ΅œμ ν™”** * Reactμ—μ„œ μ»΄ν¬λ„ŒνŠΈλŠ” μƒνƒœ, props, μ»¨ν…μŠ€νŠΈκ°€ λ³€κ²½λ˜κ±°λ‚˜ λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈκ°€ λ Œλ”λ§λ  λ•Œ λ¦¬λ Œλ”λ§λ©λ‹ˆλ‹€ [1]. λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§μ„ 막기 μœ„ν•΄ `React.memo()`, `useCallback`, `useMemo`λ₯Ό μ‚¬μš©ν•  수 μžˆμ§€λ§Œ, 얕은 비ꡐ(shallow comparison)λ‚˜ 객체 생성 λΉ„μš© λ“±μ˜ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•  수 μžˆμœΌλ―€λ‘œ λ°˜λ“œμ‹œ μΈ‘μ • ν›„ λ„μž…ν•΄μ•Ό ν•©λ‹ˆλ‹€ [2-4]. * JSX λ‚΄λΆ€μ˜ 읡λͺ… ν•¨μˆ˜λŠ” λ Œλ”λ§λ§ˆλ‹€ μƒˆλ‘œμš΄ μ°Έμ‘°λ₯Ό μƒμ„±ν•˜μ—¬ μžμ‹ μ»΄ν¬λ„ŒνŠΈμ˜ λ¦¬λ Œλ”λ§μ„ μœ λ°œν•˜λ―€λ‘œ ν”Όν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€ [5]. * 2025년에 μ•ˆμ •ν™”λœ React Compilerλ₯Ό λ„μž…ν•˜λ©΄, μˆ˜λ™μœΌλ‘œ λ©”λͺ¨μ΄μ œμ΄μ…˜μ„ μΆ”κ°€ν•  ν•„μš” 없이 λΉŒλ“œ νƒ€μž„μ— μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ JSX μš”μ†Œμ™€ 연산을 μΊμ‹±ν•˜μ—¬ μ½”λ“œλ₯Ό κΉ”λ”ν•˜κ²Œ μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [6-8]. * **μ½”λ“œ μŠ€ν”Œλ¦¬νŒ… 및 λ²ˆλ“€ 크기 μΆ•μ†Œ** * 초기 λ‘œλ“œ 속도λ₯Ό κ°œμ„ ν•˜κΈ° μœ„ν•΄ κ±°λŒ€ν•œ JavaScript λ²ˆλ“€μ„ μž‘κ²Œ λ‚˜λˆ„λŠ” μ½”λ“œ μŠ€ν”Œλ¦¬νŒ…(Code Splitting)이 ν•„μˆ˜μ μž…λ‹ˆλ‹€ [9, 10]. * Vite ν™˜κ²½μ—μ„œλŠ” `manualChunks`λ₯Ό μ„€μ •ν•˜μ—¬ 거의 λ³€κ²½λ˜μ§€ μ•ŠλŠ” 무거운 벀더 라이브러리(예: React μ½”μ–΄, 차트 라이브러리)λ₯Ό λ³„λ„μ˜ 파일둜 λΆ„λ¦¬ν•˜κ³ , λΈŒλΌμš°μ € 캐싱을 κ·ΉλŒ€ν™”ν•©λ‹ˆλ‹€ [11, 12]. * κ°œλ³„ λΌμš°νŠΈλ‚˜ 무거운 UI μœ„μ ―μ€ `React.lazy()`와 ``λ₯Ό κ²°ν•©ν•΄ μ‚¬μš©μžκ°€ μ ‘κ·Όν•  λ•Œλ§Œ λ™μ μœΌλ‘œ μ§€μ—° λ‘œλ”©(Lazy Loading)λ˜λ„λ‘ κ΅¬ν˜„ν•©λ‹ˆλ‹€ [12-14]. * **효율적인 μƒνƒœ 관리와 λ¦¬λ Œλ”λ§ μ œμ–΄** * React의 κΈ°λ³Έ Context APIλŠ” λ‚΄λΆ€μ˜ νŠΉμ • κ°’ ν•˜λ‚˜λ§Œ λ³€κ²½λ˜μ–΄λ„ ν•΄λ‹Ή μ»¨ν…μŠ€νŠΈλ₯Ό κ΅¬λ…ν•˜λŠ” λͺ¨λ“  ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ¦¬λ Œλ”λ§ν•˜λŠ” λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€ [15, 16]. * 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ μ»¨ν…μŠ€νŠΈλ₯Ό λ„λ©”μΈλ³„λ‘œ μž‘κ²Œ μͺΌκ°œκ±°λ‚˜, ν•„μš”ν•œ μƒνƒœ 쑰각(slice)만 ꡬ독할 수 μžˆλŠ” Selector νŒ¨ν„΄μ„ μ§€μ›ν•˜λŠ” Zustand, Jotai 같은 μƒνƒœ 관리 라이브러리λ₯Ό ν™œμš©ν•˜λŠ” 것이 λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„±λŠ₯ 관리에 μœ λ¦¬ν•©λ‹ˆλ‹€ [17-20]. * **λŒ€κ·œλͺ¨ 리슀트 λ Œλ”λ§κ³Ό λ™μ‹œμ„±(Concurrent) κΈ°λŠ₯** * 수백 개 μ΄μƒμ˜ ν•­λͺ©μ„ λ Œλ”λ§ν•΄μ•Ό ν•˜λŠ” λ¦¬μŠ€νŠΈλŠ” DOM λΉ„λŒ€ν™”(DOM bloat)λ₯Ό μ΄ˆλž˜ν•˜λ―€λ‘œ, 화면에 λ³΄μ΄λŠ” ν•­λͺ©λ§Œ λ Œλ”λ§ν•˜λŠ” 가상화(Windowing/Virtualization) 라이브러리(예: `react-window`)λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜λ©°, 리슀트 λ Œλ”λ§ μ‹œμ—λŠ” 항상 μ•ˆμ •μ μ΄κ³  κ³ μœ ν•œ `key`λ₯Ό λΆ€μ—¬ν•΄μ•Ό ν•©λ‹ˆλ‹€ [21-23]. * React의 `useTransition`κ³Ό `useDeferredValue` 훅을 ν™œμš©ν•˜λ©΄ 데이터 필터링 같은 무거운 λ Œλ”λ§ μž‘μ—…μ„ μ§€μ—°μ‹œν‚€κ³ , μ‚¬μš©μž μž…λ ₯ λ“± 더 μ€‘μš”ν•œ μƒν˜Έμž‘μš©μ˜ μš°μ„ μˆœμœ„λ₯Ό λ†’μ—¬ UI의 λ°˜μ‘μ„±μ„ μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [24-26]. * **λͺ¨λ‹ˆν„°λ§ 및 λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 디버깅** * μ΅œμ ν™”λŠ” μΈ‘μ •μ—μ„œ μ‹œμž‘λ©λ‹ˆλ‹€. React DevTools Profiler, Chrome DevTools, `why-did-you-render` 등을 μ‚¬μš©ν•΄ λ Œλ”λ§ μ‹œκ°„κ³Ό 병λͺ©μ„ νŒŒμ•…ν•˜κ³  Core Web Vitals(LCP, INP, CLS λ“±)λ₯Ό λͺ¨λ‹ˆν„°λ§ν•΄μ•Ό ν•©λ‹ˆλ‹€ [27-30]. * JavaScript λ©”λͺ¨λ¦¬ λˆ„μˆ˜(예: λΆ„λ¦¬λœ DOM λ…Έλ“œ, μ •λ¦¬λ˜μ§€ μ•Šμ€ 이벀트 λ¦¬μŠ€λ„ˆ)λŠ” μ„±λŠ₯을 μ§€μ†μ μœΌλ‘œ μ €ν•˜μ‹œν‚΅λ‹ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ Chrome DevTools의 Heap Snapshotμ΄λ‚˜ Allocation Timeline κΈ°λŠ₯을 μ‚¬μš©ν•΄ λ©”λͺ¨λ¦¬λ₯Ό λ°˜ν™˜ν•˜μ§€ λͺ»ν•˜λŠ” 객체λ₯Ό μ°Ύμ•„λ‚΄μ•Ό ν•©λ‹ˆλ‹€ [31-34]. ## πŸ”— Knowledge Connections - **Related Topics:** [[React Architecture]], [[State Management]], [[Clean Code]], [[Debugging]], [[Vite and Bundling]] - **Projects/Contexts:** [[λŒ€κ·œλͺ¨ React μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발]], [[Next.js 및 Server Components 적용 ν”„λ‘œμ νŠΈ]], [[μ›Ή μ„±λŠ₯ μ΅œμ ν™”(Core Web Vitals) κ°œμ„  μž‘μ—…]] - **Contradictions/Notes:** μ†ŒμŠ€μ— λ”°λ₯΄λ©΄, λ©”λͺ¨μ΄μ œμ΄μ…˜(`React.memo`, `useCallback` λ“±)은 무쑰건 μ„±λŠ₯을 ν–₯μƒμ‹œν‚€λŠ” 것이 μ•„λ‹ˆλΌ, μ»΄ν¬λ„ŒνŠΈ λ Œλ”λ§μ΄ 맀우 λΉ λ₯΄κ±°λ‚˜ propsκ°€ λΉˆλ²ˆν•˜κ²Œ λ³€κ²½λ˜λŠ” κ²½μš°μ—λŠ” μƒνƒœ 비ꡐ(comparison) λΉ„μš©μ΄ λ Œλ”λ§ λΉ„μš©λ³΄λ‹€ 컀져 였히렀 μ„±λŠ₯을 μ €ν•˜μ‹œν‚¬ 수 μžˆμœΌλ―€λ‘œ ν”„λ‘œνŒŒμΌλ§μ„ ν†΅ν•œ 츑정이 μš°μ„ λ˜μ–΄μ•Ό ν•œλ‹€κ³  κ²½κ³ ν•©λ‹ˆλ‹€ [3, 35]. --- *Last updated: 2026-04-26*