{"id":2183,"date":"2026-08-31T08:52:02","date_gmt":"2026-08-31T08:52:02","guid":{"rendered":"https:\/\/wayhope.kro.kr\/?p=2183"},"modified":"2026-09-05T17:25:00","modified_gmt":"2026-09-05T17:25:00","slug":"%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8-2303-%ec%84%9c%eb%b2%84-%ea%b0%9c%eb%b0%9c-%ed%9a%8c%ea%b3%a0","status":"publish","type":"post","link":"https:\/\/wayhope.kro.kr\/?p=2183","title":{"rendered":"\uba54\ud0c0\ubc84\uc2a4 \uac8c\uc784 \uc11c\ubc84 \uac1c\ubc1c \ud68c\uace0 #Project 2303"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">\uace0\uc131\ub2a5 \uc2e4\uc2dc\uac04 \uac00\uc0c1 \uacf5\uac04 \ubc31\uc5d4\ub4dc \uac1c\ubc1c \ud68c\uace0<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ubc88 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c\ub294 \uc5ec\ub7ec \uc0ac\uc6a9\uc790\uac00 \ud558\ub098\uc758 \uac00\uc0c1 \uacf5\uac04\uc5d0 \ub4e4\uc5b4\uc640 \uc11c\ub85c\uc758 \uc0c1\ud0dc\ub97c \uc2e4\uc2dc\uac04\uc73c\ub85c \uacf5\uc720\ud558\ub294 \uc11c\ubc84\ub97c \uac1c\ubc1c\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ucc98\uc74c\ubd80\ud130 \uc9c0\uae08\uacfc \uac19\uc740 \uad6c\uc870\ub85c \uc2dc\uc791\ud55c \uac83\uc740 \uc544\ub2c8\ub2e4. \ucc98\uc74c\uc5d0\ub294 \uc77c\ubc18\uc801\uc778 Node.js \uc11c\ubc84\ub97c \uae30\uc900\uc73c\ub85c \uae30\ub2a5\uc744 \ubd99\uc5ec \ub098\uac14\ub2e4. \ub85c\uadf8\uc778\uc774\ub098 \ud68c\uc6d0 \uc815\ubcf4, \uc778\ubca4\ud1a0\ub9ac, \uc0c1\uc810 \uac19\uc740 \uae30\ub2a5\uc740 \ud070 \ubb38\uc81c\uac00 \uc5c6\uc5c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ubb38\uc81c\ub294 \uc2e4\uc2dc\uac04 \uc6d4\ub4dc\uac00 \ubd99\uc73c\uba74\uc11c \uc0dd\uacbc\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud50c\ub808\uc774\uc5b4\uac00 \uc6c0\uc9c1\uc77c \ub54c\ub9c8\ub2e4 \uc704\uce58\uc640 \ud68c\uc804\uac12\uc744 \uc11c\ubc84\ub85c \ubcf4\ub0b4\uace0, \uc11c\ubc84\ub294 \uac19\uc740 \ubc29\uc5d0 \uc788\ub294 \ub2e4\ub978 \uc0ac\uc6a9\uc790\ub4e4\uc5d0\uac8c \ub2e4\uc2dc \uc804\ub2ec\ud574\uc57c \ud588\ub2e4. \uc5ec\uae30\uc5d0 \ucc44\ud305\uc774\ub098 \uc544\uc774\ud15c \ud68d\ub4dd, \ubc29 \uc785\uc7a5 \uac19\uc740 \uc77c\ubc18\uc801\uc778 \uc774\ubca4\ud2b8\uae4c\uc9c0 \uac19\uc774 \ucc98\ub9ac\ud558\ub2e4 \ubcf4\ub2c8 \uc11c\ubc84\uac00 \ub9e1\ub294 \uc77c\uc774 \ub108\ubb34 \ub2ec\ub77c\uc84c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c API\ub97c \ucc98\ub9ac\ud558\ub294 \uc11c\ubc84\uc640 \uc2e4\uc81c \uc6d4\ub4dc\ub97c \ucc98\ub9ac\ud558\ub294 \uc11c\ubc84\ub97c \ub098\ub234\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client -&gt; API Server -&gt; \ub85c\uadf8\uc778 \/ \uc778\ubca4\ud1a0\ub9ac \/ \uc0c1\uc810 \/ \uc6d4\ub4dc \uc0dd\uc131\nClient -&gt; World Server -&gt; \uc704\uce58 \ub3d9\uae30\ud654 \/ \ub8f8 \uc774\ubca4\ud2b8 \/ \ube0c\ub85c\ub4dc\uce90\uc2a4\ud2b8\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucc98\uc74c\uc5d0\ub294 \ub2e8\uc21c\ud788 \uc11c\ubc84\ub97c \ub098\ub204\uba74 \ub05d\uc774\ub77c\uace0 \uc0dd\uac01\ud588\ub294\ub370, \uc2e4\uc81c\ub85c \uac1c\ubc1c\ud558\ub2e4 \ubcf4\ub2c8 \ud504\ub85c\uc138\uc2a4 \ub0b4\ubd80\uc5d0\uc11c\ub3c4 \ub2e4\uc2dc \ub098\ub20c \ud544\uc694\uac00 \uc788\uc5c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"569\" height=\"506\" src=\"https:\/\/wayhope.kro.kr\/wp-content\/uploads\/2026\/08\/image-165.png\" alt=\"\" class=\"wp-image-2358\" srcset=\"https:\/\/wayhope.kro.kr\/wp-content\/uploads\/2026\/08\/image-165.png 569w, https:\/\/wayhope.kro.kr\/wp-content\/uploads\/2026\/08\/image-165-300x267.png 300w\" sizes=\"auto, (max-width: 569px) 100vw, 569px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">API \uc11c\ubc84<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">API \uc11c\ubc84\ub294 Node.js\uc640 Express\ub85c \uad6c\uc131\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud558\ub098\uc758 Node.js \ud504\ub85c\uc138\uc2a4\ub9cc \uc0ac\uc6a9\ud558\ub294 \ub300\uc2e0 <code>cluster<\/code>\ub97c \uc774\uc6a9\ud574\uc11c \uc5ec\ub7ec Worker \ud504\ub85c\uc138\uc2a4\ub97c \ub744\uc6e0\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cluster.schedulingPolicy = cluster.SCHED_RR;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac01 Worker\uac00 API \uc694\uccad\uc744 \ucc98\ub9ac\ud558\uace0 Master\uac00 Worker\uc758 \uc0dd\uba85\uc8fc\uae30\ub97c \uad00\ub9ac\ud558\ub294 \uad6c\uc870\uc600\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\uac78 \uc801\uc6a9\ud55c \uc774\uc720\ub294 CPU\ub97c \uc5ec\ub7ec \ucf54\uc5b4\uc5d0\uc11c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\uc600\ub2e4. \uadf8\ub9ac\uace0 Worker\uac00 \uc8fd\uc5c8\uc744 \ub54c \uc11c\ubc84 \uc804\uccb4\ub97c \ub2e4\uc2dc \uc2dc\uc791\ud558\uc9c0 \uc54a\uace0 \ud574\ub2f9 Worker\ub9cc \ub2e4\uc2dc \ub9cc\ub4e4 \uc218 \uc788\ub2e4\ub294 \uc810\ub3c4 \uc88b\uc558\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c\ub85c \uac1c\ubc1c\ud558\uba74\uc11c Worker \ud558\ub098\uac00 \ube44\uc815\uc0c1 \uc885\ub8cc\ub418\ub294 \uc0c1\ud669\ub3c4 \uc788\uc5c8\uae30 \ub54c\ubb38\uc5d0 \uc774 \uad6c\uc870\uac00 \uaf64 \uc720\uc6a9\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\ub9cc \uc5ec\uae30\uc11c \ud55c \uac00\uc9c0 \ubb38\uc81c\uac00 \uc0dd\uacbc\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uac01 Worker\ub294 \ud504\ub85c\uc138\uc2a4\uac00 \ub2e4\ub974\uae30 \ub54c\ubb38\uc5d0 \uba54\ubaa8\ub9ac\ub3c4 \ub530\ub85c \uac00\uc9c0\uace0 \uc788\ub2e4. \ud55c Worker\uc5d0\uc11c \uc800\uc7a5\ud55c \ub370\uc774\ud130\ub97c \ub2e4\ub978 Worker\uac00 \ubc14\ub85c \ubcfc \uc218 \uc5c6\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c \uc138\uc158\uc774\ub098 \uc2e4\uc2dc\uac04 \uc0c1\ud0dc\ucc98\ub7fc \uc5ec\ub7ec \ud504\ub85c\uc138\uc2a4\uc5d0\uc11c \uacf5\uc720\ud574\uc57c \ud558\ub294 \ub370\uc774\ud130\ub294 \ud504\ub85c\uc138\uc2a4 \uba54\ubaa8\ub9ac\uc5d0 \ub123\uc9c0 \uc54a\uace0 Redis\ub97c \uc0ac\uc6a9\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uacb0\uacfc\uc801\uc73c\ub85c API \uc11c\ubc84\uc5d0\uc11c\ub294 \ub300\ub7b5 \uc774\ub7f0 \uc2dd\uc73c\ub85c \uc5ed\ud560\uc744 \ub098\ub234\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Master\n-&gt; Worker #1\n-&gt; Worker #2\n-&gt; Worker #3\n-&gt; ...\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub9ac\uace0 \uacf5\ud1b5 \uc0c1\ud0dc\ub294 Redis\uc5d0\uc11c \uac00\uc838\uc654\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\uc6d4\ub4dc \uc11c\ubc84<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc2dc\uac04 \uc6d4\ub4dc\ub294 API \uc11c\ubc84\uc640 \ub2e4\ub978 \ubc29\uc2dd\uc73c\ub85c \uad6c\uc131\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud2b9\ud788 Private World\uac00 \ubb38\uc81c\uc600\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc0ac\uc6a9\uc790\uac00 \uc9c1\uc811 \ubc29\uc744 \ub9cc\ub4e4 \uc218 \uc788\uc5c8\uae30 \ub54c\ubb38\uc5d0 \ubc29\uc774 \ub9cc\ub4e4\uc5b4\uc84c\ub2e4\uac00 \uc5c6\uc5b4\uc9c0\ub294 \uc77c\uc774 \uacc4\uc18d \ubc1c\uc0dd\ud588\ub2e4. \ub2e8\uc21c\ud558\uac8c \ud558\ub098\uc758 \ud504\ub85c\uc138\uc2a4\uc5d0\uc11c \ubaa8\ub4e0 \ubc29\uc744 \uad00\ub9ac\ud560 \uc218\ub3c4 \uc788\uc5c8\uc9c0\ub9cc, \ud2b9\uc815 \ubc29\uc5d0\uc11c \uc5f0\uc0b0\ub7c9\uc774 \ub9ce\uc544\uc9c0\uba74 \uac19\uc740 \ud504\ub85c\uc138\uc2a4\uc758 \ub2e4\ub978 \ubc29\uae4c\uc9c0 \uc601\ud5a5\uc744 \ubc1b\uc744 \uc218 \uc788\uc5c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c <code>worker_threads<\/code>\ub97c \uc774\uc6a9\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc6d4\ub4dc \ud558\ub098\ub97c Worker \ud558\ub098\uc5d0 \uc5f0\uacb0\ud558\ub294 \ubc29\uc2dd\uc774\uc5c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>World Host\n-&gt; Private World #1\n-&gt; Private World #2\n-&gt; Private World #3\n-&gt; ...\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc6d4\ub4dc\uac00 \ub9cc\ub4e4\uc5b4\uc9c0\uba74 Worker\ub97c \ub9cc\ub4e4\uace0, \uc6d4\ub4dc\uac00 \uc0ad\uc81c\ub418\uba74 \ud574\ub2f9 Worker\ub3c4 \uc885\ub8cc\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ubc29\uc744 \ub17c\ub9ac\uc801\uc73c\ub85c\ub9cc \ub098\ub204\ub294 \uac83\ubcf4\ub2e4 \uad00\ub9ac\ud558\uae30 \ud3b8\ud588\uace0, \ud2b9\uc815 \uc6d4\ub4dc\uc5d0\uc11c \uc791\uc5c5\uc774 \ubab0\ub838\uc744 \ub54c \ub2e4\ub978 \uc6d4\ub4dc\uc5d0 \uc601\ud5a5\uc744 \uc8fc\ub294 \uac83\ub3c4 \uc904\uc77c \uc218 \uc788\uc5c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\uc2e0 Worker\ub97c \ub3d9\uc801\uc73c\ub85c \ub9cc\ub4e4\uace0 \uc5c6\uc560\ub2e4 \ubcf4\ub2c8 \uc0dd\uac01\ud558\uc9c0 \ubabb\ud588\ub358 \ubb38\uc81c\uac00 \ud558\ub098 \uc0dd\uacbc\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud3ec\ud2b8 \ucda9\ub3cc\uc774\uc5c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><code>EADDRINUSE<\/code>\uac00 \uacc4\uc18d \ubc1c\uc0dd\ud588\ub358 \uc774\uc720<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Private World\ub294 \uc77c\uc815\ud55c \ud3ec\ud2b8 \ubc94\uc704\ub97c \uc0ac\uc6a9\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ucc98\uc74c\uc5d0\ub294 \uc0ac\uc6a9 \uac00\ub2a5\ud55c \ud3ec\ud2b8 \uc778\ub371\uc2a4\ub97c \ubc30\uc5f4\ub85c \uad00\ub9ac\ud588\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const index =\n    privateServerIndexList.length === 0\n        ? indexCount++\n        : privateServerIndexList.pop()!;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ubc29\uc774 \uc5c6\uc5b4\uc9c0\uba74 \uc0ac\uc6a9\ud588\ub358 \uc778\ub371\uc2a4\ub97c \ub2e4\uc2dc \ubc30\uc5f4\uc5d0 \ub123\uc5c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uad6c\ud604 \uc790\uccb4\ub294 \uac04\ub2e8\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub7f0\ub370 \uac04\ud5d0\uc801\uc73c\ub85c \uc774\ub7f0 \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Error: listen EADDRINUSE: address already in use\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucc98\uc74c\uc5d0\ub294 \ud3ec\ud2b8 \uad00\ub9ac \ubc30\uc5f4\uc5d0 \ubb38\uc81c\uac00 \uc788\ub2e4\uace0 \uc0dd\uac01\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub7f0\ub370 \ub85c\uadf8\ub97c \ub530\ub77c\uac00 \ubcf4\ub2c8 \ubc29 \uc0ad\uc81c \uacfc\uc815\uc5d0\uc11c \ubb38\uc81c\uac00 \uc788\uc5c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Worker\uc5d0\uac8c \uc885\ub8cc \uba85\ub839\uc744 \ubcf4\ub0b4\uace0 \ubc14\ub85c \ud3ec\ud2b8\ub97c \ubc18\ud658\ud558\uace0 \uc788\uc5c8\ub294\ub370, \uc2e4\uc81c \uc11c\ubc84 \uc18c\ucf13\uc740 \uc544\uc9c1 \uc885\ub8cc\ub418\uc9c0 \uc54a\uc740 \uc0c1\ud0dc\uc600\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc21c\uc11c\uac00 \uc774\ub7f0 \uc2dd\uc774\uc5c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Worker \uc885\ub8cc \uc694\uccad\n-&gt; \ud3ec\ud2b8 \ubc18\ud658\n-&gt; \uc0c8\ub85c\uc6b4 Worker \uc0dd\uc131\n-&gt; \uac19\uc740 \ud3ec\ud2b8\ub85c listen()\n-&gt; \uae30\uc874 Worker\uac00 \uc544\uc9c1 \ud3ec\ud2b8\ub97c \uc0ac\uc6a9 \uc911\n-&gt; EADDRINUSE\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc885\ub8cc \uc694\uccad\uacfc \uc2e4\uc81c \uc885\ub8cc\uac00 \uac19\uc740 \uc2dc\uc810\uc774 \uc544\ub2c8\uc5c8\ub358 \uac83\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c \ud3ec\ud2b8 \ubc18\ud658 \uc2dc\uc810\uc744 \ubc14\uafe8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Worker \uc885\ub8cc \uc694\uccad\n-&gt; \uae30\uc874 \uc5f0\uacb0 \uc815\ub9ac\n-&gt; HTTPS Server close\n-&gt; Worker exit\n-&gt; \ud3ec\ud2b8 \ubc18\ud658\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>worker.on('exit')<\/code>\uac00 \ubc1c\uc0dd\ud55c \uc774\ud6c4\uc5d0 \ud3ec\ud2b8\ub97c \ub2e4\uc2dc \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc218\uc815\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubb38\uc81c\ub294 \ucf54\ub4dc\ub9cc \ubd24\uc744 \ub54c\ub294 \ubcc4\uac83 \uc544\ub2cc \uac83\ucc98\ub7fc \ubcf4\uc600\ub294\ub370 \uc2e4\uc81c\ub85c\ub294 \uaf64 \uc624\ub798 \uc7a1\uc558\ub2e4. \ube44\ub3d9\uae30 \uc11c\ubc84\uc5d0\uc11c \ub9ac\uc18c\uc2a4\ub97c \ubc18\ub0a9\ud560 \ub54c\ub294 &#8220;\uc885\ub8cc\ub97c \uc694\uccad\ud55c \uac83&#8221;\uacfc &#8220;\uc885\ub8cc\uac00 \ub05d\ub09c \uac83&#8221;\uc744 \uad6c\ubd84\ud574\uc57c \ud55c\ub2e4\ub294 \uac78 \ud655\uc2e4\ud558\uac8c \uc54c\uac8c \ub41c \ubd80\ubd84\uc774\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\uc704\uce58 \ub3d9\uae30\ud654<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc2dc\uac04 \uc6d4\ub4dc\uc5d0\uc11c \uac00\uc7a5 \uc2e0\uacbd \uc4f4 \ubd80\ubd84\uc740 \uc704\uce58 \ub3d9\uae30\ud654\uc600\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ucc98\uc74c\uc5d0\ub294 \uc704\uce58 \ub370\uc774\ud130\ub3c4 \uc77c\ubc18\uc801\uc778 Socket.IO \uc774\ubca4\ud2b8\ucc98\ub7fc \uc804\uc1a1\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub7f0\ub370 \uc778\uc6d0\uc774 \ub9ce\uc544\uc9c0\ub2c8\uae4c \ubb38\uc81c\uac00 \ubcf4\uc774\uae30 \uc2dc\uc791\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ud55c \uba85\uc774 \ucd08\ub2f9 20\ubc88 \uc704\uce58\ub97c \ubcf4\ub0b4\uace0 \ubc29\uc5d0 30\uba85\uc774 \uc788\ub2e4\uba74 \ub2e8\uc21c \uacc4\uc0b0\uc73c\ub85c\ub3c4 \uaf64 \ub9ce\uc740 \ube0c\ub85c\ub4dc\uce90\uc2a4\ud2b8\uac00 \ubc1c\uc0dd\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>20 packets\nx 30 users\nx 29 recipients\n= 17,400 broadcasts\/sec\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \ud14c\uc2a4\ud2b8\uc5d0\uc11c\ub3c4 \uc0ac\ub78c\uc774 \ub9ce\uc544\uc9c0\uace0 \ubaa8\ub450 \uc6c0\uc9c1\uc774\ub294 \uc0c1\ud669\uc5d0\uc11c \ud074\ub77c\uc774\uc5b8\ud2b8\uc758 \uc704\uce58\uac00 \uc21c\uac04\uc801\uc73c\ub85c \ud280\ub294 \ud604\uc0c1\uc774 \ubc1c\uc0dd\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ucc98\uc74c\uc5d0\ub294 \uc11c\ubc84 CPU\ub97c \uba3c\uc800 \ubd24\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub7f0\ub370 CPU \uc0ac\uc6a9\ub7c9\ub9cc\uc73c\ub85c \uc124\uba85\ub418\uc9c0 \uc54a\ub294 \uc9c0\uc5f0\uc774 \uc788\uc5c8\ub2e4. \ud328\ud0b7\uc774 \ubc00\ub9ac\uba74\uc11c \uc624\ub798\ub41c \uc704\uce58 \ub370\uc774\ud130\uac00 \uacc4\uc18d \uc804\ub2ec\ub418\ub294 \uac8c \ubb38\uc81c\uc600\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc704\uce58 \ub370\uc774\ud130\ub294 \uc870\uae08 \ub2e4\ub974\uac8c \uc0dd\uac01\ud574\uc57c \ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \uc2e4\uc81c \uc704\uce58\uac00<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>100 -&gt; 101 -&gt; 102 -&gt; 103 -&gt; 104\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub77c\uace0 \ud574\ub3c4 \ub124\ud2b8\uc6cc\ud06c\uac00 \ubc00\ub824\uc11c 100\ubd80\ud130 \uc21c\uc11c\ub300\ub85c \ub2a6\uac8c \ub4e4\uc5b4\uc624\uba74 \ucd5c\uc2e0 \uc704\uce58\ub97c \ubcf4\uc5ec\uc8fc\ub294 \uac83\ubcf4\ub2e4 \uc624\ud788\ub824 \uc6c0\uc9c1\uc784\uc774 \uc774\uc0c1\ud574\uc9c4\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ubbf8 \uc9c0\ub098\uac04 \uc704\uce58\ub294 \ubc84\ub824\ub3c4 \ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c \uc704\uce58 \ub3d9\uae30\ud654\uc5d0\ub294 Socket.IO\uc758 <code>volatile<\/code>\uc744 \uc801\uc6a9\ud588\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>socket.to(this._roomType)\n    .volatile\n    .emit(event, JSON.stringify(data));\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ubc18\ub300\ub85c \ucc44\ud305\uc774\ub098 \uc544\uc774\ud15c \ud68d\ub4dd, \uc785\uc7a5\/\ud1f4\uc7a5\ucc98\ub7fc \uc5c6\uc5b4\uc9c0\uba74 \uc548 \ub418\ub294 \ub370\uc774\ud130\ub294 \uc77c\ubc18\uc801\uc778 <code>emit<\/code>\uc744 \uc0ac\uc6a9\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uacb0\uad6d \ud328\ud0b7\uc744 \uc131\uaca9\uc5d0 \ub530\ub77c \ub098\ub234\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\ucc44\ud305 \/ \uc544\uc774\ud15c \/ \uc785\ud1f4\uc7a5 -&gt; \uc77c\ubc18 \uc804\uc1a1\n\uc704\uce58 \/ \ud68c\uc804 -&gt; volatile\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c \ubc14\uafbc \ub4a4 \ud328\ud0b7\uc774 \ubc00\ub9ac\ub294 \uc0c1\ud669\uc5d0\uc11c \uc624\ub798\ub41c \uc704\uce58 \ub370\uc774\ud130\uac00 \uacc4\uc18d \uc313\uc774\ub294 \ubb38\uc81c\uac00 \ub9ce\uc774 \uc904\uc5c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud14c\uc2a4\ud2b8 \ud658\uacbd\uc5d0\uc11c\ub294 \ud3c9\uade0 \uc804\ub2ec \uc9c0\uc5f0\uc774 180ms \uc774\uc0c1 \uc62c\ub77c\uac00\ub358 \uc0c1\ud669\uc5d0\uc11c 15ms \uc804\ud6c4\uae4c\uc9c0 \ub0b4\ub824\uc624\ub294 \uac83\uc744 \ud655\uc778\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ubb3c\ub860 \uc774 \uc218\uce58\ub294 \ud2b9\uc815 \ud14c\uc2a4\ud2b8 \ud658\uacbd\uc5d0\uc11c \uce21\uc815\ud55c \uacb0\uacfc\ub77c \uc11c\ubc84 \uc804\uccb4 \uc131\ub2a5\uc744 \uc758\ubbf8\ud558\ub294 \uac12\uc740 \uc544\ub2c8\ub2e4. \uadf8\ub798\ub3c4 \uc2e4\uc81c \ud50c\ub808\uc774 \uc0c1\ud669\uc5d0\uc11c \uccb4\uac10\ub420 \uc815\ub3c4\uc758 \ucc28\uc774\ub294 \uc788\uc5c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\uc18c\ucf13 \uc5f0\uacb0 \uac80\uc99d<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc6d4\ub4dc \uc11c\ubc84\ub294 \uc678\ubd80\uc5d0\uc11c \uc9c1\uc811 \uc811\uadfc\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc5d0 \uc5f0\uacb0\ud560 \ub54c \uac80\uc99d\uc744 \uc5ec\ub7ec \ub2e8\uacc4\ub85c \ub098\ub234\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ucc98\uc74c\uc5d0\ub294 \ud1a0\ud070\ub9cc \ud655\uc778\ud558\uba74 \ucda9\ubd84\ud558\ub2e4\uace0 \uc0dd\uac01\ud588\ub294\ub370, \uc2e4\uc81c\ub85c\ub294 \ud655\uc778\ud574\uc57c \ud560 \uac83\uc774 \ub354 \ub9ce\uc558\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud604\uc7ac \uad6c\uc870\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>WSS Connect\n-&gt; Join Token \ud655\uc778\n-&gt; Redis Session \ud655\uc778\n-&gt; \uc911\ubcf5 \uc811\uc18d \ud655\uc778\n-&gt; Packet Router \ub4f1\ub85d\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Join Token\uc5d0\ub294 \uc0ac\uc6a9\uc790\uac00 \uc811\uc18d\ud574\uc57c \ud558\ub294 World Server\uc758 \uc778\ub371\uc2a4\ub97c \ub123\uc5c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c \ub2e4\ub978 \uc6d4\ub4dc\uc758 \ud3ec\ud2b8\ub85c \uc9c1\uc811 \uc811\uadfc\ud558\ub354\ub77c\ub3c4 \ud1a0\ud070\uc5d0 \ub4e4\uc5b4 \uc788\ub294 \uc11c\ubc84 \uc815\ubcf4\uc640 \ud604\uc7ac \uc11c\ubc84\uc758 \uc815\ubcf4\ub97c \ube44\uad50\ud574\uc11c \uac70\ubd80\ud560 \uc218 \uc788\uc5c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8 \ub2e4\uc74c\uc5d0\ub294 Redis\uc758 \uc138\uc158 \uc815\ubcf4\ub97c \ud655\uc778\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub9ac\uace0 \uac19\uc740 \uc720\uc800\uac00 \uc774\ubbf8 \uc811\uc18d\ud574 \uc788\ub294\uc9c0\ub3c4 \ud655\uc778\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub9c8\uc9c0\ub9c9\uc5d0\ub294 \ud574\ub2f9 \uc18c\ucf13\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ud328\ud0b7 \ub77c\uc6b0\ud130\ub97c \ub4f1\ub85d\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub77c\uc6b0\ud130 \ub4f1\ub85d\ub3c4 \ucc98\uc74c\uc5d0\ub294 \uc5f0\uacb0 \ucf54\ub4dc\uc5d0\uc11c \ud558\ub098\uc529 \ucc98\ub9ac\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud328\ud0b7\uc774 \ub9ce\uc544\uc9c0\uba74\uc11c \uc774 \ubc29\uc2dd\uc740 \uad00\ub9ac\ud558\uae30 \ubd88\ud3b8\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c RouteData\uc5d0 \ud544\uc694\ud55c \uc815\ubcf4\ub97c \ub123\uace0 \uc5f0\uacb0 \uc2dc \uc21c\ud68c\ud558\uba74\uc11c \ub4f1\ub85d\ud558\ub3c4\ub85d \ubc14\uafe8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc0c8 \ud328\ud0b7\uc744 \ucd94\uac00\ud560 \ub54c \uae30\uc874 \uc5f0\uacb0 \ucf54\ub4dc\uae4c\uc9c0 \uacc4\uc18d \uc218\uc815\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub41c\ub2e4\ub294 \uc810\uc5d0\uc11c \uc774\ucabd\uc774 \ud6e8\uc52c \ud3b8\ud588\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Redis \uc0ac\uc6a9<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Redis\ub294 \uc774 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \ub2e8\uc21c\ud55c \uce90\uc2dc \uc6a9\ub3c4\ub85c\ub9cc \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc558\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc138\uc158\uc774\ub098 \uc720\uc800 \uc544\uc774\ud15c, \uc6d4\ub4dc \uc815\ubcf4, \ub7ad\ud0b9\ucc98\ub7fc \uc790\uc8fc \uc77d\uace0 \uc4f0\ub294 \ub370\uc774\ud130\ub97c Redis\uc5d0\uc11c \ucc98\ub9ac\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud2b9\ud788 \uc720\uc800\ubcc4 \ub370\uc774\ud130\ub294 Redis Hash\ub97c \ub9ce\uc774 \uc0ac\uc6a9\ud588\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>HGET\nHSET\nHEXISTS\nHDEL\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubd80\ubd84\uc740 \uc5ec\ub7ec \ub370\uc774\ud130\uc5d0\uc11c \ube44\uc2b7\ud55c \ucf54\ub4dc\uac00 \ubc18\ubcf5\ub3fc\uc11c \uc81c\ub124\ub9ad \ud074\ub798\uc2a4\ub85c \ubb36\uc5c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>export default class UserDictionaryCacheUidBase&lt;T&gt; {\n    private _key: string;\n    private _redisClient: IORedis.Redis;\n\n    constructor(key: string, redisClient: IORedis.Redis) {\n        this._key = key;\n        this._redisClient = redisClient;\n    }\n\n    public async GetData(\n        userID: string,\n        uid: string\n    ): Promise&lt;T&gt; {\n        const data = await this._redisClient.hget(\n            this._key + userID,\n            uid.toString()\n        );\n\n        return JSON.parse(data as string) as T;\n    }\n\n    public async SetData(\n        userID: string,\n        uid: string,\n        data: T\n    ): Promise&lt;void&gt; {\n        await this._redisClient.hset(\n            this._key + userID,\n            uid.toString(),\n            JSON.stringify(data)\n        );\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c \ub9cc\ub4e4\uc5b4 \ub193\uc73c\ub2c8 \uc544\uc774\ud15c\uc774\ub098 \uc138\uc158\ucc98\ub7fc \ube44\uc2b7\ud55c \ud615\ud0dc\uc758 \ub370\uc774\ud130\ub97c \ucd94\uac00\ud560 \ub54c Redis \uc811\uadfc \ucf54\ub4dc\ub97c \ub2e4\uc2dc \uc791\uc131\ud560 \ud544\uc694\uac00 \uc5c6\uc5c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Redis\ub97c \uc4f0\uba74\uc11c \uc0dd\uae34 \ub3d9\uc2dc\uc131 \ubb38\uc81c<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Redis\ub97c \uc0ac\uc6a9\ud558\uba74\uc11c \ub610 \ub2e4\ub978 \ubb38\uc81c\uac00 \uc0dd\uacbc\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc0c1\uc810 \uad6c\ub9e4 \ucc98\ub9ac\uc600\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ucc98\uc74c\uc5d0\ub294 \uad6c\ub9e4 \uc694\uccad\uc774 \ub4e4\uc5b4\uc624\uba74 Redis\uc5d0\uc11c \uc794\uc561\uc744 \ud655\uc778\ud558\uace0 \ucc28\uac10\ud55c \ub2e4\uc74c MySQL\uc5d0 \uc800\uc7a5\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ubb38\uc81c\ub294 \uc694\uccad\uc774 \ub3d9\uc2dc\uc5d0 \ub4e4\uc5b4\uc62c \uc218 \uc788\ub2e4\ub294 \uac83\uc774\uc5c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \uc794\uc561\uc774 100\uc774\uace0 70\uc9dc\ub9ac \uc544\uc774\ud15c\uc744 \ub450 \ubc88 \uad6c\ub9e4\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uc0c1\ud669\uc774 \uac00\ub2a5\ud588\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\uc694\uccad A -&gt; \uc794\uc561 100 \uc870\ud68c\n\uc694\uccad B -&gt; \uc794\uc561 100 \uc870\ud68c\n\uc694\uccad A -&gt; 70 \ucc28\uac10\n\uc694\uccad B -&gt; 70 \ucc28\uac10\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Redis\ub97c \uc0ac\uc6a9\ud55c\ub2e4\uace0 \ud574\uc11c \uc774 \uacfc\uc815 \uc804\uccb4\uac00 \uc790\ub3d9\uc73c\ub85c \uc6d0\uc790\uc801\uc73c\ub85c \ucc98\ub9ac\ub418\ub294 \uac83\uc740 \uc544\ub2c8\uc5c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>HGET<\/code>\ud558\uace0 <code>HSET<\/code>\ud558\ub294 \uc0ac\uc774\uc5d0 \ub2e4\ub978 \uc694\uccad\uc774 \ub4e4\uc5b4\uc62c \uc218 \uc788\uae30 \ub54c\ubb38\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c \uad6c\ub9e4 \uc694\uccad \uc790\uccb4\ub97c \ubcc0\uacbd\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\ub7ec \uc544\uc774\ud15c\uc744 \uad6c\ub9e4\ud558\ub294 \uacbd\uc6b0 \uac01\uac01 \ub530\ub85c \ucc98\ub9ac\ud558\uc9c0 \uc54a\uace0 \uad6c\ub9e4 \ubaa9\ub85d\uc744 \ud55c \ubc88\uc5d0 \ubc1b\ub3c4\ub85d \ud588\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\uad6c\ub9e4 \ubaa9\ub85d\n-&gt; \uc804\uccb4 \uae08\uc561 \uacc4\uc0b0\n-&gt; \uc794\uc561 \ud655\uc778\n-&gt; \ud55c \ubc88\uc5d0 \ucc28\uac10\n-&gt; \uc544\uc774\ud15c \uc9c0\uae09\n-&gt; DB \ubc18\uc601\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c \ucc98\ub9ac\ud558\uba74\uc11c \uac19\uc740 \uc694\uccad\uc5d0\uc11c \ud544\uc694\ud55c \uae08\uc561\uc744 \uba3c\uc800 \uacc4\uc0b0\ud558\uace0 \ucc98\ub9ac\ud558\ub3c4\ub85d \ub9cc\ub4e4\uc5c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubb38\uc81c\ub97c \uacaa\uace0 \ub098\uc11c Redis\ub97c \uce90\uc2dc\ub85c \uc0ac\uc6a9\ud558\ub294 \uac83\uacfc Redis\ub97c \uc0c1\ud0dc \uc800\uc7a5\uc18c\ub85c \uc0ac\uc6a9\ud558\ub294 \uac83\uc740 \uc0dd\uac01\ubcf4\ub2e4 \ucc28\uc774\uac00 \ud06c\ub2e4\ub294 \uac78 \ub290\uaf08\ub2e4. \ub2e8\uc21c\ud788 DB\ubcf4\ub2e4 \ube60\ub978 \uc800\uc7a5\uc18c\ub97c \ud558\ub098 \ucd94\uac00\ud55c\ub2e4\uace0 \ud574\uc11c \ub3d9\uc2dc\uc131 \ubb38\uc81c\uac00 \uc0ac\ub77c\uc9c0\ub294 \uac83\uc740 \uc544\ub2c8\uc5c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ub7ad\ud0b9<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\ub7ad\ud0b9\uc740 Redis Sorted Set\uc744 \uc0ac\uc6a9\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc810\uc218 \ubcc0\uacbd\uc740 <code>ZADD<\/code>, \uc21c\uc704 \uc870\ud68c\ub294 <code>ZREVRANGE<\/code>\ub97c \uc0ac\uc6a9\ud588\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ZADD -&gt; \uc810\uc218 \ubcc0\uacbd\nZREVRANGE -&gt; \uc21c\uc704 \uc870\ud68c\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub7ad\ud0b9\uc744 \uc870\ud68c\ud560 \ub54c\ub9c8\ub2e4 MySQL\uc5d0\uc11c \uc804\uccb4 \ub370\uc774\ud130\ub97c \uc815\ub82c\ud558\ub294 \uac83\ubcf4\ub2e4 Redis\uc5d0\uc11c \ubc14\ub85c \uac00\uc838\uc624\ub294 \ud3b8\uc774 \uc801\ud569\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \uc601\uc18d \ub370\uc774\ud130\ub294 MySQL\uc5d0 \ub450\uace0, \uc790\uc8fc \uc870\ud68c\ud558\ub294 \ub7ad\ud0b9 \ub370\uc774\ud130\ub294 Redis\uc5d0\uc11c \ucc98\ub9ac\ud558\ub294 \uc2dd\uc73c\ub85c \uc5ed\ud560\uc744 \ub098\ub234\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">DAU\uc640 \ub3d9\uc2dc \uc811\uc18d\uc790 \ud1b5\uacc4<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uae30\ubcf8\uc801\uc778 \uc11c\ubc84 \ud1b5\uacc4\ub3c4 \uc9c1\uc811 \ub9cc\ub4e4\uc5c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DAU\ub294 Redis Hash\uc5d0 \uc720\uc800 ID\ub97c \ub123\uc5b4\uc11c \uac19\uc740 \uc0ac\uc6a9\uc790\uac00 \uc5ec\ub7ec \ubc88 \uc811\uc18d\ud574\ub3c4 \ud55c \ubc88\ub9cc \uc9d1\uacc4\ub418\ub3c4\ub85d \ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud604\uc7ac \uc811\uc18d\uc790\ub294 \uc138\uc158 \ub370\uc774\ud130\uc758 \uac1c\uc218\ub97c \uae30\uc900\uc73c\ub85c \uacc4\uc0b0\ud588\uace0, \uadf8\ub0a0 \uae30\ub85d\ub41c \ucd5c\ub300 \ub3d9\uc2dc \uc811\uc18d\uc790 \uc218\ub3c4 \ubcc4\ub3c4\ub85c \uc800\uc7a5\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub0a0\uc9dc\uac00 \ubcc0\uacbd\ub418\uba74 \uc774\uc804 \ud1b5\uacc4\ub97c MySQL\uc5d0 \uc800\uc7a5\ud558\uace0 \uc0c8\ub85c\uc6b4 \ub0a0\uc9dc\uc758 \ud1b5\uacc4\ub97c \ub2e4\uc2dc \uc2dc\uc791\ud588\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\uc0ac\uc6a9\uc790 \uc811\uc18d\n-&gt; DAU \ub4f1\ub85d\n-&gt; \ud604\uc7ac \uc138\uc158 \uc218 \ud655\uc778\n-&gt; \ucd5c\ub300 \ub3d9\uc2dc \uc811\uc18d\uc790 \uac31\uc2e0\n-&gt; \ud1b5\uacc4 \uc800\uc7a5\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\ub2e8\ud55c \ubaa8\ub2c8\ud130\ub9c1 \uc2dc\uc2a4\ud15c\uc744 \ub9cc\ub4e0 \uac83\uc740 \uc544\ub2c8\uc9c0\ub9cc \ubcc4\ub3c4\uc758 \uc2dc\uc2a4\ud15c\uc744 \ubd99\uc774\uc9c0 \uc54a\uace0 \uc11c\ubc84\uc5d0\uc11c \ud544\uc694\ud55c \uc218\uce58\ub97c \ubc14\ub85c \ud655\uc778\ud560 \uc218 \uc788\ub2e4\ub294 \uc810\uc740 \ud3b8\ud588\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\uac1c\ubc1c\ud558\uba74\uc11c \uac00\uc7a5 \ub9ce\uc774 \ubc14\ub010 \uc0dd\uac01<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\ucc98\uc74c\uc5d0\ub294 \uc11c\ubc84 \uc131\ub2a5 \ubb38\uc81c\ub97c CPU\uc640 \ud504\ub85c\uc138\uc2a4 \uc218\uc758 \ubb38\uc81c\ub77c\uace0 \uc0dd\uac01\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c Cluster\ub97c \uc4f0\uace0 Worker Thread\ub97c \uc4f0\uba74 \ub300\ubd80\ubd84 \ud574\uacb0\ub420 \uac83\uc774\ub77c\uace0 \uc0dd\uac01\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c\ub85c\ub294 \uadf8\ub807\uc9c0 \uc54a\uc558\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud328\ud0b7\uc774 \ub9ce\uc544\uc9c0\ub2c8\uae4c \ub124\ud2b8\uc6cc\ud06c \ud050\uc5d0\uc11c \ubb38\uc81c\uac00 \uc0dd\uacbc\uace0, \uc6d4\ub4dc\ub97c \ube60\ub974\uac8c \ub9cc\ub4e4\uace0 \uc5c6\uc560\ub2c8\uae4c \ud3ec\ud2b8 \uc218\uba85 \uad00\ub9ac\uc5d0\uc11c \ubb38\uc81c\uac00 \uc0dd\uacbc\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Redis\ub97c \uc0ac\uc6a9\ud574\uc11c DB \uc811\uadfc\uc744 \uc904\uc600\ub354\ub2c8 \uc774\ubc88\uc5d0\ub294 \ub3d9\uc2dc \uc694\uccad\uc5d0 \ub300\ud55c \ub370\uc774\ud130 \uc815\ud569\uc131\uc744 \uc2e0\uacbd \uc368\uc57c \ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uacb0\uad6d \uc11c\ubc84\uc5d0\uc11c \uc911\uc694\ud55c \uac74 \ud2b9\uc815 \uae30\uc220\uc744 \ub9ce\uc774 \uc0ac\uc6a9\ud558\ub294 \uac8c \uc544\ub2c8\uc5c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5b4\ub5a4 \uc791\uc5c5\uc744 \uac19\uc740 \ud504\ub85c\uc138\uc2a4\uc5d0\uc11c \ucc98\ub9ac\ud560 \uac83\uc778\uc9c0, \uc5b4\ub5a4 \ub370\uc774\ud130\ub294 \ub2a6\uc5b4\ub3c4 \uad1c\ucc2e\uace0 \uc5b4\ub5a4 \ub370\uc774\ud130\ub294 \ub2a6\uc73c\uba74 \uc548 \ub418\ub294\uc9c0, \uc2e4\ud328\ud588\uc744 \ub54c \uc5b4\ub514\uae4c\uc9c0 \ubcf5\uad6c\ud574\uc57c \ud558\ub294\uc9c0\ub97c \uc815\ud558\ub294 \uc77c\uc774 \ub354 \uc911\uc694\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ubc88 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \ucd5c\uc885\uc801\uc73c\ub85c \uc7a1\uc740 \uad6c\uc870\ub3c4 \uc774\ub7f0 \ud310\ub2e8\uc758 \uacb0\uacfc\uc600\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client\n-&gt; API Server\n-&gt; \uc778\uc99d \/ \uacc4\uc815 \/ \uc778\ubca4\ud1a0\ub9ac \/ \uc0c1\uc810 \/ \uc6d4\ub4dc \uad00\ub9ac\n\nClient\n-&gt; World Server\n-&gt; \uc2e4\uc2dc\uac04 \uc704\uce58 \/ \ub8f8 \uc774\ubca4\ud2b8 \/ \ube0c\ub85c\ub4dc\uce90\uc2a4\ud2b8\n\nAPI \/ World Server\n-&gt; Redis\n-&gt; \uc138\uc158 \/ \uce90\uc2dc \/ \ub7ad\ud0b9 \/ \uc2e4\uc2dc\uac04 \uc0c1\ud0dc\n\nRedis\n-&gt; MySQL\n-&gt; \uc601\uc18d \ub370\uc774\ud130 \/ \ud1b5\uacc4\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\uc544\uc26c\uc6e0\ub358 \ubd80\ubd84<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\ud604\uc7ac \uad6c\uc870\ub294 \ud55c \ub300\uc758 \uc11c\ubc84\uc5d0\uc11c \uc5ec\ub7ec World Worker\ub97c \uad00\ub9ac\ud558\ub294 \ubc29\uc2dd\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uac1c\ubc1c \uaddc\ubaa8\uc5d0\uc11c\ub294 \ucda9\ubd84\ud588\uc9c0\ub9cc \uc6d4\ub4dc\uac00 \uacc4\uc18d \ub298\uc5b4\ub098\uba74 \uacb0\uad6d \ud55c \uc11c\ubc84\uc758 CPU\uc640 \uba54\ubaa8\ub9ac\uac00 \ud55c\uacc4\uac00 \ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Worker Thread\ub97c \uacc4\uc18d \ub9cc\ub4dc\ub294 \uac83\uc73c\ub85c \ud574\uacb0\ud560 \uc218 \uc788\ub294 \ubb38\uc81c\ub294 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\uc74c\uc5d0 \uac19\uc740 \uc2dc\uc2a4\ud15c\uc744 \ub354 \ud070 \uaddc\ubaa8\ub85c \ub9cc\ub4e0\ub2e4\uba74 \uc6d4\ub4dc \uc11c\ubc84\ub97c \ucc98\uc74c\ubd80\ud130 \ub3c5\ub9bd\uc801\uc778 \uc2e4\ud589 \ub2e8\uc704\ub85c \ubd84\ub9ac\ud558\ub294 \ubc29\ud5a5\uc744 \uc0dd\uac01\ud560 \uac83 \uac19\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uba74 Kubernetes\ub098 Agones \uac19\uc740 \ud658\uacbd\uc5d0\uc11c \uc6d4\ub4dc \uc11c\ubc84\ub97c \uac01\uac01 \ubcc4\ub3c4\uc758 \uc778\uc2a4\ud134\uc2a4\ub85c \uad00\ub9ac\ud558\uace0 \ud544\uc694\ud55c \ub9cc\ud07c \ub298\ub9ac\ub294 \ubc29\uc2dd\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub124\ud2b8\uc6cc\ud06c\ub3c4 \ud604\uc7ac\ub294 WebSocket\uc744 \uc0ac\uc6a9\ud558\uace0 \uc788\uc9c0\ub9cc \uc704\uce58 \ub3d9\uae30\ud654\uac00 \ub354 \uc911\uc694\ud574\uc9c0\ub294 \ud658\uacbd\uc774\ub77c\uba74 WebTransport\ub098 QUIC \uacc4\uc5f4\uc744 \uac80\ud1a0\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub370\uc774\ud130 \uc800\uc7a5 \ubc29\uc2dd\ub3c4 \ub9c8\ucc2c\uac00\uc9c0\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud604\uc7ac\ub294 Redis\uc5d0 \uba3c\uc800 \uc0c1\ud0dc\ub97c \ubc18\uc601\ud558\uace0 MySQL\uc5d0 \ube44\ub3d9\uae30\ub85c \uc800\uc7a5\ud558\ub294 \ubd80\ubd84\uc774 \uc788\uae30 \ub54c\ubb38\uc5d0 \ub450 \uc800\uc7a5\uc18c\uc758 \uc0c1\ud0dc\uac00 \uc7a0\uc2dc \ub2ec\ub77c\uc9c8 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uaddc\ubaa8\uac00 \ucee4\uc9c4\ub2e4\uba74 Transactional Outbox \uac19\uc740 \ubc29\uc2dd\uc744 \uc0ac\uc6a9\ud574\uc11c Redis\uc640 MySQL \uc0ac\uc774\uc758 \ub370\uc774\ud130 \ubcc0\uacbd\uc744 \ubcf4\ub2e4 \uc548\uc815\uc801\uc73c\ub85c \uc804\ub2ec\ud558\ub294 \uad6c\uc870\ub3c4 \uace0\ub824\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ub9c8\ubb34\ub9ac<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uac00\uc7a5 \ub9ce\uc774 \uace0\ubbfc\ud588\ub358 \uac83\uc740 \uacb0\uad6d &#8220;\uc5b4\ub5bb\uac8c \ub354 \ube60\ub974\uac8c \ub9cc\ub4e4 \uac83\uc778\uac00&#8221;\ubcf4\ub2e4\ub294 &#8220;\uc5b4\ub514\uae4c\uc9c0 \ubd84\ub9ac\ud574\uc57c \ud558\ub294\uac00&#8221;\uc600\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ucc98\uc74c\ubd80\ud130 Cluster, Worker Thread, Redis \uac19\uc740 \uae30\uc220\uc744 \uc804\ubd80 \uc0ac\uc6a9\ud55c \uac83\uc740 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud544\uc694\ud55c \ubb38\uc81c\uac00 \uc0dd\uae38 \ub54c\ub9c8\ub2e4 \ud558\ub098\uc529 \ucd94\uac00\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">API\uc640 \uc2e4\uc2dc\uac04 \uc6d4\ub4dc\ub97c \ubd84\ub9ac\ud588\uace0, \uc6d4\ub4dc \uc548\uc5d0\uc11c\ub3c4 \ud2b9\uc815 \uc791\uc5c5\uc744 \ubcc4\ub3c4 Worker\ub85c \ub5bc\uc5c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc704\uce58 \ud328\ud0b7\uc740 \uc804\ubd80 \uc548\uc815\uc801\uc73c\ub85c \uc804\ub2ec\ud558\ub824\uace0 \ud558\uae30\ubcf4\ub2e4 \uc624\ub798\ub41c \ub370\uc774\ud130\ub294 \ubc84\ub9ac\ub294 \ucabd\uc73c\ub85c \ubc14\uafe8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Redis\ub97c \uc0ac\uc6a9\ud558\uba74\uc11c \ubc1c\uc0dd\ud55c \ub3d9\uc2dc\uc131 \ubb38\uc81c\ub3c4 \uc9c1\uc811 \ucc98\ub9ac\ud558\uba74\uc11c \ub370\uc774\ud130\uac00 \ubcc0\uacbd\ub418\ub294 \uc21c\uc11c\ub97c \ub2e4\uc2dc \ud655\uc778\ud588\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub7f0 \uacfc\uc815\uc744 \uac70\uce58\uba74\uc11c \uc11c\ubc84 \uad6c\uc870\ub97c \uc7a1\uc744 \ub54c \uae30\uc220 \uc774\ub984\ubd80\ud130 \uc815\ud558\ub294 \uac83\ubcf4\ub2e4\ub294 \uba3c\uc800 \ub370\uc774\ud130\uc640 \uc791\uc5c5\uc758 \uc131\uaca9\uc744 \ub098\ub204\ub294 \uac8c \uc911\uc694\ud558\ub2e4\ub294 \ucabd\uc73c\ub85c \uc0dd\uac01\uc774 \ubc14\ub00c\uc5c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc2dc\uac04 \uc11c\ubc84\ub294 \ud2b9\ud788 \uadf8\ub807\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ubaa8\ub4e0 \ub370\uc774\ud130\ub97c \ube60\ub974\uac8c \ucc98\ub9ac\ud558\ub824\uace0 \ud558\ub294 \uac83\ubcf4\ub2e4, \ubb34\uc5c7\uc744 \ube60\ub974\uac8c \ucc98\ub9ac\ud574\uc57c \ud558\uace0 \ubb34\uc5c7\uc744 \ubc84\ub824\ub3c4 \ub418\ub294\uc9c0\ub97c \uc815\ud558\ub294 \uac8c \ub354 \uc911\uc694\ud588\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uace0\uc131\ub2a5 \uc2e4\uc2dc\uac04 \uac00\uc0c1 \uacf5\uac04 \ubc31\uc5d4\ub4dc \uac1c\ubc1c \ud68c\uace0 \uc774\ubc88 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c\ub294 \uc5ec\ub7ec \uc0ac\uc6a9\uc790\uac00 \ud558\ub098\uc758 \uac00\uc0c1 \uacf5\uac04\uc5d0 \ub4e4\uc5b4\uc640 \uc11c\ub85c\uc758 \uc0c1\ud0dc\ub97c \uc2e4\uc2dc\uac04\uc73c\ub85c \uacf5\uc720\ud558\ub294 \uc11c\ubc84\ub97c \uac1c\ubc1c\ud588\ub2e4. \ucc98\uc74c\ubd80\ud130 \uc9c0\uae08\uacfc \uac19\uc740 \uad6c\uc870\ub85c \uc2dc\uc791\ud55c \uac83\uc740 \uc544\ub2c8\ub2e4. \ucc98\uc74c\uc5d0\ub294 \uc77c\ubc18\uc801\uc778 Node.js \uc11c\ubc84\ub97c \uae30\uc900\uc73c\ub85c \uae30\ub2a5\uc744 \ubd99\uc5ec \ub098\uac14\ub2e4. \ub85c\uadf8\uc778\uc774\ub098 \ud68c\uc6d0 \uc815\ubcf4, \uc778\ubca4\ud1a0\ub9ac, \uc0c1\uc810 \uac19\uc740 \uae30\ub2a5\uc740 \ud070 \ubb38\uc81c\uac00 \uc5c6\uc5c8\ub2e4. \ubb38\uc81c\ub294 \uc2e4\uc2dc\uac04 \uc6d4\ub4dc\uac00 \ubd99\uc73c\uba74\uc11c \uc0dd\uacbc\ub2e4. \ud50c\ub808\uc774\uc5b4\uac00 \uc6c0\uc9c1\uc77c \ub54c\ub9c8\ub2e4 \uc704\uce58\uc640 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[55],"tags":[],"class_list":["post-2183","post","type-post","status-publish","format-standard","hentry","category-server-projects"],"_links":{"self":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/2183","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=2183"}],"version-history":[{"count":5,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/2183\/revisions"}],"predecessor-version":[{"id":2359,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/2183\/revisions\/2359"}],"wp:attachment":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2183"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2183"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2183"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}