{"id":3974,"date":"2017-10-02T07:00:08","date_gmt":"2017-10-02T14:00:08","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=3974"},"modified":"2023-09-09T02:30:23","modified_gmt":"2023-09-09T09:30:23","slug":"create-restful-api-node-js-hapi-couchbase-nosql","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/create-restful-api-node-js-hapi-couchbase-nosql\/","title":{"rendered":"Node.js, Hapi \ubc0f Couchbase NoSQL\ub85c RESTful API \ub9cc\ub4e4\uae30"},"content":{"rendered":"<p>Express\ub85c Node.js \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uac1c\ubc1c\ud558\ub294 \uac83\uc740 \ub9e4\uc6b0 \uc778\uae30 \uc788\ub294 \uc635\uc158\uc774\uc9c0\ub9cc, \uc774\uac83\uc774 \uc720\uc77c\ud55c \uc635\uc158\uc740 \uc544\ub2c8\uba70 \ucd5c\uc120\uc758 \uc635\uc158\ub3c4 \uc544\ub2d0 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc800\ub294 \ucd5c\uadfc\uc5d0 <a href=\"https:\/\/hapijs.com\/\" target=\"_blank\" rel=\"noopener\">Hapi<\/a> Express\uac00 \ub4f1\uc7a5\ud588\uc744 \ub2f9\uc2dc\uc5d0\ub294 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc558\ub358 \uc11c\ube44\uc2a4\ub97c \uc704\ud55c \ud504\ub808\uc784\uc6cc\ud06c\ub85c \uc815\uc758\ub429\ub2c8\ub2e4.<\/p>\n<p>\uc774\uc804\uc5d0\ub294 <a href=\"https:\/\/www.thepolyglotdeveloper.com\/2015\/10\/create-a-full-stack-app-using-node-js-couchbase-server\/\" target=\"_blank\" rel=\"noopener\">Node.js \ubc0f Express\ub85c RESTful API \ub9cc\ub4e4\uae30<\/a>\ub97c \uc0ac\uc6a9\ud588\uc9c0\ub9cc \uc774\ubc88\uc5d0\ub294 Hapi\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub3d9\uc77c\ud55c \uc791\uc5c5\uc744 \uc218\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p><!--more--><\/p>\n<p>\ucf54\ub4dc\uc5d0 \ub108\ubb34 \ub9ce\uc740 \uc2dc\uac04\uc744 \ud22c\uc790\ud558\uae30 \uc804\uc5d0 \uc815\ud655\ud788 \ubb34\uc5c7\uc744 \uad6c\ucd95\ud560 \uac83\uc778\uc9c0 \ud30c\uc545\ud574\uc57c \ud569\ub2c8\ub2e4. \uc5ec\uae30\uc11c \ubaa9\ud45c\ub294 \ub450 \uac1c\uc758 \uc5d4\ub4dc\ud3ec\uc778\ud2b8 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ub9cc\ub4dc\ub294 \uac83\uc785\ub2c8\ub2e4. \ud558\ub098\uc758 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \ub370\uc774\ud130\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\uc5b4\uc57c \ud558\uace0 \ub2e4\ub978 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \uc77d\uc744 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>\ucef4\ud4e8\ud130 \uc5b4\ub518\uac00\uc5d0 \uc0c8 \ud504\ub85c\uc81d\ud2b8 \ub514\ub809\ud130\ub9ac\ub97c \ub9cc\ub4e4\uace0 \ud574\ub2f9 \ub514\ub809\ud130\ub9ac \ub0b4\uc758 \uba85\ub839 \ud504\ub86c\ud504\ud2b8\uc5d0\uc11c \ub2e4\uc74c \uba85\ub839\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">npm init -y<\/pre>\n<p>\uc704\uc758 \uba85\ub839\uc740 \uc0c8 Node.js \ud504\ub85c\uc81d\ud2b8\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4.\u00a0<strong>package.json<\/strong> \ud30c\uc77c\uc744 \uc5f4\uc5b4\uc57c \ud569\ub2c8\ub2e4. \ub2e4\uc74c \ub2e8\uacc4\ub294 \uac01 \ud504\ub85c\uc81d\ud2b8 \uc885\uc18d \uc694\uc18c\ub97c \uc124\uce58\ud558\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>\uba85\ub839\uc904\uc5d0\uc11c \ub2e4\uc74c\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">npm install couchbase hapi joi uuid --save<\/pre>\n<p>\uc704\uc758 \uba85\ub839\uc740 Couchbase Node.js SDK, Hapi \ud504\ub808\uc784\uc6cc\ud06c, \ub370\uc774\ud130 \uc720\ud6a8\uc131 \uac80\uc0ac\ub97c \uc704\ud55c Joi, NoSQL \ubb38\uc11c \ud0a4\ub97c \ub098\ud0c0\ub0b4\ub294 UUID \uac12\uc744 \uc0dd\uc131\ud558\uae30 \uc704\ud55c \ud328\ud0a4\uc9c0\ub97c \ub2e4\uc6b4\ub85c\ub4dc\ud569\ub2c8\ub2e4.<\/p>\n<p>\uacc4\uc18d\ud574\uc11c\u00a0<strong>app.js<\/strong> \ud30c\uc77c\uc744 \ub9cc\ub4ed\ub2c8\ub2e4. \uc5ec\uae30\uc5d0 \ubaa8\ub4e0 \ub77c\uc6b0\ud305 \uc815\ubcf4\uc640 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ub85c\uc9c1\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud30c\uc77c\uc744 \uc5fd\ub2c8\ub2e4.\u00a0<strong>app.js<\/strong> \ud30c\uc77c\uc744 \uc5f4\uace0 \ub2e4\uc74c \uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8 \ucf54\ub4dc\ub97c \ud3ec\ud568\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">const Hapi = require(\"hapi\");\r\nconst Couchbase = require(\"couchbase\");\r\nconst UUID = require(\"uuid\");\r\nconst Joi = require(\"joi\");\r\n\r\nconst server = new Hapi.Server();\r\nconst N1qlQuery = Couchbase.N1qlQuery;\r\n\r\nconst cluster = new Couchbase.Cluster(\"https:\/\/localhost\");\r\nconst bucket = cluster.openBucket(\"default\", \"\");\r\n\r\nserver.connection({ \"host\": \"localhost\", \"port\": 3000 });\r\n\r\nserver.route({\r\n    method: \"GET\",\r\n    path: \"\/\",\r\n    handler: (request, response) =&gt; {\r\n        return response(\"Hello World\");\r\n    }\r\n});\r\n\r\nserver.start(error =&gt; {\r\n    if(error) {\r\n        throw error;\r\n    }\r\n    console.log(\"Listening at \" + server.info.uri);\r\n});<\/pre>\n<p>\uc704\uc758 \ucf54\ub4dc\ub85c \uc2dc\uc791\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uac01 \ud504\ub85c\uc81d\ud2b8 \uc885\uc18d\uc131\uc744 \uac00\uc838\uc624\uace0, \ud2b9\uc815 \ud638\uc2a4\ud2b8\uc640 \ud3ec\ud2b8\uc5d0 \ub300\ud574 Hapi\ub97c \ucd08\uae30\ud654\ud558\uba70, Couchbase\uc5d0 \ub300\ud55c \uc5f0\uacb0\uc744 \uc124\uc815\ud569\ub2c8\ub2e4. \ub610\ud55c \ub8e8\ud2b8 \uacbd\ub85c\ub97c \ub098\ud0c0\ub0b4\ub294 \ub2e8\uc77c \uacbd\ub85c\ub97c \uc815\uc758\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774 \uc608\uc81c\uc5d0\uc11c\ub294 Couchbase\ub97c \ub85c\uceec\uc5d0\uc11c \uc2e4\ud589\ud558\uace0 \ub2e4\uc74c\uacfc \uac19\uc740 \ubc84\ud0b7\uc744 \uc0ac\uc6a9\ud558\uaca0\uc2b5\ub2c8\ub2e4. <code>\uae30\ubcf8\uac12<\/code>. Couchbase \uc124\uce58\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \ub2e4\uc74c \uc790\uc2b5\uc11c\ub97c \ud655\uc778\ud558\uc138\uc694. <a href=\"https:\/\/www.youtube.com\/watch?v=L1wNemXGd9Q\" target=\"_blank\" rel=\"noopener\">Mac<\/a>, <a href=\"https:\/\/www.youtube.com\/watch?v=z8BcuXDJrDY\" target=\"_blank\" rel=\"noopener\">Linux<\/a>\ubc0f <a href=\"https:\/\/www.youtube.com\/watch?v=dZpnANelV2M\" target=\"_blank\" rel=\"noopener\">Windows<\/a>.<\/p>\n<p>\uc774\uc81c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 \uc0c1\ud638 \uc791\uc6a9\ud558\ub294 \ub450 \uac1c\uc758 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc5d0 \ub300\ud574 \uac71\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uccab \ubc88\uc9f8\uc774\uc790 \uc544\ub9c8\ub3c4 \uac00\uc7a5 \uac04\ub2e8\ud55c \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub294 \ubb38\uc11c \ubaa9\ub85d(\uc774 \uacbd\uc6b0 \uc774\uc804\uc5d0 \uc0dd\uc131\ub41c \uc0ac\ub78c\ub4e4)\uc744 \ubc18\ud658\ud558\ub294 \uac83\uc785\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">server.route({\r\n    method: \"GET\",\r\n    path: \"\/people\",\r\n    handler: (request, response) =&gt; {\r\n        var statement = \"SELECT `\" + bucket._name + \"`.* FROM `\" + bucket._name + \"` WHERE type = 'person'\";\r\n        var query = N1qlQuery.fromString(statement);\r\n        bucket.query(query, (error, result) =&gt; {\r\n            if(error) {\r\n                return response(error).code(500);\r\n            }\r\n            return response(result);\r\n        });\r\n    }\r\n});<\/pre>\n<p>\uc8fc\ubaa9\ud558\uc138\uc694. <code>\ud578\ub4e4\ub7ec<\/code> \uba54\uc11c\ub4dc\ub97c \ud638\ucd9c\ud569\ub2c8\ub2e4. \uc5ec\uae30\uc11c\ub294 N1QL \ucffc\ub9ac\ub97c \uc791\uc131\ud558\uc5ec \ubaa8\ub4e0 \ubb38\uc11c\uc5d0 \ub300\ud574 <code>\uc720\ud615<\/code> \uc77c\uce58\ud558\ub294 \uc18d\uc131 <code>\uc0ac\ub78c<\/code>. \uc989, \ucffc\ub9ac\uc5d0\uc11c \uc120\ud0dd\ub418\uc9c0 \uc54a\ub294 \ub2e4\ub978 \ubb38\uc11c \uc720\ud615\uc774 \ub9ce\uc774 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ucffc\ub9ac\uc5d0 \ubb38\uc81c\uac00 \uc788\ub294 \uacbd\uc6b0 500 \uc751\ub2f5 \ucf54\ub4dc\uac00 \ud3ec\ud568\ub41c \uc624\ub958\ub97c \ubc18\ud658\ud558\uace0, \uadf8\ub807\uc9c0 \uc54a\uc740 \uacbd\uc6b0 \ucffc\ub9ac \uacb0\uacfc\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub294 \ub370\uc774\ud130 \uc720\ud6a8\uc131 \uac80\uc0ac\ub97c \uc704\ud574 Joi\ub97c \uc0ac\uc6a9\ud558\ub294 \uacf3\uc785\ub2c8\ub2e4. \ub2e4\uc74c \uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8 \ucf54\ub4dc\ub97c \ud655\uc778\ud558\uc138\uc694:<\/p>\n<pre class=\"lang:default decode:true\">server.route({\r\n    method: \"POST\",\r\n    path: \"\/person\",\r\n    config: {\r\n        validate: {\r\n            payload: {\r\n                firstname: Joi.string().required(),\r\n                lastname: Joi.string().required(),\r\n                type: Joi.any().forbidden().default(\"person\"),\r\n                timestamp: Joi.any().forbidden().default((new Date()).getTime())\r\n            }\r\n        }\r\n    },\r\n    handler: (request, response) =&gt; {\r\n        bucket.insert(UUID.v4(), request.payload, (error, result) =&gt; {\r\n            if(error) {\r\n                return response(error).code(500);\r\n            }\r\n            return response(request.payload);\r\n        });\r\n    }\r\n});<\/pre>\n<p>\ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uc774 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc5d0\uc11c \uc18c\ube44\ub97c \uc2dc\ub3c4\ud558\uba74 Hapi\uc758 \uc77c\ubd80\ub85c \uc720\ud6a8\uc131 \uac80\uc0ac\uac00 \uc218\ud589\ub429\ub2c8\ub2e4. \uc774 \uc720\ud6a8\uc131 \uac80\uc0ac \ud504\ub85c\uc138\uc2a4\uc5d0\uc11c\ub294 \ud398\uc774\ub85c\ub4dc\ub97c \uac80\uc0ac\ud558\uace0 \uac01 \uc18d\uc131\uc774 \uae30\uc900\uc744 \ucda9\uc871\ud558\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4. \uc774 \uacbd\uc6b0 \ub450 \uac00\uc9c0 \ubaa8\ub450 <code>\uc774\ub984<\/code> \uadf8\ub9ac\uace0 <code>\uc131<\/code> \uac00 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4. \ub2e4\uc74c\uacfc \uac19\uc740 \uacbd\uc6b0 \uae08\uc9c0\ub429\ub2c8\ub2e4. <code>\uc720\ud615<\/code> \uadf8\ub9ac\uace0 <code>\ud0c0\uc784\uc2a4\ud0ec\ud504<\/code> \uc18d\uc131\uc774 \uc694\uccad \ubcf8\ubb38\uc5d0 \uc874\uc7ac\ud558\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4. \uc874\uc7ac\ud558\uba74 \uc624\ub958\uac00 \ubc18\ud658\ub429\ub2c8\ub2e4. \uc874\uc7ac\ud558\uc9c0 \uc54a\uc73c\uba74 \uae30\ubcf8\uac12\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/p>\n<p>\uc720\ud6a8\uc131 \uac80\uc0ac\uac00 \ud1b5\uacfc\ub418\uba74 \uace0\uc720 ID\ub97c \uc0ac\uc6a9\ud558\uc5ec Couchbase\uc5d0 \ub370\uc774\ud130\ub97c \uc0bd\uc785\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub370\uc774\ud130\ub294 \uc751\ub2f5\uc5d0\ub3c4 \ubc18\ud658\ub429\ub2c8\ub2e4.<\/p>\n<h2>\uacb0\ub860<\/h2>\n<p>\ubc29\uae08 Hapi\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub9e4\uc6b0 \uac04\ub2e8\ud55c RESTful API\ub97c \ub9cc\ub4dc\ub294 \ubc29\ubc95\uacfc <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/\" target=\"_blank\" rel=\"noopener\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc11c\ubc84<\/a>. \uc800\ub294 \ucc98\uc74c\ubd80\ud130 Express\ub97c \uc0ac\uc6a9\ud574 \uc654\uc9c0\ub9cc, \uc6f9 \uc11c\ube44\uc2a4 \uc81c\uc791\uc5d0 \uc788\uc5b4\uc11c\ub294 Hapi\uac00 \ud6e8\uc52c \ub354 \uc798 \uc124\uacc4\ub41c \uac83 \uac19\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \ub458 \ub2e4 \uc791\uc5c5\uc744 \uc644\ub8cc\ud560 \uc218 \uc788\uc73c\uba70 Express\uc758 \ub300\uc548\uc744 \ubcf4\uace0 \uc2f6\ub2e4\uba74 \ub2e4\uc74c\uc744 \ud655\uc778\ud558\uc138\uc694. <a href=\"https:\/\/www.thepolyglotdeveloper.com\/2015\/10\/create-a-full-stack-app-using-node-js-couchbase-server\/\" target=\"_blank\" rel=\"noopener\">\uc774\uc804 \ud29c\ud1a0\ub9ac\uc5bc<\/a> \uc81c\uac00 \uc37c\uc5b4\uc694.<\/p>\n<p>Node.js\uc640 \ud568\uaed8 Couchbase\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/developers\/\" target=\"_blank\" rel=\"noopener\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uac1c\ubc1c\uc790 \ud3ec\ud138<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Developing Node.js applications with Express is no doubt a very popular option, however it isn&#8217;t the only option and it may not even be the best option. I recently started looking into Hapi which defines itself as being a framework [&hellip;]<\/p>","protected":false},"author":63,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1815,1816,1822],"tags":[1393,1745],"ppma_author":[9032],"class_list":["post-3974","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-best-practices-and-tutorials","category-couchbase-server","category-node-js","tag-api","tag-restful"],"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>Create a RESTful API with Node.js, Hapi, and Couchbase NoSQL<\/title>\n<meta name=\"description\" content=\"Learn how to create a RESTful API with Couchbase NoSQL, N1QL, and the efficient Hapi framework for Node.js\" \/>\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\/create-restful-api-node-js-hapi-couchbase-nosql\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Create a RESTful API with Node.js, Hapi, and Couchbase NoSQL\" \/>\n<meta property=\"og:description\" content=\"Learn how to create a RESTful API with Couchbase NoSQL, N1QL, and the efficient Hapi framework for Node.js\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/create-restful-api-node-js-hapi-couchbase-nosql\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/thepolyglotdeveloper\" \/>\n<meta property=\"article:published_time\" content=\"2017-10-02T14:00:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-09T09:30:23+00:00\" \/>\n<meta name=\"author\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nraboy\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/\"},\"author\":{\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\"},\"headline\":\"Create a RESTful API with Node.js, Hapi, and Couchbase NoSQL\",\"datePublished\":\"2017-10-02T14:00:08+00:00\",\"dateModified\":\"2023-09-09T09:30:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/\"},\"wordCount\":638,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"API\",\"restful\"],\"articleSection\":[\"Application Design\",\"Best Practices and Tutorials\",\"Couchbase Server\",\"Node.js\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/\",\"name\":\"Create a RESTful API with Node.js, Hapi, and Couchbase NoSQL\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-10-02T14:00:08+00:00\",\"dateModified\":\"2023-09-09T09:30:23+00:00\",\"description\":\"Learn how to create a RESTful API with Couchbase NoSQL, N1QL, and the efficient Hapi framework for Node.js\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/#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\/create-restful-api-node-js-hapi-couchbase-nosql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create a RESTful API with Node.js, Hapi, and Couchbase NoSQL\"}]},{\"@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\/bb545ebe83bb2d12f91095811d0a72e1\",\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"caption\":\"Nic Raboy, Developer Advocate, Couchbase\"},\"description\":\"Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand.\",\"sameAs\":[\"https:\/\/www.thepolyglotdeveloper.com\",\"https:\/\/www.facebook.com\/thepolyglotdeveloper\",\"https:\/\/x.com\/nraboy\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/nic-raboy-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Node.js, Hapi \ubc0f Couchbase NoSQL\ub85c RESTful API \ub9cc\ub4e4\uae30","description":"Couchbase NoSQL, N1QL \ubc0f Node.js\uc6a9 \ud6a8\uc728\uc801\uc778 Hapi \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uc0ac\uc6a9\ud558\uc5ec RESTful API\ub97c \ub9cc\ub4dc\ub294 \ubc29\ubc95\uc744 \uc54c\uc544\ubcf4\uc138\uc694.","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\/create-restful-api-node-js-hapi-couchbase-nosql\/","og_locale":"ko_KR","og_type":"article","og_title":"Create a RESTful API with Node.js, Hapi, and Couchbase NoSQL","og_description":"Learn how to create a RESTful API with Couchbase NoSQL, N1QL, and the efficient Hapi framework for Node.js","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/create-restful-api-node-js-hapi-couchbase-nosql\/","og_site_name":"The Couchbase Blog","article_author":"https:\/\/www.facebook.com\/thepolyglotdeveloper","article_published_time":"2017-10-02T14:00:08+00:00","article_modified_time":"2023-09-09T09:30:23+00:00","author":"Nic Raboy, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@nraboy","twitter_misc":{"Written by":"Nic Raboy, Developer Advocate, Couchbase","Est. reading time":"3\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/"},"author":{"name":"Nic Raboy, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1"},"headline":"Create a RESTful API with Node.js, Hapi, and Couchbase NoSQL","datePublished":"2017-10-02T14:00:08+00:00","dateModified":"2023-09-09T09:30:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/"},"wordCount":638,"commentCount":1,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["API","restful"],"articleSection":["Application Design","Best Practices and Tutorials","Couchbase Server","Node.js"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/","url":"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/","name":"Node.js, Hapi \ubc0f Couchbase NoSQL\ub85c RESTful API \ub9cc\ub4e4\uae30","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-10-02T14:00:08+00:00","dateModified":"2023-09-09T09:30:23+00:00","description":"Couchbase NoSQL, N1QL \ubc0f Node.js\uc6a9 \ud6a8\uc728\uc801\uc778 Hapi \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uc0ac\uc6a9\ud558\uc5ec RESTful API\ub97c \ub9cc\ub4dc\ub294 \ubc29\ubc95\uc744 \uc54c\uc544\ubcf4\uc138\uc694.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/#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\/create-restful-api-node-js-hapi-couchbase-nosql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Create a RESTful API with Node.js, Hapi, and Couchbase NoSQL"}]},{"@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\/bb545ebe83bb2d12f91095811d0a72e1","name":"Nic Raboy, \uac1c\ubc1c\uc790 \uc639\ud638\uc790, Couchbase","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354","url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","caption":"Nic Raboy, Developer Advocate, Couchbase"},"description":"\ub2c9 \ub77c\ubcf4\uc774\ub294 \ucd5c\uc2e0 \uc6f9 \ubc0f \ubaa8\ubc14\uc77c \uac1c\ubc1c \uae30\uc220\uc744 \uc639\ud638\ud558\ub294 \uc0ac\ub78c\uc785\ub2c8\ub2e4. \uadf8\ub294 Java, JavaScript, Golang \ubc0f Angular, NativeScript, Apache Cordova\uc640 \uac19\uc740 \ub2e4\uc591\ud55c \ud504\ub808\uc784\uc6cc\ud06c\uc5d0 \ub300\ud55c \uacbd\ud5d8\uc774 \uc788\uc2b5\ub2c8\ub2e4. Nic\uc740 \uc6f9 \ubc0f \ubaa8\ubc14\uc77c \uac1c\ubc1c\uc744 \ubcf4\ub2e4 \uc27d\uac8c \uc774\ud574\ud560 \uc218 \uc788\ub3c4\ub85d \uc790\uc2e0\uc758 \uac1c\ubc1c \uacbd\ud5d8\uc5d0 \ub300\ud574 \uae00\uc744 \uc4f0\uace0 \uc788\uc2b5\ub2c8\ub2e4.","sameAs":["https:\/\/www.thepolyglotdeveloper.com","https:\/\/www.facebook.com\/thepolyglotdeveloper","https:\/\/x.com\/nraboy"],"url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/nic-raboy-2\/"}]}},"authors":[{"term_id":9032,"user_id":63,"is_guest":0,"slug":"nic-raboy-2","display_name":"Nic Raboy, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","author_category":"","last_name":"Raboy","first_name":"Nic","job_title":"","user_url":"https:\/\/www.thepolyglotdeveloper.com","description":"\ub2c9 \ub77c\ubcf4\uc774\ub294 \ucd5c\uc2e0 \uc6f9 \ubc0f \ubaa8\ubc14\uc77c \uac1c\ubc1c \uae30\uc220\uc744 \uc639\ud638\ud558\ub294 \uc0ac\ub78c\uc785\ub2c8\ub2e4. \uadf8\ub294 Java, JavaScript, Golang \ubc0f Angular, NativeScript, Apache Cordova\uc640 \uac19\uc740 \ub2e4\uc591\ud55c \ud504\ub808\uc784\uc6cc\ud06c\uc5d0 \ub300\ud55c \uacbd\ud5d8\uc774 \uc788\uc2b5\ub2c8\ub2e4. Nic\uc740 \uc6f9 \ubc0f \ubaa8\ubc14\uc77c \uac1c\ubc1c\uc744 \ubcf4\ub2e4 \uc27d\uac8c \uc774\ud574\ud560 \uc218 \uc788\ub3c4\ub85d \uc790\uc2e0\uc758 \uac1c\ubc1c \uacbd\ud5d8\uc5d0 \ub300\ud574 \uae00\uc744 \uc4f0\uace0 \uc788\uc2b5\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/3974","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\/63"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=3974"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/3974\/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=3974"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=3974"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=3974"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=3974"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}