--- id: P-REINFORCE-AUTO-2F9E62 category: "10_Wiki/๐Ÿ’ก Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leaks)" --- # [[แ„†แ…ฆแ„†แ…ฉแ„…แ…ต แ„‚แ…ฎแ„‰แ…ฎ(Memory Leaks)|๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leaks)]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ํ™˜๊ฒฝ์—์„œ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋” ์ด์ƒ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋“ค์ด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC) ๋ฃจํŠธ๋กœ๋ถ€ํ„ฐ ์—ฌ์ „ํžˆ ์ฐธ์กฐ๋˜๊ณ  ์žˆ์–ด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ด์ œ๋˜์ง€ ์•Š๋Š” ํ˜„์ƒ์„ ์˜๋ฏธํ•œ๋‹ค [1-4]. ์ด๋Ÿฌํ•œ ํ˜„์ƒ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ ์ง„์ ์œผ๋กœ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ, ๊ฒฐ๊ณผ์ ์œผ๋กœ ์žฆ์€ GC ์‹คํ–‰์— ๋”ฐ๋ฅธ ์„ฑ๋Šฅ ์ €ํ•˜์™€ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ(OOM) ํฌ๋ž˜์‹œ๋ฅผ ์œ ๋ฐœํ•œ๋‹ค [5, 6]. ์ผ๋ฐ˜์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์œ ์‹ค๊ณผ ๋‹ฌ๋ฆฌ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝ”๋“œ ์–ด๋”˜๊ฐ€์— ๋‚จ์•„์žˆ๋Š” ์›์น˜ ์•Š๋Š” ์ฐธ์กฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ๋‹ค [1, 4]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) * **๋ฐœ์ƒ ๋ฉ”์ปค๋‹ˆ์ฆ˜:** V8 ์—”์ง„๊ณผ ๊ฐ™์€ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์—์„œ ๊ฐ์ฒด๋Š” ๊ธ€๋กœ๋ฒŒ ๊ฐ์ฒด, ํ™œ์„ฑ ํด๋กœ์ €, ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ, ํƒ€์ด๋จธ ๋“ฑ์œผ๋กœ๋ถ€ํ„ฐ ๋„๋‹ฌ ๊ฐ€๋Šฅ(reachable)ํ•œ ์ƒํƒœ์ผ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€๋œ๋‹ค [1, 4]. ์ด ์—ฐ๊ฒฐ ๊ณ ๋ฆฌ๋ฅผ ๋Š์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ๊ฐ„์ด ๊ธธ์–ด์งˆ์ˆ˜๋ก ํž™(Heap) ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ด์ œ๋˜์ง€ ์•Š๊ณ  ๊ณ„๋‹จ์‹(Ratchet)์œผ๋กœ ์ƒ์Šนํ•˜๋Š” ํŒจํ„ด์„ ๋ณด์ธ๋‹ค [7, 8]. ํŠนํžˆ ์ˆ˜๋ช…์ด ๊ธด ๊ฐ์ฒด๋“ค์ด ๋ชจ์ด๋Š” V8์˜ 'Old space' ์˜์—ญ ์‚ฌ์šฉ๋Ÿ‰์ด Major GC ์ดํ›„์—๋„ ์ง€์†์ ์œผ๋กœ ์ฆ๊ฐ€ํ•œ๋‹ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์ผ ํ™•๋ฅ ์ด ๋งค์šฐ ๋†’๋‹ค [9, 10]. * **์ฃผ์š” ๋ˆ„์ˆ˜ ํŒจํ„ด:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค. * **์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ๋ฐ ํƒ€์ด๋จธ ์ถ•์ :** ๋ Œ๋”๋ง ์ฃผ๊ธฐ๋‚˜ ์ธํ„ฐ๋ฒŒ ์ฝœ๋ฐฑ์—์„œ ์ถ”๊ฐ€๋œ ๋ฆฌ์Šค๋„ˆ ๋ฐ ํƒ€์ด๋จธ(setInterval ๋“ฑ)๋ฅผ ์ ์ ˆํžˆ ์ œ๊ฑฐํ•˜์ง€ ์•Š์œผ๋ฉด, ํ•ด๋‹น ์ฝœ๋ฐฑ์˜ ํด๋กœ์ €์™€ ์ฐธ์กฐ๋œ ๊ฐ์ฒด๋“ค์ด ๋ฌด๊ธฐํ•œ ๋ฉ”๋ชจ๋ฆฌ์— ๋‚จ๊ฒŒ ๋œ๋‹ค [11-14]. Node.js ํ™˜๊ฒฝ์—์„œ ๋‹จ์ผ ์ด๋ฒคํŠธ์— 10๊ฐœ ์ด์ƒ์˜ ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” `MaxListenersExceededWarning` ๊ฒฝ๊ณ ๋Š” ๋ˆ„์ˆ˜ ๋ฐœ์ƒ์„ ํ™•์ธํ•˜๋Š” ๋ช…ํ™•ํ•œ ์ง€ํ‘œ์ด๋‹ค [15]. * **ํด๋กœ์ € ์Šค์ฝ”ํ”„ ๋ณด์กด:** ์—ฌ๋Ÿฌ ํด๋กœ์ €๊ฐ€ ํ•˜๋‚˜์˜ ์Šค์ฝ”ํ”„๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒฝ์šฐ, ๋‹จ ํ•˜๋‚˜์˜ ํด๋กœ์ €๋ผ๋„ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ํ™œ์„ฑ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋ฉด ๋™์ผ ์Šค์ฝ”ํ”„ ๋‚ด์—์„œ ์บก์ฒ˜๋œ ๋‹ค๋ฅธ ๋Œ€์šฉ๋Ÿ‰ ๊ฐ์ฒด๋“ค๋„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋˜์ง€ ๋ชปํ•œ๋‹ค [11, 15]. * **๋ถ„๋ฆฌ๋œ DOM ๋…ธ๋“œ:** DOM ํŠธ๋ฆฌ์—์„œ๋Š” ์ œ๊ฑฐ๋˜์—ˆ์œผ๋‚˜ JavaScript ๋ณ€์ˆ˜๋‚˜ Map/Set ๋“ฑ์— ์˜ํ•ด ์ฐธ์กฐ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ๋Š” DOM ์š”์†Œ๋Š” ํ•ด๋‹น ์š”์†Œ๊ฐ€ ํฌํ•จ๋œ ์ „์ฒด ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง€์†์ ์œผ๋กœ ์ ์œ ํ•œ๋‹ค [16, 17]. * **๋ฌด์ œํ•œ ์บ์‹œ ๋ฐ ๋ผ์šฐํŠธ ์ „ํ™˜:** ํฌ๊ธฐ ์ œํ•œ์ด ์—†๋Š” ์บ์‹œ ๋ฐ์ดํ„ฐ, ํ˜น์€ SPA(Single Page Application)์—์„œ ์ด์ „ ๋ผ์šฐํŠธ์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ „์—ญ ์ƒํƒœ ์ฐธ์กฐ๋‚˜ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ •๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ๋„ ์ฃผ์š” ๋ˆ„์ˆ˜ ์›์ธ์ด๋‹ค [15, 18]. * **์ž˜๋ผ๋‚ธ ๋ฌธ์ž์—ด(Sliced String):** ๊ฑฐ๋Œ€ํ•œ ๋ฌธ์ž์—ด์˜ ์ผ๋ถ€๋ถ„์„ `substring()` ๋“ฑ์œผ๋กœ ์ž˜๋ผ ์ „์—ญ ๋ณ€์ˆ˜์— ๋ณด๊ด€ํ•  ๊ฒฝ์šฐ, ์ž˜๋ผ๋‚ธ ๋ฌธ์ž์—ด์ด ์›๋ณธ ๋ฌธ์ž์—ด์˜ ํฌ์ธํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋ฏ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์›๋ณธ ๋ฌธ์ž์—ด ์ „์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ๋‹ค [19]. * **์ง„๋‹จ ๋ฐ ํ”„๋กœํŒŒ์ผ๋ง ๋„๊ตฌ:** * Chrome DevTools์˜ 'ํž™ ์Šค๋ƒ…์ƒท(Heap Snapshots)'๊ณผ 'ํ• ๋‹น ํƒ€์ž„๋ผ์ธ(Allocation Timeline)'์„ ํ™œ์šฉํ•˜์—ฌ ๋ˆ„์ˆ˜๋ฅผ ์ง„๋‹จํ•œ๋‹ค [20-23]. * ํŠน์ • ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „ํ›„๋กœ ์—ฌ๋Ÿฌ ๋ฒˆ ์Šค๋ƒ…์ƒท์„ ์ฐ์–ด ๋น„๊ตํ•˜๋Š” '3-์Šค๋ƒ…์ƒท ๊ธฐ๋ฒ•'์„ ํ†ตํ•ด, ์˜๋„์น˜ ์•Š๊ฒŒ ๋‚จ์•„์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค [20, 24]. ํƒ€์ž„๋ผ์ธ์— ๋‚˜ํƒ€๋‚˜๋Š” ํŒŒ๋ž€์ƒ‰ ๋ง‰๋Œ€๋Š” ํ• ๋‹น ํ›„ ํ•ด์ œ๋˜์ง€ ์•Š์€ ์‚ด์•„์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ž ์žฌ์ ์ธ ๋ˆ„์ˆ˜ ์ง€์ ์„ ํŒŒ์•…ํ•œ๋‹ค [23, 25, 26]. * ์˜์‹ฌ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ์ฐพ์•˜๋‹ค๋ฉด DevTools์˜ 'Retainers' ํŒจ๋„์„ ํ†ตํ•ด ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ์–ด๋–ค ์ฐธ์กฐ ๊ฒฝ๋กœ(Retaining Path)๋ฅผ ๊ฑฐ์ณ GC ๋ฃจํŠธ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ์—ญ์ถ”์ ํ•˜์—ฌ ์›์ธ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค [27-29]. * ๋˜ํ•œ `--trace-gc` ํ”Œ๋ž˜๊ทธ, `heapdump`, `clinic.js` ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๋™์ž‘๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์ฆ๊ฐ€ ์ถ”์„ธ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋‹ค [7, 13, 30, 31]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[แ„€แ…กแ„‡แ…ตแ„Œแ…ต แ„แ…ฅแ†ฏแ„…แ…ฆแ†จแ„‰แ…งแ†ซ(Garbage Collection)|๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection)]], [[V8 Heap Architecture|V8 Heap Architecture]], [[แ„’แ…ตแ†ธ แ„‰แ…ณแ„‚แ…ขแ†ธแ„‰แ…ฃแ†บ(Heap Snapshot)|ํž™ ์Šค๋ƒ…์ƒท(Heap Snapshot)]], ํด๋กœ์ €(Closure) - **Projects/Contexts:** Node.js Memory Leaks in Production, [[แ„‡แ…ณแ„…แ…กแ„‹แ…ฎแ„Œแ…ฅ แ„†แ…ฆแ„†แ…ฉแ„…แ…ต แ„‚แ…ฎแ„‰แ…ฎ แ„แ…กแ†ทแ„Œแ…ต(Browser Memory Leak Detection)|Browser Memory Leak Detection]] - **Contradictions/Notes:** C/C++ ํ”„๋กœ๊ทธ๋žจ ๋“ฑ์— ์‚ฌ์šฉ๋˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ ์ง€์›์ด ์—†๋Š” ๋ณด์ˆ˜์ (Conservative) ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์˜ ๊ฒฝ์šฐ, ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์ผ๋ฐ˜ ์ •์ˆ˜ ๋ฐ์ดํ„ฐ๋กœ ์ธํ•ด ๊ฑฐ๋Œ€ํ•œ ๊ฐ์ฒด ์„œ๋ธŒ๊ทธ๋ž˜ํ”„๊ฐ€ ์œ ์ง€๋˜๋Š” ๋…ํŠนํ•œ ํ˜•ํƒœ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ์œ ๋ฐœํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์กด์žฌํ•œ๋‹ค๊ณ  ์†Œ์Šค์—์„œ ์ง€์ ํ•œ๋‹ค [32]. ๋˜ํ•œ ํ”„๋ก ํŠธ์—”๋“œ ์ตœ์‹  ๋„๊ตฌ์ธ `WeakRef`์™€ `FinalizationRegistry`๋ฅผ ์‚ฌ์šฉํ•ด ๋ˆ„์ˆ˜์— ๊ฐ•ํ•œ ํŒจํ„ด์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋Š” ์ž์ฒด ์ผ์ •์— ๋”ฐ๋ผ ์‹คํ–‰๋˜์–ด ๊ฒฐ์ •๋ก ์ ์ด์ง€ ์•Š์œผ๋ฏ€๋กœ ์ ์ ˆํ•œ ๊ฐ์ฒด ์ˆ˜๋ช… ์ฃผ๊ธฐ ๊ด€๋ฆฌ๋ฅผ ์™„๋ฒฝํžˆ ๋Œ€์ฒดํ•  ์ˆ˜๋Š” ์—†์Œ์— ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค [12]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leaks).md ---