--- 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 แ„†แ…ฆแ„†แ…ฉแ„…แ…ต แ„‚แ…ฎแ„‰แ…ฎ แ„‡แ…กแ†ผแ„Œแ…ต|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)|useEffect ํด๋ฆฐ์—…(Cleanup)]], [[Garbage Collection (GC) แ„Žแ…ฌแ„Œแ…ฅแ†จแ„’แ…ช|Garbage Collection (GC) ์ตœ์ ํ™”]], [[Three.js แ„Œแ…กแ„‹แ…ฏแ†ซ แ„’แ…ขแ„Œแ…ฆ (Dispose)|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 ---