{"id":1616,"date":"2014-12-16T19:32:08","date_gmt":"2014-12-16T19:32:07","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1616"},"modified":"2023-06-28T00:23:43","modified_gmt":"2023-06-28T07:23:43","slug":"game-servers-and-couchbase-nodejs-part-3","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/game-servers-and-couchbase-nodejs-part-3\/","title":{"rendered":"Node.js\ub97c \uc0ac\uc6a9\ud55c \uac8c\uc784 \uc11c\ubc84 \ubc0f \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 - 3\ubd80"},"content":{"rendered":"<p>\uc774\ubc88 \uc5f0\uc7ac\uc5d0\uc11c\ub294 \ud50c\ub808\uc774\uc5b4\uac00 \uac8c\uc784\uc744 \uc990\uae30\ub294 \ub3d9\uc548 \uac8c\uc784 \uc0c1\ud0dc\ub97c \uc800\uc7a5\ud560 \uc218 \uc788\ub3c4\ub85d \uac8c\uc784 \ub370\uc774\ud130 \uc800\uc7a5 \uc2dc\uc2a4\ud15c\uc744 \uc124\uc815\ud558\uaca0\uc2b5\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574 \uac1c\ubcc4 \uc0c1\ud0dc \ub370\uc774\ud130 \ube14\ub85d\uc744 \ub098\ud0c0\ub0b4\ub294 \/state \ubc0f \/states \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub97c \ub9cc\ub4e4\uaca0\uc2b5\ub2c8\ub2e4. \uc5ec\ub7ec \uac1c\uc758 \uba85\uba85\ub41c \uc0c1\ud0dc \ube14\ub85d\uc744 \ud5c8\uc6a9\ud558\uc5ec \uac8c\uc784\uc5d0\uc11c \uc0c1\ud0dc \ub370\uc774\ud130\ub97c \uac1c\ubcc4\uc801\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8 \uac00\ub2a5\ud55c \ube14\ub85d\uc73c\ub85c \ub098\ub204\uc5b4 \ud55c \ubd80\ubd84\ub9cc \ubcc0\uacbd\ub418\uc5c8\uc744 \ub54c \ub9ce\uc740 \uc0c1\ud0dc \ube14\ub85d\uc744 \uc791\uc131\ud560 \ud544\uc694\uac00 \uc5c6\ub3c4\ub85d \ud560 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc544\uc9c1 \uc77d\uc9c0 \uc54a\uc558\ub2e4\uba74 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/game-servers-and-couchbase-nodejs-part-1\/\">1\ubd80<\/a> \uadf8\ub9ac\uace0 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/game-servers-and-couchbase-nodejs-part-2\/\">\ud30c\ud2b8 2<\/a> \uc774 \uc2dc\ub9ac\uc988\uc640 \uc55e\uc73c\ub85c\uc758 \ubaa8\ub4e0 \uc2dc\ub9ac\uc988\uac00 \uc774 \ubd80\ubd84\uc744 \uae30\ubc18\uc73c\ub85c \ub9cc\ub4e4\uc5b4\uc9c0\uae30 \ub54c\ubb38\uc5d0 \uaf2d \uc77d\uc5b4\ubcf4\uc2dc\uae38 \uad8c\ud574\ub4dc\ub9bd\ub2c8\ub2e4!<\/p>\n<h1>\ud035 \uc0ac\uc774\ub4dc - \uc138\uc158 \uac31\uc2e0<\/h1>\n<p>\uc774\uc804 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0 \ud3ec\ud568\ub418\uc5b4\uc57c \ud588\ub358 \uc911\uc694\ud55c \ub0b4\uc6a9\uc740 \uc0ac\uc6a9\uc790\uac00 \uc811\uc18d\ud560 \ub54c\ub9c8\ub2e4 \uc0ac\uc6a9\uc790 \uc138\uc158\uc744 \uac31\uc2e0\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uc774 \uae30\ub2a5\uc774 \uc5c6\uc73c\uba74 \ud50c\ub808\uc774\uc5b4\uac00 \uacc4\uc18d \ud50c\ub808\uc774\ud558\uace0 \uc788\ub294\uc9c0 \uc5ec\ubd80\uc640 \uad00\uacc4\uc5c6\uc774 \uc138\uc158\uc774 60\ubd84 \ud6c4\uc5d0 \ub9cc\ub8cc\ub429\ub2c8\ub2e4. \uc774\ub294 \uba85\ubc31\ud788 \uc800\ud76c\uc758 \uc758\ub3c4\uac00 \uc544\ub2c8\uc5c8\uc73c\ubbc0\ub85c \uc218\uc815\ud558\uaca0\uc2b5\ub2c8\ub2e4!<\/p>\n<p>\uba3c\uc800 \uc138\uc158\ubaa8\ub378\uc5d0 \uc0c8 \ud568\uc218\ub97c \ucd94\uac00\ud574\uc57c \ud558\ubbc0\ub85c \uc138\uc158\ubaa8\ub378.js\ub97c \uc5f4\uace0 \ub2e4\uc74c \ube14\ub85d\uc744 \ucd94\uac00\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc774 \ud568\uc218\ub294 \ub9e4\uc6b0 \uac04\ub2e8\ud55c \ud568\uc218\ub85c, \uc138\uc158 ID\ub97c \uac00\uc838\uc640 \uc774\uc5d0 \ub300\ud574 \ud130\uce58 \uc5f0\uc0b0\uc744 \uc218\ud589\ud558\uc5ec \ub9cc\ub8cc \uc2dc\uac04\uc744 \ub2e4\uc2dc 3600\uc73c\ub85c \uc7ac\uc124\uc815\ud569\ub2c8\ub2e4(\ud0a4\uac00 \ucc98\uc74c \uc0bd\uc785\ub41c \uc2dc\uc810\uc774 \uc544\ub2c8\ub77c \ud130\uce58 \uc2e4\ud589 \uc2dc\uc810\ubd80\ud130 \uc2dc\uc791).<\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family: monospace\">\n<p>\uc138\uc158 \ubaa8\ub378.<span style=\"color: #660066\">\ud130\uce58<\/span> <span style=\"color: #339933\">=<\/span> <span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span><span style=\"color: #009900\">(<\/span>sid<span style=\"color: #339933\">,<\/span> \ucf5c\ubc31<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #003366;font-weight: bold\">var<\/span> sessDocName <span style=\"color: #339933\">=<\/span> <span style=\"color: #3366cc\">'sess-'<\/span> <span style=\"color: #339933\">+<\/span> sid<span style=\"color: #339933\">;<\/span><\/p>\n<p>db.<span style=\"color: #660066\">\ud130\uce58<\/span><span style=\"color: #009900\">(<\/span>sessDocName<span style=\"color: #339933\">,<\/span> <span style=\"color: #009900\">{<\/span>\ub9cc\ub8cc<span style=\"color: #339933\">:<\/span> <span style=\"color: #cc0000\">3600<\/span><span style=\"color: #009900\">}<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span><span style=\"color: #009900\">(<\/span>err<span style=\"color: #339933\">,<\/span> \uacb0\uacfc<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n\ucf5c\ubc31<span style=\"color: #009900\">(<\/span>err<span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #339933\">;<\/span><\/p>\n<\/div>\n<\/div>\n<p>\uc774\uc81c \uc138\uc158\uc744 \uc5c5\ub370\uc774\ud2b8\ud558\uae30 \uc704\ud55c \ubaa8\ub378 \ud568\uc218\ub97c \ub9cc\ub4e4\uc5c8\uc73c\ub2c8 \ud638\ucd9c\ud558\uae30 \uc88b\uc740 \uacf3\uc744 \ucc3e\uc544\ubd05\uc2dc\ub2e4. \uc0ac\uc6a9\uc790\uac00 \uc778\uc99d\ub418\uc5b4\uc57c \ud558\ub294 \ubaa8\ub4e0 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc5d0\uc11c \uc2e4\ud589\ub418\ub294 authUser \uba54\uc11c\ub4dc\uac00 \uc801\ud569\ud574 \ubcf4\uc785\ub2c8\ub2e4. \uc774\uc81c \uadf8\ub807\uac8c \ud574\ubd05\uc2dc\ub2e4. \ub2e4\uc74c\uc740 \ud130\uce58 \ud638\ucd9c\uc774 \ucd94\uac00\ub41c \uc0c8\ub85c\uc6b4 authUser \ud568\uc218\uc785\ub2c8\ub2e4.<\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family: monospace\"><span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span> authUser<span style=\"color: #009900\">(<\/span>req<span style=\"color: #339933\">,<\/span> res<span style=\"color: #339933\">,<\/span> \ub2e4\uc74c<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\nreq.<span style=\"color: #660066\">uid<\/span> <span style=\"color: #339933\">=<\/span> <span style=\"color: #003366;font-weight: bold\">null<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>req.<span style=\"color: #660066\">\ud5e4\ub354<\/span>.<span style=\"color: #660066\">\uad8c\ud55c \ubd80\uc5ec<\/span><span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #003366;font-weight: bold\">var<\/span> authInfo <span style=\"color: #339933\">=<\/span> req.<span style=\"color: #660066\">\ud5e4\ub354<\/span>.<span style=\"color: #660066\">\uad8c\ud55c \ubd80\uc5ec<\/span>.<span style=\"color: #660066\">\ubd84\ud560<\/span><span style=\"color: #009900\">(<\/span><span style=\"color: #3366cc\">&#8216; &#8216;<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>authInfo<span style=\"color: #009900\">[<\/span><span style=\"color: #cc0000\">0<\/span><span style=\"color: #009900\">]<\/span> <span style=\"color: #339933\">===<\/span> <span style=\"color: #3366cc\">'\ubb34\uae30\uba85'<\/span><span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #003366;font-weight: bold\">var<\/span> sid <span style=\"color: #339933\">=<\/span> authInfo<span style=\"color: #009900\">[<\/span><span style=\"color: #cc0000\">1<\/span><span style=\"color: #009900\">]<\/span><span style=\"color: #339933\">;<\/span><br \/>\n\uc138\uc158 \ubaa8\ub378.<span style=\"color: #660066\">get<\/span><span style=\"color: #009900\">(<\/span>sid<span style=\"color: #339933\">,<\/span> <span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span><span style=\"color: #009900\">(<\/span>err<span style=\"color: #339933\">,<\/span> uid<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>err<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n\ub2e4\uc74c<span style=\"color: #009900\">(<\/span><span style=\"color: #3366cc\">'\uc138\uc158 ID\uac00 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4'<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span> <span style=\"color: #000066;font-weight: bold\">else<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n\uc138\uc158 \ubaa8\ub378.<span style=\"color: #660066\">\ud130\uce58<\/span><span style=\"color: #009900\">(<\/span>sid<span style=\"color: #339933\">,<\/span> <span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span><span style=\"color: #009900\">(<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #009900\">{<\/span><span style=\"color: #009900\">}<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\nreq.<span style=\"color: #660066\">uid<\/span> <span style=\"color: #339933\">=<\/span> uid<span style=\"color: #339933\">;<\/span><br \/>\n\ub2e4\uc74c<span style=\"color: #009900\">(<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span> <span style=\"color: #000066;font-weight: bold\">else<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n\ub2e4\uc74c<span style=\"color: #009900\">(<\/span><span style=\"color: #3366cc\">'\uc774 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc5d0 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\ub294 \uad8c\ud55c\uc774 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4'<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><br \/>\n<span style=\"color: #009900\">}<\/span> <span style=\"color: #000066;font-weight: bold\">else<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n\ub2e4\uc74c<span style=\"color: #009900\">(<\/span><span style=\"color: #3366cc\">'\uc774 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc5d0 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\ub294 \uad8c\ud55c\uc774 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4'<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><\/div>\n<\/div>\n<p>\uc774\ubc88 \uc138\uc158 \ub9cc\ub8cc \uc218\uc815\uc758 \uc77c\ud658\uc73c\ub85c, \uc774 \ube14\ub85c\uadf8 \uac8c\uc2dc \uc774\uc804\uc5d0 \uc218\uc815\ub418\uc5c8\uc9c0\ub9cc \ucd5c\uc2e0 \uc8fc\uae30 \ub9b4\ub9ac\uc2a4 \uc774\ud6c4\uc5d0 \uc218\uc815\ub41c \ud130\uce58 \uad6c\ud604\uc758 \ubc84\uadf8\ub85c \uc778\ud574 GitHub\uc5d0\uc11c \uc9c1\uc811 \uce74\uc6b0\uce58\ub178\ub4dc \ubc84\uc804\uc744 \uac00\uc838\uc640\uc57c \ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h1>\uac8c\uc784 \uc0c1\ud0dc - \ubaa8\ub378<\/h1>\n<p>\uc774\uc81c \uc774\uc804 \ud30c\ud2b8\uc758 \uc791\uc740 \ubb38\uc81c\ub97c \ud574\uacb0\ud588\uc73c\ub2c8 \uac8c\uc784 \uc0c1\ud0dc \uc800\uc7a5 \uad6c\ud604\uc73c\ub85c \ub118\uc5b4\uac00 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4! \uc704\uc5d0\uc11c \ub9d0\ud588\ub4ef\uc774 \ub124\ud2b8\uc6cc\ud06c \ud2b8\ub798\ud53d\uc744 \uc904\uc774\uae30 \uc704\ud574 \uac8c\uc784\uc774 \uc5ec\ub7ec \uc0c1\ud0dc \ube14\ub85d\uc5d0 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud560 \uc218 \uc788\ub3c4\ub85d \ud560 \uac83\uc785\ub2c8\ub2e4. \uc2a4\ud1a0\ub9ac\uc9c0 \uad00\uc810\uc5d0\uc11c \uc774\ub7ec\ud55c \ubaa8\ub4e0 \uc0c1\ud0dc \ube14\ub85d\uc744 \ud558\ub098\uc758 Couchbase \ubb38\uc11c\uc5d0 \uc800\uc7a5\ud560 \uac83\uc774\uba70, \uc774 \ubb38\uc11c\ub294 \uc0ac\uc6a9\uc790\uc758 \uccab \ubc88\uc9f8 \uc815\ubcf4 \uc800\uc7a5 \uc694\uccad \uc2dc \ub290\ub9ac\uac8c \uc0dd\uc131\ub420 \uac83\uc785\ub2c8\ub2e4. \uc800\uc7a5\ub41c \ub0b4\uc6a9\uc774 \uc788\uc744 \ub54c\uae4c\uc9c0\ub294 \uace7 \ubcf4\uac8c \ub418\uaca0\uc9c0\ub9cc \uc0ac\uc6a9\uc790\uc758 \ube48 \uc0c1\ud0dc \ubaa9\ub85d\uc744 \uc5d0\ubbac\ub808\uc774\ud2b8\ud560 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>\uba3c\uc800 model\/statemodel.js\uc5d0\uc11c \ud45c\uc900 \ubaa8\ub378 \ud30c\uc77c \ub808\uc774\uc544\uc6c3\uc744 \uc124\uc815\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \ud544\uc694\ud55c \ubaa8\ub4c8\uc744 \uc784\ud3ec\ud2b8\ud558\uace0 StateModel\uc774\ub77c\ub294 \uba54\uc11c\ub4dc\uac00 \uc5c6\ub294 \ubaa8\ub378\uc744 \uc124\uc815\ud569\ub2c8\ub2e4.<\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family: monospace\">\n<p><span style=\"color: #003366;font-weight: bold\">var<\/span> db <span style=\"color: #339933\">=<\/span> require<span style=\"color: #009900\">(<\/span><span style=\"color: #3366cc\">'.\/..\/\ub370\uc774\ud130\ubca0\uc774\uc2a4'<\/span><span style=\"color: #009900\">)<\/span>.<span style=\"color: #660066\">\uba54\uc778\ubc84\ud0b7<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #003366;font-weight: bold\">var<\/span> \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 <span style=\"color: #339933\">=<\/span> require<span style=\"color: #009900\">(<\/span><span style=\"color: #3366cc\">'couchbase'<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><\/p>\n<p><span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span> StateModel<span style=\"color: #009900\">(<\/span><span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><\/p>\n<p>\ubaa8\ub4c8.<span style=\"color: #660066\">\uc218\ucd9c<\/span> <span style=\"color: #339933\">=<\/span> StateModel<span style=\"color: #339933\">;<\/span><\/p>\n<\/div>\n<\/div>\n<p>\uc774\uc81c \ubaa8\ub378\uc5d0 \ub300\ud55c \uae30\ubcf8 \uc0ac\ud56d\uc744 \uac16\ucd94\uc5c8\uc73c\ub2c8 \ud544\uc694\ud55c \uba87 \uac00\uc9c0 \uba54\uc11c\ub4dc\ub97c \uad6c\ud604\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc0c8 \uc0c1\ud0dc \ube14\ub85d\uc744 \uc800\uc7a5\ud560 \uc218 \uc788\ub294 \ubaa8\ub378\ubd80\ud130 \uc2dc\uc791\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc774 \ud568\uc218\ub294 \uc0c1\ud0dc \ube14\ub85d\uc758 \uc0dd\uc131\uacfc \uc5c5\ub370\uc774\ud2b8\ub97c \ubaa8\ub450 \ucc98\ub9ac\ud569\ub2c8\ub2e4. \uc774\ub807\uac8c \ud558\uba74 API \uc218\uc900\uc5d0\uc11c \uc0c1\ud0dc \ube14\ub85d\uc774 \uc774\ubbf8 \uc874\uc7ac\ud558\ub294\uc9c0 \uc5ec\ubd80\ub97c \uac71\uc815\ud560 \ud544\uc694\uac00 \uc5c6\uc73c\ubbc0\ub85c \ud074\ub77c\uc774\uc5b8\ud2b8 \uce21 \ub85c\uc9c1\uc774 \ud6e8\uc52c \uac04\ub2e8\ud574\uc9d1\ub2c8\ub2e4. \uc800\ud76c\ub294 \uac01 \uc0c1\ud0dc \ube14\ub85d\uc5d0 \ubc84\uc804 \ubc88\ud638\uac00 \uc800\uc7a5\ub418\ub294 \uc77c\uc885\uc758 \ub099\uad00\uc801 \uc7a0\uae08\uc744 \uc0ac\uc6a9\ud560 \uac83\uc785\ub2c8\ub2e4. \uc0c1\ud0dc \ube14\ub85d\uc774 \uc5c5\ub370\uc774\ud2b8\ub420 \ub54c\ub9c8\ub2e4 \uc11c\ubc84\uac00 \uc0c8 \ub370\uc774\ud130\ub97c \uc218\ub77d\ud558\uae30 \uc804\uc5d0 \uc11c\ubc84\uc5d0 \uc788\ub294 \uae30\uc874 \ubc84\uc804 \ubc88\ud638\ub97c \uc804\ub2ec\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\ub294 \ub3d9\uc2dc\uc5d0 \uc2e4\ud589\ub418\ub294 \uc5ec\ub7ec \uac1c\uc758 \uac8c\uc784 \ubcf5\uc0ac\ubcf8\uc774 \uc11c\ub85c\uc758 \ub370\uc774\ud130\ub97c \uc9d3\ubc1f\ub294 \uac83\uc744 \ubc29\uc9c0\ud558\uae30 \uc704\ud55c \uac83\uc785\ub2c8\ub2e4. \uc774\uac83\uc740 \ub610\ud55c Couchbase\uc758 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/optimistic-or-pessimistic-locking-which-one-should-you-pick\/\">\ub099\uad00\uc801 \uc7a0\uae08<\/a> \ub97c \uc0ac\uc6a9\ud558\uc5ec \ub450 \uac1c\uc758 \uc5d4\ub4dc\ud3ec\uc778\ud2b8 \ud638\ucd9c\uc5d0\uc11c \uc0c1\ud0dc \uac1d\uccb4\ub97c \ub3d9\uc2dc\uc5d0 \ubcc0\uacbd\ud558\uc9c0 \uc54a\ub3c4\ub85d \ud569\ub2c8\ub2e4.<\/p>\n<p>\uc800\uc7a5 \uae30\ub2a5 \ud504\ub85c\ud1a0\ud0c0\uc785\ubd80\ud130 \uc2dc\uc791\ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family: monospace\">StateModel.<span style=\"color: #660066\">\uc800\uc7a5<\/span> <span style=\"color: #339933\">=<\/span> <span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span><span style=\"color: #009900\">(<\/span>uid<span style=\"color: #339933\">,<\/span> <span style=\"color: #000066\">\uc774\ub984<\/span><span style=\"color: #339933\">,<\/span> preVer<span style=\"color: #339933\">,<\/span> \ub370\uc774\ud130<span style=\"color: #339933\">,<\/span> \ucf5c\ubc31<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #339933\">;<\/span><\/div>\n<\/div>\n<p>\uccab \ubc88\uc9f8 \uc2e4\uc81c \ub2e8\uacc4\ub294 \uc0c1\ud0dc \uc800\uc7a5\uc18c \ubb38\uc11c\uc758 \uc774\ub984\uc744 \ub9cc\ub4e0 \ub2e4\uc74c, \uc774 \ubb38\uc11c\uac00 \uc544\uc9c1 \uc874\uc7ac\ud558\ub294\uc9c0 \ud655\uc778\ud558\uae30 \uc704\ud574 Couchbase\uc5d0 \uc774 \ubb38\uc11c\ub97c \uc694\uccad\ud558\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family: monospace\"><span style=\"color: #003366;font-weight: bold\">var<\/span> stateDocName <span style=\"color: #339933\">=<\/span> <span style=\"color: #3366cc\">'user-'<\/span> <span style=\"color: #339933\">+<\/span> uid <span style=\"color: #339933\">+<\/span> <span style=\"color: #3366cc\">'-state'<\/span><span style=\"color: #339933\">;<\/span><br \/>\ndb.<span style=\"color: #660066\">get<\/span><span style=\"color: #009900\">(<\/span>stateDocName<span style=\"color: #339933\">,<\/span> <span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span><span style=\"color: #009900\">(<\/span>err<span style=\"color: #339933\">,<\/span> \uacb0\uacfc<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #006600;font-style: italic\">\/\/ \uc544\ub798 \ucf54\ub4dc\uac00 \uc5ec\uae30\uc5d0 \ub4e4\uc5b4\uac11\ub2c8\ub2e4!<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><\/div>\n<\/div>\n<p>\uc774\uc81c \uae30\uc874 \uc0c1\ud0dc \ubb38\uc11c\ub97c \uc694\uccad\ud558\ub294 \ub370 \uc624\ub958\uac00 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4. \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\uba74 '\ucc3e\uc744 \uc218 \uc5c6\uc74c' \uc624\ub958\uac00 \uc544\ub2cc\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4. \ubb38\uc11c\ub97c \ucc3e\uc744 \uc218 \uc5c6\ub294 \uacbd\uc6b0 \uc774 \uc624\ub958\ub97c \ubb34\uc2dc\ud558\uace0 \uacc4\uc18d \uc9c4\ud589\ud558\ub294\ub370, \uc774\ub294 \uc0c1\ud0dc \ubb38\uc11c\uc758 \uc9c0\uc5f0 \uc0dd\uc131 \ud2b9\uc131 \ub54c\ubb38\uc785\ub2c8\ub2e4.<\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family: monospace\"><span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>err<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>err.<span style=\"color: #660066\">\ucf54\ub4dc<\/span> <span style=\"color: #339933\">!==<\/span> \uce74\uc6b0\uce58\ubca0\uc774\uc2a4.<span style=\"color: #660066\">\uc624\ub958<\/span>.<span style=\"color: #660066\">keyNotFound<\/span><span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ubc18\ud658<\/span> \ucf5c\ubc31<span style=\"color: #009900\">(<\/span>err<span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><\/div>\n<\/div>\n<p>\ub2e4\uc74c\uc73c\ub85c \uae30\uc874 \uc0c1\ud0dc \ubb38\uc11c(\ub610\ub294 \ucc3e\uc744 \uc218 \uc5c6\ub294 \uacbd\uc6b0 \uc0c8 \ubb38\uc11c)\ub97c \ubcc4\ub3c4\uc758 \ubcc0\uc218\ub85c \uc774\ub3d9\ud558\uc5ec \uc27d\uac8c \uc561\uc138\uc2a4\ud560 \uc218 \uc788\ub3c4\ub85d \ud558\uace0, \uae30\uc874 \ubb38\uc11c\uc640 \uc0c8 \ubb38\uc11c\ub97c \ub3d9\uc77c\ud55c \ubc29\uc2dd\uc73c\ub85c \ucc98\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family: monospace\"><span style=\"color: #003366;font-weight: bold\">var<\/span> stateDoc <span style=\"color: #339933\">=<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n\uc720\ud615<span style=\"color: #339933\">:<\/span> <span style=\"color: #3366cc\">'state'<\/span><span style=\"color: #339933\">,<\/span><br \/>\nuid<span style=\"color: #339933\">:<\/span> uid<span style=\"color: #339933\">,<\/span><br \/>\n\uc0c1\ud0dc<span style=\"color: #339933\">:<\/span> <span style=\"color: #009900\">{<\/span><span style=\"color: #009900\">}<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>\uacb0\uacfc.<span style=\"color: #660066\">\uac12<\/span><span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\nstateDoc <span style=\"color: #339933\">=<\/span> \uacb0\uacfc.<span style=\"color: #660066\">\uac12<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><\/div>\n<\/div>\n<p>\uc774\uc81c \uc0c1\ud0dc \ube14\ub85d \uc790\uccb4\uc5d0 \ub300\ud574\uc11c\ub3c4 \ub3d9\uc77c\ud55c \uc791\uc5c5\uc744 \uc218\ud589\ud569\ub2c8\ub2e4. stateBlock \ubcc0\uc218\uac00 \uc2e4\uc81c \uc0c1\ud0dc \ubb38\uc11c\uc758 \uc0c1\ud0dc \ubc30\uc5f4\uc744 \ucc38\uc870\ud558\ub3c4\ub85d \ud55c \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub610 \ud55c \uac00\uc9c0 \uc5b8\uae09\ud560 \ub9cc\ud55c \uc810\uc740 \uae30\ubcf8 \uc0c1\ud0dc \ube14\ub85d \ubc84\uc804\uc774 0\uc774\ub77c\ub294 \uac83\uc785\ub2c8\ub2e4. \uc989, \ucc98\uc74c\uc73c\ub85c \uc800\uc7a5\uc744 \uc2e4\ud589\ud560 \ub54c \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uc0c8 \uc0c1\ud0dc \ube14\ub85d\uc774\ub77c\ub294 \uac83\uc744 \uba85\ud655\ud788 \ud558\uae30 \uc704\ud574 \ubc84\uc804 0\uc744 \uc9c0\uc815\ud560 \uac83\uc73c\ub85c \uc608\uc0c1\ub429\ub2c8\ub2e4.<\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family: monospace\"><span style=\"color: #003366;font-weight: bold\">var<\/span> stateBlock <span style=\"color: #339933\">=<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n\ubc84\uc804<span style=\"color: #339933\">:<\/span> <span style=\"color: #cc0000\">0<\/span><span style=\"color: #339933\">,<\/span><br \/>\n\ub370\uc774\ud130<span style=\"color: #339933\">:<\/span> <span style=\"color: #003366;font-weight: bold\">null<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>stateDoc.<span style=\"color: #660066\">\uc0c1\ud0dc<\/span><span style=\"color: #009900\">[<\/span><span style=\"color: #000066\">\uc774\ub984<\/span><span style=\"color: #009900\">]<\/span><span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\nstateBlock <span style=\"color: #339933\">=<\/span> stateDoc.<span style=\"color: #660066\">\uc0c1\ud0dc<\/span><span style=\"color: #009900\">[<\/span><span style=\"color: #000066\">\uc774\ub984<\/span><span style=\"color: #009900\">]<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span> <span style=\"color: #000066;font-weight: bold\">else<\/span> <span style=\"color: #009900\">{<\/span><br \/>\nstateDoc.<span style=\"color: #660066\">\uc0c1\ud0dc<\/span><span style=\"color: #009900\">[<\/span><span style=\"color: #000066\">\uc774\ub984<\/span><span style=\"color: #009900\">]<\/span> <span style=\"color: #339933\">=<\/span> stateBlock<span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><\/div>\n<\/div>\n<p>\ub2e4\uc74c\uc73c\ub85c \ud638\ucd9c\uc790\uac00 \uc9c0\uc815\ud55c \ubc84\uc804\uc774 \uc5ec\uc804\ud788 \ud074\ub7ec\uc2a4\ud130\uc5d0 \uc800\uc7a5\ub41c \ubc84\uc804\uacfc \uc77c\uce58\ud558\ub294\uc9c0 \ud655\uc778\ud574\uc57c \ud569\ub2c8\ub2e4. \uadf8\ub807\uc9c0 \uc54a\uc740 \uacbd\uc6b0 \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc800\uc7a5 \ub370\uc774\ud130\ub97c \uac80\uc0c9\ud55c \uc774\ud6c4 \ub2e4\ub978 \uc0ac\uc6a9\uc790\uac00 \ubcc0\uacbd\ud55c \uac83\uc774 \ud2c0\ub9bc\uc5c6\uc2b5\ub2c8\ub2e4. \ubc84\uc804\uc774 \uc77c\uce58\ud558\uc9c0 \uc54a\ub294 \uacbd\uc6b0 \ud074\ub77c\uc774\uc5b8\ud2b8\ub294 \uc0c8 \ub370\uc774\ud130\ub97c \uac80\uc0c9\ud558\uace0 \ud544\uc694\ud55c \ubcd1\ud569\uc744 \uc218\ud589\ud55c \ub2e4\uc74c \uc5c5\ub370\uc774\ud2b8\ub97c \ub2e4\uc2dc \uc2dc\ub3c4\ud560 \uac83\uc73c\ub85c \uc608\uc0c1\ub429\ub2c8\ub2e4.<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family: monospace\">if (stateBlock.version !== preVer) {<br \/>\n\ubc18\ud658 \ucf5c\ubc31('\uadc0\ud558\uc758 \ubc84\uc804\uc774 \uc11c\ubc84 \ubc84\uc804\uacfc \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.');<br \/>\n} else {<br \/>\nstateBlock.version++;<br \/>\nstateBlock.data = \ub370\uc774\ud130;<br \/>\n}<\/div>\n<\/div>\n<p>\uc774 \uc139\uc158\uc758 \uc2dc\uc791 \ubd80\ubd84\uc5d0\uc11c \uc5b8\uae09\ud588\ub4ef\uc774, \uc0c1\ud0dc \ubb38\uc11c \uc4f0\uae30\uac00 \uc21c\uc11c\ub300\ub85c \ubbf8\ub9ac \uc218\ud589\ub418\ub3c4\ub85d \ud558\uae30 \uc704\ud574 Couchbase\uc5d0 \ub0b4\uc7a5\ub41c \ub099\uad00\uc801 \uc7a0\uae08 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud560 \uac83\uc785\ub2c8\ub2e4. \uc774\uc804\uc5d0 \uac00\uc838\uc624\uae30\ub97c \uc218\ud589\ud55c \ub2e4\uc74c \ubc84\uc804 \ube44\uad50\ub97c \uc218\ud589\ud558\uace0 \ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc5ec\uae30\uc11c \ub2e4\uc2dc \uc4f0\uae30\ub97c \uc218\ud589\ud558\uae30 \ub54c\ubb38\uc5d0 \uc0c1\ud0dc \uc800\uc7a5 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc5d0 \ub300\ud55c \ub2e4\ub978 \ud638\ucd9c\ub85c \uc778\ud574 \uc6d0\ub798 \uac00\uc838\uc624\uae30 \uc774\ud6c4 \uac1d\uccb4\uac00 \ubcc0\uacbd\ub420 \uac00\ub2a5\uc131\uc774 \uc788\uc9c0\ub9cc, \uc124\uc815 \uc804\uc5d0 cas \uac12\uc744 \uc0ac\uc6a9\ud558\ub294 \ub099\uad00\uc801 \uc7a0\uae08\uc744 \uc0ac\uc6a9\ud558\uba74 \uc774\ub97c \ubc29\uc9c0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. cas \uac12\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 <a href=\"https:\/\/docs.couchbase.com\/couchbase-devguide-2.2\/#check-and-set-cas\">CAS \uac12\uc5d0 \ub300\ud55c \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub9e4\ub274\uc5bc<\/a>.<\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family: monospace\"><span style=\"color: #003366;font-weight: bold\">var<\/span> \uc124\uc815 \uc635\uc158 <span style=\"color: #339933\">=<\/span> <span style=\"color: #009900\">{<\/span><span style=\"color: #009900\">}<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>\uacb0\uacfc.<span style=\"color: #660066\">\uac12<\/span><span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\nsetOptions.<span style=\"color: #660066\">cas<\/span> <span style=\"color: #339933\">=<\/span> \uacb0\uacfc.<span style=\"color: #660066\">cas<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><\/div>\n<\/div>\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc774 \ud2b9\uc815 \uba54\uc11c\ub4dc\uc758 \uacbd\uc6b0 \uc9d1\ud569\uc744 \ubbf8\ub9ac \ub9cc\ub4e4\uace0, \ubc1c\uc0dd\ud558\ub294 \ubaa8\ub4e0 \uc624\ub958\ub294 \ud638\ucd9c\uc790\uc5d0\uac8c \uc804\ud30c\ub418\uba70(\uc55e\uc11c \uc5b8\uae09\ud55c \uac83\ucc98\ub7fc \ubaa8\ub378 \uc218\uc900\uc5d0\uc11c \ub798\ud551\ub418\uc5b4\uc57c \ud568), \uc800\uc7a5\ud55c \uc0c1\ud0dc \ube14\ub85d\uc73c\ub85c \ucf5c\ubc31\uc774 \ud638\ucd9c\ub429\ub2c8\ub2e4.<\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family: monospace\">\n<p>db.<span style=\"color: #660066\">set<\/span><span style=\"color: #009900\">(<\/span>stateDocName<span style=\"color: #339933\">,<\/span> stateDoc<span style=\"color: #339933\">,<\/span> \uc124\uc815 \uc635\uc158<span style=\"color: #339933\">,<\/span> <span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span><span style=\"color: #009900\">(<\/span>err<span style=\"color: #339933\">,<\/span> \uacb0\uacfc<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>err<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ubc18\ud658<\/span> \ucf5c\ubc31<span style=\"color: #009900\">(<\/span>err<span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><\/p>\n<p>\ucf5c\ubc31<span style=\"color: #009900\">(<\/span><span style=\"color: #003366;font-weight: bold\">null<\/span><span style=\"color: #339933\">,<\/span> stateBlock<span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><\/p>\n<\/div>\n<\/div>\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc804\uccb4 \uc800\uc7a5 \ubc29\ubc95\uc744 \uc54c\ub824\ub4dc\ub9ac\uaca0\uc2b5\ub2c8\ub2e4. \uaf64 \uae38\uc9c0\ub9cc \ube44\uad50\uc801 \uc774\ud574\ud558\uae30 \uc27d\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4!<\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family: monospace\">\n<p>StateModel.<span style=\"color: #660066\">\uc800\uc7a5<\/span> <span style=\"color: #339933\">=<\/span> <span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span><span style=\"color: #009900\">(<\/span>uid<span style=\"color: #339933\">,<\/span> <span style=\"color: #000066\">\uc774\ub984<\/span><span style=\"color: #339933\">,<\/span> preVer<span style=\"color: #339933\">,<\/span> \ub370\uc774\ud130<span style=\"color: #339933\">,<\/span> \ucf5c\ubc31<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #003366;font-weight: bold\">var<\/span> stateDocName <span style=\"color: #339933\">=<\/span> <span style=\"color: #3366cc\">'user-'<\/span> <span style=\"color: #339933\">+<\/span> uid <span style=\"color: #339933\">+<\/span> <span style=\"color: #3366cc\">'-state'<\/span><span style=\"color: #339933\">;<\/span><br \/>\ndb.<span style=\"color: #660066\">get<\/span><span style=\"color: #009900\">(<\/span>stateDocName<span style=\"color: #339933\">,<\/span> <span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span><span style=\"color: #009900\">(<\/span>err<span style=\"color: #339933\">,<\/span> \uacb0\uacfc<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>err<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>err.<span style=\"color: #660066\">\ucf54\ub4dc<\/span> <span style=\"color: #339933\">!==<\/span> \uce74\uc6b0\uce58\ubca0\uc774\uc2a4.<span style=\"color: #660066\">\uc624\ub958<\/span>.<span style=\"color: #660066\">keyNotFound<\/span><span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ubc18\ud658<\/span> \ucf5c\ubc31<span style=\"color: #009900\">(<\/span>err<span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><\/p>\n<p><span style=\"color: #003366;font-weight: bold\">var<\/span> stateDoc <span style=\"color: #339933\">=<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n\uc720\ud615<span style=\"color: #339933\">:<\/span> <span style=\"color: #3366cc\">'state'<\/span><span style=\"color: #339933\">,<\/span><br \/>\nuid<span style=\"color: #339933\">:<\/span> uid<span style=\"color: #339933\">,<\/span><br \/>\n\uc0c1\ud0dc<span style=\"color: #339933\">:<\/span> <span style=\"color: #009900\">{<\/span><span style=\"color: #009900\">}<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>\uacb0\uacfc.<span style=\"color: #660066\">\uac12<\/span><span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\nstateDoc <span style=\"color: #339933\">=<\/span> \uacb0\uacfc.<span style=\"color: #660066\">\uac12<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><\/p>\n<p><span style=\"color: #003366;font-weight: bold\">var<\/span> stateBlock <span style=\"color: #339933\">=<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n\ubc84\uc804<span style=\"color: #339933\">:<\/span> <span style=\"color: #cc0000\">0<\/span><span style=\"color: #339933\">,<\/span><br \/>\n\ub370\uc774\ud130<span style=\"color: #339933\">:<\/span> <span style=\"color: #003366;font-weight: bold\">null<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>stateDoc.<span style=\"color: #660066\">\uc0c1\ud0dc<\/span><span style=\"color: #009900\">[<\/span><span style=\"color: #000066\">\uc774\ub984<\/span><span style=\"color: #009900\">]<\/span><span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\nstateBlock <span style=\"color: #339933\">=<\/span> stateDoc.<span style=\"color: #660066\">\uc0c1\ud0dc<\/span><span style=\"color: #009900\">[<\/span><span style=\"color: #000066\">\uc774\ub984<\/span><span style=\"color: #009900\">]<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span> <span style=\"color: #000066;font-weight: bold\">else<\/span> <span style=\"color: #009900\">{<\/span><br \/>\nstateDoc.<span style=\"color: #660066\">\uc0c1\ud0dc<\/span><span style=\"color: #009900\">[<\/span><span style=\"color: #000066\">\uc774\ub984<\/span><span style=\"color: #009900\">]<\/span> <span style=\"color: #339933\">=<\/span> stateBlock<span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><\/p>\n<p><span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>stateBlock.<span style=\"color: #660066\">\ubc84\uc804<\/span> <span style=\"color: #339933\">!==<\/span> preVer<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ubc18\ud658<\/span> \ucf5c\ubc31<span style=\"color: #009900\">(<\/span><span style=\"color: #3366cc\">'\uc0ac\uc6a9 \uc911\uc778 \ubc84\uc804\uc774 \uc11c\ubc84 \ubc84\uc804\uacfc \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.'<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span> <span style=\"color: #000066;font-weight: bold\">else<\/span> <span style=\"color: #009900\">{<\/span><br \/>\nstateBlock.<span style=\"color: #660066\">\ubc84\uc804<\/span><span style=\"color: #339933\">++;<\/span><br \/>\nstateBlock.<span style=\"color: #660066\">\ub370\uc774\ud130<\/span> <span style=\"color: #339933\">=<\/span> \ub370\uc774\ud130<span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><\/p>\n<p><span style=\"color: #003366;font-weight: bold\">var<\/span> \uc124\uc815 \uc635\uc158 <span style=\"color: #339933\">=<\/span> <span style=\"color: #009900\">{<\/span><span style=\"color: #009900\">}<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>\uacb0\uacfc.<span style=\"color: #660066\">\uac12<\/span><span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\nsetOptions.<span style=\"color: #660066\">cas<\/span> <span style=\"color: #339933\">=<\/span> \uacb0\uacfc.<span style=\"color: #660066\">cas<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><\/p>\n<p>db.<span style=\"color: #660066\">set<\/span><span style=\"color: #009900\">(<\/span>stateDocName<span style=\"color: #339933\">,<\/span> stateDoc<span style=\"color: #339933\">,<\/span> \uc124\uc815 \uc635\uc158<span style=\"color: #339933\">,<\/span> <span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span><span style=\"color: #009900\">(<\/span>err<span style=\"color: #339933\">,<\/span> \uacb0\uacfc<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>err<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ubc18\ud658<\/span> \ucf5c\ubc31<span style=\"color: #009900\">(<\/span>err<span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><\/p>\n<p>\ucf5c\ubc31<span style=\"color: #009900\">(<\/span><span style=\"color: #003366;font-weight: bold\">null<\/span><span style=\"color: #339933\">,<\/span> stateBlock<span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #339933\">;<\/span><\/p>\n<\/div>\n<\/div>\n<p>\ub2e4\uc74c\uc73c\ub85c \ud3ec\ud568\ud560 \uba54\uc11c\ub4dc\ub294 findByUserId\uc785\ub2c8\ub2e4. \uc774 \uba54\uc11c\ub4dc\ub97c \uc0ac\uc6a9\ud558\uba74 \ud2b9\uc815 \uc0ac\uc6a9\uc790\uc5d0 \ub300\ud55c \ubaa8\ub4e0 \uc0c1\ud0dc \ube14\ub85d\uc744 \ubc18\ud658\ud558\ub294 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub97c \uad6c\ucd95\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub294 \uc8fc\ub85c \uc5ec\ub7ec \uc694\uccad\uc744 \ubbf8\ub9ac \uc218\ud589\ud558\uc9c0 \uc54a\uace0 \ubaa8\ub4e0 \uc0c1\ud0dc \ube14\ub85d\uc744 \ud55c \ubc88\uc5d0 \uac00\uc838\uc62c \uc218 \uc788\ub3c4\ub85d \ud074\ub77c\uc774\uc5b8\ud2b8 \uce21\uc5d0\uc11c \ucd5c\uc801\ud654\ud55c \uac83\uc785\ub2c8\ub2e4. \uc774 \uae30\ub2a5\uc740 \ub9e4\uc6b0 \uac04\ub2e8\ud569\ub2c8\ub2e4. \uc800\uc7a5 \ud568\uc218\uc640 \ub3d9\uc77c\ud55c \ubb38\uc11c \uc774\ub984\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc0c1\ud0dc \ubb38\uc11c\ub97c \ub85c\ub4dc\ud558\ub824\uace0 \uc2dc\ub3c4\ud558\uace0, \ubb38\uc11c\uac00 \uc788\ub294 \uacbd\uc6b0 \uc774 \ube14\ub85d \ub0b4\uc758 \uc0c1\ud0dc \ubaa9\ub85d\uc744 \ubc18\ud658\ud558\uace0, \ubb38\uc11c\uac00 \uc5c6\ub294 \uacbd\uc6b0 \ube48 \ubaa9\ub85d\uc744 \uc0ac\uc6a9\uc790\uc5d0\uac8c \ubc18\ud658\ud569\ub2c8\ub2e4. \ub2e4\ub978 \ubaa8\ub4e0 \uc624\ub958\ub294 \ud638\ucd9c\uc790\uc5d0\uac8c \uc804\ub2ec\ub429\ub2c8\ub2e4.<\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family: monospace\">\n<p>StateModel.<span style=\"color: #660066\">findByUserId<\/span> <span style=\"color: #339933\">=<\/span> <span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span><span style=\"color: #009900\">(<\/span>uid<span style=\"color: #339933\">,<\/span> \ucf5c\ubc31<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #003366;font-weight: bold\">var<\/span> stateDocName <span style=\"color: #339933\">=<\/span> <span style=\"color: #3366cc\">'user-'<\/span> <span style=\"color: #339933\">+<\/span> uid <span style=\"color: #339933\">+<\/span> <span style=\"color: #3366cc\">'-state'<\/span><span style=\"color: #339933\">;<\/span><br \/>\ndb.<span style=\"color: #660066\">get<\/span><span style=\"color: #009900\">(<\/span>stateDocName<span style=\"color: #339933\">,<\/span> <span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span><span style=\"color: #009900\">(<\/span>err<span style=\"color: #339933\">,<\/span> \uacb0\uacfc<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>err<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>err.<span style=\"color: #660066\">\ucf54\ub4dc<\/span> <span style=\"color: #339933\">===<\/span> \uce74\uc6b0\uce58\ubca0\uc774\uc2a4.<span style=\"color: #660066\">\uc624\ub958<\/span>.<span style=\"color: #660066\">keyNotFound<\/span><span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ubc18\ud658<\/span> \ucf5c\ubc31<span style=\"color: #009900\">(<\/span><span style=\"color: #003366;font-weight: bold\">null<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #009900\">{<\/span><span style=\"color: #009900\">}<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span> <span style=\"color: #000066;font-weight: bold\">else<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ubc18\ud658<\/span> \ucf5c\ubc31<span style=\"color: #009900\">(<\/span>err<span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><br \/>\n<span style=\"color: #003366;font-weight: bold\">var<\/span> stateDoc <span style=\"color: #339933\">=<\/span> \uacb0\uacfc.<span style=\"color: #660066\">\uac12<\/span><span style=\"color: #339933\">;<\/span><\/p>\n<p>\ucf5c\ubc31<span style=\"color: #009900\">(<\/span><span style=\"color: #003366;font-weight: bold\">null<\/span><span style=\"color: #339933\">,<\/span> stateDoc.<span style=\"color: #660066\">\uc0c1\ud0dc<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #339933\">;<\/span><\/p>\n<\/div>\n<\/div>\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c \ube4c\ub4dc\ud574\uc57c \ud560 \ubaa8\ub378 \ud568\uc218\ub294 \uc0ac\uc6a9\uc790\uc758 \ub2e8\uc77c \uc0c1\ud0dc \ube14\ub85d\uc5d0 \uc561\uc138\uc2a4\ud558\ub294 \uba54\uc11c\ub4dc\uc785\ub2c8\ub2e4. \uc774 \ud568\uc218\ub294 \uc804\uccb4 \ubaa9\ub85d\uc744 \ubc18\ud658\ud558\ub294 \ub300\uc2e0 \uc774\ub984\ubcc4\ub85c \ud2b9\uc815 \uc0c1\ud0dc \ube14\ub85d\uc744 \ucd94\uac00\ub85c \ub4dc\ub9b4\ub2e4\uc6b4\ud55c\ub2e4\ub294 \uc810\uc744 \uc81c\uc678\ud558\uba74 findByUserId \ud568\uc218\uc640 \uac70\uc758 \ub3d9\uc77c\ud569\ub2c8\ub2e4.<\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family: monospace\">\n<p>StateModel.<span style=\"color: #660066\">get<\/span> <span style=\"color: #339933\">=<\/span> <span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span><span style=\"color: #009900\">(<\/span>uid<span style=\"color: #339933\">,<\/span> <span style=\"color: #000066\">\uc774\ub984<\/span><span style=\"color: #339933\">,<\/span> \ucf5c\ubc31<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #003366;font-weight: bold\">var<\/span> stateDocName <span style=\"color: #339933\">=<\/span> <span style=\"color: #3366cc\">'user-'<\/span> <span style=\"color: #339933\">+<\/span> uid <span style=\"color: #339933\">+<\/span> <span style=\"color: #3366cc\">'-state'<\/span><span style=\"color: #339933\">;<\/span><\/p>\n<p>db.<span style=\"color: #660066\">get<\/span><span style=\"color: #009900\">(<\/span>stateDocName<span style=\"color: #339933\">,<\/span> <span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span><span style=\"color: #009900\">(<\/span>err<span style=\"color: #339933\">,<\/span> \uacb0\uacfc<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>err<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ubc18\ud658<\/span> \ucf5c\ubc31<span style=\"color: #009900\">(<\/span>err<span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><br \/>\n<span style=\"color: #003366;font-weight: bold\">var<\/span> stateDoc <span style=\"color: #339933\">=<\/span> \uacb0\uacfc.<span style=\"color: #660066\">\uac12<\/span><span style=\"color: #339933\">;<\/span><\/p>\n<p><span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span><span style=\"color: #339933\">!<\/span>stateDoc.<span style=\"color: #660066\">\uc0c1\ud0dc<\/span><span style=\"color: #009900\">[<\/span><span style=\"color: #000066\">\uc774\ub984<\/span><span style=\"color: #009900\">]<\/span><span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ubc18\ud658<\/span> \ucf5c\ubc31<span style=\"color: #009900\">(<\/span><span style=\"color: #3366cc\">'\uc774 \uc774\ub984\uc758 \uc0c1\ud0dc \ube14\ub85d\uc774 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.'<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><\/p>\n<p>\ucf5c\ubc31<span style=\"color: #009900\">(<\/span><span style=\"color: #003366;font-weight: bold\">null<\/span><span style=\"color: #339933\">,<\/span> stateDoc.<span style=\"color: #660066\">\uc0c1\ud0dc<\/span><span style=\"color: #009900\">[<\/span><span style=\"color: #000066\">\uc774\ub984<\/span><span style=\"color: #009900\">]<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #339933\">;<\/span><\/p>\n<\/div>\n<\/div>\n<h1>\uac8c\uc784 \uc0c1\ud0dc - \uc694\uccad \ucc98\ub9ac<\/h1>\n<p>\uc774\uc81c \ubaa8\ub378\uc744 \ubaa8\ub450 \ub9c8\ubb34\ub9ac\ud558\uace0 \uc0ac\uc6a9\ud560 \uc900\ube44\uac00 \ub418\uc5c8\uc73c\ub2c8 \uc774\uc81c 3\uac1c\uc758 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc5d0 \ub300\ud55c \uc694\uccad \ud578\ub4e4\ub7ec\ub97c \uad6c\ucd95\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4! \ud55c \uc0ac\uc6a9\uc790\uc758 \ubaa8\ub4e0 \uc0c1\ud0dc\ub97c \uc694\uccad\ud558\ub294 \uc5d4\ub4dc\ud3ec\uc778\ud2b8, \ud2b9\uc815 \uc0c1\ud0dc \ube14\ub85d\uc744 \uc694\uccad\ud558\ub294 \uc5d4\ub4dc\ud3ec\uc778\ud2b8, \ub9c8\uc9c0\ub9c9\uc73c\ub85c \ud2b9\uc815 \uc0c1\ud0dc \ube14\ub85d\uc744 \uc5c5\ub370\uc774\ud2b8\ud558\ub294 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub97c \uad6c\ucd95\ud560 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc694\uccad \ud578\ub4e4\ub7ec\ub97c \ube4c\ub4dc\ud558\uae30 \uc804\uc5d0 \uba3c\uc800 \uc55e\uc11c \uc0dd\uc131\ud55c statemodel.js \ud30c\uc77c\uc5d0 \ub300\ud55c \ucc38\uc870\ub97c \ucd94\uac00\ud574\uc57c \ud569\ub2c8\ub2e4!<\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family: monospace\"><span style=\"color: #003366;font-weight: bold\">var<\/span> stateModel <span style=\"color: #339933\">=<\/span> require<span style=\"color: #009900\">(<\/span><span style=\"color: #3366cc\">'.\/\ubaa8\ub378\/\uc2a4\ud0ef\ubaa8\ub378'<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><\/div>\n<\/div>\n<p>\uc774\uc81c \uc800\uc7a5 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ubd80\ud130 \uc2dc\uc791\ud558\uaca0\uc2b5\ub2c8\ub2e4. \uc774\uc804 \ubd80\ubd84\uacfc \ub9c8\ucc2c\uac00\uc9c0\ub85c \uc694\uccad \ud578\ub4e4\ub7ec\ub294 \ub9e4\uc6b0 \uac04\ub2e8\ud558\uba70 \uc694\uccad\uc758 \uad00\ub828 \ubd80\ubd84\uc744 \ubaa8\ub378\uc5d0 \uc804\ub2ec\ud558\uae30\ub9cc \ud558\uba74 \ub429\ub2c8\ub2e4. \uc0c1\ud0dc \ube14\ub85d \uc774\ub984\uc740 URI\uc758 \uc77c\ubd80\ub85c, \ubc84\uc804 \ubc88\ud638\ub294 \ucffc\ub9ac\uc758 \uc77c\ubd80\ub85c, \ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc2e4\uc81c \uc0c1\ud0dc \ube14\ub85d \ub370\uc774\ud130\ub294 \uc694\uccad \ubcf8\ubb38\uc5d0 \ud3ec\ud568\ub420 \uac83\uc73c\ub85c \uc608\uc0c1\ud569\ub2c8\ub2e4.<\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family: monospace\">\n<p>\uc571\uc73c\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4.<span style=\"color: #660066\">put<\/span><span style=\"color: #009900\">(<\/span><span style=\"color: #3366cc\">'\/\uc8fc\/:\uc774\ub984'<\/span><span style=\"color: #339933\">,<\/span> authUser<span style=\"color: #339933\">,<\/span> <span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span><span style=\"color: #009900\">(<\/span>req<span style=\"color: #339933\">,<\/span> res<span style=\"color: #339933\">,<\/span> \ub2e4\uc74c<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\nstateModel.<span style=\"color: #660066\">\uc800\uc7a5<\/span><span style=\"color: #009900\">(<\/span>req.<span style=\"color: #660066\">uid<\/span><span style=\"color: #339933\">,<\/span> req.<span style=\"color: #660066\">\ub9e4\uac1c\ubcc0\uc218<\/span>.<span style=\"color: #000066\">\uc774\ub984<\/span><span style=\"color: #339933\">,<\/span> parseInt<span style=\"color: #009900\">(<\/span>req.<span style=\"color: #660066\">\ucffc\ub9ac<\/span>.<span style=\"color: #660066\">preVer<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc0000\">10<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">,<\/span><br \/>\nreq.<span style=\"color: #660066\">body<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span><span style=\"color: #009900\">(<\/span>err<span style=\"color: #339933\">,<\/span> \uc0c1\ud0dc<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>err<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ubc18\ud658<\/span> \ub2e4\uc74c<span style=\"color: #009900\">(<\/span>err<span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><\/p>\n<p>res.<span style=\"color: #660066\">\ubcf4\ub0b4\uae30<\/span><span style=\"color: #009900\">(<\/span>\uc0c1\ud0dc<span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><\/p>\n<\/div>\n<\/div>\n<p>\ub2e4\uc74c\uc73c\ub85c \uc774\uc804\uc5d0 \uc800\uc7a5\ud55c \uc0c1\ud0dc \ube14\ub85d\uc744 \uac80\uc0c9\ud558\ub294 \uae30\ub2a5\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family: monospace\">\n<p>\uc571\uc73c\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4.<span style=\"color: #660066\">get<\/span><span style=\"color: #009900\">(<\/span><span style=\"color: #3366cc\">'\/\uc8fc\/:\uc774\ub984'<\/span><span style=\"color: #339933\">,<\/span> authUser<span style=\"color: #339933\">,<\/span> <span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span><span style=\"color: #009900\">(<\/span>req<span style=\"color: #339933\">,<\/span> res<span style=\"color: #339933\">,<\/span> \ub2e4\uc74c<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\nstateModel.<span style=\"color: #660066\">get<\/span><span style=\"color: #009900\">(<\/span>req.<span style=\"color: #660066\">uid<\/span><span style=\"color: #339933\">,<\/span> req.<span style=\"color: #660066\">\ub9e4\uac1c\ubcc0\uc218<\/span>.<span style=\"color: #000066\">\uc774\ub984<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span><span style=\"color: #009900\">(<\/span>err<span style=\"color: #339933\">,<\/span> \uc0c1\ud0dc<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>err<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ubc18\ud658<\/span> \ub2e4\uc74c<span style=\"color: #009900\">(<\/span>err<span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><\/p>\n<p>res.<span style=\"color: #660066\">\ubcf4\ub0b4\uae30<\/span><span style=\"color: #009900\">(<\/span>\uc0c1\ud0dc<span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><\/p>\n<\/div>\n<\/div>\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c, \ud2b9\uc815 \uc0ac\uc6a9\uc790\uc5d0 \ub300\ud574 \uc800\uc7a5\ub41c \ubaa8\ub4e0 \uc0c1\ud0dc \ube14\ub85d\uc744 \uc694\uccad\ud558\ub294 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc785\ub2c8\ub2e4. \uc55e\uc11c \ub9d0\ud588\ub4ef\uc774, \uc774\ub294 \uc8fc\ub85c \ubaa8\ub4e0 \uc0c1\ud0dc \ube14\ub85d\uc744 \uac80\uc0c9\ud574\uc57c \ud558\ub294 \uac8c\uc784 \ub85c\ub529 \uc2dc\ud000\uc2a4\ub97c \ucd5c\uc801\ud654\ud558\uae30 \uc704\ud55c \uac83\uc785\ub2c8\ub2e4.<\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family: monospace\">\n<p>\uc571\uc73c\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4.<span style=\"color: #660066\">get<\/span><span style=\"color: #009900\">(<\/span><span style=\"color: #3366cc\">'\/states'<\/span><span style=\"color: #339933\">,<\/span> authUser<span style=\"color: #339933\">,<\/span> <span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span><span style=\"color: #009900\">(<\/span>req<span style=\"color: #339933\">,<\/span> res<span style=\"color: #339933\">,<\/span> \ub2e4\uc74c<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\nstateModel.<span style=\"color: #660066\">findByUserId<\/span><span style=\"color: #009900\">(<\/span>req.<span style=\"color: #660066\">uid<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #003366;font-weight: bold\">\ud568\uc218<\/span><span style=\"color: #009900\">(<\/span>err<span style=\"color: #339933\">,<\/span> \uc0c1\ud0dc<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ub9cc\uc57d<\/span> <span style=\"color: #009900\">(<\/span>err<span style=\"color: #009900\">)<\/span> <span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #000066;font-weight: bold\">\ubc18\ud658<\/span> \ub2e4\uc74c<span style=\"color: #009900\">(<\/span>err<span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><\/p>\n<p>res.<span style=\"color: #660066\">\ubcf4\ub0b4\uae30<\/span><span style=\"color: #009900\">(<\/span>\uc0c1\ud0dc<span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">;<\/span><\/p>\n<\/div>\n<\/div>\n<h1>\ud53c\ub2c8\ud1a0!<\/h1>\n<p>\uc774\uc81c \ubaa8\ub378\uc744 \uad6c\ucd95\ud558\uace0 \ud544\uc694\ud55c \uc694\uccad \ud578\ub4e4\ub7ec\ub97c \uad6c\ud604\ud588\uc73c\ub2c8, \uc774\uc804 \ud30c\ud2b8\uc5d0\uc11c\uc640 \uac19\uc774 \uc571\uc744 \uc2dc\uc791\ud558\uace0 \uac8c\uc784 \uc11c\ubc84\uc5d0 \ub300\ud55c \uba87 \uac00\uc9c0 \uc694\uccad\uc744 \uc218\ud589\ud558\uc5ec \ub178\ub825\uc758 \uc131\uacfc\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc744 \uac83\uc785\ub2c8\ub2e4!<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family: monospace\">\n<p>&gt; POST \/state\/test?preVer=0<br \/>\n\ud5e4\ub354(\uad8c\ud55c): Bearer 0e9dd36c-5e2c-4f0e-9c2c-bffeea72d4f7<br \/>\n{<br \/>\n\"\uc774\ub984\": \"We Rock!\",<br \/>\n\"level\": \"13\"<br \/>\n}<br \/>\n&lt; 200 \ubbf8\ub9cc \ud655\uc778<br \/>\n{<br \/>\n\"\ubc84\uc804\": 1,<br \/>\n\"\ub370\uc774\ud130\": {<br \/>\n\"\uc774\ub984\": \"We Rock!\",<br \/>\n\"level\": \"13\"<br \/>\n}<br \/>\n}<\/p>\n<p>&gt; GET \/state\/test<br \/>\n\ud5e4\ub354(\uad8c\ud55c): Bearer 0e9dd36c-5e2c-4f0e-9c2c-bffeea72d4f7<br \/>\n&lt; 200 \ubbf8\ub9cc \ud655\uc778<br \/>\n{<br \/>\n\"\ubc84\uc804\": 1,<br \/>\n\"\ub370\uc774\ud130\": {<br \/>\n\"\uc774\ub984\": \"We Rock!\",<br \/>\n\"level\": \"13\"<br \/>\n}<br \/>\n}<\/p>\n<p>&gt; GET \/states<br \/>\n\ud5e4\ub354(\uad8c\ud55c): Bearer 0e9dd36c-5e2c-4f0e-9c2c-bffeea72d4f7<br \/>\n&lt; 200 \ubbf8\ub9cc \ud655\uc778<br \/>\n{<br \/>\n\"test\": {<br \/>\n\"\ubc84\uc804\": 1,<br \/>\n\"\ub370\uc774\ud130\": {<br \/>\n\"\uc774\ub984\": \"We Rock!\",<br \/>\n\"level\": \"13\"<br \/>\n}<br \/>\n}<br \/>\n}<\/p>\n<\/div>\n<\/div>\n<p><b>\uc131\uacf5!<\/b><\/p>\n<p>\uc774 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uc804\uccb4 \uc18c\uc2a4\ub294 \uc5ec\uae30\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4: <a href=\"https:\/\/github.com\/brett19\/node-gameapi\">https:\/\/github.com\/brett19\/node-gameapi<\/a><\/p>\n<p>\uc990\uaca8\ubcf4\uc138\uc694! Brett<\/p>","protected":false},"excerpt":{"rendered":"<p>In this part of the series, we will be setting up a game data storage system to allow you to store player game state over the course of their enjoyment of your game. To do this, we are going to [&hellip;]<\/p>","protected":false},"author":31,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"ppma_author":[9004],"class_list":["post-1616","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.2 (Yoast SEO v26.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Game Servers and Couchbase with Node.js - Part 3 - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/ko\/game-servers-and-couchbase-nodejs-part-3\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Game Servers and Couchbase with Node.js - Part 3\" \/>\n<meta property=\"og:description\" content=\"In this part of the series, we will be setting up a game data storage system to allow you to store player game state over the course of their enjoyment of your game. To do this, we are going to [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/game-servers-and-couchbase-nodejs-part-3\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2014-12-16T19:32:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-28T07:23:43+00:00\" \/>\n<meta name=\"author\" content=\"Brett Lawson, Principal Software Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Brett Lawson, Principal Software Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/\"},\"author\":{\"name\":\"Brett Lawson, Principal Software Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5cfc2fbf25776be2a027a474562be02f\"},\"headline\":\"Game Servers and Couchbase with Node.js &#8211; Part 3\",\"datePublished\":\"2014-12-16T19:32:07+00:00\",\"dateModified\":\"2023-06-28T07:23:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/\"},\"wordCount\":2047,\"commentCount\":6,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/\",\"name\":\"Game Servers and Couchbase with Node.js - Part 3 - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2014-12-16T19:32:07+00:00\",\"dateModified\":\"2023-06-28T07:23:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Game Servers and Couchbase with Node.js &#8211; Part 3\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5cfc2fbf25776be2a027a474562be02f\",\"name\":\"Brett Lawson, Principal Software Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ee3586f0c112c20e863af447d44dec8f\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6aec1ba24ef7558a248dcde7b7a18b15b06e2885b24b663906a448634066c1c4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6aec1ba24ef7558a248dcde7b7a18b15b06e2885b24b663906a448634066c1c4?s=96&d=mm&r=g\",\"caption\":\"Brett Lawson, Principal Software Engineer, Couchbase\"},\"description\":\"Brett Lawson is a Principal Software Engineer at Couchbase. Brett is responsible for the design and development of the Couchbase Node.js and PHP clients as well as playing a role in the design and development of the C library, libcouchbase.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/brett-lawson\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Game Servers and Couchbase with Node.js - Part 3 - The Couchbase Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/ko\/game-servers-and-couchbase-nodejs-part-3\/","og_locale":"ko_KR","og_type":"article","og_title":"Game Servers and Couchbase with Node.js - Part 3","og_description":"In this part of the series, we will be setting up a game data storage system to allow you to store player game state over the course of their enjoyment of your game. To do this, we are going to [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/game-servers-and-couchbase-nodejs-part-3\/","og_site_name":"The Couchbase Blog","article_published_time":"2014-12-16T19:32:07+00:00","article_modified_time":"2023-06-28T07:23:43+00:00","author":"Brett Lawson, Principal Software Engineer, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Brett Lawson, Principal Software Engineer, Couchbase","Est. reading time":"10\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/"},"author":{"name":"Brett Lawson, Principal Software Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5cfc2fbf25776be2a027a474562be02f"},"headline":"Game Servers and Couchbase with Node.js &#8211; Part 3","datePublished":"2014-12-16T19:32:07+00:00","dateModified":"2023-06-28T07:23:43+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/"},"wordCount":2047,"commentCount":6,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Uncategorized"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/","url":"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/","name":"Game Servers and Couchbase with Node.js - Part 3 - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2014-12-16T19:32:07+00:00","dateModified":"2023-06-28T07:23:43+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/game-servers-and-couchbase-nodejs-part-3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Game Servers and Couchbase with Node.js &#8211; Part 3"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","description":"NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4, Couchbase","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5cfc2fbf25776be2a027a474562be02f","name":"\ube0c\ub81b \ub85c\uc2a8, \uc218\uc11d \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc5d4\uc9c0\ub2c8\uc5b4, Couchbase","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ee3586f0c112c20e863af447d44dec8f","url":"https:\/\/secure.gravatar.com\/avatar\/6aec1ba24ef7558a248dcde7b7a18b15b06e2885b24b663906a448634066c1c4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6aec1ba24ef7558a248dcde7b7a18b15b06e2885b24b663906a448634066c1c4?s=96&d=mm&r=g","caption":"Brett Lawson, Principal Software Engineer, Couchbase"},"description":"\ube0c\ub81b \ub85c\uc2a8\uc740 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc758 \uc218\uc11d \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc5d4\uc9c0\ub2c8\uc5b4\uc785\ub2c8\ub2e4. Brett\uc740 Couchbase Node.js \ubc0f PHP \ud074\ub77c\uc774\uc5b8\ud2b8\uc758 \uc124\uacc4\uc640 \uac1c\ubc1c\uc744 \ub2f4\ub2f9\ud558\uace0 \uc788\uc73c\uba70, C \ub77c\uc774\ube0c\ub7ec\ub9ac\uc778 libcouchbase\uc758 \uc124\uacc4\uc640 \uac1c\ubc1c\uc5d0\ub3c4 \ucc38\uc5ec\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.","url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/brett-lawson\/"}]}},"authors":[{"term_id":9004,"user_id":31,"is_guest":0,"slug":"brett-lawson","display_name":"Brett Lawson, Principal Software Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/6aec1ba24ef7558a248dcde7b7a18b15b06e2885b24b663906a448634066c1c4?s=96&d=mm&r=g","author_category":"","last_name":"Lawson","first_name":"Brett","job_title":"","user_url":"","description":"\ube0c\ub81b \ub85c\uc2a8\uc740 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc758 \uc218\uc11d \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc5d4\uc9c0\ub2c8\uc5b4\uc785\ub2c8\ub2e4. Brett\uc740 Couchbase Node.js \ubc0f PHP \ud074\ub77c\uc774\uc5b8\ud2b8\uc758 \uc124\uacc4\uc640 \uac1c\ubc1c\uc744 \ub2f4\ub2f9\ud558\uace0 \uc788\uc73c\uba70, C \ub77c\uc774\ube0c\ub7ec\ub9ac\uc778 libcouchbase\uc758 \uc124\uacc4\uc640 \uac1c\ubc1c\uc5d0\ub3c4 \ucc38\uc5ec\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/1616","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/users\/31"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=1616"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/1616\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=1616"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=1616"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=1616"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=1616"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}