--- id: P-REINFORCE-AUTO-EA5D5E 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 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์™€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC) ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ดํ•ดํ•˜๊ณ , ์ด๋ฅผ ์ตœ์ ํ™”ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [1, 2]. ๊ฐœ๋ฐœ์ž๋Š” `--max-old-space-size`์™€ ๊ฐ™์€ ์ปค๋งจ๋“œ๋ผ์ธ ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์šฉํ•ด ํž™(Heap) ๊ณต๊ฐ„์„ ์กฐ์ ˆํ•˜๊ฑฐ๋‚˜, `process.memoryUsage()`, ํž™ ์Šค๋ƒ…์ƒท ๋“ฑ์˜ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„ํšจ์œจ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐ ํ•ด์ œ๋˜์ง€ ์•Š์€ ์ฐธ์กฐ๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3-5]. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ฃผ๊ธฐ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ์˜ฌ๋ฐ”๋ฅธ ํŠœ๋‹์€ Out-Of-Memory(OOM) ์ถฉ๋Œ์„ ์˜ˆ๋ฐฉํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‘๋‹ต ์†๋„๋ฅผ ์ผ์ •ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๋ฐ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค [6, 7]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) * **V8 ์—”์ง„์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์™€ ์„ธ๋Œ€๋ณ„ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜** * V8์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์Šคํƒ(Stack)๊ณผ ํž™(Heap)์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค [8-10]. ์Šคํƒ์€ ์›์‹œ ๊ฐ’๊ณผ ํ•จ์ˆ˜ ํ˜ธ์ถœ ํ”„๋ ˆ์ž„์„ ์ €์žฅํ•˜๋ฉฐ, ํž™์€ ๋™์  ๋ฐ์ดํ„ฐ(๊ฐ์ฒด)๋ฅผ ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค [10-12]. * ํž™ ์˜์—ญ์€ ๊ฐ์ฒด์˜ ์ˆ˜๋ช…์— ๋”ฐ๋ผ 'New Space(Young Generation)'์™€ 'Old Space(Old Generation)'๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค [9, 13]. * **Minor GC (Scavenger):** ์งง์€ ์ˆ˜๋ช…์˜ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น๋˜๋Š” New Space๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด๋ฅผ ์ž์ฃผ, ๊ทธ๋ฆฌ๊ณ  ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค [9, 13, 14]. * **Major GC (Mark-Sweep-Compact):** Minor GC๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ƒ์กดํ•œ ๊ฐ์ฒด๋“ค์€ Old Space๋กœ ์ด๋™(Promotion)ํ•˜๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด์งˆ ๋•Œ Mark-Sweep ๋ฐ Mark-Compact ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ•˜๊ณ  ๋‹จํŽธํ™”๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค [13, 15-18]. * **๋ฉ”๋ชจ๋ฆฌ ํŠœ๋‹์„ ์œ„ํ•œ ์ปค๋งจ๋“œ๋ผ์ธ ํ”Œ๋ž˜๊ทธ** * `--max-old-space-size`: ์ˆ˜๋ช…์ด ๊ธด ๊ฐ์ฒด๋“ค์ด ์ €์žฅ๋˜๋Š” Old Space์˜ ์ตœ๋Œ€ ํ•œ๋„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์บ์‹œ๋‚˜ ๋Œ€๊ทœ๋ชจ ์„ธ์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ OOM ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ด ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5, 19]. * `--max-semi-space-size`: New Space์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค. ๊ณ ํŠธ๋ž˜ํ”ฝ API ์„œ๋ฒ„์ฒ˜๋Ÿผ ์ˆ˜๋ช…์ด ์งง์€ ์ž„์‹œ ๊ฐ์ฒด๊ฐ€ ๋Œ€๋Ÿ‰์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ํ™˜๊ฒฝ์—์„œ ์ด ๊ฐ’์„ ๋Š˜๋ฆฌ๋ฉด Minor GC ๋ฐœ์ƒ ๋นˆ๋„๋ฅผ ์ค„์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [19, 20]. * `--gc-interval`: GC ์ฃผ๊ธฐ๋ฅผ ๊ฐ•์ œ๋กœ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ๊ณผ๋„ํ•˜๊ฒŒ ๋‚ฎ์ถ”๋ฉด GC๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜์—ฌ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [20, 21]. * `--expose-gc`: ์ฝ”๋“œ ๋‚ด์—์„œ `global.gc()`๋ฅผ ํ†ตํ•ด ์ˆ˜๋™์œผ๋กœ GC๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ฃผ์ง€๋งŒ, ์žฆ์€ ํ˜ธ์ถœ์€ ์„ฑ๋Šฅ์— ์•…์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [21, 22]. * **๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๊ฐ์ง€ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ** * **`process.memoryUsage()`:** rss(Resident Set Size), heapTotal, heapUsed ๋“ฑ์˜ ์ˆ˜์น˜๋ฅผ ์ œ๊ณตํ•˜์—ฌ ํ˜„์žฌ Node.js ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ๋ฅผ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4, 23]. * **`--trace-gc` ๋กœ๊ทธ ์ถ”์ :** ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ ํ•ด๋‹น ํ”Œ๋ž˜๊ทธ๋ฅผ ์ œ๊ณตํ•˜๋ฉด, Scavenge๋‚˜ Mark-sweep ๊ฐ™์€ GC ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ๋ฉ”๋ชจ๋ฆฌ ๋ณ€ํ™”๋Ÿ‰, ์†Œ์š” ์‹œ๊ฐ„, ๋ฐœ์ƒ ์›์ธ(์˜ˆ: allocation failure) ๋“ฑ์˜ ์ƒ์„ธ ๋กœ๊ทธ๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค [24-27]. * **ํž™ ์Šค๋ƒ…์ƒท(Heap Snapshots):** Chrome DevTools๋‚˜ `heapdump` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ๋ฅผ ์บก์ฒ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๋“œ ํ…Œ์ŠคํŠธ ์ „ํ›„์˜ ์Šค๋ƒ…์ƒท์„ ๋น„๊ต(Comparison view)ํ•˜์—ฌ GC ์ดํ›„์—๋„ ํšŒ์ˆ˜๋˜์ง€ ์•Š๊ณ  ๋‚จ์•„ ์žˆ๋Š” ๊ฐ์ฒด(๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ํ›„๋ณด)๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3, 28-30]. * **Performance Hooks:** Node.js์˜ `perf_hooks` ๋ชจ๋“ˆ์—์„œ `PerformanceObserver`๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ GC ํ†ต๊ณ„๋ฅผ ์ถ”์ ํ•˜์—ฌ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ •๋ฐ€ํ•˜๊ฒŒ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [31]. * **์ฃผ์š” ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ํŒจํ„ด (Memory Leak Patterns)** * Node.js์—์„œ์˜ ๋ˆ„์ˆ˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์œ ์‹ค๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ GC ๋ฃจํŠธ๋กœ๋ถ€ํ„ฐ์˜ ์ฐธ์กฐ๊ฐ€ ๋ˆ์งˆ๊ธฐ๊ฒŒ ๋‚จ์•„์žˆ์–ด V8์ด ์ด๋ฅผ ํšŒ์ˆ˜ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ƒํƒœ๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค [32]. * ์ฃผ์š” ๋ˆ„์ˆ˜ ํŒจํ„ด์œผ๋กœ๋Š” ํ•ด์ œ๋˜์ง€ ์•Š์€ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ(`EventEmitter`), ๋ณ€์ˆ˜ ์ฐธ์กฐ๋ฅผ ์žƒ์ง€ ์•Š๋Š” ํด๋กœ์ €(Closures), ํฌ๊ธฐ ์ œํ•œ์ด ์—†๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ, ์ •๋ฆฌ๋˜์ง€ ์•Š์€ ํƒ€์ด๋จธ(`setInterval`), ์ œ๋Œ€๋กœ ๋‹ซํžˆ์ง€ ์•Š์€ ์ŠคํŠธ๋ฆผ๊ณผ ์†Œ์ผ“ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค [33-35]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[V8 แ„Œแ…กแ„‡แ…กแ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ธแ„แ…ณ แ„‹แ…ฆแ†ซแ„Œแ…ตแ†ซ|V8 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„]], ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC), [[แ„’แ…ตแ†ธ แ„‰แ…ณแ„‚แ…ขแ†ธแ„‰แ…ฃแ†บ(Heap Snapshot)|ํž™ ์Šค๋ƒ…์ƒท(Heap Snapshot)]], [[แ„†แ…ฆแ„†แ…ฉแ„…แ…ต แ„‚แ…ฎแ„‰แ…ฎ(Memory Leak)|๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leak)]] - **Projects/Contexts:** Orinoco GC ํ”„๋กœ์ ํŠธ, Chrome DevTools ๋ฉ”๋ชจ๋ฆฌ ๋ถ„์„ - **Contradictions/Notes:** - V8 ์—”์ง„์˜ ํฌ์ธํ„ฐ ์••์ถ•(Pointer Compression) ๊ธฐ๋Šฅ ํ™œ์„ฑํ™” ์‹œ, 64๋น„ํŠธ ์‹œ์Šคํ…œ์— 128GB์˜ RAM์ด ์žˆ๋”๋ผ๋„ ๋‹จ์ผ V8 ํ”„๋กœ์„ธ์Šค(Isolate)์˜ ๊ด€๋ฆฌ ํž™ ํฌ๊ธฐ๋Š” 4GB์˜ ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ์ผ€์ด์ง€(Cage)๋กœ ์—„๊ฒฉํ•˜๊ฒŒ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค [36-38]. ์ด ์ œํ•œ์— ๋„๋‹ฌํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด Major GC์˜ ๋นˆ๋„๊ฐ€ ๊ทน์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋ฉฐ, ๊ฒฐ๊ณผ์ ์œผ๋กœ OOM ์ถฉ๋Œ์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [38]. - ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ ๋‚ด์—์„œ `global.gc()`๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ง€์† ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์€ V8์˜ ์ž๋™ํ™”๋œ GC ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐฉํ•ดํ•˜๊ณ  ์„ฑ๋Šฅ์„ ๋–จ์–ด๋œจ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค [22, 39]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/Node.js ๋ฉ”๋ชจ๋ฆฌ ํŠœ๋‹.md ---