{"id":4606,"date":"2018-02-13T07:00:41","date_gmt":"2018-02-13T15:00:41","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=4606"},"modified":"2025-06-13T16:53:42","modified_gmt":"2025-06-13T23:53:42","slug":"alexa-skills-azure-functions-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/alexa-skills-azure-functions-couchbase\/","title":{"rendered":"Azure \ud568\uc218 \ubc0f \uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uac00 \ud3ec\ud568\ub41c Alexa \uc2a4\ud0ac"},"content":{"rendered":"<div class=\"paragraph\">\n<p>Alexa \uc2a4\ud0ac\uc740 \uc5d0\ucf54, \uc5d0\ucf54 \ub2f7 \ub4f1\uacfc \uac19\uc740 Amazon \ub514\ubc14\uc774\uc2a4\uc5d0\uc11c \uc2e4\ud589\ud558\ub3c4\ub85d \ube4c\ub4dc\ud560 \uc218 \uc788\ub294 '\uc571'\uc785\ub2c8\ub2e4. \uc774 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 \uc11c\ubc84\ub9ac\uc2a4 Azure \ud568\uc218 \ubc0f Azure\uc5d0\uc11c \uc2e4\ud589\ub418\ub294 Couchbase \ubc31\uc5d4\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc5ec Alexa \uc2a4\ud0ac\uc744 \ube4c\ub4dc\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc54c\uc544\ubd05\ub2c8\ub2e4. \uc774 \uac8c\uc2dc\ubb3c\uc740 \uc81c\uac00 \uacfc\uac70\uc5d0 \uc791\uc131\ud55c Azure \ud568\uc218, \uc11c\ubc84\ub9ac\uc2a4 \ubc0f Azure\uc758 Couchbase\uc5d0 \ub300\ud55c \ub9ce\uc740 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc744 \uae30\ubc18\uc73c\ub85c \ud569\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/serverless-architecture-cloud-computing\/\">\ud074\ub77c\uc6b0\ub4dc \ucef4\ud4e8\ud305\uc744 \uc0ac\uc6a9\ud55c \uc11c\ubc84\ub9ac\uc2a4 \uc544\ud0a4\ud14d\ucc98<\/a> - \uc11c\ubc84\ub9ac\uc2a4\ub780 \ubb34\uc5c7\uc778\uac00\uc694?<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/azure-functions-lazy-initialization-couchbase-server\/\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc11c\ubc84\ub97c \uc0ac\uc6a9\ud55c Azure \ud568\uc218 \ubc0f \uc9c0\uc5f0 \ucd08\uae30\ud654<\/a> - Couchbase\uc640 Azure \ud568\uc218\ub97c \ud568\uaed8 \uc0ac\uc6a9\ud560 \ub54c \uad8c\uc7a5 \uc0ac\ud56d<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/chatbot-azure-couchbase-viber\/\">Azure\uc758 \ucc57\ubd07 \ubc0f Viber\uc6a9 Couchbase<\/a> - Alexa \uc2a4\ud0ac\uacfc \uc720\uc0ac\ud55c \uc0ac\uc6a9 \uc0ac\ub840<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/azure-getting-started-easy-free\/\">Azure: \uc27d\uace0 \ubb34\ub8cc\uc778 \uc2dc\uc791\ud558\uae30<\/a> - Azure Marketplace\ub97c \uc0ac\uc6a9\ud558\uc5ec Couchbase \ud074\ub7ec\uc2a4\ud130\ub97c \uc27d\uac8c \ub9cc\ub4dc\ub294 \ubc29\ubc95<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_what_kind_of_alexa_skills_am_i_building\">\uc5b4\ub5a4 \uc885\ub958\uc758 Alexa \uc2a4\ud0ac\uc744 \uad6c\ucd95\ud558\uace0 \uc788\ub098\uc694?<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\uc800\ub294 \uac1c\ubc1c\uc790 \uc639\ud638\uc790\ub85c \uc77c\ud558\uae30 \ub54c\ubb38\uc5d0 \uac1c\ubc1c\uc790 \uc774\ubca4\ud2b8\uc758 \uc2a4\ud3f0\uc11c \ubd80\uc2a4\uc5d0\uc11c \uc2dc\uac04\uc744 \ubcf4\ub0b4\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4. \uc800\ub294 \uc774 \uc77c\uc744 \uc815\ub9d0 \uc88b\uc544\ud569\ub2c8\ub2e4: \uc0ac\ub78c\ub4e4\uc5d0\uac8c \uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uac00 \uc5bc\ub9c8\ub098 \ud6cc\ub96d\ud55c\uc9c0 \uc54c\ub9b4 \uc218 \uc788\uace0, \uac1c\ubc1c\uc790\ub4e4\ub85c\ubd80\ud130 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4\ub85c \uc5b4\ub5a4 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\ub824\uace0 \ud558\ub294\uc9c0 \ud53c\ub4dc\ubc31\uc744 \ubc1b\uae30\ub3c4 \ud558\uc8e0.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ud558\uc9c0\ub9cc \ubd80\uc2a4 \uc6b4\uc601\uc5d0\uc11c \uc81c\uac00 \uc2eb\uc5b4\ud558\ub294 \ud55c \uac00\uc9c0\uac00 \uc788\ub2e4\uba74 \ubc14\ub85c \ubc18\ubcf5\uc785\ub2c8\ub2e4. \ud589\uc0ac\ub9c8\ub2e4 \uac19\uc740 \uc9c8\ubb38\uc744 \uc218\ubc31 \ubc88\uc529 \ubc1b\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc544\uc694:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\ub780 \ubb34\uc5c7\uc778\uac00\uc694? (\uba54\ubaa8\ub9ac \uc6b0\uc120 \uc544\ud0a4\ud14d\ucc98\uc758 \ubd84\uc0b0\ud615 NoSQL \ubb38\uc11c \ub370\uc774\ud130\ubca0\uc774\uc2a4)<\/p>\n<\/li>\n<li>\n<p>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\ub294 \ubabd\uace0DB\uc640 \uc5b4\ub5bb\uac8c \ub2e4\ub978\uac00\uc694? (\ub458 \ub2e4 \ubb38\uc11c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc774\uc9c0\ub9cc Couchbase\ub294 \uc8fc\uc694 \uae30\ub2a5\uacfc \uc544\ud0a4\ud14d\ucc98\uc5d0 \ucc28\uc774\uac00 \uc788\uc2b5\ub2c8\ub2e4.)<\/p>\n<\/li>\n<li>\n<p>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\ub294 \uce74\uc6b0\uce58DB\uc640 \uac19\uc740 \uac74\uac00\uc694? (<a href=\"https:\/\/www.couchbase.com\/blog\/ko\/couchbase-vs-couchdb\/\">\uc544\ub2c8\uc694.<\/a>)<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>\ubd88\ud3c9\ud558\ub294 \uac83\uc740 \uc544\ub2d9\ub2c8\ub2e4. \ub2e4\ub9cc \ucee8\ud37c\ub7f0\uc2a4\uac00 \uace7 \uc885\ub8cc\ub418\uae30 \ub54c\ubb38\uc5d0 100\ubc88\uc9f8 \uc9c8\ubb38\uc5d0 \ub2f5\ud560 \ub54c \uc5f4\uc815\uc801\uc73c\ub85c \ub2f5\ubcc0\ud558\uae30\uac00 \ud798\ub4e4\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ud558\uc9c0\ub9cc \ub204\uac00 \ud56d\uc0c1 \uc5f4\uc815\uc801\uc778\uc9c0 \uc544\uc138\uc694? \ubc14\ub85c \uc54c\ub809\uc0ac\uc785\ub2c8\ub2e4! \ub2e4\uc74c \uc774\ubca4\ud2b8\uc5d0 \uc5d0\ucf54 \ub2f7\uc744 \uac00\uc838\uac00\uba74 \uc54c\ub809\uc0ac\uac00 \uc800\ub97c \ub3c4\uc640\uc904\uc9c0\ub3c4 \ubaa8\ub974\uaca0\ub124\uc694:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><strong>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\ub780 \ubb34\uc5c7\uc778\uac00\uc694?<\/strong> - \uc54c\ub809\uc0ac\uac00 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc5d0 \ub300\ud55c \ud765\ubbf8\ub85c\uc6b4 \uc0ac\uc2e4\uc744 \ubb34\uc791\uc704\ub85c \uc54c\ub824\uc90d\ub2c8\ub2e4.<\/p>\n<\/li>\n<li>\n<p><strong>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\ub294 \ubabd\uace0DB\uc640 \uc5b4\ub5bb\uac8c \ub2e4\ub978\uac00\uc694?<\/strong> Alexa\ub294 \uc784\uc758\uc758 \uc544\ud0a4\ud14d\ucc98 \ub610\ub294 \uae30\ub2a5 \ucc28\uc774\ub97c \ub9d0\ud569\ub2c8\ub2e4.<\/p>\n<\/li>\n<li>\n<p><strong>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\ub294 \uce74\uc6b0\uce58DB\uc640 \uac19\uc740 \uac74\uac00\uc694?<\/strong> Alexa\uac00 \"\uc544\ub2c8\uc694\"\ub77c\uace0 \ub300\ub2f5\ud569\ub2c8\ub2e4.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc774\ub7ec\ud55c Alexa \uc2a4\ud0ac\uc774 \ub3c4\uc6c0\uc774 \ub41c\ub2e4\uba74 \ub098\uc911\uc5d0 \ub354 \ubcf5\uc7a1\ud55c \uc9c8\ubb38\uc5d0 \ub2f5\ud560 \uc218 \uc788\ub3c4\ub85d \uc2a4\ud0ac\uc744 \ud655\uc7a5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>\uc774 \uac8c\uc2dc\ubb3c\uc744 \ub530\ub77c \uc790\uc2e0\ub9cc\uc758 Alexa \uc2a4\ud0ac\uc744 \ub9cc\ub4e4\uace0 \uc2f6\ub2e4\uba74, \uc804\uccb4 <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/099AlexaAzureFunctions\/AlexaBoothDuty\">\uc18c\uc2a4 \ucf54\ub4dc\ub294 \uae43\ud5c8\ube0c\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/a>.<\/em><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_design\">\ub514\uc790\uc778<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\uc54c\ub809\uc0ac \uc2a4\ud0ac\uc740 \uc544\ub9c8\uc874\uc5d0 \ub4f1\ub85d\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \ub300\ubd80\ubd84\uc758 \uacbd\uc6b0, \uc774\ub4e4\uc740 \uc9c0\uc815\ud55c \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc5d0 \uac04\ub2e8\ud55c HTTP \uc694\uccad\uc744 \ud558\uace0 \ud2b9\uc815 JSON \uc751\ub2f5\uc744 \uae30\ub300\ud569\ub2c8\ub2e4. Azure \ud568\uc218\ub294 HTTP \uc694\uccad\uc744 \ucc98\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Azure \ud568\uc218\ub294 \uc751\ub2f5\uc73c\ub85c \uac00\ub4dd \ucc2c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \ucffc\ub9ac\ub97c \uc218\ud589\ud560 \uc218 \uc788\uc73c\uba70 \uac01 \uc751\ub2f5\uc774 \uba87 \ubc88 \uc81c\uacf5\ub418\uc5c8\ub294\uc9c0 \ucd94\uc801\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc544\ub798\ub294 \uc81c\uac00 \ub9cc\ub4e0 \ucd5c\uc18c\ud55c\uc758 \uc2e4\ud589 \uac00\ub2a5\ud55c Alexa \uc2a4\ud0ac \ud504\ub85c\uc81d\ud2b8\uc758 \ud558\uc774 \ub808\ubca8 \uc544\ud0a4\ud14d\ucc98 \ub2e4\uc774\uc5b4\uadf8\ub7a8\uc785\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/02\/09904-architecture-diagram.png\" alt=\"Architecture diagram from you\" width=\"to an echo\" height=\"to Alexa skills\"><\/span><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_data_storage_and_design\">\ub370\uc774\ud130 \uc800\uc7a5 \ubc0f \ub514\uc790\uc778<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\uc774 \uc2a4\ud0ac\uc740 \uad81\uadf9\uc801\uc73c\ub85c \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc11c\ubc84\uc5d0\uc11c \uc77c\ubd80 \ub370\uc774\ud130\ub97c \ucffc\ub9ac\ud560 \uac83\uc785\ub2c8\ub2e4. \ub450 \uac00\uc9c0 \uc885\ub958\uc758 \ubb38\uc11c\ubd80\ud130 \uc2dc\uc791\ud558\uaca0\uc2b5\ub2c8\ub2e4. (\uc774 Alexa \uc2a4\ud0ac\uc774 \uc720\uc6a9\ud558\ub2e4\uace0 \ud310\uba85\ub418\uba74 \ub098\uc911\uc5d0 \ub354 \ubcf5\uc7a1\ud55c \uac83\ub4e4\uc744 \ucd94\uac00\ud558\uaca0\uc2b5\ub2c8\ub2e4).<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_document_design\">\ubb38\uc11c \ub514\uc790\uc778<\/h3>\n<div class=\"paragraph\">\n<p>\uac01 \ubb38\uc11c\ub294 \uac00\ub2a5\ud55c \uc751\ub2f5\uc744 \ub098\ud0c0\ub0c5\ub2c8\ub2e4. \uac01 \ubb38\uc11c\uc5d0\ub294 3\uac1c\uc758 \ud544\ub4dc\uac00 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>\uc720\ud615<\/code> - \"mongodbcomparison\" \ub610\ub294 \"whatiscouchbase\"\uac00 \ub429\ub2c8\ub2e4.<\/p>\n<\/li>\n<li>\n<p><code>\uc22b\uc790<\/code> - \uc774 \uc751\ub2f5\uc774 \uc0ac\uc6a9\ub41c \ud69f\uc218(0\ubd80\ud130 \uc2dc\uc791)\uc785\ub2c8\ub2e4.<\/p>\n<\/li>\n<li>\n<p><code>\ud14d\uc2a4\ud2b8<\/code> - \uc54c\ub809\uc0ac \uc2a4\ud0ac\uc774 \ub9d0\ud558\uae38 \uc6d0\ud558\ub294 \ud14d\uc2a4\ud2b8\ub97c \uc785\ub825\ud569\ub2c8\ub2e4.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc774 \ubb38\uc11c\ub4e4\uc758 \ubb38\uc11c \ud0a4 \ub514\uc790\uc778\uc740 (\uc801\uc5b4\ub3c4 \uc544\uc9c1\uc740) \uc911\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc65c\ub0d0\ud558\uba74 \uc800\ub294 \uc774 \ubb38\uc11c\ub4e4\uc744 \uac80\uc0c9\ud560 \ub54c N1QL(JSON\uc6a9 SQL) \ucffc\ub9ac\ub9cc \uc0ac\uc6a9\ud560 \uac83\uc774\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \"mongo::2\" \ubc0f \"couchbase::5\"\uc640 \uac19\uc740 \ud0a4\ub97c \ub9cc\ub4e4\uae30\ub85c \uacb0\uc815\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc6b0\uc120 \uc774 \ub370\uc774\ud130\ub97c \uc800\ube44\uc6a9 Azure VM\uc758 \ub2e8\uc77c Couchbase \ub178\ub4dc\uc5d0 \uc800\uc7a5\ud558\uaca0\uc2b5\ub2c8\ub2e4. \ub370\uc774\ud130 \uc591\uc774 \uc801\uc740 \ub2e8\uc77c \ub178\ub4dc\ub294 \ubd80\uc2a4 \ud2b8\ub798\ud53d\uc774 \ub9ce\uc544\ub3c4 \ubb38\uc81c\uc5c6\uc774 \ucc98\ub9ac\ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc608\ub97c \ub4e4\uc5b4 \uc804 \uc138\uacc4 \uacf5\ud56d\uc5d0 \ud0a4\uc624\uc2a4\ud06c\ub85c \uc124\uce58\ud55c\ub2e4\uba74 Couchbase \ud074\ub7ec\uc2a4\ud130\ub97c \ud655\uc7a5\ud574\uc57c \ud560 \uac83\uc785\ub2c8\ub2e4. <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/scaling-couchbase-server-azure\/\">Couchbase\uc640 Azure\ub85c \uc27d\uac8c \uc791\uc5c5\ud558\uae30<\/a>.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_query_design\">\ucffc\ub9ac \ub514\uc790\uc778<\/h3>\n<div class=\"paragraph\">\n<p>\uc784\uc758\uc758 \ubb38\uc11c\ub97c \uc5bb\uc73c\ub824\uba74 N1QL \ucffc\ub9ac\ub97c \uc2e4\ud589\ud574\uc57c \ud569\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-SQL\">SELECT m.*, META(m).id\r\nFROM boothduty m\r\nWHERE m.type = 'mongodbcomparison'\r\nORDER BY UUID()\r\nLIMIT 1;<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>UUID\ub294 \ub09c\uc218 \uc0dd\uc131\uae30 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4. \uc2e4\uc81c \uc6a9\ub3c4\ub294 \uc544\ub2c8\uc9c0\ub9cc \"\ucda9\ubd84\ud788 \uc88b\uc740\" \uae30\ub2a5\uc785\ub2c8\ub2e4. \uc9c4\uc815\ud55c \ubb34\uc791\uc704\uc131\uc774 \uc815\ub9d0\ub85c \ud544\uc694\ud558\ub2e4\uba74 <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.0\/n1ql\/n1ql-language-reference\/curl.html\">\uceec \uc694\uccad<\/a> \uc5d0\uc11c <a href=\"https:\/\/www.random.org\/clients\/http\/\">random.org\uc758 API<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc774 \ucffc\ub9ac\ub97c \uc2e4\ud589\ud558\ub824\uba74 'type' \ud544\ub4dc\uc5d0 \ub300\ud55c \uc778\ub371\uc2a4\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-SQL\">CREATE INDEX ix_type ON boothduty(type);<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_azure_functions\">Azure \uae30\ub2a5<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Azure \ud568\uc218\ub97c \ub9cc\ub4e4\ub824\uba74 \ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud588\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/github.com\/AreYouFreeBusy\/AlexaSkillsKit.NET\">\uae30\uc874 .NET \ub77c\uc774\ube0c\ub7ec\ub9ac<\/a> \ub77c\ub294 AlexaSkills.NET\uc744 \uc0ac\uc6a9\ud558\uba74 Alexa \uc2a4\ud0ac\uc744 \ub9cc\ub4dc\ub294 \ub370 \ud544\uc694\ud55c \ucf54\ub4dc\ub97c \ub9e4\uc6b0 \uc27d\uac8c \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Azure \ud568\uc218 \uc194\ub8e8\uc158\uc744 \ub9cc\ub4e0 \ud6c4 NuGet\uc744 \uc0ac\uc6a9\ud558\uc5ec \ucd94\uac00\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_using_alexaskills_net\">AlexaSkills.NET \uc0ac\uc6a9<\/h3>\n<div class=\"paragraph\">\n<p>\ub2e4\uc74c\uc73c\ub85c '\uc2a4\ud53c\uce58 \ub81b' \ud074\ub798\uc2a4\ub97c \ub9cc\ub4e4\uc5c8\uc2b5\ub2c8\ub2e4. \uc800\ub294 \uc2a4\ud53c\uce58 \ub81b\uc744 \ube44\ub3d9\uae30\uc2dd\uc73c\ub85c \ub9cc\ub4e4\uae30\ub85c \uc120\ud0dd\ud588\uc9c0\ub9cc \ub3d9\uae30\uc2dd \uc635\uc158\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \ub124 \uac00\uc9c0 \uba54\uc11c\ub4dc\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4. \ud604\uc7ac\ub85c\uc11c\ub294 \uc774 \uc911 \ub450 \uac00\uc9c0 \uba54\uc11c\ub4dc\ub9cc \uc2a4\ud0ac\uc5d0 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">    public class BoothDutySpeechlet : SpeechletBase, ISpeechletWithContextAsync\r\n    {\r\n        public async Task&lt;SpeechletResponse&gt; OnIntentAsync(IntentRequest intentRequest, Session session, Context context)\r\n        {\r\n            try\r\n            {\r\n                var intentName = intentRequest.Intent.Name;\r\n                var intentProcessor = IntentProcessor.Create(intentName);\r\n                return await intentProcessor.Execute(intentRequest);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                var resp = new SpeechletResponse();\r\n                resp.ShouldEndSession = false;\r\n                resp.OutputSpeech = new PlainTextOutputSpeech() { Text = ex.Message };\r\n                return await Task.FromResult(resp);\r\n            }\r\n        }\r\n\r\n        public Task&lt;SpeechletResponse&gt; OnLaunchAsync(LaunchRequest launchRequest, Session session, Context context)\r\n        {\r\n            var resp = new SpeechletResponse();\r\n            resp.ShouldEndSession = false;\r\n            resp.OutputSpeech = new PlainTextOutputSpeech() { Text = \"Welcome to the Couchbase booth. Ask me about Couchbase.\" };\r\n            return Task.FromResult(resp);\r\n        }\r\n\r\n        public Task OnSessionStartedAsync(SessionStartedRequest sessionStartedRequest, Session session, Context context)\r\n        {\r\n            return Task.Delay(0); \/\/ nothing to do (yet)\r\n        }\r\n\r\n        public Task OnSessionEndedAsync(SessionEndedRequest sessionEndedRequest, Session session, Context context)\r\n        {\r\n            return Task.Delay(0); \/\/ nothing to do (yet)\r\n        }\r\n\r\n        \/\/ I only need to use this when I'm testing locally\r\n\/\/        public override bool OnRequestValidation(SpeechletRequestValidationResult result, DateTime referenceTimeUtc,\r\n\/\/            SpeechletRequestEnvelope requestEnvelope)\r\n\/\/        {\r\n\/\/            return true;\r\n\/\/        }\r\n    }<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\uadf8\ub9ac\uace0 <code>OnLaunchAsync<\/code> \ub294 Echo \uc0ac\uc6a9\uc790\uac00 \uac00\uc7a5 \uba3c\uc800 \ub3c4\ub2ec\ud558\ub294 \uacf3\uc785\ub2c8\ub2e4. \uc0ac\uc6a9\uc790\uac00 \"\uc54c\ub809\uc0ac, \ub9e4\ud2b8 \ubd80\uc2a4 \ub3c4\uc6b0\ubbf8 \uc5f4\uc5b4\uc918\"\uc640 \uac19\uc740 \ub9d0\uc744 \ud558\uba74 \uc774 \ucf54\ub4dc\uac00 \uba87 \uac00\uc9c0 \uae30\ubcf8 \uc9c0\uce68\uc73c\ub85c \uc751\ub2f5\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uadf8\ub9ac\uace0 <code>\uc628\uc778\ud150\ud2b8\ub3d9\uae30\ud654<\/code> \ub294 \ub300\ubd80\ubd84\uc758 Alexa \uc2a4\ud0ac \uc694\uccad\uc774 \ucc98\ub9ac\ub418\ub294 \uacf3\uc785\ub2c8\ub2e4. \uc5ec\uae30\uc11c\ub294 \ud329\ud1a0\ub9ac\/\uc804\ub7b5 \ucf54\ub4dc \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud638\ucd9c\ub418\ub294 \uc778\ud150\ud2b8\uc5d0 \ub530\ub77c \ub2e4\ub978 \uac1d\uccb4\ub97c \uc778\uc2a4\ud134\uc2a4\ud654\ud569\ub2c8\ub2e4(\ub098\uc911\uc5d0 '\uc778\ud150\ud2b8'\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc124\uba85\ud569\ub2c8\ub2e4).<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public static IIntentProcessor Create(string intentName = \"FallbackIntent\")\r\n{\r\n    switch (intentName)\r\n    {\r\n        case \"MongodbComparisonIntent\":\r\n            return new MongoDbComparisonIntentProcessor(CouchbaseBucket.GetBucket());\r\n        case \"WhatIsCouchbaseIntent\":\r\n            return new WhatIsCouchbaseIntentProcessor(CouchbaseBucket.GetBucket());\r\n        case \"CouchDbIntent\":\r\n            return new CouchDbIntentProcessor();\r\n        case \"FallbackIntent\":\r\n            return new FallbackIntentProcessor();\r\n        default:\r\n            return new FallbackIntentProcessor();\r\n    }\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_connecting_to_couchbase\">Couchbase\uc5d0 \uc5f0\uacb0<\/h3>\n<div class=\"paragraph\">\n<p><code>CouchbaseBucket.GetBucket()<\/code> \uc0ac\uc6a9 \uc911\uc785\ub2c8\ub2e4. <code>Lazy<\/code> \uc5d0 \uc124\uba85\ub41c \uac83\ucc98\ub7fc <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/azure-functions-lazy-initialization-couchbase-server\/\">\uc774\uc804 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc778 Azure \ud568\uc218\uc5d0 \ub300\ud55c<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub530\ub77c\uc11c '\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uac00 \ubb34\uc5c7\uc778\uac00\uc694'\ub77c\ub294 \uc778\ud150\ud2b8\uac00 \ub4e4\uc5b4\uc62c \ub54c\ub9c8\ub2e4 <code>\uc653\uc774\uc988\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc778\ud150\ud2b8\ud504\ub85c\uc138\uc11c<\/code> \uac00 \uc778\uc2a4\ud134\uc2a4\ud654\ub418\uace0 \uc2e4\ud589\ub429\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public class WhatIsCouchbaseIntentProcessor : BaseIntentProcessor\r\n{\r\n    private readonly IBucket _bucket;\r\n\r\n    public WhatIsCouchbaseIntentProcessor(IBucket bucket)\r\n    {\r\n        _bucket = bucket;\r\n    }\r\n\r\n    public override async Task&lt;SpeechletResponse&gt; Execute(IntentRequest intentRequest)\r\n    {\r\n        \/\/ get random fact from bucket\r\n        var n1ql = @\"select m.*, meta(m).id\r\n                        from boothduty m\r\n                        where m.type = 'whatiscouchbase'\r\n                        order by `number`, uuid()\r\n                        limit 1;\";\r\n        var query = QueryRequest.Create(n1ql);\r\n        var result = await _bucket.QueryAsync&lt;BoothFact&gt;(query);\r\n        if (result == null || !result.Rows.Any())\r\n            return await CreateErrorResponseAsync();\r\n        var fact = result.First();\r\n\r\n        \/\/ increment fact count\r\n        await _bucket.MutateIn&lt;dynamic&gt;(fact.Id)\r\n            .Counter(\"number\", 1)\r\n            .ExecuteAsync();\r\n\r\n        \/\/ return text of fact\r\n        return await CreatePlainTextSpeechletReponseAsync(fact.Text);\r\n    }\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc55e\uc11c \uc5b8\uae09\ud55c N1QL \ucffc\ub9ac\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\uc74c\uc744 \uc8fc\ubaa9\ud558\uc138\uc694(\uc22b\uc790\uac00 \ub0ae\uc740 \uc0ac\uc2e4\uc774 \uc6b0\uc120\uc21c\uc704\ub97c \uac16\ub3c4\ub85d \uc57d\uac04 \uc870\uc815\ub428). \uc774 \ucf54\ub4dc\ub294 \ub610\ud55c <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/sub-document-api-in-couchbase-server-4-5-with-the-net-sdk-revisted\/\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ud558\uc704 \ubb38\uc11c API<\/a> \ub97c \ud074\ub9ad\ud558\uc5ec '\uc22b\uc790' \ud544\ub4dc\ub97c 1\uc529 \uc99d\uac00\uc2dc\ud0b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc804\uccb4 \ucf54\ub4dc\ub97c \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/099AlexaAzureFunctions\/AlexaBoothDuty\">\uae43\ud5c8\ube0c\uc758 \ub2e4\ub978 \uc778\ud150\ud2b8 \ud504\ub85c\uc138\uc11c<\/a>\uc640 \ube44\uc2b7\ud558\uc9c0\ub9cc, N1QL\uc774 \uc57d\uac04 \ub2e4\ub97c \ubfd0 \ub9e4\uc6b0 \uc720\uc0ac\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_connecting_to_azure_functions\">Azure \uae30\ub2a5\uc5d0 \uc5f0\uacb0<\/h3>\n<div class=\"paragraph\">\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c, \uc2a4\ud53c\uce58 \ub81b\uc774 \uc900\ube44\ub418\uba74 Azure \ud568\uc218\uc5d0 \uc27d\uac8c \uc5f0\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public static class BoothDuty\r\n{\r\n    [FunctionName(\"BoothDuty\")]\r\n    public static async Task&lt;HttpResponseMessage&gt; Run([HttpTrigger(AuthorizationLevel.Anonymous, \"get\", \"post\", Route = null)]HttpRequestMessage req, TraceWriter log)\r\n    {\r\n        var speechlet = new BoothDutySpeechlet();\r\n        return await speechlet.GetResponseAsync(req);\r\n    }\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc774\uc81c Postman\uc744 \uc0ac\uc6a9\ud558\uc5ec \ub85c\uceec\uc5d0\uc11c \ud14c\uc2a4\ud2b8\ud558\uac70\ub098 azure\uc5d0 \ubc30\ud3ec\ud55c \ud6c4 Alexa \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \ud14c\uc2a4\ud2b8\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_creating_the_alexa_skills\">Alexa \uc2a4\ud0ac \ub9cc\ub4e4\uae30<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Alexa \uc2a4\ud0ac\uc744 \uc124\uc815\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud55c \ub9ce\uc740 \ubb38\uc11c\uac00 \uc788\uc73c\ubbc0\ub85c \uc804\uccb4 \uacfc\uc815\uc744 \uc124\uba85\ud558\uc9c0\ub294 \uc54a\uaca0\uc2b5\ub2c8\ub2e4. \uc2a4\ud0ac\uc774 \uacf5\uc2dd \uc778\uc99d\uc744 \ubc1b\uc73c\ub824\uba74 \uc544\uc9c1 \ud560 \uc77c\uc774 \ub354 \ub0a8\uc558\uc9c0\ub9cc \ubca0\ud0c0 \ud14c\uc2a4\ud2b8\uc6a9\uc73c\ub85c\ub294 \ucda9\ubd84\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Azure Functions URL\uc774 \uc788\uc73c\uba74 Alexa\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Alexa\uc5d0\uc11c HTTPS\ub97c \uc0ac\uc6a9\ud558\ub824\uba74 \uae30\uc220\uc774 \ud544\uc694\ud558\uc9c0\ub9cc \ub2e4\ud589\ud788 Azure Functions\ub294 azurewebsites.net \ud558\uc704 \ub3c4\uba54\uc778\uc5d0\uc11c HTTPS\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. \ub2e4\uc74c\uc740 \uc2a4\ud06c\ub9b0\uc0f7\uc785\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/02\/09901-alexa-skills-https-configuration.png\" alt=\"Alexa skills HTTPS configuration with Azure Functions\"><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc55e\uc11c \"\uc778\ud150\ud2b8\"\uc5d0 \ub300\ud574 \uc5b8\uae09\ud588\uc2b5\ub2c8\ub2e4. \uc774\ub294 Alexa \uc2a4\ud0ac\uc774 \uc785\ub825\uacfc \ud568\uaed8 \ucc98\ub9ac\ud560 \uc218 \uc788\ub294 \ub2e4\uc591\ud55c \uc720\ud615\uc758 \ub3d9\uc791\uc785\ub2c8\ub2e4. \ud568\uc218 \uc11c\uba85\ucc98\ub7fc \uc0dd\uac01\ud558\uba74 \ub429\ub2c8\ub2e4. \ud604\uc7ac \uc800\ub294 3\uac1c\uc758 \uc778\ud150\ud2b8\ub97c \uc124\uacc4\ud588\uc73c\uba70, \uc544\uc9c1 \uc778\ud150\ud2b8\uc5d0 \ub300\ud55c \ub9e4\uac1c \ubcc0\uc218\ub294 \uc5c6\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c \uc81c \uc778\ud150\ud2b8 \uc2a4\ud0a4\ub9c8\ub294 \ub9e4\uc6b0 \uac04\ub2e8\ud55c JSON \uc870\uac01\uc785\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/02\/09902-alexa-skills-intent-schema.png\" alt=\"Alexa skills intent schema\"><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uac01 \uc778\ud150\ud2b8\uc5d0 \ub300\ud574 \uc778\ud150\ud2b8\uc5d0 \ub9e4\ud551\ub418\ub294 '\ubc1c\ud654'\ub97c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub294 Echo \uc0ac\uc6a9\uc790\uac00 \ub9d0\ud560 \ubb38\uad6c\uc774\uba70, \uc5b4\ub5a4 \uc778\ud150\ud2b8\uc5d0 \ud574\ub2f9\ud558\ub294\uc9c0 \ub098\ud0c0\ub0c5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/02\/09903-alexa-skills-sample-utterances.png\" alt=\"Alexa skills sample utterances\"><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc800\ub294 \ubaa8\ub4e0 \ub2e4\uc591\ud55c \ubcc0\ud615\uc744 \uc0dd\uac01\ud574 \ubcf4\ub824\uace0 \ub178\ub825\ud588\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc774 \uae30\ub2a5\uc774 \ub354 \uc77c\ubc18\uc801\uc73c\ub85c \uc791\ub3d9\ud558\uae30\ub97c \uc6d0\ud55c\ub2e4\uba74 \uc0ac\uc6a9\uc790\uac00 \"Couchbase\uc640 {x}\uc758 \ucc28\uc774\uc810\uc740 \ubb34\uc5c7\uc778\uac00\uc694?\"\ub77c\ub294 \uc9c8\ubb38\uc744 \ud560 \uc218 \uc788\ub3c4\ub85d \ub9e4\uac1c \ubcc0\uc218\ub97c \uc124\uc815\ud560 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_echo_dot_in_action\">\uc5d0\ucf54 \ub2f7\uc758 \uc2e4\uc81c \uc0ac\uc6a9<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\uc54c\ub809\uc0ac \uc2a4\ud1a0\uc5b4\uc5d0 \uac8c\uc2dc\ud558\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. '\ubca0\ud0c0 \ud14c\uc2a4\ud2b8'\ub85c \ubc30\ud3ec\ud588\uc73c\ubbc0\ub85c \uc0ac\uc6a9\ud574 \ubcf4\uace0 \uc2f6\uc73c\uc2dc\uba74 \uae30\uaebc\uc774 \ucd08\ub300\uc7a5\uc744 \ubcf4\ub0b4\ub4dc\ub9ac\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub2e4\uc74c\uc740 \uc81c\uac00 \uc791\ub144\uc5d0 \ud6cc\ub96d\ud55c \ubd84\ub4e4\ub85c\ubd80\ud130 \uc2a4\ud53c\ucee4 \uc120\ubb3c\ub85c \ubc1b\uc740 Echo Dot\uc5d0\uc11c \uc0ac\uc6a9\ud574 \ubcf8 \ub3d9\uc601\uc0c1\uc785\ub2c8\ub2e4. <a href=\"https:\/\/devnexus.com\/\">\uac1c\ubc1c\uc790 \ub125\uc11c\uc2a4<\/a>):<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\n[\uc720\ud29c\ube0c https:\/\/www.youtube.com\/watch?v=RaYV6jDO8Q8&amp;w=560&amp;h=315]\n<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc2dc\ub044\ub7ec\uc6b4 \ubd80\uc2a4\uc5d0\uc11c \uc2e4\uc81c\ub85c \ud6a8\uacfc\uac00 \uc788\uc744\uae4c\uc694? \uae00\uc384\uc694, \uc544\uc9c1 \ubd80\uc2a4\uc5d0 \uc548\ub77d \uc758\uc790\uc640 \ubca0\uac1c\ub97c \uac00\uc838\uac08 \uc900\ube44\uac00 \ub418\uc9c0 \uc54a\uc558\ub2e4\uace0 \uac00\uc815\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \ucc38\uc5ec \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub85c\uc11c Couchbase\uc758 \ud798\uc744 \ubcf4\uc5ec\uc904 \uc218 \uc788\ub294 \uc7ac\ubbf8\uc788\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_summary\">\uc694\uc57d<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Alexa \uc2a4\ud0ac\uc740 Azure \ud568\uc218\uc640 \uac19\uc740 \uc11c\ubc84\ub9ac\uc2a4 \uc544\ud0a4\ud14d\ucc98\ub97c \uc0ac\uc6a9\ud558\uae30\uc5d0 \uc88b\uc740 \uacf3\uc785\ub2c8\ub2e4. \uc2a4\ud0ac\uc740 \uac04\ud5d0\uc801\uc73c\ub85c \uc0ac\uc6a9\ub418\uba70 Azure \ud568\uc218\ub294 \uc2e4\ud589\ub418\ub294 \uc2dc\uac04\uc5d0 \ub300\ud574\uc11c\ub9cc \uc694\uae08\uc744 \uccad\uad6c\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc11c\ubc84\ub294 \uc774\ub7ec\ud55c \uc571\uc744 \uc704\ud55c \ud6cc\ub96d\ud55c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc785\ub2c8\ub2e4. \ucc98\uc74c\uc5d0\ub294 \ub2e8\uc77c \ubd80\uc2a4\ub97c \ucc98\ub9ac\ud558\uae30 \uc704\ud574 \uc791\uac8c \uc2dc\uc791\ud560 \uc218 \uc788\uc9c0\ub9cc \ub354 \ud070 \uc218\uc694\ub97c \uc218\uc6a9\ud558\uae30 \uc704\ud574 \uc27d\uac8c \ud655\uc7a5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc5d0 \ub300\ud55c \uc9c8\ubb38\uc774 \uc788\uc73c\uc2e0\uac00\uc694? \ubc29\ubb38\ud558\uae30 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/forums\/\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ud3ec\ub7fc<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc9c8\ubb38\uc774 \uc788\uc73c\uc2e0\uac00\uc694? \uc800\ub97c \ucc3e\uc544\uc8fc\uc138\uc694 <a href=\"https:\/\/twitter.com\/mgroves\">\ud2b8\uc704\ud130 @mgroves<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ubaa8\ub4e0 \ud6cc\ub96d\ud55c <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/azure-functions\/\">Azure \ud568\uc218\uc5d0 \ub300\ud55c Microsoft\uc758 \ubb38\uc11c<\/a>\uc640 \uc54c\ub809\uc0ac \uc2a4\ud0ac\uc5d0 \ub300\ud55c \uc124\uba85\uc11c <a href=\"https:\/\/github.com\/AreYouFreeBusy\/AlexaSkillsKit.NET\">.NET \ub77c\uc774\ube0c\ub7ec\ub9ac<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Alexa Skills are the &#8220;apps&#8221; that you can build to run on Amazon devices like the Echo, Echo Dot, etc. In this blog post, you&#8217;ll learn how to build an Alexa skill using serverless Azure Functions and a Couchbase backend [&hellip;]<\/p>","protected":false},"author":71,"featured_media":3934,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,1816],"tags":[1673],"ppma_author":[8937],"class_list":["post-4606","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-couchbase-server","tag-microsoft-azure"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Alexa Skills with Azure Functions and Couchbase - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Alexa Skills are the &quot;apps&quot; that run on devices like the Echo. In this blog post, you&#039;ll build a skill using Azure Functions and Couchbase running on Azure.\" \/>\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\/alexa-skills-azure-functions-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Alexa Skills with Azure Functions and Couchbase\" \/>\n<meta property=\"og:description\" content=\"Alexa Skills are the &quot;apps&quot; that run on devices like the Echo. In this blog post, you&#039;ll build a skill using Azure Functions and Couchbase running on Azure.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/alexa-skills-azure-functions-couchbase\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-02-13T15:00:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-13T23:53:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/074-hero-Azure-Clouds.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"922\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"Alexa Skills with Azure Functions and Couchbase\",\"datePublished\":\"2018-02-13T15:00:41+00:00\",\"dateModified\":\"2025-06-13T23:53:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/\"},\"wordCount\":1455,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/074-hero-Azure-Clouds.jpg\",\"keywords\":[\"Microsoft Azure\"],\"articleSection\":[\".NET\",\"Couchbase Server\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/\",\"name\":\"Alexa Skills with Azure Functions and Couchbase - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/074-hero-Azure-Clouds.jpg\",\"datePublished\":\"2018-02-13T15:00:41+00:00\",\"dateModified\":\"2025-06-13T23:53:42+00:00\",\"description\":\"Alexa Skills are the \\\"apps\\\" that run on devices like the Echo. In this blog post, you'll build a skill using Azure Functions and Couchbase running on Azure.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/074-hero-Azure-Clouds.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/074-hero-Azure-Clouds.jpg\",\"width\":1920,\"height\":922,\"caption\":\"National Cloud Database Day\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Alexa Skills with Azure Functions and Couchbase\"}]},{\"@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\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\/\/crosscuttingconcerns.com\",\"https:\/\/x.com\/mgroves\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Alexa Skills with Azure Functions and Couchbase - The Couchbase Blog","description":"Alexa Skills are the \"apps\" that run on devices like the Echo. In this blog post, you'll build a skill using Azure Functions and Couchbase running on Azure.","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\/alexa-skills-azure-functions-couchbase\/","og_locale":"ko_KR","og_type":"article","og_title":"Alexa Skills with Azure Functions and Couchbase","og_description":"Alexa Skills are the \"apps\" that run on devices like the Echo. In this blog post, you'll build a skill using Azure Functions and Couchbase running on Azure.","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/alexa-skills-azure-functions-couchbase\/","og_site_name":"The Couchbase Blog","article_published_time":"2018-02-13T15:00:41+00:00","article_modified_time":"2025-06-13T23:53:42+00:00","og_image":[{"width":1920,"height":922,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/074-hero-Azure-Clouds.jpg","type":"image\/jpeg"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"9\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"Alexa Skills with Azure Functions and Couchbase","datePublished":"2018-02-13T15:00:41+00:00","dateModified":"2025-06-13T23:53:42+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/"},"wordCount":1455,"commentCount":3,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/074-hero-Azure-Clouds.jpg","keywords":["Microsoft Azure"],"articleSection":[".NET","Couchbase Server"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/","name":"Alexa Skills with Azure Functions and Couchbase - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/074-hero-Azure-Clouds.jpg","datePublished":"2018-02-13T15:00:41+00:00","dateModified":"2025-06-13T23:53:42+00:00","description":"Alexa Skills are the \"apps\" that run on devices like the Echo. In this blog post, you'll build a skill using Azure Functions and Couchbase running on Azure.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/074-hero-Azure-Clouds.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/074-hero-Azure-Clouds.jpg","width":1920,"height":922,"caption":"National Cloud Database Day"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/alexa-skills-azure-functions-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Alexa Skills with Azure Functions and Couchbase"}]},{"@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\/3929663e372020321b0152dc4fa65a58","name":"\ub9e4\ud29c \uadf8\ub85c\ube0c\uc2a4","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"Matthew D. Groves\ub294 \ucf54\ub529\uc744 \uc88b\uc544\ud558\ub294 \uc0ac\ub78c\uc785\ub2c8\ub2e4. C#, jQuery, PHP \ub4f1 \ubb34\uc5c7\uc774\ub4e0 \ud480 \ub9ac\ud018\uc2a4\ud2b8\ub97c \uc81c\ucd9c\ud560 \uc815\ub3c4\ub85c \ucf54\ub529\uc744 \uc88b\uc544\ud569\ub2c8\ub2e4. 90\ub144\ub300\uc5d0 \ubd80\ubaa8\ub2d8\uc758 \ud53c\uc790 \uac00\uac8c\ub97c \uc704\ud574 QuickBASIC POS \uc571\uc744 \ub9cc\ub4e0 \uc774\ud6c4\ub85c \uc804\ubb38\uc801\uc73c\ub85c \ucf54\ub529\uc744 \ud574\uc654\uc2b5\ub2c8\ub2e4. \ud604\uc7ac Couchbase\uc758 \uc120\uc784 \uc81c\ud488 \ub9c8\ucf00\ud305 \uad00\ub9ac\uc790\ub85c \uc77c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc5ec\uac00 \uc2dc\uac04\uc5d0\ub294 \uac00\uc871\uacfc \ud568\uaed8 \ucd95\uad6c \uacbd\uae30\ub97c \uad00\ub78c\ud558\uace0 \uac1c\ubc1c\uc790 \ucee4\ubba4\ub2c8\ud2f0\uc5d0 \ucc38\uc5ec\ud558\uba70 \uc2dc\uac04\uc744 \ubcf4\ub0c5\ub2c8\ub2e4. \uadf8\ub294 .NET\uc758 AOP, .NET\uc758 \ud504\ub85c \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4, Pluralsight \uc800\uc790, Microsoft MVP\uc758 \uc800\uc790\uc774\uae30\ub3c4 \ud569\ub2c8\ub2e4.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/matthew-groves\/"}]}},"authors":[{"term_id":8937,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","author_category":"","last_name":"Groves","first_name":"Matthew","job_title":"","user_url":"https:\/\/crosscuttingconcerns.com","description":"Matthew D. Groves\ub294 \ucf54\ub529\uc744 \uc88b\uc544\ud558\ub294 \uc0ac\ub78c\uc785\ub2c8\ub2e4.  C#, jQuery, PHP \ub4f1 \ubb34\uc5c7\uc774\ub4e0 \ud480 \ub9ac\ud018\uc2a4\ud2b8\ub97c \uc81c\ucd9c\ud560 \uc815\ub3c4\ub85c \ucf54\ub529\uc744 \uc88b\uc544\ud569\ub2c8\ub2e4.  90\ub144\ub300\uc5d0 \ubd80\ubaa8\ub2d8\uc758 \ud53c\uc790 \uac00\uac8c\ub97c \uc704\ud574 QuickBASIC POS \uc571\uc744 \ub9cc\ub4e0 \uc774\ud6c4\ub85c \uc804\ubb38\uc801\uc73c\ub85c \ucf54\ub529\uc744 \ud574\uc654\uc2b5\ub2c8\ub2e4.  \ud604\uc7ac Couchbase\uc758 \uc120\uc784 \uc81c\ud488 \ub9c8\ucf00\ud305 \uad00\ub9ac\uc790\ub85c \uc77c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc5ec\uac00 \uc2dc\uac04\uc5d0\ub294 \uac00\uc871\uacfc \ud568\uaed8 \ucd95\uad6c \uacbd\uae30\ub97c \uad00\ub78c\ud558\uace0 \uac1c\ubc1c\uc790 \ucee4\ubba4\ub2c8\ud2f0\uc5d0 \ucc38\uc5ec\ud558\uba70 \uc2dc\uac04\uc744 \ubcf4\ub0c5\ub2c8\ub2e4.  \uadf8\ub294 .NET\uc758 AOP, .NET\uc758 \ud504\ub85c \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4, Pluralsight \uc800\uc790, Microsoft MVP\uc758 \uc800\uc790\uc774\uae30\ub3c4 \ud569\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/4606","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\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=4606"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/4606\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/3934"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=4606"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=4606"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=4606"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=4606"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}