# [[JavaScript Memory Management]] ## πŸ“Œ Brief Summary μžλ°”μŠ€ν¬λ¦½νŠΈ λ©”λͺ¨λ¦¬ κ΄€λ¦¬λŠ” ν• λ‹Ήλœ λ©”λͺ¨λ¦¬κ°€ 더 이상 ν•„μš”ν•˜μ§€ μ•Šμ„ λ•Œ κ°€λΉ„μ§€ 컬렉터(Garbage Collector)λ₯Ό 톡해 μžλ™μœΌλ‘œ λ©”λͺ¨λ¦¬λ₯Ό νšŒμˆ˜ν•˜λŠ” 과정을 μ˜λ―Έν•©λ‹ˆλ‹€ [1]. κ·ΈλŸ¬λ‚˜ μ°Έμ‘°κ°€ λ‚¨μ•„μžˆμ–΄ λ©”λͺ¨λ¦¬κ°€ ν•΄μ œλ˜μ§€ μ•ŠμœΌλ©΄ λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak)κ°€ λ°œμƒν•˜λ©°, μ΄λŠ” 점진적인 μ„±λŠ₯ μ €ν•˜λ‚˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 멈좀 ν˜„μƒμ„ μœ λ°œν•©λ‹ˆλ‹€ [1-3]. 효과적인 λ©”λͺ¨λ¦¬ 관리λ₯Ό μœ„ν•΄μ„œλŠ” Chrome DevTools와 같은 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ λΆ„λ¦¬λœ DOM λ…Έλ“œλ‚˜ μ •λ¦¬λ˜μ§€ μ•Šμ€ 이벀트 λ¦¬μŠ€λ„ˆ 등을 μ‹λ³„ν•˜κ³  ν•΄κ²°ν•΄μ•Ό ν•©λ‹ˆλ‹€ [4-6]. ## πŸ“– Core μ†ŒμŠ€ Content - **κ°€λΉ„μ§€ μ»¬λ ‰μ…˜κ³Ό λ©”λͺ¨λ¦¬ λˆ„μˆ˜:** μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ‚¬μš©λ˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬λ₯Ό μžλ™μœΌλ‘œ νšŒμˆ˜ν•˜λŠ” κ°€λΉ„μ§€ 컬렉터λ₯Ό μ œκ³΅ν•˜μ§€λ§Œ, 객체에 λŒ€ν•œ μ°Έμ‘°(Reference)κ°€ λ‚¨μ•„μžˆλŠ” ν•œ λ©”λͺ¨λ¦¬λŠ” ν•΄μ œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ [1]. ν•„μš” μ—†λŠ” λ©”λͺ¨λ¦¬κ°€ 계속 λˆ„μ λ˜λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ μ§€μ†μ μœΌλ‘œ μ¦κ°€ν•˜λŠ” λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ λ°œμƒν•©λ‹ˆλ‹€ [1, 3]. - **λ©”λͺ¨λ¦¬ 문제의 3κ°€μ§€ μœ ν˜•:** 1. **λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak):** νŽ˜μ΄μ§€μ˜ λ²„κ·Έλ‘œ 인해 μ‹œκ°„μ΄ 지남에 따라 λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ μ μ§„μ μœΌλ‘œ μ¦κ°€ν•˜μ—¬ μ„±λŠ₯이 μ•…ν™”λ˜λŠ” ν˜„μƒμž…λ‹ˆλ‹€ [2]. 2. **λ©”λͺ¨λ¦¬ 팽창(Memory Bloat):** 졜적의 νŽ˜μ΄μ§€ 속도λ₯Ό μœ„ν•΄ ν•„μš”ν•œ 것보닀 λ„ˆλ¬΄ λ§Žμ€ λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•˜μ—¬ μΌκ΄€λ˜κ²Œ μ„±λŠ₯이 μ €ν•˜λ˜λŠ” ν˜„μƒμž…λ‹ˆλ‹€ [2]. 3. **μž¦μ€ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(Frequent Garbage Collections):** λΈŒλΌμš°μ €κ°€ λ©”λͺ¨λ¦¬λ₯Ό νšŒμˆ˜ν•˜κΈ° μœ„ν•΄ 슀크립트 싀행을 자주 μΌμ‹œ μ€‘μ§€μ‹œν‚€λ©΄μ„œ, μ„±λŠ₯이 μ§€μ—°λ˜κ±°λ‚˜ 멈좘 κ²ƒμ²˜λŸΌ λ³΄μ΄λŠ” ν˜„μƒμž…λ‹ˆλ‹€ [2]. - **μ£Όμš” λ©”λͺ¨λ¦¬ λˆ„μˆ˜ νŒ¨ν„΄:** - **λΆ„λ¦¬λœ DOM λ…Έλ“œ(Detached DOM Nodes):** λ¬Έμ„œ(DOM 트리)μ—μ„œλŠ” μ œκ±°λ˜μ—ˆμ§€λ§Œ μžλ°”μŠ€ν¬λ¦½νŠΈ λ³€μˆ˜μ—μ„œ μ—¬μ „νžˆ μ°Έμ‘°ν•˜κ³  μžˆμ–΄ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ˜ λŒ€μƒμ΄ λ˜μ§€ λͺ»ν•˜λŠ” λ…Έλ“œμž…λ‹ˆλ‹€ [4, 6]. - **이벀트 λ¦¬μŠ€λ„ˆ λˆ„μ :** μ»΄ν¬λ„ŒνŠΈκ°€ μ–Έλ§ˆμš΄νŠΈλ  λ•Œ 적절히 μ œκ±°λ˜μ§€ μ•Šμ€ 이벀트 λ¦¬μŠ€λ„ˆλ“€μ΄ λ©”λͺ¨λ¦¬μ— 계속 μΆ•μ λ˜λŠ” ν˜„μƒμž…λ‹ˆλ‹€ [6]. Reactμ—μ„œλŠ” `useEffect`μ—μ„œ 정리(Cleanup) ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•˜μ§€ μ•Šμ„ λ•Œ ν”νžˆ λ°œμƒν•©λ‹ˆλ‹€ [7, 8]. - **ν΄λ‘œμ €λ‘œ μœ μ§€λ˜λŠ” μ°Έμ‘°(Closure-Retained References):** ν΄λ‘œμ €(Closure)κ°€ λΆ€λͺ¨ μŠ€μ½”ν”„μ˜ λ³€μˆ˜λ₯Ό 계속 살렀두어 λŒ€κ·œλͺ¨ 객체λ₯Ό λΆˆν•„μš”ν•˜κ²Œ λ©”λͺ¨λ¦¬μ— μœ μ§€ν•˜λŠ” κ²½μš°μž…λ‹ˆλ‹€ [9]. - **탐지 및 디버깅 도ꡬ:** - **Chrome Task Manager:** DOM λ…Έλ“œκ°€ μ €μž₯λ˜λŠ” OS λ©”λͺ¨λ¦¬λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 'Memory footprint'와 도달 κ°€λŠ₯ν•œ μžλ°”μŠ€ν¬λ¦½νŠΈ 객체가 μ‚¬μš©ν•˜λŠ” λ©”λͺ¨λ¦¬λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 'JavaScript Memory'의 μ‹€μ‹œκ°„ μ‚¬μš©λŸ‰μ„ λͺ¨λ‹ˆν„°λ§ν•©λ‹ˆλ‹€ [10]. - **νž™ μŠ€λƒ…μƒ·(Heap Snapshots):** νŠΉμ • μ‹œμ μ˜ λ©”λͺ¨λ¦¬ λΆ„μ‚° μƒνƒœλ₯Ό μΊ‘μ²˜ν•©λ‹ˆλ‹€ [11]. 두 μŠ€λƒ…μƒ·μ„ λΉ„κ΅ν•˜μ—¬ 크기가 계속 μ¦κ°€ν•˜λŠ”(Delta 값이 μ–‘μˆ˜μΈ) 객체λ₯Ό μ°Ύκ³ , ν•΄λ‹Ή 객체가 μ‚­μ œλ  경우 ν•΄μ œλ  λ©”λͺ¨λ¦¬ 크기(Retained Size)λ₯Ό νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [5, 12]. - **ν• λ‹Ή νƒ€μž„λΌμΈ(Allocation Timeline):** λ©”λͺ¨λ¦¬ ν• λ‹Ή νŒ¨ν„΄μ„ μ‹€μ‹œκ°„μœΌλ‘œ λΆ„μ„ν•˜μ—¬ μ–΄λ–€ ν•¨μˆ˜λ‚˜ μž‘μ—…μ΄ λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό μœ λ°œν•˜λŠ”μ§€ μΆ”μ ν•©λ‹ˆλ‹€ [13-15]. - **예방 μ „λž΅:** μΊμ‹œ 관리 μ‹œ 객체 λŒ€μ‹  `WeakMap`을 μ‚¬μš©ν•˜μ—¬ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ΄ μ •μƒμ μœΌλ‘œ 이루어지도둝 ν•˜κ³ , Puppeteerλ₯Ό μ΄μš©ν•΄ CI νŒŒμ΄ν”„λΌμΈμ— μžλ™ν™”λœ λ©”λͺ¨λ¦¬ λˆ„μˆ˜ ν…ŒμŠ€νŠΈλ₯Ό 톡합할 수 μžˆμŠ΅λ‹ˆλ‹€ [16]. ## βš–οΈ Trade-offs & Caveats λΈŒλΌμš°μ €κ°€ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ„ μˆ˜ν–‰ν•  λ•ŒλŠ” λͺ¨λ“  슀크립트 싀행이 μΌμ‹œ 쀑지(Pause)λœλ‹€λŠ” μ œμ•½ 사항이 μžˆμŠ΅λ‹ˆλ‹€ [2]. λ”°λΌμ„œ λ©”λͺ¨λ¦¬ 할당을 κ³Όλ„ν•˜κ²Œ ν•˜κ±°λ‚˜ λ©”λͺ¨λ¦¬ 팽창이 λ°œμƒν•˜λ©΄ μž¦μ€ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ΄ νŠΈλ¦¬κ±°λ˜μ–΄ μ‚¬μš©μž κ²½ν—˜(UX)상 앱이 자주 λ©ˆμΆ”λŠ” λ“―ν•œ μ‹¬κ°ν•œ λΆ€μž‘μš©μ„ μ΄ˆλž˜ν•©λ‹ˆλ‹€ [2]. 반면, μ„±λŠ₯ μ΅œμ ν™”λ‚˜ 캐싱을 λͺ©μ μœΌλ‘œ κ°μ²΄λ‚˜ 데이터λ₯Ό ν΄λ‘œμ € λ©”λͺ¨λ¦¬μ— 길게 λ³΄κ΄€ν•˜λŠ” 기술적 선택을 ν•  경우, μ μ ˆν•œ μ‹œμ μ— μ°Έμ‘°λ₯Ό ν•΄μ œν•˜κ±°λ‚˜ `WeakMap`을 μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 좩돌(Crash)μ΄λ‚˜ νƒ­ 멈좀 ν˜„μƒμ„ μœ λ°œν•˜λŠ” 치λͺ…적인 λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Trade-off)둜 μ΄μ–΄μ§ˆ μœ„ν—˜μ΄ μžˆμŠ΅λ‹ˆλ‹€ [3, 9, 16]. λ˜ν•œ λ©”λͺ¨λ¦¬ ν”„λ‘œνŒŒμΌλ§μ„ μœ„ν•œ νž™ μŠ€λƒ…μƒ· 캑처 및 μ²˜λ¦¬λŠ” μƒλ‹Ήν•œ λ‘œλ“œ μ‹œκ°„μ΄ μ†Œμš”λ  수 μžˆμŠ΅λ‹ˆλ‹€ [11]. ## πŸ”— Knowledge Connections ### Related Concepts #### [μ•„ν‚€ν…μ²˜/기반 기술] - [[Garbage Collection]] - μ—°κ²° 이유: μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λ©”λͺ¨λ¦¬ κ΄€λ¦¬λŠ” 더 이상 μ°Έμ‘°λ˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬λ₯Ό μžλ™μœΌλ‘œ νšŒμˆ˜ν•˜λŠ” κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ λ©”μ»€λ‹ˆμ¦˜μ— μ „μ μœΌλ‘œ μ˜μ‘΄ν•©λ‹ˆλ‹€ [1]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: λΈŒλΌμš°μ €κ°€ 도달 κ°€λŠ₯ν•œ(Reachable) 객체λ₯Ό νŒλ‹¨ν•˜λŠ” κΈ°μ€€κ³Ό 슀크립트 싀행이 μ •μ§€λ˜λŠ” 타이밍을 이해할 수 μžˆμŠ΅λ‹ˆλ‹€ [1, 2, 10]. - [[Detached DOM Nodes]] - μ—°κ²° 이유: ν˜„λŒ€μ μΈ μ»΄ν¬λ„ŒνŠΈ 기반 UI(예: React, Vue)μ—μ„œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό μΌμœΌν‚€λŠ” κ°€μž₯ ν”ν•œ 원인 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€ [4, 6]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: JS λ³€μˆ˜μ˜ μ°Έμ‘°κ°€ μ–΄λ–»κ²Œ OS λ©”λͺ¨λ¦¬μ— μœ„μΉ˜ν•œ DOM 트리의 κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ„ λ°©ν•΄ν•˜λŠ”μ§€ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [4, 10]. #### [κ΅¬ν˜„/ν™œμš© 도ꡬ] - [[Heap Snapshot]] - μ—°κ²° 이유: Chrome DevToolsμ—μ„œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜μ˜ μ •ν™•ν•œ 원인(Retainer path)을 μ°ΎκΈ° μœ„ν•΄ ν•„μˆ˜μ μœΌλ‘œ μ‚¬μš©λ˜λŠ” ν”„λ‘œνŒŒμΌλ§ λ„κ΅¬μž…λ‹ˆλ‹€ [5, 11]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: Shallow size(객체 자체의 크기)와 Retained size(μ°Έμ‘°κ°€ 끊길 μ‹œ νšŒμˆ˜λ˜λŠ” 크기)의 차이λ₯Ό μ΄ν•΄ν•˜κ³  λ©”λͺ¨λ¦¬ ν•΄μ œ 효과λ₯Ό 뢄석할 수 μžˆμŠ΅λ‹ˆλ‹€ [5, 12]. - [[useEffect Cleanup]] - μ—°κ²° 이유: React ν”„λ ˆμž„μ›Œν¬ ν™˜κ²½μ—μ„œ 이벀트 λ¦¬μŠ€λ„ˆλ‚˜ ꡬ독(Subscription)으둜 μΈν•œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό μ˜ˆλ°©ν•˜κΈ° μœ„ν•œ 핡심 κ΅¬ν˜„ νŒ¨ν„΄μž…λ‹ˆλ‹€ [7, 8, 16]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μ»΄ν¬λ„ŒνŠΈ 생λͺ…주기와 μ—°λ™ν•˜μ—¬ μžμ›(Resource)을 μ˜¬λ°”λ₯΄κ²Œ ν•΄μ œν•˜λŠ” 방법을 체득할 수 μžˆμŠ΅λ‹ˆλ‹€ [7, 16]. ### Deeper Research Questions - μžλ°”μŠ€ν¬λ¦½νŠΈ κ°€λΉ„μ§€ μ»¬λ ‰ν„°μ˜ 도달 κ°€λŠ₯μ„±(Reachability) νŒλ‹¨μ—μ„œ 'GC Roots'λŠ” ꡬ체적으둜 μ–΄λ–€ 객체듀을 ν¬ν•¨ν•˜λ©° μ–΄λ–»κ²Œ νƒμƒ‰λ˜λŠ”κ°€? - Chrome DevTools의 Heap Snapshotμ—μ„œ 식별할 수 μžˆλŠ” Shallow size와 Retained size의 μ •ν™•ν•œ 기술적 차이점과 뢄석 μ‹œμ˜ ν™œμš©λ²•μ€ 무엇인가? - Node.js μ„œλ²„ ν™˜κ²½μ—μ„œ V8 inspector protocol을 μ΄μš©ν•œ λ©”λͺ¨λ¦¬ ν”„λ‘œνŒŒμΌλ§μ€ λΈŒλΌμš°μ € ν΄λΌμ΄μ–ΈνŠΈ ν™˜κ²½μ˜ 디버깅과 μ–΄λ–»κ²Œ λ‹€λ₯΄λ©° μ–΄λ–€ νŠΉμˆ˜ν•œ λˆ„μˆ˜ νŒ¨ν„΄μ΄ μ‘΄μž¬ν•˜λŠ”κ°€? - WeakMap을 ν™œμš©ν•œ 캐싱 λ©”μ»€λ‹ˆμ¦˜μ€ 일반 Mapκ³Ό λΉ„κ΅ν•˜μ—¬ λ‚΄λΆ€μ μœΌλ‘œ μ–΄λ–»κ²Œ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ„ ν—ˆμš©ν•˜λŠ”κ°€? - React μ»΄ν¬λ„ŒνŠΈ μ΅œμ ν™”(예: `useMemo`, `useCallback`)둜 인해 λ©”λͺ¨λ¦¬μ— μœ μ§€λ˜λŠ” 객체 μ°Έμ‘°κ°€ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ 주기와 전체 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ©”λͺ¨λ¦¬ νŒ½μ°½μ— λ―ΈμΉ˜λŠ” 영ν–₯은 무엇인가? ### Practical Application Contexts - **Implementation:** React μ»΄ν¬λ„ŒνŠΈ 개발 μ‹œ `useEffect` ν›… λ‚΄λΆ€μ—μ„œ 이벀트 λ¦¬μŠ€λ„ˆ, WebSocket, 타이머 등을 등둝할 λ•Œ λ°˜λ“œμ‹œ ν•΄μ œ(Cleanup) ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•˜λ„λ‘ κ΅¬ν˜„ν•˜μ—¬ μ»΄ν¬λ„ŒνŠΈ μ–Έλ§ˆμš΄νŠΈ μ‹œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό λ°©μ§€ν•©λ‹ˆλ‹€ [7, 8, 16]. μΊμ‹œ 객체가 ν•„μš”ν•  λ•ŒλŠ” `WeakMap`을 λ„μž…ν•˜μ—¬ μžλ™ λ©”λͺ¨λ¦¬ 관리λ₯Ό μœ λ„ν•©λ‹ˆλ‹€ [16]. - **System Design:** λŒ€κ·œλͺ¨ λ°μ΄ν„°λ‚˜ λ³΅μž‘ν•œ UIλ₯Ό λ‹€λ£° λ•Œ, ν΄λ‘œμ €κ°€ λΆˆν•„μš”ν•˜κ²Œ κ±°λŒ€ν•œ μ»¨ν…μŠ€νŠΈ 객체에 λŒ€ν•œ μ°Έμ‘°λ₯Ό μœ μ§€ν•˜μ§€ μ•Šλ„λ‘ μ»΄ν¬λ„ŒνŠΈ μŠ€μ½”ν”„μ™€ μƒνƒœ λ ˆμ΄μ–΄ ꡬ쑰λ₯Ό 섀계해야 ν•©λ‹ˆλ‹€ [9]. - **Operation / Maintenance:** ν”„λ‘œλ•μ…˜ ν™˜κ²½μ—μ„œ μ•±μ˜ μ„±λŠ₯ μ €ν•˜λ‚˜ 멈좀 ν˜„μƒμ΄ 보고되면, Chrome Task Manager둜 λ©”λͺ¨λ¦¬ 발자ꡭ(Memory footprint) 증가 좔이λ₯Ό μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§ν•˜κ³  Heap Snapshot을 비ꡐ 뢄석(Delta κ°’ 확인)ν•˜μ—¬ λˆ„μˆ˜ 지점을 μ°Ύμ•„λƒ…λ‹ˆλ‹€ [5, 11, 17]. CI νŒŒμ΄ν”„λΌμΈμ— Puppeteerλ₯Ό ν†΅ν•œ μžλ™ν™”λœ λ©”λͺ¨λ¦¬ ν…ŒμŠ€νŠΈλ₯Ό κ΅¬μΆ•ν•©λ‹ˆλ‹€ [16]. - **Learning Path:** μžλ°”μŠ€ν¬λ¦½νŠΈ 참쑰와 ν΄λ‘œμ €μ˜ λ™μž‘ 원리 이해 -> λΈŒλΌμš°μ €μ˜ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ λ©”μ»€λ‹ˆμ¦˜ ν•™μŠ΅ -> Chrome DevToolsλ₯Ό ν™œμš©ν•œ Heap Snapshot 및 Allocation Timeline 뢄석 μ‹€μŠ΅ -> ν”„λ ˆμž„μ›Œν¬(React) νŠΉν™” λ©”λͺ¨λ¦¬ μ΅œμ ν™” νŒ¨ν„΄ 적용. - **My Project Relevance:** React μ½”λ“œλ² μ΄μŠ€ λ¦¬νŒ©ν† λ§ κ³Όμ •μ—μ„œ 잘λͺ» κ΅¬ν˜„λœ μ»€μŠ€ν…€ ν›…μ΄λ‚˜ μƒνƒœ 관리 둜직으둜 μΈν•œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ μ—†λŠ”μ§€ μ κ²€ν•˜κ³ , μ•ˆμ •μ μ΄κ³  ν™•μž₯ κ°€λŠ₯ν•œ ν”„λ‘ νŠΈμ—”λ“œ μ•„ν‚€ν…μ²˜λ₯Ό κ΅¬μΆ•ν•˜λŠ” 데 ν•„μˆ˜μ μœΌλ‘œ μ μš©λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. ### Adjacent Topics - [[React Performance Optimization]] - ν™•μž₯ λ°©ν–₯: λ©”λͺ¨λ¦¬ κ΄€λ¦¬λΏλ§Œ μ•„λ‹ˆλΌ `React.memo`, `useCallback` 등을 ν†΅ν•œ λΆˆν•„μš”ν•œ λ Œλ”λ§ μ΅œμ ν™”κ°€ μ–΄λ–»κ²Œ μžλ°”μŠ€ν¬λ¦½νŠΈ 객체의 λΆˆν•„μš”ν•œ μž¬μƒμ„±κ³Ό λ©”λͺ¨λ¦¬ 할당을 μ€„μ΄λŠ” 데 κΈ°μ—¬ν•˜λŠ”μ§€ μ‚΄νŽ΄λ΄…λ‹ˆλ‹€ [18-20]. - [[Core Web Vitals]] - ν™•μž₯ λ°©ν–₯: λ©”λͺ¨λ¦¬ νŒ½μ°½μ΄λ‚˜ μž¦μ€ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μœΌλ‘œ μΈν•œ 메인 μŠ€λ ˆλ“œ λΈ”λ‘œν‚Ήμ΄ INP(Interaction to Next Paint) 및 TBT(Total Blocking Time)와 같은 μ‹€μ œ μ›Ή μ„±λŠ₯ μ§€ν‘œμ— λ―ΈμΉ˜λŠ” 영ν–₯을 μ‘°μ‚¬ν•©λ‹ˆλ‹€ [21-23]. --- *Last updated: 2026-04-30*