--- id: P-REINFORCE-AUTO-21F91F category: "[[10_Wiki/πŸ’‘ Topics/Graphics & Performance]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Memory Leak Prevention λ©”λͺ¨λ¦¬ λˆ„μˆ˜ λ°©μ§€" --- # [[Memory Leak Prevention λ©”λͺ¨λ¦¬ λˆ„μˆ˜ λ°©μ§€]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > React μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 및 WebGL/Three.js ν™˜κ²½μ—μ„œ ν•΄μ œλ˜μ§€ μ•Šμ€ 타이머, 이벀트 λ¦¬μŠ€λ„ˆ, μ™ΈλΆ€ 객체 μ°Έμ‘°, λ˜λŠ” GPU μžμ›μœΌλ‘œ 인해 μ‹œκ°„μ΄ μ§€λ‚ μˆ˜λ‘ λ©”λͺ¨λ¦¬ 점유율이 μ¦κ°€ν•˜μ—¬ 앱이 λŠλ €μ§€κ±°λ‚˜ ν¬λž˜μ‹œλ˜λŠ” ν˜„μƒμ„ 막기 μœ„ν•œ ν•„μˆ˜μ μΈ μžμ› 관리 및 μ΅œμ ν™” κΈ°λ²•μž…λ‹ˆλ‹€. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) **1. React의 μ£Όμš” λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 원인과 클린업(Cleanup)** React 앱이 μ‹œκ°„μ΄ μ§€λ‚ μˆ˜λ‘ λŠλ €μ§€λŠ” κ°€μž₯ ν”ν•œ 원인은 μ–Έλ§ˆμš΄νŠΈ(Unmount)된 μ»΄ν¬λ„ŒνŠΈμ˜ μž”μž¬κ°€ 계속 남아 λ©”λͺ¨λ¦¬λ₯Ό μ μœ ν•˜λŠ” κ²½μš°μž…λ‹ˆλ‹€. - **λ―Έν•΄μ œ 타이머:** `setInterval`μ΄λ‚˜ `setTimeout`을 μ‹€ν–‰ν•œ λ’€ μ •λ¦¬ν•˜μ§€ μ•ŠμœΌλ©΄ λ°±κ·ΈλΌμš΄λ“œμ—μ„œ 계속 λ™μž‘ν•©λ‹ˆλ‹€. `useEffect`의 클린업(return) ν•¨μˆ˜μ—μ„œ `clearInterval` 등을 λ°˜λ“œμ‹œ ν˜ΈμΆœν•΄μ•Ό ν•©λ‹ˆλ‹€. - **λ―Έν•΄μ œ 이벀트 λ¦¬μŠ€λ„ˆ:** `window.addEventListener`λ₯Ό 톡해 λ“±λ‘ν•œ μ΄λ²€νŠΈλ„ μ»΄ν¬λ„ŒνŠΈκ°€ μ‚¬λΌμ§ˆ λ•Œ `window.removeEventListener`둜 ν•΄μ œν•΄μ•Ό ν•©λ‹ˆλ‹€. - **μ—΄λ €μžˆλŠ” μ›Ήμ†ŒμΌ“ μ—°κ²°:** 연결이 μ—΄λ¦° μ±„λ‘œ λ°©μΉ˜λ˜μ§€ μ•Šλ„λ‘ 클린업 μ‹œμ μ— `ws.close()`λ₯Ό ν˜ΈμΆœν•˜μ—¬ 연결을 λ‹«μ•„μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€. **2. κ±°λŒ€ν•œ 객체 μ°Έμ‘° μœ μ§€ λ°©μ§€** `useRef` 등을 μ‚¬μš©ν•˜μ—¬ κ±°λŒ€ν•œ 데이터 μ„ΈνŠΈλ‚˜ ν΄λ‘œμ €λ₯Ό μ°Έμ‘°ν•˜κ³  μžˆλŠ” 경우, μ»΄ν¬λ„ŒνŠΈ μ‚¬μš©μ΄ λλ‚œ 후에도 κ°€λΉ„μ§€ 컬렉터(GC)κ°€ ν•΄λ‹Ή λ©”λͺ¨λ¦¬λ₯Ό νšŒμˆ˜ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€. - 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ μž‘μ—…μ΄ μ™„λ£Œλœ κ±°λŒ€ν•œ 객체 μ°Έμ‘°μ—λŠ” λͺ…μ‹œμ μœΌλ‘œ `null`을 ν• λ‹Ή(`processedRef.current = null`)ν•˜μ—¬ λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•  수 μžˆλ„λ‘ 도와야 ν•©λ‹ˆλ‹€. **3. Three.js / WebGLμ—μ„œμ˜ GPU λ©”λͺ¨λ¦¬ λˆ„μˆ˜ λ°©μ§€** Three.jsλ‚˜ React Three Fiber(R3F)와 같은 3D ν™˜κ²½μ—μ„œλŠ” λ©”λͺ¨λ¦¬ 관리가 λ”μš± 치λͺ…μ μž…λ‹ˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” νž™ λ©”λͺ¨λ¦¬λ₯Ό κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(GC) ν•˜μ§€λ§Œ, **Three.jsλŠ” GPU μžμ›(Geometry, Material, Texture λ“±)을 μžλ™μœΌλ‘œ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€**. - μ‚¬μš©μ΄ λλ‚œ 3D κ°μ²΄λŠ” λ°˜λ“œμ‹œ λͺ…μ‹œμ μœΌλ‘œ `.dispose()` λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ VRAM λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό 막아야 ν•©λ‹ˆλ‹€ (예: 4K ν…μŠ€μ²˜ ν•˜λ‚˜κ°€ 64MB μ΄μƒμ˜ VRAM을 λ‚­λΉ„ν•  수 μžˆμŠ΅λ‹ˆλ‹€). - GLTF λͺ¨λΈμ˜ ν…μŠ€μ²˜(ImageBitmap ν˜•νƒœ)λŠ” λˆ„μˆ˜λ₯Ό 막기 μœ„ν•΄ `texture.source.data.close?.()`와 같이 λͺ…μ‹œμ μΈ λ‹«κΈ° ν˜ΈμΆœλ„ ν•„μš”ν•©λ‹ˆλ‹€. **4. λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 탐지 및 λͺ¨λ‹ˆν„°λ§ (Debugging & Monitoring)** - **Chrome DevTools Memory Profiler:** νŠΉμ • μ‚¬μš©μž 행동 μ „ν›„μ˜ νž™ μŠ€λƒ…μƒ·(Heap Snapshots)을 찍어 λΉ„κ΅ν•˜κ³ , ν• λ‹Ή νƒ€μž„λΌμΈ(Allocation Timelines)을 톡해 κ°€λΉ„μ§€ μ»¬λ ‰μ…˜λ˜μ–΄μ•Ό ν•  객체가 κ·ΈλŒ€λ‘œ λ‚¨μ•„μžˆλŠ”μ§€ μΆ”μ ν•˜μ—¬ λˆ„μˆ˜ 지점을 μ°Ύμ•„λƒ…λ‹ˆλ‹€. - 개발 ν™˜κ²½μ—μ„œλŠ” `performance.memory.usedJSHeapSize`λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ—¬ λ©”λͺ¨λ¦¬ 점유율이 일정 수치(예: 200MB)λ₯Ό λ„˜μ–΄κ°€λ©΄ κ²½κ³ (Alert)λ₯Ό λ°œμƒμ‹œν‚€λ„λ‘ κ°μ‹œ μ½”λ“œλ₯Ό μž‘μ„±ν•΄ μ„ μ œμ μœΌλ‘œ λŒ€μ‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Graphics & Performance λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[useEffect 클린업(Cleanup)]], [[Garbage Collection (GC) μ΅œμ ν™”]], [[Three.js μžμ› ν•΄μ œ (Dispose)]], [[Chrome DevTools Memory Profiler]] - **Projects/Contexts:** [[μž₯κΈ° μ‹€ν–‰λ˜λŠ” μ‹€μ‹œκ°„ λŒ€μ‹œλ³΄λ“œ μ΅œμ ν™”]], [[λŒ€κ·œλͺ¨ WebGL/R3F 3D κ²Œμž„ ν™˜κ²½μ˜ λ©”λͺ¨λ¦¬ 관리]] - **Contradictions/Notes:** μ΅œμ‹  μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 맀우 ν›Œλ₯­ν•œ κ°€λΉ„μ§€ 컬렉터(GC)λ₯Ό κ°–μΆ”κ³  μžˆμœΌλ‚˜, DOM 이벀트, λΈŒλΌμš°μ € API(타이머, μ†ŒμΌ“), WebGL GPU λ©”λͺ¨λ¦¬ λ“± 'μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„ μ™ΈλΆ€μ˜ μžμ›'κ³Ό μ—°κ²°λœ μ°Έμ‘°λŠ” GCκ°€ μž„μ˜λ‘œ νŒλ‹¨ν•΄ μ§€μšΈ 수 μ—†μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ™ΈλΆ€ μžμ›κ³Όμ˜ μ—°κ²° κ³ λ¦¬λŠ” κ°œλ°œμžκ°€ 직접 λŠμ–΄μ£Όμ–΄μ•Όλ§Œ μ™„λ²½ν•œ λ©”λͺ¨λ¦¬ 관리가 κ°€λŠ₯ν•©λ‹ˆλ‹€. --- _Last updated: 2026-04-14_ - Raw Source: [[00_Raw/2026-04-20/Memory Leak Prevention λ©”λͺ¨λ¦¬ λˆ„μˆ˜ λ°©μ§€.md]] ---