{"id":2647,"date":"2026-10-24T08:44:48","date_gmt":"2026-10-24T08:44:48","guid":{"rendered":"https:\/\/wayhope.kro.kr\/?p=2647"},"modified":"2026-10-24T08:44:48","modified_gmt":"2026-10-24T08:44:48","slug":"node-js-%ec%84%b1%eb%8a%a5%ea%b3%bc-%eb%b3%91%eb%a0%ac-%ec%b2%98%eb%a6%ac-%ec%9d%b4%eb%b2%a4%ed%8a%b8-%eb%a3%a8%ed%94%84%ec%99%80-%eb%a9%94%eb%aa%a8%eb%a6%ac-%ea%b4%80%eb%a6%ac","status":"publish","type":"post","link":"https:\/\/wayhope.kro.kr\/?p=2647","title":{"rendered":"Node.js \uc131\ub2a5\uacfc \ubcd1\ub82c \ucc98\ub9ac, \uc774\ubca4\ud2b8 \ub8e8\ud504\uc640 \uba54\ubaa8\ub9ac \uad00\ub9ac"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Node.js\ub294 JavaScript\ub97c \uae30\ubc18\uc73c\ub85c \uc11c\ubc84 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uac1c\ubc1c\ud560 \uc218 \uc788\ub294 \ub7f0\ud0c0\uc784\uc774\ub2e4. \ube44\ub3d9\uae30 I\/O \ucc98\ub9ac\uc5d0 \uac15\uc810\uc774 \uc788\uc73c\uba70, \uc801\uc740 \uc218\uc758 \uc2a4\ub808\ub4dc\ub85c\ub3c4 \ub2e4\uc218\uc758 \ub124\ud2b8\uc6cc\ud06c \uc5f0\uacb0\uc744 \ud6a8\uc728\uc801\uc73c\ub85c \ucc98\ub9ac\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud558\uc9c0\ub9cc Node.js\uac00 \ubaa8\ub4e0 \uc791\uc5c5\uc744 \uc790\ub3d9\uc73c\ub85c \ubcd1\ub82c \ucc98\ub9ac\ud558\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4. \uae30\ubcf8\uc801\uc73c\ub85c JavaScript \ucf54\ub4dc\ub294 \ud558\ub098\uc758 \uba54\uc778 \uc2a4\ub808\ub4dc\uc5d0\uc11c \uc2e4\ud589\ub418\uba70, CPU\ub97c \uc624\ub798 \uc0ac\uc6a9\ud558\ub294 \uc791\uc5c5\uc774 \uc2e4\ud589\ub418\uba74 \ub2e4\ub978 \uc694\uccad\uc758 \ucc98\ub9ac\uac00 \uc9c0\uc5f0\ub420 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c \uc548\uc815\uc801\uc778 \uac8c\uc784 \uc11c\ubc84\uc640 \ubc31\uc5d4\ub4dc \uc2dc\uc2a4\ud15c\uc744 \uac1c\ubc1c\ud558\ub824\uba74 \ub2e4\uc74c \uac1c\ub150\uc744 \uc774\ud574\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CPU \uc9d1\uc57d \uc791\uc5c5\uacfc I\/O \uc9d1\uc57d \uc791\uc5c5\uc758 \ucc28\uc774<\/li>\n\n\n\n<li>Worker Threads\ub97c \uc774\uc6a9\ud55c CPU \uc791\uc5c5\uc758 \ubcd1\ub82c \ucc98\ub9ac<\/li>\n\n\n\n<li>\ud504\ub85c\uc138\uc2a4 \ubd84\ub9ac\uc640 Cluster\ub97c \uc774\uc6a9\ud55c \uba40\ud2f0\ucf54\uc5b4 \ud65c\uc6a9<\/li>\n\n\n\n<li>\uc774\ubca4\ud2b8 \ub8e8\ud504 \uc9c0\uc5f0\uc758 \uc6d0\uc778\uacfc \uce21\uc815<\/li>\n\n\n\n<li>\uba54\ubaa8\ub9ac \ub204\uc218\uc640 Garbage Collection\uc758 \uad00\uacc4<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \uae00\uc5d0\uc11c\ub294 \uac01 \uac1c\ub150\uc758 \ub3d9\uc791 \uc6d0\ub9ac\uc640 \uc2e4\uc81c \uc11c\ubc84 \uc124\uacc4\uc5d0\uc11c\uc758 \ud65c\uc6a9 \ubc29\ubc95\uc744 \uc0b4\ud3b4\ubcf8\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">CPU \uc9d1\uc57d \uc791\uc5c5\uacfc I\/O \uc9d1\uc57d \uc791\uc5c5<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc11c\ubc84\uc5d0\uc11c \uc2e4\ud589\ub418\ub294 \uc791\uc5c5\uc740 \ud544\uc694\ud55c \uc790\uc6d0\uc5d0 \ub530\ub77c \ud06c\uac8c CPU \uc9d1\uc57d \uc791\uc5c5\uacfc I\/O \uc9d1\uc57d \uc791\uc5c5\uc73c\ub85c \uad6c\ubd84\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">CPU \uc9d1\uc57d \uc791\uc5c5 (CPU-bound)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">CPU \uc9d1\uc57d \uc791\uc5c5\uc740 \ub370\uc774\ud130\ub97c \uacc4\uc0b0\ud558\uac70\ub098 \ubcc0\ud658\ud558\ub294 \ub370 CPU \uc5f0\uc0b0 \uc790\uc6d0\uc744 \ub9ce\uc774 \uc0ac\uc6a9\ud558\ub294 \uc791\uc5c5\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\ud45c\uc801\uc778 \uc608\uc2dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ubcf5\uc7a1\ud55c \uc218\ud559 \uacc4\uc0b0<\/li>\n\n\n\n<li>\ub300\uaddc\ubaa8 \ub370\uc774\ud130 \uc815\ub82c \ubc0f \ud0d0\uc0c9<\/li>\n\n\n\n<li>\uc774\ubbf8\uc9c0 \ubc0f \uc601\uc0c1 \uc778\ucf54\ub529<\/li>\n\n\n\n<li>\uc555\ucd95\uacfc \uc555\ucd95 \ud574\uc81c<\/li>\n\n\n\n<li>\ub300\uaddc\ubaa8 \uc554\ud638\ud654 \ubc0f \ud574\uc2f1<\/li>\n\n\n\n<li>\ubb3c\ub9ac \uc2dc\ubbac\ub808\uc774\uc158<\/li>\n\n\n\n<li>\ubcf5\uc7a1\ud55c \uac8c\uc784 \ub85c\uc9c1 \uacc4\uc0b0<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ub2e4\uc74c \ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubcf4\uc790.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function calculate() {\n  let result = 0;\n\n  for (let i = 0; i &lt; 1_000_000_000; i++) {\n    result += Math.sqrt(i);\n  }\n\n  return result;\n}\n\nconsole.log(calculate());<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ucf54\ub4dc\ub294 \ubc18\ubcf5\ubb38\uc744 \ud1b5\ud574 \ub300\ub7c9\uc758 \uacc4\uc0b0\uc744 \uc218\ud589\ud55c\ub2e4. \uc2e4\ud589 \uc911\uc5d0\ub294 JavaScript \uba54\uc778 \uc2a4\ub808\ub4dc\uac00 \uacc4\uc0b0\uc5d0 \uc9d1\uc911\ud558\ubbc0\ub85c \ub2e4\ub978 JavaScript \ucf5c\ubc31\uc744 \ucc98\ub9ac\ud558\uae30 \uc5b4\ub835\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc11c\ubc84\uac00 \uc774 \uc791\uc5c5\uc744 \uc694\uccad \ucc98\ub9ac \uacfc\uc815\uc5d0\uc11c \uc2e4\ud589\ud558\uba74 \ub2e4\ub978 \uc0ac\uc6a9\uc790\uc758 HTTP \uc694\uccad\uc774\ub098 WebSocket \uba54\uc2dc\uc9c0 \ucc98\ub9ac\uae4c\uc9c0 \uc9c0\uc5f0\ub420 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\ud575\uc2ec\uc740 CPU \uc9d1\uc57d \uc791\uc5c5\uc758 \uc2e4\ud589 \uc2dc\uac04\uc774 \uae38\uc5b4\uc9c8\uc218\ub85d \uba54\uc778 \uc2a4\ub808\ub4dc\uac00 \ub2e4\ub978 \uc791\uc5c5\uc744 \ucc98\ub9ac\ud558\uc9c0 \ubabb\ud558\ub294 \uc2dc\uac04\uc774 \uc99d\uac00\ud55c\ub2e4\ub294 \uac83\uc774\ub2e4.<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">I\/O \uc9d1\uc57d \uc791\uc5c5 (I\/O-bound)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">I\/O \uc9d1\uc57d \uc791\uc5c5\uc740 CPU \uc5f0\uc0b0\ubcf4\ub2e4 \uc678\ubd80 \uc790\uc6d0\uc758 \uc751\ub2f5\uc744 \uae30\ub2e4\ub9ac\ub294 \uc2dc\uac04\uc774 \ud070 \uc791\uc5c5\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\ud45c\uc801\uc778 \uc608\uc2dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>MySQL \ucffc\ub9ac \uc2e4\ud589<\/li>\n\n\n\n<li>Redis \uc694\uccad<\/li>\n\n\n\n<li>\uc678\ubd80 API \ud638\ucd9c<\/li>\n\n\n\n<li>\ud30c\uc77c \uc77d\uae30 \ubc0f \uc4f0\uae30<\/li>\n\n\n\n<li>\ub124\ud2b8\uc6cc\ud06c \ud1b5\uc2e0<\/li>\n\n\n\n<li>\ud074\ub77c\uc774\uc5b8\ud2b8\uc758 \uc694\uccad \ub300\uae30<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ub2e4\uc74c \ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubcf4\uc790.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { setTimeout as delay } from \"node:timers\/promises\";\n\nasync function fetchUser() {\n  console.log(\"\uc0ac\uc6a9\uc790 \uc870\ud68c \uc2dc\uc791\");\n\n  await delay(1000);\n\n  console.log(\"\uc0ac\uc6a9\uc790 \uc870\ud68c \uc644\ub8cc\");\n}\n\nfetchUser();\nconsole.log(\"\ub2e4\ub978 \uc791\uc5c5 \uc2e4\ud589\");<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\ud589 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\uc0ac\uc6a9\uc790 \uc870\ud68c \uc2dc\uc791\n\ub2e4\ub978 \uc791\uc5c5 \uc2e4\ud589\n\uc0ac\uc6a9\uc790 \uc870\ud68c \uc644\ub8cc<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>await<\/code>\ub294 \ud604\uc7ac \ube44\ub3d9\uae30 \ud568\uc218\uc758 \uc2e4\ud589\uc744 \uc77c\uc2dc \uc911\ub2e8\ud558\uace0, \uc774\ud6c4 \ucf54\ub4dc\ub97c \uc774\uc5b4\uc11c \uc2e4\ud589\ud560 \uc218 \uc788\ub3c4\ub85d \ud55c\ub2e4. \uc774\ub54c \ub2e4\ub978 JavaScript \uc791\uc5c5\uc774 \uc2e4\ud589\ub420 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e8, \uc704 \uc608\uc81c\uc758 <code>delay()<\/code>\ub294 \uc2e4\uc81c \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub098 \ub124\ud2b8\uc6cc\ud06c I\/O\uac00 \uc544\ub2c8\ub77c \ud0c0\uc774\uba38\ub97c \uc774\uc6a9\ud55c \ub300\uae30 \uc608\uc81c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c Node.js\uc5d0\uc11c\ub294 \ub124\ud2b8\uc6cc\ud06c I\/O\ub97c \uc6b4\uc601\uccb4\uc81c\uc758 \ube44\ub3d9\uae30 \uae30\ub2a5 \ub4f1\uc73c\ub85c \ucc98\ub9ac\ud558\uba70, \uc77c\ubd80 \ud30c\uc77c \uc2dc\uc2a4\ud15c \uc791\uc5c5\uc774\ub098 \uc554\ud638\ud654 \uc791\uc5c5 \ub4f1\uc740 libuv\uc758 \uc2a4\ub808\ub4dc \ud480\uc744 \uc774\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">CPU-bound\uc640 I\/O-bound \ube44\uad50<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>\uad6c\ubd84<\/th><th>CPU-bound<\/th><th>I\/O-bound<\/th><\/tr><tr><td>\uc8fc\uc694 \ubcd1\ubaa9<\/td><td>CPU \uc5f0\uc0b0<\/td><td>\uc678\ubd80 \uc790\uc6d0 \uc751\ub2f5 \ub300\uae30<\/td><\/tr><tr><td>\ub300\ud45c \uc791\uc5c5<\/td><td>\uc2dc\ubbac\ub808\uc774\uc158, \uc555\ucd95, \uacc4\uc0b0<\/td><td>DB \uc870\ud68c, API \ud638\ucd9c<\/td><\/tr><tr><td>\ube44\ub3d9\uae30 \ucc98\ub9ac \ud6a8\uacfc<\/td><td>\uba54\uc778 \uc2a4\ub808\ub4dc \uc810\uc720 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uc9c0 \ubabb\ud568<\/td><td>\ub300\uae30 \uc2dc\uac04 \ub3d9\uc548 \ub2e4\ub978 \uc791\uc5c5 \ucc98\ub9ac \uac00\ub2a5<\/td><\/tr><tr><td>\uc8fc\uc694 \ucd5c\uc801\ud654<\/td><td>\uc54c\uace0\ub9ac\uc998 \uac1c\uc120, Worker Threads, \uc791\uc5c5 \ubd84\ub9ac<\/td><td>\ucee4\ub125\uc158 \ud480, \ube44\ub3d9\uae30 I\/O, \uce90\uc2f1, \ud0c0\uc784\uc544\uc6c3<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">I\/O \uc791\uc5c5\uc744 <code>async\/await<\/code>\ub85c \uc791\uc131\ud588\ub2e4\uace0 \ud574\uc11c CPU \uacc4\uc0b0\uae4c\uc9c0 \ubcd1\ub82c\ub85c \uc2e4\ud589\ub418\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async function processRequest() {\n  const data = await fetchData();\n\n  \/\/ \uc774 \uacc4\uc0b0\uc740 \uc5ec\uc804\ud788 \ud604\uc7ac JavaScript \uc2a4\ub808\ub4dc\uc5d0\uc11c \uc2e4\ud589\ub41c\ub2e4.\n  const result = expensiveCalculation(data);\n\n  return result;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>await<\/code>\ub294 \ube44\ub3d9\uae30 \uc791\uc5c5\uc758 \uc644\ub8cc\ub97c \uae30\ub2e4\ub9ac\ub294 \ubb38\ubc95\uc774\ub2e4. CPU \uc5f0\uc0b0\uc744 \ubcc4\ub3c4\uc758 \uc2a4\ub808\ub4dc\ub85c \uc774\ub3d9\uc2dc\ud0a4\ub294 \uae30\ub2a5\uc740 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Worker Threads<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Worker Threads\ub294 Node.js\uc5d0\uc11c \uc5ec\ub7ec JavaScript \uc2a4\ub808\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc791\uc5c5\uc744 \uc2e4\ud589\ud560 \uc218 \uc788\ub3c4\ub85d \uc81c\uacf5\ud558\ub294 \uae30\ub2a5\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc77c\ubc18\uc801\uc778 Node.js \ud504\ub85c\uadf8\ub7a8\uc5d0\uc11c\ub294 \uba54\uc778 \uc2a4\ub808\ub4dc\uac00 JavaScript \ucf54\ub4dc\ub97c \uc2e4\ud589\ud55c\ub2e4. CPU \uc9d1\uc57d \uc791\uc5c5\uc744 Worker Thread\ub85c \uc774\ub3d9\ud558\uba74 \uba54\uc778 \uc2a4\ub808\ub4dc\uac00 \uc694\uccad \ucc98\ub9ac\uc640 \ub124\ud2b8\uc6cc\ud06c \uc774\ubca4\ud2b8\ub97c \uacc4\uc18d \ucc98\ub9ac\ud558\uba74\uc11c \ubcc4\ub3c4\uc758 \uc2a4\ub808\ub4dc\uc5d0\uc11c \uacc4\uc0b0\uc744 \uc218\ud589\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Worker Threads\uac00 \ud544\uc694\ud55c \uc774\uc720<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\uc74c \ucf54\ub4dc\ub294 CPU \uc9d1\uc57d \uc791\uc5c5\uc744 \uba54\uc778 \uc2a4\ub808\ub4dc\uc5d0\uc11c \uc2e4\ud589\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function calculate(iterations) {\n  let result = 0;\n\n  for (let i = 0; i &lt; iterations; i++) {\n    result += Math.sqrt(i);\n  }\n\n  return result;\n}\n\nconsole.log(calculate(100_000_000));<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uacc4\uc0b0\uc774 \uc2e4\ud589\ub418\ub294 \ub3d9\uc548 \uc774\ubca4\ud2b8 \ub8e8\ud504\uc758 JavaScript \ucf5c\ubc31 \ucc98\ub9ac\uac00 \uc9c0\uc5f0\ub420 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub97c Worker Thread\ub85c \ubd84\ub9ac\ud558\uba74 CPU \uacc4\uc0b0\uc744 \ub2e4\ub978 \uc2a4\ub808\ub4dc\uc5d0\uc11c \uc218\ud589\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Worker Thread \uad6c\ud604<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uba3c\uc800 \uacc4\uc0b0\uc744 \uc218\ud589\ud560 <code>worker.js<\/code>\ub97c \uc791\uc131\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { parentPort, workerData } from \"node:worker_threads\";\n\nfunction calculate(iterations) {\n  let result = 0;\n\n  for (let i = 0; i &lt; iterations; i++) {\n    result += Math.sqrt(i);\n  }\n\n  return result;\n}\n\nconst result = calculate(workerData.iterations);\n\nparentPort.postMessage(result);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>workerData<\/code>\ub294 Worker\ub97c \uc0dd\uc131\ud560 \ub54c \uc804\ub2ec\ud55c \ucd08\uae30 \ub370\uc774\ud130\uc774\uba70, <code>parentPort.postMessage()<\/code>\ub294 \uba54\uc778 \uc2a4\ub808\ub4dc\uc5d0 \uacb0\uacfc\ub97c \uc804\ub2ec\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\uc74c\uc73c\ub85c \uba54\uc778 \uc2a4\ub808\ub4dc\uc5d0\uc11c Worker\ub97c \uc0dd\uc131\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { Worker } from \"node:worker_threads\";\n\nfunction runWorker(iterations) {\n  return new Promise((resolve, reject) =&gt; {\n    const worker = new Worker(\n      new URL(\".\/worker.js\", import.meta.url),\n      {\n        workerData: { iterations },\n      }\n    );\n\n    worker.once(\"message\", resolve);\n\n    worker.once(\"error\", reject);\n\n    worker.once(\"exit\", (code) =&gt; {\n      if (code !== 0) {\n        reject(new Error(`Worker \uc885\ub8cc \ucf54\ub4dc: ${code}`));\n      }\n    });\n  });\n}\n\nconst result = await runWorker(100_000_000);\n\nconsole.log(\"\uacc4\uc0b0 \uacb0\uacfc:\", result);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \uad6c\uc870\uc5d0\uc11c\ub294 \uba54\uc778 \uc2a4\ub808\ub4dc\uac00 \uacc4\uc0b0\uc744 \uc9c1\uc811 \uc218\ud589\ud558\uc9c0 \uc54a\ub294\ub2e4. Worker\uac00 \uacc4\uc0b0\uc744 \uc644\ub8cc\ud558\uba74 \uacb0\uacfc\ub97c \uba54\uc2dc\uc9c0\ub85c \uc804\ub2ec\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \uc6b4\uc601 \ucf54\ub4dc\uc5d0\uc11c\ub294 Worker\uc758 \uc624\ub958\uc640 \uc885\ub8cc \uc774\ubca4\ud2b8\ub97c \uc911\ubcf5 \ucc98\ub9ac\ud558\uc9c0 \uc54a\ub3c4\ub85d Promise \uc815\ucc29 \uc5ec\ubd80\ub97c \uad00\ub9ac\ud558\ub294 \uac83\uc774 \uc88b\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Worker Threads\uc758 \ub370\uc774\ud130 \uc804\ub2ec<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Worker\uc640 \uba54\uc778 \uc2a4\ub808\ub4dc\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \uc11c\ub85c \ub2e4\ub978 JavaScript \uc2e4\ud589 \ud658\uacbd\uc744 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc77c\ubc18 \uac1d\uccb4\ub098 \ubc30\uc5f4\uc744 <code>postMessage()<\/code>\ub85c \uc804\ub2ec\ud558\uba74 \ub370\uc774\ud130\uac00 \uad6c\uc870\ud654 \ubcf5\uc81c(Structured Clone)\ub420 \uc218 \uc788\ub2e4. \ud070 \ub370\uc774\ud130\ub97c \ubc18\ubcf5\uc801\uc73c\ub85c \uc804\ub2ec\ud558\uba74 \ubcf5\uc0ac \ube44\uc6a9\uc774 \ubc1c\uc0dd\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\uc6a9\ub7c9 \ubc14\uc774\ub108\ub9ac \ub370\uc774\ud130\ub294 <code>ArrayBuffer<\/code>\uc758 \uc18c\uc720\uad8c\uc744 \uc774\uc804\ud558\uac70\ub098 <code>SharedArrayBuffer<\/code>\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\ub3c4 \uc788\ub2e4. \ub2e4\ub9cc \uacf5\uc720 \uba54\ubaa8\ub9ac\ub97c \uc0ac\uc6a9\ud560 \ub54c\ub294 \ub3d9\uc2dc \uc811\uadfc\uacfc \ub3d9\uae30\ud654 \ubb38\uc81c\ub97c \uc9c1\uc811 \uace0\ub824\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Worker Threads\uc758 \uc8fc\uc758\uc810<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Worker Thread\ub97c \uc0dd\uc131\ud558\ub294 \ub370\ub3c4 \ube44\uc6a9\uc774 \ubc1c\uc0dd\ud55c\ub2e4. \uc694\uccad\ub9c8\ub2e4 Worker\ub97c \uc0c8\ub85c \uc0dd\uc131\ud558\uba74 \uc2a4\ub808\ub4dc \ucd08\uae30\ud654 \ube44\uc6a9\uacfc \uba54\ubaa8\ub9ac \uc0ac\uc6a9\ub7c9\uc774 \uc99d\uac00\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c \ubc18\ubcf5\uc801\uc73c\ub85c CPU \uc791\uc5c5\uc744 \ucc98\ub9ac\ud558\ub294 \uc11c\ubc84\uc5d0\uc11c\ub294 Worker Pool\uc744 \uad6c\uc131\ud558\ub294 \ubc29\ubc95\uc774 \uc77c\ubc18\uc801\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Worker Pool\uc740 \uc81c\ud55c\ub41c \uc218\uc758 Worker\ub97c \uc720\uc9c0\ud558\uace0, \uc791\uc5c5\uc744 \ud050\uc5d0 \ub123\uc5b4 \uc720\ud734 Worker\uc5d0 \ubc30\ubd84\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\uc791\uc5c5 \uc694\uccad\n   |\n   v\n\uc791\uc5c5 \ud050\n   |\n   +------&gt; Worker 1\n   +------&gt; Worker 2\n   +------&gt; Worker 3\n   +------&gt; Worker 4<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Worker \uc218\ub97c \ubb34\uc870\uac74 \ub298\ub9ac\ub294 \uac83\uc774 \uc88b\uc740 \uac83\uc740 \uc544\ub2c8\ub2e4. CPU \ucf54\uc5b4 \uc218, \uc791\uc5c5\uc758 \uc5f0\uc0b0\ub7c9, \uba54\ubaa8\ub9ac \uc0ac\uc6a9\ub7c9, \uba54\uc778 \uc2a4\ub808\ub4dc\uc758 \ubd80\ud558\ub97c \ud568\uaed8 \uace0\ub824\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Worker Threads\ub294 CPU \uc9d1\uc57d \uc791\uc5c5\uc744 \ubcd1\ub82c \uc2e4\ud589\ud558\uae30 \uc704\ud55c \uc218\ub2e8\uc774\uc9c0, \ubaa8\ub4e0 \ube44\ub3d9\uae30 \uc791\uc5c5\uc5d0 \uc801\uc6a9\ud574\uc57c \ud558\ub294 \uae30\ubcf8 \ub3c4\uad6c\ub294 \uc544\ub2c8\ub2e4.<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud504\ub85c\uc138\uc2a4 \ubd84\ub9ac\uc640 Cluster<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Worker Threads\uac00 \uc2a4\ub808\ub4dc \ub2e8\uc704\ub85c \uc2e4\ud589 \ud658\uacbd\uc744 \ubd84\ub9ac\ud55c\ub2e4\uba74, \ud504\ub85c\uc138\uc2a4 \ubd84\ub9ac\ub294 \ubcc4\ub3c4\uc758 \uc6b4\uc601\uccb4\uc81c \ud504\ub85c\uc138\uc2a4\uc5d0\uc11c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc2e4\ud589\ud558\ub294 \ubc29\uc2dd\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Node.js\uc758 Cluster \ubaa8\ub4c8\uc740 \uc5ec\ub7ec Node.js \ud504\ub85c\uc138\uc2a4\ub97c \uc2e4\ud589\ud558\uace0, \ud558\ub098\uc758 \uc11c\ubc84 \ud3ec\ud2b8\ub97c \uc5ec\ub7ec \ud504\ub85c\uc138\uc2a4\uac00 \uacf5\uc720\ud558\ub3c4\ub85d \uad6c\uc131\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud504\ub85c\uc138\uc2a4\uc640 \uc2a4\ub808\ub4dc\uc758 \ucc28\uc774<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>\uad6c\ubd84<\/th><th>Worker Threads<\/th><th>Cluster<\/th><\/tr><tr><td>\uc2e4\ud589 \ub2e8\uc704<\/td><td>\uc2a4\ub808\ub4dc<\/td><td>\ud504\ub85c\uc138\uc2a4<\/td><\/tr><tr><td>JavaScript \uc2e4\ud589 \ud658\uacbd<\/td><td>Worker\ub9c8\ub2e4 \ubd84\ub9ac<\/td><td>\ud504\ub85c\uc138\uc2a4\ub9c8\ub2e4 \ubd84\ub9ac<\/td><\/tr><tr><td>\uba54\ubaa8\ub9ac<\/td><td>\ud504\ub85c\uc138\uc2a4 \ub0b4 \uba54\ubaa8\ub9ac \uacf5\uac04 \uacf5\uc720 \uac00\ub2a5<\/td><td>\uae30\ubcf8\uc801\uc73c\ub85c \ub3c5\ub9bd\ub41c \uba54\ubaa8\ub9ac \uacf5\uac04<\/td><\/tr><tr><td>\ud1b5\uc2e0<\/td><td>\uba54\uc2dc\uc9c0, \uacf5\uc720 \uba54\ubaa8\ub9ac<\/td><td>IPC \uba54\uc2dc\uc9c0 \ub4f1<\/td><\/tr><tr><td>\uc8fc\uc694 \ubaa9\uc801<\/td><td>CPU \uc791\uc5c5 \ubcd1\ub82c \ucc98\ub9ac<\/td><td>\uc11c\ubc84 \uc694\uccad \ucc98\ub9ac\uc758 \uba40\ud2f0\ud504\ub85c\uc138\uc2a4\ud654<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\ud504\ub85c\uc138\uc2a4\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \ub3c5\ub9bd\ub41c \uba54\ubaa8\ub9ac \uacf5\uac04\uc744 \uc0ac\uc6a9\ud558\ubbc0\ub85c \ud55c \ud504\ub85c\uc138\uc2a4\uc758 JavaScript \ud799\uc774 \ub2e4\ub978 \ud504\ub85c\uc138\uc2a4\uc758 \ud799\uacfc \uc9c1\uc811 \uacf5\uc720\ub418\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub7ec\ud55c \ubd84\ub9ac\ub294 \uc7a5\uc560 \uaca9\ub9ac\uc5d0 \ub3c4\uc6c0\uc774 \ub418\uc9c0\ub9cc, \ud504\ub85c\uc138\uc2a4 \uac04 \ud1b5\uc2e0\uacfc \ub370\uc774\ud130 \ub3d9\uae30\ud654 \ube44\uc6a9\uc774 \ubc1c\uc0dd\ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cluster\uc758 \uae30\ubcf8 \uad6c\uc870<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uc77c\ubc18\uc801\uc778 Cluster \uad6c\uc131\uc740 Primary \ud504\ub85c\uc138\uc2a4\uc640 Worker \ud504\ub85c\uc138\uc2a4\ub85c \ub098\ub25c\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Primary:<\/strong> Worker \ud504\ub85c\uc138\uc2a4\ub97c \uc0dd\uc131\ud558\uace0 \uad00\ub9ac\ud55c\ub2e4.<\/li>\n\n\n\n<li><strong>Worker:<\/strong> \uc2e4\uc81c \uc11c\ubc84 \ub85c\uc9c1\uc744 \uc2e4\ud589\ud558\uace0 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc694\uccad\uc744 \ucc98\ub9ac\ud55c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\"> <code>               Primary Process\n                       |\n          +------------+------------+\n          |            |            |\n          v            v            v\n       Worker 1     Worker 2     Worker 3\n          |            |            |\n          v            v            v\n       HTTP \uc694\uccad     HTTP \uc694\uccad     HTTP \uc694\uccad<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\ub7ec Worker\uac00 \uc694\uccad\uc744 \ucc98\ub9ac\ud558\uba74 \ud558\ub098\uc758 JavaScript \uc2a4\ub808\ub4dc\ub9cc \uc0ac\uc6a9\ud558\ub294 \uc11c\ubc84\ubcf4\ub2e4 \uc5ec\ub7ec CPU \ucf54\uc5b4\ub97c \ud65c\uc6a9\ud558\uae30 \uc26c\uc6cc\uc9c4\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cluster \uad6c\ud604 \uc608\uc81c<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>server.js<\/code>\ub97c \uc791\uc131\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import cluster from \"node:cluster\";\nimport { availableParallelism } from \"node:os\";\nimport { createServer } from \"node:http\";\n\nif (cluster.isPrimary) {\n  const workerCount = availableParallelism();\n\n  console.log(`Primary PID: ${process.pid}`);\n\n  for (let i = 0; i &lt; workerCount; i++) {\n    cluster.fork();\n  }\n\n  cluster.on(\"exit\", (worker, code, signal) =&gt; {\n    console.log(\n      `Worker \uc885\ub8cc: PID=${worker.process.pid}, ` +\n      `code=${code}, signal=${signal}`\n    );\n\n    \/\/ \uc6b4\uc601 \ud658\uacbd\uc5d0\uc11c\ub294 \uc7ac\uc2dc\uc791 \ud69f\uc218\uc640 \uac04\uaca9\uc744 \uc81c\ud55c\ud574\uc57c \ud55c\ub2e4.\n  });\n} else {\n  const server = createServer((req, res) =&gt; {\n    res.writeHead(200, {\n      \"Content-Type\": \"application\/json; charset=utf-8\",\n    });\n\n    res.end(\n      JSON.stringify({\n        pid: process.pid,\n        message: \"Hello from Node.js Cluster\",\n      })\n    );\n  });\n\n  server.listen(3000, () =&gt; {\n    console.log(`Worker ${process.pid} listening on port 3000`);\n  });\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\ud589\ud558\uba74 Primary \ud504\ub85c\uc138\uc2a4\uac00 \uc5ec\ub7ec Worker\ub97c \uc0dd\uc131\ud55c\ub2e4. \uac01 Worker\ub294 \uac19\uc740 \ud3ec\ud2b8\uc5d0\uc11c \uc11c\ubc84\ub97c \uc2e4\ud589\ud558\uace0, Cluster\uc758 \uc5f0\uacb0 \ubd84\ubc30 \uba54\ucee4\ub2c8\uc998\uc5d0 \ub530\ub77c \uc694\uccad\uc744 \ucc98\ub9ac\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\ub9cc \uc5f0\uacb0 \ubd84\ubc30 \ubc29\uc2dd\uc740 \uc6b4\uc601\uccb4\uc81c\uc640 \uad6c\uc131\uc5d0 \uc601\ud5a5\uc744 \ubc1b\ub294\ub2e4. Cluster\ub97c \uc0ac\uc6a9\ud55c\ub2e4\uace0 \uc694\uccad\uc774 \ud56d\uc0c1 \uc644\ubcbd\ud558\uac8c \uade0\ub4f1 \ubd84\ubc30\ub418\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub610\ud55c \uc704 \uc608\uc81c\ub294 \uae30\ubcf8\uc801\uc778 \uad6c\uc870\ub97c \uc124\uba85\ud558\uae30 \uc704\ud55c \ucf54\ub4dc\ub2e4. \uc6b4\uc601 \ud658\uacbd\uc5d0\uc11c\ub294 Worker \uc7ac\uc2dc\uc791 \ud69f\uc218 \uc81c\ud55c, \ube44\uc815\uc0c1 \uc885\ub8cc \ub300\uc751, \uc885\ub8cc \uc2e0\ud638 \ucc98\ub9ac, \ub85c\uadf8 \uad00\ub9ac \ub4f1\uc774 \ucd94\uac00\ub418\uc5b4\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cluster\ub97c \uc0ac\uc6a9\ud560 \ub54c \uc8fc\uc758\ud560 \uc810<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uac01 Worker\uc758 \uba54\ubaa8\ub9ac\ub294 \ub3c5\ub9bd\uc801\uc774\ub2e4. \ub530\ub77c\uc11c \ud55c Worker\uc758 \uc77c\ubc18 \uac1d\uccb4\uc5d0 \uc800\uc7a5\ud55c \ub370\uc774\ud130\ub294 \ub2e4\ub978 Worker\uc5d0\uc11c \uc790\ub3d9\uc73c\ub85c \uacf5\uc720\ub418\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ub2e4\uc74c\uacfc \uac19\uc740 \ucf54\ub4dc\ub294 \ubb38\uc81c\uac00 \ub420 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const sessions = new Map();\n\nsessions.set(\"user-1\", {\n  nickname: \"Player\",\n});<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Worker 1\uc5d0\uc11c \uc800\uc7a5\ud55c \uc138\uc158\uc740 Worker 2\uc758 <code>sessions<\/code>\uc5d0 \uc790\ub3d9\uc73c\ub85c \ub098\ud0c0\ub098\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\ub7ec \ud504\ub85c\uc138\uc2a4\uc5d0\uc11c \uacf5\uc720\ud574\uc57c \ud558\ub294 \ub370\uc774\ud130\ub294 Redis\ub098 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uac19\uc740 \uc678\ubd80 \uc800\uc7a5\uc18c\ub97c \uc0ac\uc6a9\ud558\uac70\ub098, \ubcc4\ub3c4\uc758 \uacf5\uc720 \uc11c\ube44\uc2a4\ub85c \ubd84\ub9ac\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud2b9\ud788 \uac8c\uc784 \uc11c\ubc84\uc5d0\uc11c \ub9e4\uce58 \uc0c1\ud0dc, \uc0ac\uc6a9\uc790 \uc138\uc158, \uc7ac\ud654, \uc778\uc99d \uc815\ubcf4\ub97c \ub2e8\uc21c\ud55c \ud504\ub85c\uc138\uc2a4 \ub0b4\ubd80 \uba54\ubaa8\ub9ac\uc5d0\ub9cc \ubcf4\uad00\ud558\uba74 \ud504\ub85c\uc138\uc2a4 \uac04 \ub370\uc774\ud130 \ubd88\uc77c\uce58\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cluster\uc640 \uc678\ubd80 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Cluster\ub294 \ud558\ub098\uc758 \uba38\uc2e0 \ub0b4\ubd80\uc5d0\uc11c \uc5ec\ub7ec Node.js \ud504\ub85c\uc138\uc2a4\ub97c \uc2e4\ud589\ud558\ub294 \ub370 \uc720\uc6a9\ud558\ub2e4. \ud558\uc9c0\ub9cc \uc11c\ubc84 \uc5ec\ub7ec \ub300\uc5d0 \uac78\uce5c \ud655\uc7a5, \ubc30\ud3ec, \uc7a5\uc560 \ubcf5\uad6c\uae4c\uc9c0 \uc804\ubd80 \ud574\uacb0\ud558\uc9c0\ub294 \uc54a\ub294\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc11c\ubc84\ub97c \uc5ec\ub7ec \ub300 \uc6b4\uc601\ud558\ub294 \ud658\uacbd\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uad6c\uc131\uc744 \uace0\ub824\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> <code>            Load Balancer\n                    |\n          +---------+---------+\n          |                   |\n          v                   v\n       Server A             Server B\n          |                   |\n      Node.js Worker      Node.js Worker\n          |                   |\n          +---------+---------+\n                    |\n              Redis \/ MySQL<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc6b4\uc601 \ud658\uacbd\uc5d0 \ub530\ub77c Cluster \ub300\uc2e0 \ucee8\ud14c\uc774\ub108\ub97c \uc5ec\ub7ec \uac1c \uc2e4\ud589\ud558\uace0, \ub85c\ub4dc \ubc38\ub7f0\uc11c\ub098 Kubernetes\ub85c \ud655\uc7a5\uacfc \uc7ac\uc2dc\uc791\uc744 \uad00\ub9ac\ud560 \uc218\ub3c4 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud575\uc2ec\uc740 Cluster\uac00 \uba40\ud2f0\ud504\ub85c\uc138\uc2a4 \uc2e4\ud589 \uae30\ub2a5\uc774\uace0, Kubernetes \uac19\uc740 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130\ub294 \uc5ec\ub7ec \ucee8\ud14c\uc774\ub108\uc640 \uba38\uc2e0\uc758 \ubc30\ud3ec \ubc0f \uc6b4\uc601\uc744 \uad00\ub9ac\ud558\ub294 \uc2dc\uc2a4\ud15c\uc774\ub77c\ub294 \uc810\uc774\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\uc774\ubca4\ud2b8 \ub8e8\ud504 \uc9c0\uc5f0 (Event Loop Lag)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Node.js\uc758 \uc774\ubca4\ud2b8 \ub8e8\ud504\ub294 \ud0c0\uc774\uba38, \ub124\ud2b8\uc6cc\ud06c I\/O \ub4f1\uc5d0\uc11c \ubc1c\uc0dd\ud55c \uc774\ubca4\ud2b8\uc640 \ucf5c\ubc31\uc744 \uc801\uc808\ud55c \uc2dc\uc810\uc5d0 \ucc98\ub9ac\ud558\ub3c4\ub85d \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Node.js\ub294 \ube44\ub3d9\uae30 I\/O\ub97c \ud65c\uc6a9\ud574 \ub9ce\uc740 \uc5f0\uacb0\uc744 \ud6a8\uc728\uc801\uc73c\ub85c \ucc98\ub9ac\ud558\uc9c0\ub9cc, JavaScript \uba54\uc778 \uc2a4\ub808\ub4dc\uc5d0\uc11c \uae34 \uc791\uc5c5\uc744 \uc2e4\ud589\ud558\uba74 \uc774\ubca4\ud2b8 \ub8e8\ud504\uac00 \ub2e4\ub978 \ucf5c\ubc31\uc744 \uc81c\ub54c \ucc98\ub9ac\ud558\uc9c0 \ubabb\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub54c \ubc1c\uc0dd\ud558\ub294 \uc9c0\uc5f0\uc744 \uc774\ubca4\ud2b8 \ub8e8\ud504 \uc9c0\uc5f0\uc774\ub77c\uace0 \ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uc774\ubca4\ud2b8 \ub8e8\ud504 \uc9c0\uc5f0\uc774 \ubc1c\uc0dd\ud558\ub294 \uc774\uc720<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\ud45c\uc801\uc778 \uc6d0\uc778\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\uc624\ub798 \uc2e4\ud589\ub418\ub294 \ub3d9\uae30\uc2dd \ubc18\ubcf5\ubb38<\/li>\n\n\n\n<li>\ubcf5\uc7a1\ud55c JSON \uc9c1\ub82c\ud654 \ubc0f \uc5ed\uc9c1\ub82c\ud654<\/li>\n\n\n\n<li>\ub300\uaddc\ubaa8 \ub370\uc774\ud130\uc758 \ub3d9\uae30\uc2dd \ucc98\ub9ac<\/li>\n\n\n\n<li>\ube44\ud6a8\uc728\uc801\uc778 \uc54c\uace0\ub9ac\uc998<\/li>\n\n\n\n<li>\ub3d9\uae30\uc2dd \ud30c\uc77c \uc2dc\uc2a4\ud15c API \uc0ac\uc6a9<\/li>\n\n\n\n<li>\uc9c0\ub098\uce58\uac8c \ub9ce\uc740 \ucf5c\ubc31 \ucc98\ub9ac<\/li>\n\n\n\n<li>\uacfc\ub3c4\ud55c Garbage Collection\uc73c\ub85c \uc778\ud55c \uc77c\uc2dc \uc815\uc9c0<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \uc2e4\uc2dc\uac04 \uac8c\uc784 \uc11c\ubc84\uc5d0\uc11c \ud55c \ubc88\uc758 \uba54\uc2dc\uc9c0 \ucc98\ub9ac\uc5d0 200ms\uac00 \uc18c\uc694\ub41c\ub2e4\uace0 \uac00\uc815\ud558\uc790.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function handleMessage(message) {\n  \/\/ \ubcf5\uc7a1\ud55c \ub3d9\uae30 \uacc4\uc0b0\n  expensiveCalculation(message);\n\n  \/\/ \uac8c\uc784 \uc0c1\ud0dc \uac31\uc2e0\n  updateGameState(message);\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \uc791\uc5c5\uc774 \uba54\uc778 \uc2a4\ub808\ub4dc\ub97c 200ms \ub3d9\uc548 \uc810\uc720\ud55c\ub2e4\uba74, \ud574\ub2f9 \uc2dc\uac04 \ub3d9\uc548 \uac19\uc740 \uc2a4\ub808\ub4dc\uc5d0\uc11c \ucc98\ub9ac\ud574\uc57c \ud558\ub294 \ub2e4\ub978 JavaScript \ucf5c\ubc31\ub3c4 \uc9c0\uc5f0\ub420 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc2dc\uac04 \uac8c\uc784\uc5d0\uc11c\ub294 \uc774\ub7ec\ud55c \uc9c0\uc5f0\uc774 \uc785\ub825 \ubc18\uc751 \uc18d\ub3c4 \uc800\ud558, \uc0c1\ud0dc \ub3d9\uae30\ud654 \uc9c0\uc5f0, \uc694\uccad \ud0c0\uc784\uc544\uc6c3 \ub4f1\uc73c\ub85c \uc774\uc5b4\uc9c8 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uc774\ubca4\ud2b8 \ub8e8\ud504 \uc9c0\uc5f0 \uce21\uc815<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Node.js\ub294 <code>perf_hooks<\/code> \ubaa8\ub4c8\uc758 <code>monitorEventLoopDelay()<\/code>\ub97c \uc774\uc6a9\ud574 \uc774\ubca4\ud2b8 \ub8e8\ud504 \uc9c0\uc5f0\uc744 \uce21\uc815\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import {\n  monitorEventLoopDelay,\n} from \"node:perf_hooks\";\n\nconst histogram = monitorEventLoopDelay({\n  resolution: 20,\n});\n\nhistogram.enable();\n\nsetInterval(() =&gt; {\n  console.log({\n    minMs: histogram.min \/ 1e6,\n    maxMs: histogram.max \/ 1e6,\n    meanMs: histogram.mean \/ 1e6,\n    p99Ms: histogram.percentile(99) \/ 1e6,\n  });\n\n  histogram.reset();\n}, 5000);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uce21\uc815\uac12\uc740 \ub098\ub178\ucd08 \ub2e8\uc704\uc774\ubbc0\ub85c \ubc00\ub9ac\ucd08\ub85c \ubcc0\ud658\ud558\uae30 \uc704\ud574 (10^6)\uc73c\ub85c \ub098\ub208\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>min<\/code>: \uce21\uc815 \uad6c\uac04\uc5d0\uc11c \uad00\uce21\ub41c \ucd5c\uc18c \uc9c0\uc5f0<\/li>\n\n\n\n<li><code>max<\/code>: \uce21\uc815 \uad6c\uac04\uc5d0\uc11c \uad00\uce21\ub41c \ucd5c\ub300 \uc9c0\uc5f0<\/li>\n\n\n\n<li><code>mean<\/code>: \ud3c9\uade0 \uc9c0\uc5f0<\/li>\n\n\n\n<li><code>p99<\/code>: \uad00\uce21\ub41c \uc9c0\uc5f0 \ubd84\ud3ec\uc758 99\ubc31\ubd84\uc704\uc218<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \uac12\ub4e4\uc740 \uc774\ubca4\ud2b8 \ub8e8\ud504\uac00 \uc5bc\ub9c8\ub098 \uc9c0\uc5f0\ub418\ub294\uc9c0 \ud30c\uc545\ud558\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub41c\ub2e4. \ub2e8, <code>p99<\/code>\ub294 \uc694\uccad \uc751\ub2f5 \uc2dc\uac04\uc758 99\ubc31\ubd84\uc704\uc218\uc640 \ub2e4\ub978 \uc9c0\ud45c\ub2e4. \uc774\ubca4\ud2b8 \ub8e8\ud504 \uc9c0\uc5f0\uc774 \ub0ae\ub354\ub77c\ub3c4 DB \uc751\ub2f5\uc774\ub098 \ub124\ud2b8\uc6cc\ud06c \ub300\uae30\ub85c \uc778\ud574 \uc694\uccad \uc751\ub2f5 \uc2dc\uac04\uc774 \uae38\uc5b4\uc9c8 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uc774\ubca4\ud2b8 \ub8e8\ud504 \uc9c0\uc5f0\uc744 \uc904\uc774\ub294 \ubc29\ubc95<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\uc54c\uace0\ub9ac\uc998 \ucd5c\uc801\ud654<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ubd88\ud544\uc694\ud55c \ubc18\ubcf5\uc774\ub098 \uc911\ubcf5 \uacc4\uc0b0\uc744 \uc81c\uac70\ud558\uace0 \uc801\uc808\ud55c \uc790\ub8cc\uad6c\uc870\ub97c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>CPU \uc791\uc5c5 \ubd84\ub9ac<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5f0\uc0b0\ub7c9\uc774 \ub9ce\uc740 \uc791\uc5c5\uc740 Worker Threads \ub610\ub294 \ubcc4\ub3c4\uc758 \uc791\uc5c5 \ucc98\ub9ac \uc11c\ube44\uc2a4\ub85c \uc774\ub3d9\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\ub3d9\uae30\uc2dd API \ucd5c\uc18c\ud654<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc11c\ubc84 \uc694\uccad \uacbd\ub85c\uc5d0\uc11c\ub294 \ub300\uaddc\ubaa8 \ud30c\uc77c \ucc98\ub9ac \ub4f1 \uc624\ub798 \uac78\ub9ac\ub294 \ub3d9\uae30\uc2dd \uc791\uc5c5\uc744 \ud53c\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\uc791\uc5c5 \ubd84\ud560<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud558\ub098\uc758 \ud070 \uc791\uc5c5\uc744 \uc791\uc740 \ub2e8\uc704\ub85c \ub098\ub204\uc5b4 \uc5ec\ub7ec \uc774\ubca4\ud2b8 \ub8e8\ud504 \ud134\uc5d0 \uac78\uccd0 \ucc98\ub9ac\ud560 \uc218 \uc788\ub2e4. \ub2e4\ub9cc \uc791\uc5c5 \ubd84\ud560\uc740 \uc9c0\uc5f0\uc744 \uc644\ud654\ud558\ub294 \ubc29\ubc95\uc774\uc9c0, \uc2e4\uc81c CPU \ubcd1\ub82c \uc2e4\ud589\uc744 \ubcf4\uc7a5\ud558\ub294 \ubc29\ubc95\uc740 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\ubaa8\ub2c8\ud130\ub9c1<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ubca4\ud2b8 \ub8e8\ud504 \uc9c0\uc5f0\ubfd0 \uc544\ub2c8\ub77c CPU \uc0ac\uc6a9\ub960, \uba54\ubaa8\ub9ac, GC \uc2dc\uac04, \uc694\uccad \uc751\ub2f5 \uc2dc\uac04\ub3c4 \ud568\uaed8 \uce21\uc815\ud55c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\uba54\ubaa8\ub9ac \ub204\uc218\uc640 Garbage Collection<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Node.js\ub294 V8 JavaScript \uc5d4\uc9c4\uc744 \uae30\ubc18\uc73c\ub85c \ub3d9\uc791\ud558\uba70, \ub354 \uc774\uc0c1 \uc0ac\uc6a9\ub418\uc9c0 \uc54a\ub294 \uba54\ubaa8\ub9ac\ub97c \uc790\ub3d9\uc73c\ub85c \ud68c\uc218\ud558\uae30 \uc704\ud574 Garbage Collection(GC)\uc744 \uc218\ud589\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud558\uc9c0\ub9cc GC\uac00 \uc874\uc7ac\ud55c\ub2e4\uace0 \ud574\uc11c \uba54\ubaa8\ub9ac \ub204\uc218\uac00 \uc790\ub3d9\uc73c\ub85c \ud574\uacb0\ub418\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Garbage Collection\uc758 \uae30\ubcf8 \uc6d0\ub9ac<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">JavaScript\uc5d0\uc11c\ub294 \uac1d\uccb4\ub97c \uc9c1\uc811 \ud574\uc81c\ud558\ub294 \ub300\uc2e0 \uac1d\uccb4\uac00 \ub354 \uc774\uc0c1 \ub3c4\ub2ec \uac00\ub2a5\ud558\uc9c0 \uc54a\uc744 \ub54c GC\uac00 \ud574\ub2f9 \uba54\ubaa8\ub9ac\ub97c \ud68c\uc218\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ub2e4\uc74c \ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubcf4\uc790.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function createUser() {\n  const user = {\n    id: \"user-1\",\n    nickname: \"Player\",\n  };\n\n  return user;\n}\n\nlet currentUser = createUser();\n\ncurrentUser = null;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>currentUser<\/code>\uac00 \uac1d\uccb4\ub97c \ub354 \uc774\uc0c1 \ucc38\uc870\ud558\uc9c0 \uc54a\uac8c \ub418\uba74 \ud574\ub2f9 \uac1d\uccb4\ub294 \ub2e4\ub978 \uacf3\uc5d0\uc11c \ucc38\uc870\ub418\uc9c0 \uc54a\ub294\ub2e4\ub294 \uc804\uc81c\ud558\uc5d0 GC\uc758 \ud68c\uc218 \ub300\uc0c1\uc774 \ub420 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \ud68c\uc218 \uc2dc\uc810\uc740 GC\uac00 \uacb0\uc815\ud558\ubbc0\ub85c <code>currentUser = null<\/code>\uc744 \uc2e4\ud589\ud588\ub2e4\uace0 \ud574\uc11c \uc989\uc2dc \uba54\ubaa8\ub9ac\uac00 \ud574\uc81c\ub418\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">V8\uc740 \ub3c4\ub2ec \uac00\ub2a5\uc131\uc744 \uc911\uc2ec\uc73c\ub85c \uac1d\uccb4\ub97c \ucd94\uc801\ud558\uba70, \uc138\ub300\ubcc4 \uc218\uc9d1\uacfc \uc5ec\ub7ec GC \ucd5c\uc801\ud654 \uae30\ubc95\uc744 \uc0ac\uc6a9\ud55c\ub2e4. \uc77c\ubd80 GC \uc791\uc5c5\uc740 \ubcd1\ub82c \ub610\ub294 \ub3d9\uc2dc \uc2e4\ud589\ub420 \uc218 \uc788\uc9c0\ub9cc, \ud2b9\uc815 \ub2e8\uacc4\uc5d0\uc11c\ub294 JavaScript \uc2e4\ud589\uc774 \uc77c\uc2dc\uc801\uc73c\ub85c \uba48\ucd9c \uc218\ub3c4 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uba54\ubaa8\ub9ac \ub204\uc218\ub780?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uba54\ubaa8\ub9ac \ub204\uc218\ub294 \ub354 \uc774\uc0c1 \ud544\uc694\ud558\uc9c0 \uc54a\uc740 \uac1d\uccb4\uac00 \ucc38\uc870 \uad00\uacc4 \ub54c\ubb38\uc5d0 \uacc4\uc18d \uba54\ubaa8\ub9ac\uc5d0 \ub0a8\uc544 \uc788\ub294 \ud604\uc0c1\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\uc74c\uc740 \uc804\uc5ed \ubc30\uc5f4\uc5d0 \uc694\uccad \ub370\uc774\ud130\ub97c \uacc4\uc18d \ucd94\uac00\ud558\ub294 \uc608\uc81c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const requestHistory = &#91;];\n\nfunction handleRequest(req) {\n  requestHistory.push({\n    url: req.url,\n    timestamp: Date.now(),\n  });\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc694\uccad\uc774 \ub4e4\uc5b4\uc62c \ub54c\ub9c8\ub2e4 \uac1d\uccb4\uac00 \ucd94\uac00\ub418\uc9c0\ub9cc \ubc30\uc5f4\uc5d0\uc11c \uc81c\uac70\ud558\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubc30\uc5f4\uc774 \uacc4\uc18d \ucee4\uc9c0\uba74 \uac1d\uccb4\ub294 \uc5ec\uc804\ud788 \ub3c4\ub2ec \uac00\ub2a5\ud55c \uc0c1\ud0dc\uc774\ubbc0\ub85c GC\uac00 \ud68c\uc218\ud560 \uc218 \uc5c6\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \uc11c\ubc84\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc0c1\ud669\uc5d0\uc11c \uba54\ubaa8\ub9ac \ub204\uc218\uac00 \ubc1c\uc0dd\ud558\uae30 \uc27d\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\uc81c\ud55c \uc5c6\uc774 \uc99d\uac00\ud558\ub294 \ubc30\uc5f4\uc774\ub098 Map<\/li>\n\n\n\n<li>\ud574\uc81c\ub418\uc9c0 \uc54a\uc740 \uc774\ubca4\ud2b8 \ub9ac\uc2a4\ub108<\/li>\n\n\n\n<li>\uc885\ub8cc\ub418\uc9c0 \uc54a\uc740 \ud0c0\uc774\uba38<\/li>\n\n\n\n<li>\uc5f0\uacb0 \uc885\ub8cc \ud6c4 \uc81c\uac70\ub418\uc9c0 \uc54a\uc740 \uc138\uc158<\/li>\n\n\n\n<li>\uce90\uc2dc\uc758 \ub9cc\ub8cc \ubc0f \ud06c\uae30 \uc81c\ud55c \ub204\ub77d<\/li>\n\n\n\n<li>\ud074\ub85c\uc800\uc5d0 \ub0a8\uc544 \uc788\ub294 \ubd88\ud544\uc694\ud55c \ucc38\uc870<\/li>\n\n\n\n<li>\uc644\ub8cc\ub41c \uc791\uc5c5\uc758 \uacb0\uacfc\ub97c \uacc4\uc18d \ubcf4\uad00\ud558\ub294 \ud050<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\uba54\ubaa8\ub9ac \ub204\uc218\uc640 \uba54\ubaa8\ub9ac \uc0ac\uc6a9\ub7c9 \uc99d\uac00\uc758 \ucc28\uc774<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uba54\ubaa8\ub9ac \uc0ac\uc6a9\ub7c9\uc774 \uc99d\uac00\ud588\ub2e4\uace0 \ud574\uc11c \ubc18\ub4dc\uc2dc \uba54\ubaa8\ub9ac \ub204\uc218\uc778 \uac83\uc740 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \uce90\uc2dc\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\uac70\ub098 V8\uc774 \ud5a5\ud6c4 \ud560\ub2f9\uc5d0 \ub300\ube44\ud574 \ud799 \uba54\ubaa8\ub9ac\ub97c \ud655\ubcf4\ud55c \uacbd\uc6b0\uc5d0\ub3c4 \ud504\ub85c\uc138\uc2a4\uc758 \uba54\ubaa8\ub9ac \uc0ac\uc6a9\ub7c9\uc740 \uc99d\uac00\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c \ub2e4\uc74c\uc744 \uad6c\ubd84\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\uc815\uc0c1\uc801\uc778 \uba54\ubaa8\ub9ac \uc0ac\uc6a9:<\/strong> \uce90\uc2dc, \uc791\uc5c5\ub7c9, \ub370\uc774\ud130 \ud06c\uae30\uc5d0 \ub530\ub77c \uc99d\uac00\ud558\uba70 \uc801\uc808\ud55c \uc870\uac74\uc5d0\uc11c \uc548\uc815\ud654\ub41c\ub2e4.<\/li>\n\n\n\n<li><strong>\uba54\ubaa8\ub9ac \ub204\uc218:<\/strong> \ud544\uc694\ud558\uc9c0 \uc54a\uc740 \uac1d\uccb4\uac00 \uacc4\uc18d \ucc38\uc870\ub418\uc5b4 \uc7a5\uae30\uac04 \uc720\uc9c0\ub41c\ub2e4.<\/li>\n\n\n\n<li><strong>\ub192\uc740 \uc77c\uc2dc\uc801 \uba54\ubaa8\ub9ac \uc0ac\uc6a9:<\/strong> \ub300\uaddc\ubaa8 \uc694\uccad\uc774\ub098 \uc21c\uac04\uc801\uc778 \uc791\uc5c5\ub7c9 \uc99d\uac00\ub85c \uba54\ubaa8\ub9ac \uc0ac\uc6a9\ub7c9\uc774 \uc77c\uc2dc\uc801\uc73c\ub85c \uc0c1\uc2b9\ud55c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uba54\ubaa8\ub9ac \ub204\uc218\ub97c \ud655\uc778\ud558\ub824\uba74 \ub2e8\uc21c\ud788 RSS \uc218\uce58 \ud558\ub098\ub9cc \ubcf4\ub294 \uac83\uc774 \uc544\ub2c8\ub77c \ud799 \uc0ac\uc6a9\ub7c9\uc758 \ucd94\uc138, GC \uc774\ud6c4\uc758 \uba54\ubaa8\ub9ac \uc218\uc900, \ud799 \uc2a4\ub0c5\uc0f7\uc758 \uac1d\uccb4 \ucc38\uc870 \uad00\uacc4 \ub4f1\uc744 \ud568\uaed8 \ubd84\uc11d\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uba54\ubaa8\ub9ac \uc0c1\ud0dc \uce21\uc815<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Node.js\ub294 <code>process.memoryUsage()<\/code>\ub85c \ud504\ub85c\uc138\uc2a4\uc758 \uba54\ubaa8\ub9ac \uc0ac\uc6a9\ub7c9\uc744 \ud655\uc778\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>setInterval(() =&gt; {\n  const memory = process.memoryUsage();\n\n  console.log({\n    rssMB: Math.round(memory.rss \/ 1024 \/ 1024),\n    heapUsedMB: Math.round(memory.heapUsed \/ 1024 \/ 1024),\n    heapTotalMB: Math.round(memory.heapTotal \/ 1024 \/ 1024),\n    externalMB: Math.round(memory.external \/ 1024 \/ 1024),\n    arrayBuffersMB: Math.round(memory.arrayBuffers \/ 1024 \/ 1024),\n  });\n}, 5000);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac01 \uc9c0\ud45c\uc758 \uc758\ubbf8\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>\uc9c0\ud45c<\/th><th>\uc758\ubbf8<\/th><\/tr><tr><td><code>rss<\/code><\/td><td>\ud504\ub85c\uc138\uc2a4\uac00 \uc2e4\uc81c \ubb3c\ub9ac \uba54\ubaa8\ub9ac\uc5d0\uc11c \uc810\uc720\ud558\ub294 \uc0c1\uc8fc \uba54\ubaa8\ub9ac<\/td><\/tr><tr><td><code>heapUsed<\/code><\/td><td>V8 \ud799\uc5d0\uc11c \ud604\uc7ac \uc0ac\uc6a9 \uc911\uc778 \uba54\ubaa8\ub9ac<\/td><\/tr><tr><td><code>heapTotal<\/code><\/td><td>V8\uc774 \ud799\uc5d0 \ud655\ubcf4\ud55c \uc804\uccb4 \uba54\ubaa8\ub9ac<\/td><\/tr><tr><td><code>external<\/code><\/td><td>JavaScript \uac1d\uccb4\uc640 \uc5f0\uacb0\ub41c V8 \ud799 \uc678\ubd80 \uba54\ubaa8\ub9ac<\/td><\/tr><tr><td><code>arrayBuffers<\/code><\/td><td>ArrayBuffer \ubc0f \uad00\ub828 \ubc84\ud37c\uac00 \uc0ac\uc6a9\ud558\ub294 \uba54\ubaa8\ub9ac<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><code>arrayBuffers<\/code>\ub294 <code>external<\/code>\uc5d0 \ud3ec\ud568\ub418\ub294 \uac12\uc774\ubbc0\ub85c \ub450 \uc218\uce58\ub97c \ud569\uc0b0\ud558\uba74 \uc911\ubcf5 \uacc4\uc0b0\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub610\ud55c <code>rss<\/code>\uc5d0\ub294 JavaScript \ud799 \uc678\uc758 \uba54\ubaa8\ub9ac\ub3c4 \ud3ec\ud568\ub418\ubbc0\ub85c, \ud799 \uc0ac\uc6a9\ub7c9\uc774 \uc548\uc815\uc801\uc774\uc5b4\ub3c4 RSS\uac00 \uc99d\uac00\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uba54\ubaa8\ub9ac \ub204\uc218 \ubd84\uc11d \ubc29\ubc95<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uba54\ubaa8\ub9ac \ub204\uc218\uac00 \uc758\uc2ec\ub41c\ub2e4\uba74 \ub2e4\uc74c \uc21c\uc11c\ub85c \ubd84\uc11d\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ubd80\ud558\uac00 \ub0ae\uc740 \uc0c1\ud0dc\uc5d0\uc11c \uae30\uc900 \uba54\ubaa8\ub9ac \uc0ac\uc6a9\ub7c9\uc744 \uae30\ub85d\ud55c\ub2e4.<\/li>\n\n\n\n<li>\uc77c\uc815\ud55c \uc694\uccad \ubd80\ud558\ub97c \ubc18\ubcf5\uc801\uc73c\ub85c \ubc1c\uc0dd\uc2dc\ud0a8\ub2e4.<\/li>\n\n\n\n<li>GC \uc774\ud6c4\uc5d0\ub3c4 \ud799 \uc0ac\uc6a9\ub7c9\uc774 \uacc4\uc18d \uc99d\uac00\ud558\ub294\uc9c0 \ud655\uc778\ud55c\ub2e4.<\/li>\n\n\n\n<li>\ud799 \uc2a4\ub0c5\uc0f7\uc744 \ube44\uad50\ud574 \ubc18\ubcf5\uc801\uc73c\ub85c \uc99d\uac00\ud558\ub294 \uac1d\uccb4\ub97c \ucc3e\ub294\ub2e4.<\/li>\n\n\n\n<li>\ud574\ub2f9 \uac1d\uccb4\ub97c \ucc38\uc870\ud558\ub294 \ubc30\uc5f4, Map, \uc774\ubca4\ud2b8 \ub9ac\uc2a4\ub108, \ud074\ub85c\uc800 \ub4f1\uc744 \ucd94\uc801\ud55c\ub2e4.<\/li>\n\n\n\n<li>\ubd88\ud544\uc694\ud55c \ucc38\uc870\ub97c \uc81c\uac70\ud558\uace0 \ub3d9\uc77c\ud55c \ubd80\ud558\ub85c \uac1c\uc120 \uc5ec\ubd80\ub97c \uac80\uc99d\ud55c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uba54\ubaa8\ub9ac \uc0ac\uc6a9\ub7c9\uc774 \ub192\ub2e4\ub294 \uc774\uc720\ub9cc\uc73c\ub85c \ubb34\uc870\uac74 GC\ub97c \uac15\uc81c\ud558\ub294 \uac83\uc740 \uc801\uc808\ud558\uc9c0 \uc54a\ub2e4. \uadfc\ubcf8 \uc6d0\uc778\uc774 \ubd88\ud544\uc694\ud55c \uac1d\uccb4 \ucc38\uc870\ub77c\uba74 GC \uc635\uc158\uc744 \ubcc0\uacbd\ud574\ub3c4 \ub204\uc218\ub97c \ud574\uacb0\ud560 \uc218 \uc5c6\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\uc131\ub2a5 \ucd5c\uc801\ud654 \uc804\ub7b5 \uc815\ub9ac<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Node.js \uc11c\ubc84 \uc131\ub2a5\uc744 \uac1c\uc120\ud560 \ub54c\ub294 \ubaa8\ub4e0 \ubb38\uc81c\ub97c \ud558\ub098\uc758 \uae30\uc220\ub85c \ud574\uacb0\ud558\ub824\uace0 \ud574\uc11c\ub294 \uc548 \ub41c\ub2e4. \uba3c\uc800 \ubcd1\ubaa9\uc758 \uc6d0\uc778\uc744 \uce21\uc815\ud558\uace0, \uadf8\uc5d0 \ub9de\ub294 \ubc29\ubc95\uc744 \uc120\ud0dd\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>\ubb38\uc81c<\/th><th>\uc6b0\uc120 \uace0\ub824\ud560 \ubc29\ubc95<\/th><\/tr><tr><td>CPU \uacc4\uc0b0\uc774 \ub108\ubb34 \ub290\ub9bc<\/td><td>\uc54c\uace0\ub9ac\uc998 \ucd5c\uc801\ud654, Worker Threads<\/td><\/tr><tr><td>\uc5ec\ub7ec CPU \ucf54\uc5b4 \ud65c\uc6a9 \ubd80\uc871<\/td><td>Worker Pool, Cluster, \ubcc4\ub3c4 \ud504\ub85c\uc138\uc2a4<\/td><\/tr><tr><td>DB \uc751\ub2f5 \ub300\uae30 \uc2dc\uac04\uc774 \uae40<\/td><td>\ucffc\ub9ac \ucd5c\uc801\ud654, \uc778\ub371\uc2a4, \ucee4\ub125\uc158 \ud480, \uce90\uc2f1<\/td><\/tr><tr><td>\uc774\ubca4\ud2b8 \ub8e8\ud504 \uc9c0\uc5f0 \uc99d\uac00<\/td><td>\ub3d9\uae30 \uc791\uc5c5 \uc81c\uac70, CPU \uc791\uc5c5 \ubd84\ub9ac, \uc791\uc5c5 \ubd84\ud560<\/td><\/tr><tr><td>\ud799 \uc0ac\uc6a9\ub7c9\uc774 \uc9c0\uc18d\uc801\uc73c\ub85c \uc99d\uac00<\/td><td>\ud799 \uc2a4\ub0c5\uc0f7, \ucc38\uc870 \uad00\uacc4 \ubd84\uc11d, \ub204\uc218 \uc218\uc815<\/td><\/tr><tr><td>\uc11c\ubc84 \ud55c \ub300\uc758 \ucc98\ub9ac \uc6a9\ub7c9 \ubd80\uc871<\/td><td>\ub85c\ub4dc \ubc38\ub7f0\uc2f1, \uc218\ud3c9 \ud655\uc7a5, \uc678\ubd80 \uc0c1\ud0dc \uc800\uc7a5\uc18c<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc2dc\uac04 \uac8c\uc784 \uc11c\ubc84\uc5d0\uc11c\ub294 \ucd94\uac00\ub85c \uba54\uc2dc\uc9c0 \ucc98\ub9ac \uc2dc\uac04, Room\ubcc4 \uc791\uc5c5\ub7c9, \ud2f1 \ucc98\ub9ac \uc2dc\uac04, WebSocket \uc5f0\uacb0 \uc218, \uc7ac\uc811\uc18d\ub960 \ub4f1\uc744 \uce21\uc815\ud558\ub294 \uac83\uc774 \uc720\uc6a9\ud558\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \uac8c\uc784 \uc0c1\ud0dc \uacc4\uc0b0\uc774 \ubcd1\ubaa9\uc774\ub77c\uba74 Worker Threads\ub97c \uac80\ud1a0\ud560 \uc218 \uc788\ub2e4. \ubc18\uba74 \uc5ec\ub7ec \ud504\ub85c\uc138\uc2a4\uc5d0\uc11c \uac8c\uc784 \uc0c1\ud0dc\ub97c \uc77c\uad00\ub418\uac8c \uad00\ub9ac\ud574\uc57c \ud55c\ub2e4\uba74 \ub2e8\uc21c\ud788 Cluster\ub97c \ucd94\uac00\ud558\ub294 \uac83\ub9cc\uc73c\ub85c\ub294 \ud574\uacb0\ub418\uc9c0 \uc54a\ub294\ub2e4. \uc0c1\ud0dc \uc18c\uc720\uad8c\uacfc \ud504\ub85c\uc138\uc2a4 \uac04 \ud1b5\uc2e0 \uad6c\uc870\uae4c\uc9c0 \uc124\uacc4\ud574\uc57c \ud55c\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Node.js\ub294 JavaScript\ub97c \uae30\ubc18\uc73c\ub85c \uc11c\ubc84 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uac1c\ubc1c\ud560 \uc218 \uc788\ub294 \ub7f0\ud0c0\uc784\uc774\ub2e4. \ube44\ub3d9\uae30 I\/O \ucc98\ub9ac\uc5d0 \uac15\uc810\uc774 \uc788\uc73c\uba70, \uc801\uc740 \uc218\uc758 \uc2a4\ub808\ub4dc\ub85c\ub3c4 \ub2e4\uc218\uc758 \ub124\ud2b8\uc6cc\ud06c \uc5f0\uacb0\uc744 \ud6a8\uc728\uc801\uc73c\ub85c \ucc98\ub9ac\ud560 \uc218 \uc788\ub2e4. \ud558\uc9c0\ub9cc Node.js\uac00 \ubaa8\ub4e0 \uc791\uc5c5\uc744 \uc790\ub3d9\uc73c\ub85c \ubcd1\ub82c \ucc98\ub9ac\ud558\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4. \uae30\ubcf8\uc801\uc73c\ub85c JavaScript \ucf54\ub4dc\ub294 \ud558\ub098\uc758 \uba54\uc778 \uc2a4\ub808\ub4dc\uc5d0\uc11c \uc2e4\ud589\ub418\uba70, CPU\ub97c \uc624\ub798 \uc0ac\uc6a9\ud558\ub294 \uc791\uc5c5\uc774 \uc2e4\ud589\ub418\uba74 \ub2e4\ub978 \uc694\uccad\uc758 \ucc98\ub9ac\uac00 \uc9c0\uc5f0\ub420 \uc218 \uc788\ub2e4. \ub530\ub77c\uc11c \uc548\uc815\uc801\uc778 \uac8c\uc784 \uc11c\ubc84\uc640 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2647","post","type-post","status-publish","format-standard","hentry","category-dev-logs"],"_links":{"self":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/2647","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2647"}],"version-history":[{"count":1,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/2647\/revisions"}],"predecessor-version":[{"id":2648,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/2647\/revisions\/2648"}],"wp:attachment":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2647"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2647"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2647"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}