--- id: P-REINFORCE-AUTO-56A451 category: "10_Wiki/๐Ÿ’ก Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Nodejs ํ”„๋กœ์„ธ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๋ถ„์„" --- # [[Nodejs แ„‘แ…ณแ„…แ…ฉแ„‰แ…ฆแ„‰แ…ณ แ„†แ…ฉแ„‚แ…ตแ„แ…ฅแ„…แ…ตแ†ผ แ„†แ…ตแ†พ แ„†แ…ฆแ„†แ…ฉแ„…แ…ต แ„‡แ…ฎแ†ซแ„‰แ…ฅแ†จ|Nodejs ํ”„๋กœ์„ธ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๋ถ„์„]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > Node.js๋Š” V8 ์—”์ง„ ์œ„์—์„œ ์‹คํ–‰๋˜๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ฃผ๋กœ ํž™(Heap)๊ณผ ์Šคํƒ(Stack)์œผ๋กœ ๋‚˜๋‰˜์–ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค [1, 2]. ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค๋กœ ์˜ค๋žซ๋™์•ˆ ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ ํŠน์„ฑ์ƒ, ์ฝ”๋“œ ์ƒ์˜ ์‹ค์ˆ˜๋กœ ํ•ด์ œ๋˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ ์ฐธ์กฐ๊ฐ€ ๋ˆ„์ ๋˜๋ฉด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ(GC)๊ฐ€ ์ด๋ฅผ ํšŒ์ˆ˜ํ•˜์ง€ ๋ชปํ•ด Out-Of-Memory(OOM) ํฌ๋ž˜์‹œ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2, 3]. ๋”ฐ๋ผ์„œ ์ง€์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ํ•จ๊ป˜, ํž™ ์Šค๋ƒ…์ƒท(Heap Snapshot)๊ณผ ํ• ๋‹น ํƒ€์ž„๋ผ์ธ(Allocation Timeline) ๋“ฑ์˜ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ˆ„์ˆ˜(Leak)์˜ ๊ทผ๋ณธ ์›์ธ์ด ๋˜๋Š” ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ์ฐพ์•„๋‚ด๋Š” ๋ถ„์„ ๊ณผ์ •์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [4-6]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) - **๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ ๋ฐ ์ž‘๋™ ์›๋ฆฌ** - V8 ์—”์ง„์˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” ํฌ๊ฒŒ ํž™(Heap)๊ณผ ์Šคํƒ(Stack)์œผ๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค [1, 2]. ์Šคํƒ์€ ์›์‹œ ๊ฐ’(Primitive values)๊ณผ ํž™ ๊ฐ์ฒด์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ, ๊ทธ๋ฆฌ๊ณ  ํ•จ์ˆ˜ ์‹คํ–‰ ํ”„๋ ˆ์ž„๊ณผ ๊ฐ™์€ ์ •์  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉฐ ์šด์˜ ์ฒด์ œ์— ์˜ํ•ด ๋น ๋ฅด๊ฒŒ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค [7-11]. - ํž™์€ ๊ฐ์ฒด์™€ ๋™์  ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ฐ€์žฅ ํฐ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋ฉฐ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ์ฃผ ๋Œ€์ƒ์ด ๋ฉ๋‹ˆ๋‹ค [12]. ํž™์€ ์ƒ์„ฑ ์ฃผ๊ธฐ์— ๋”ฐ๋ผ ์งง์€ ์ˆ˜๋ช…์˜ ๊ฐ์ฒด๊ฐ€ ๋จธ๋ฌด๋Š” New Space(์ Š์€ ์„ธ๋Œ€)์™€ ์˜ค๋ž˜ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ์Šน๊ฒฉ๋˜๋Š” Old Space(์˜ค๋ž˜๋œ ์„ธ๋Œ€) ๋“ฑ์œผ๋กœ ๋‚˜๋‰˜๋ฉฐ, ๊ฐ๊ฐ Scavenge(๋งˆ์ด๋„ˆ GC)์™€ Mark-Sweep-Compact(๋ฉ”์ด์ € GC) ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค [12-14]. - **ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐฉ๋ฒ•** - **์ฝ”๋“œ ๊ธฐ๋ฐ˜ ๋ชจ๋‹ˆํ„ฐ๋ง**: `process.memoryUsage()`๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ RSS(Resident Set Size), heapTotal(ํ• ๋‹น๋œ ํž™ ์ด๋Ÿ‰), heapUsed(์‚ฌ์šฉ ์ค‘์ธ ํž™), external(C++ ๋ฐ”์ธ๋”ฉ ๋“ฑ ์™ธ๋ถ€ ๋ฉ”๋ชจ๋ฆฌ) ๋“ฑ์œผ๋กœ ์ƒ์„ธํžˆ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [15]. - **ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ ๋ชจ๋‹ˆํ„ฐ๋ง**: `prom-client`๋ฅผ ์ด์šฉํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋ฉ”ํŠธ๋ฆญ์„ Prometheus์— ๋‚ด๋ณด๋‚ด๊ณ , Grafana ์•Œ๋ฆผ์„ ์„ค์ •ํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ OOM์œผ๋กœ ์ข…๋ฃŒ๋˜๊ธฐ ์ „์— ์„ ์ œ์ ์œผ๋กœ ๋ˆ„์ˆ˜๋ฅผ ํฌ์ฐฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [16]. - **GC ํ™œ๋™ ์ถ”์ **: `--trace-gc` ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ `perf_hooks`์˜ PerformanceObserver๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [17, 18]. ์ •์ƒ์ ์ธ ํ”„๋กœ์„ธ์Šค๋Š” ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ฆด ๋•Œ ํž™์ด ์ฆ๊ฐ€ํ–ˆ๋‹ค๊ฐ€ GC ์ดํ›„ ๋‹ค์‹œ ๊ธฐ์ค€์„ ์œผ๋กœ ๋Œ์•„์˜ค๋Š” 'ํ†ฑ๋‹ˆ๋ฐ”ํ€ด(sawtooth)' ํŒจํ„ด์„ ๋ณด์ด์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ธฐ์ค€์„ ์ด ๊ณ„์† ์ƒ์Šนํ•˜๋Š” '๋ž˜์นซ(ratchet)' ํŒจํ„ด์ด ๊ด€์ฐฐ๋ฉ๋‹ˆ๋‹ค [4, 19]. - **๋ฉ”๋ชจ๋ฆฌ ๋ถ„์„ ๋ฐ ๋ˆ„์ˆ˜ ํƒ์ง€ ๋„๊ตฌ** - **ํ• ๋‹น ํƒ€์ž„๋ผ์ธ (Allocation Timeline)**: Chrome DevTools์—์„œ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ์˜ ํ• ๋‹น์„ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [20, 21]. ๋ถ„์„ ํ™”๋ฉด์—์„œ ํ•ด์ œ๋˜์ง€ ์•Š๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ์—ฌ์ „ํžˆ ๋‚จ์•„์žˆ๋Š” ๊ฐ์ฒด๋Š” ํŒŒ๋ž€์ƒ‰ ๋ง‰๋Œ€๋กœ ํ‘œ์‹œ๋˜๋ฉฐ, ์ด ํŒŒ๋ž€์ƒ‰ ๋ง‰๋Œ€๋ฅผ ์กฐ์‚ฌํ•˜์—ฌ ๋ˆ„์ˆ˜ ํ›„๋ณด๋ฅผ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [22-24]. - **ํž™ ์Šค๋ƒ…์ƒท (Heap Snapshot)**: ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ๋ฅผ ํฌ์ฐฉํ•˜๋ฉฐ, ๋‘ ๊ฐœ ์ด์ƒ์˜ ์Šค๋ƒ…์ƒท์„ ์ฐ๊ณ  "๋น„๊ต(Comparison)" ๋ทฐ๋ฅผ ์ด์šฉํ•ด ๋‘ ์‹œ์  ์‚ฌ์ด์— ์ƒ์„ฑ๋˜์—ˆ์œผ๋‚˜ ์‚ญ์ œ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋“ค์„ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [25, 26]. ์ด ๋ทฐ๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ๊ฐ์ฒด ์ž์ฒด๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ์–•์€ ํฌ๊ธฐ(Shallow size)์™€, ๊ฐ์ฒด ์‚ญ์ œ ์‹œ ํšŒ์ˆ˜ ๊ฐ€๋Šฅํ•œ ๋ณด์กด ํฌ๊ธฐ(Retained size)๋ฅผ ํŒŒ์•…ํ•˜๊ณ , Retainers ํŠธ๋ฆฌ๋ฅผ ์ถ”์ ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ถ™์žก๊ณ  ์žˆ๋Š” ๋ฃจํŠธ ์›์ธ์„ ์ฐพ์•„๋ƒ…๋‹ˆ๋‹ค [27, 28]. - ํ”„๋กœ๋•์…˜ ์„œ๋ฒ„์™€ ๊ฐ™์ด UI๊ฐ€ ์—†๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” `heapdump` ํŒจํ‚ค์ง€๋ฅผ ํ†ตํ•ด ์Šค๋ƒ…์ƒท์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜, V8 ๋„ค์ดํ‹ฐ๋ธŒ ํ”„๋กœํŒŒ์ผ๋ง ๊ธฐ๋Šฅ์ธ `--heap-prof` ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ npm ํŒจํ‚ค์ง€ ์˜์กด์„ฑ ์—†์ด ํ• ๋‹น ๋‚ด์—ญ์„ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜์—ฌ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [16, 29]. - **์ฃผ์š” ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ํŒจํ„ด (Memory Leak Patterns)** - **์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ๋ˆ„์ **: ์š”์ฒญ ํ•ธ๋“ค๋Ÿฌ ๋‚ด์—์„œ `on('event', fn)`๊ณผ ๊ฐ™์€ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ง€์†์ ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๊ณ  ์ œ๊ฑฐํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. (Node.js์—์„œ ๋‹จ์ผ ์—๋ฏธํ„ฐ์— 10๊ฐœ ์ด์ƒ์˜ ๋ฆฌ์Šค๋„ˆ๊ฐ€ ๋“ฑ๋ก๋  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” `MaxListenersExceededWarning`์€ ํ”„๋กœ๋•์…˜ ๋ˆ„์ˆ˜๋ฅผ ํ™•์ •ํ•˜๋Š” ์ฃผ์š” ์‹ ํ˜ธ์ž…๋‹ˆ๋‹ค) [29]. - **ํด๋กœ์ € ๋ณ€์ˆ˜ ์œ ์ง€ (Closure Variable Retention)**: ์—ฌ๋Ÿฌ ํด๋กœ์ €๊ฐ€ ์Šค์ฝ”ํ”„๋ฅผ ๊ณต์œ ํ•  ๋•Œ, ์˜๋„์น˜ ์•Š๊ฒŒ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ(์˜ˆ: ์ „์ฒด ์š”์ฒญ/์‘๋‹ต ๊ฐ์ฒด)๊ฐ€ ์บก์ฒ˜๋œ ์ฑ„ ์š”์ฒญ ์ˆ˜๋ช…์ฃผ๊ธฐ๋ฅผ ์ดˆ๊ณผํ•ด ์œ ์ง€๋˜๋ฉด์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [30, 31]. - ๊ทธ ์™ธ ๋ฌด์ œํ•œ ์บ์‹œ(Unbounded Cache) ์ฆ๊ฐ€, `clearInterval`์ด ๋ˆ„๋ฝ๋œ ํƒ€์ด๋จธ ์ธํ„ฐ๋ฒŒ, ๋ณต์žกํ•œ ์ˆœํ™˜ ์ฐธ์กฐ(Circular References), `destroy()`๋‚˜ `cancel()` ํ˜ธ์ถœ ์—†์ด ๋ฐฉ์น˜๋œ ์ŠคํŠธ๋ฆผ(Stream)๊ณผ ์†Œ์ผ“ ๋“ฑ์ด ๋Œ€ํ‘œ์ ์ธ ์›์ธ์ž…๋‹ˆ๋‹ค [31, 32]. - **๋ช…๋ น์ค„ ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์šฉํ•œ ๋ฉ”๋ชจ๋ฆฌ ํŠœ๋‹ (Memory Tuning)** - `--max-old-space-size`: ์žฅ๊ธฐ ์ƒ์กด ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋˜๋Š” Old Space์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ๋ฉ”๊ฐ€๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์„ค์ •ํ•˜์—ฌ ๋ฌด๊ฑฐ์šด ์ž‘์—…์ด๋‚˜ ์„ธ์…˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค [33]. - `--max-semi-space-size`: New Space์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•˜์—ฌ ๋‹จ๊ธฐ ๊ฐ์ฒด์˜ ์žฆ์€ ์ƒ์„ฑ์œผ๋กœ ์ธํ•œ ๋งˆ์ด๋„ˆ GC ๋ฐœ์ƒ ๋นˆ๋„๋ฅผ ๋Šฆ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [34]. - `--expose-gc`: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ ๋‚ด์—์„œ `global.gc()`๋ฅผ ํ˜ธ์ถœํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค [35, 36]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[V8 แ„€แ…กแ„‡แ…ตแ„Œแ…ต แ„แ…ฅแ†ฏแ„…แ…ฆแ†จแ„‰แ…งแ†ซ(Garbage Collection)|V8 Garbage Collection]], [[Heap Snapshot|Heap Snapshot]], Memory Leak Patterns - **Projects/Contexts:** Node.js Production Environment, [[Chrome DevTools Memory Panel|Chrome DevTools Memory Panel]] - **Contradictions/Notes:** `--expose-gc` ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜๋™์œผ๋กœ GC๋ฅผ ์‹คํ–‰(`global.gc()`)ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๊ฒƒ์ด V8์˜ ์ผ๋ฐ˜์ ์ธ ์ž๋™ GC ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ˆ˜๋™ ํ˜ธ์ถœ์€ ๋ณด์กฐ์ ์ธ ์—ญํ• ์ผ ๋ฟ์ด๋ฉฐ, ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์˜คํžˆ๋ ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ์— ์‹ฌ๊ฐํ•œ ์•…์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [36]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/Node.js ํ”„๋กœ์„ธ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๋ถ„์„.md ---