{"id":9931,"date":"2021-08-26T00:00:42","date_gmt":"2021-08-26T07:00:42","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=9931"},"modified":"2025-06-13T23:34:38","modified_gmt":"2025-06-14T06:34:38","slug":"streamline-couchbase-analytics-with-user-defined-functions-udfs","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/","title":{"rendered":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc560\ub110\ub9ac\ud2f1\uc2a4\uc758 \uc0ac\uc6a9\uc790 \uc815\uc758 \ud568\uc218\uc5d0 \ub300\ud55c \uac00\uc774\ub4dc"},"content":{"rendered":"<p><strong>\uc0ac\uc6a9\uc790 \uc815\uc758 \ud568\uc218\ub294<\/strong> \ub370\uc774\ud130\ub97c \ucffc\ub9ac\ud558\uace0 \ubd84\uc11d\ud560 \ub54c \uc0ac\uc6a9\uc790\uac00 \uc9c1\uc811 \uc6b4\uc804\uc11d\uc5d0 \uc549\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Couchbase \uc5d0\ucf54\uc2dc\uc2a4\ud15c\uc5d0\uc11c \uc0ac\uc6a9\uc790 \uc815\uc758 \ud568\uc218(UDF)\ub294 \uc7ac\uc0ac\uc6a9\uc774 \uac00\ub2a5\ud558\uace0 \ub9e4\uac1c\ubcc0\uc218\ud654\uac00 \uac00\ub2a5\ud569\ub2c8\ub2e4. <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/products\/n1ql\/?ref=blog\" target=\"_blank\" rel=\"noopener\">SQL++ \ucffc\ub9ac<\/a> \ub97c \uc0ac\uc6a9\ud558\uba74 \ucffc\ub9ac\ub97c \ubaa8\ub4c8\ud654\ud558\uace0 \ucf54\ub4dc \uc7ac\uc0ac\uc6a9\uc744 \ub298\ub9ac\ub294 \ub3d9\uc2dc\uc5d0 \ud2b9\uc815 \ucffc\ub9ac\uac00 \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uacfc \uc0c1\ud638 \uc791\uc6a9\ud558\ub294 \ubc29\uc2dd\uc744 \ub354 \uc798 \uc81c\uc5b4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc989, \ub2e4\uc74c\uacfc \uac19\uc740 \uc0ac\uc2e4\uc744 \ubc1c\ud45c\ud558\uac8c \ub418\uc5b4 \uae30\uc069\ub2c8\ub2e4. <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/couchbase-server-7-0-release\/?ref=blog\" target=\"_blank\" rel=\"noopener\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc11c\ubc84 7.0 \ub9b4\ub9ac\uc988<\/a> \uc5d0\uc11c \uc0ac\uc6a9\uc790 \uc815\uc758 \ud568\uc218(UDF)\ub97c \uc9c0\uc6d0\ud569\ub2c8\ub2e4. <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/products\/analytics\/?ref=blog\" target=\"_blank\" rel=\"noopener\">\ubd84\uc11d \uc11c\ube44\uc2a4<\/a>.<\/p>\n<p>\uc5b4\uc81c \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0\uc11c \ub2e4\uc74c \ub0b4\uc6a9\uc744 \ud655\uc778\ud558\uc138\uc694. <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/n1ql-user-defined-functions\/?ref=blog\" target=\"_blank\" rel=\"noopener\">SQL++ \ucffc\ub9ac \uc5b8\uc5b4\uc758 \uc0ac\uc6a9\uc790 \uc815\uc758 \ud568\uc218\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \uc815\ubcf4<\/a>.<\/p>\n<h2>\uc0ac\uc6a9\uc790 \uc815\uc758 \ud568\uc218 101<\/h2>\n<p>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc560\ub110\ub9ac\ud2f1\uc2a4 \ub0b4\uc5d0\uc11c \uc0ac\uc6a9\uc790 \uc815\uc758 \ud568\uc218\ub294 \ub450 \ubd80\ubd84\uc73c\ub85c \ub098\ub269\ub2c8\ub2e4:<\/p>\n<ol>\n<li><strong>\ud568\uc218 \uc11c\uba85:<\/strong> \uc11c\uba85\uc740 \ud568\uc218 \uc774\ub984\uacfc \ud574\ub2f9 \ub9e4\uac1c\ubcc0\uc218 \uc218\ub85c \uad6c\uc131\ub429\ub2c8\ub2e4. \ud568\uc218\ub294 0\uac1c, \ud558\ub098 \ub610\ub294 \uadf8 \uc774\uc0c1\uc758 \ub9e4\uac1c\ubcc0\uc218\ub97c \ubc1b\uc2b5\ub2c8\ub2e4. \uac01 \ud568\uc218\ub294 <a href=\"https:\/\/docs.couchbase.com\/server\/current\/analytics\/5_ddl.html?ref=blog#Dataverses\" target=\"_blank\" rel=\"noopener\">\ub370\uc774\ud130\ubc84\uc2a4<\/a> (\ub610\ub294 7.0 \uc6a9\uc5b4\ub85c\ub294 \ubc94\uc704)\ub97c \uc0ac\uc6a9\ud558\uba70 \ud574\ub2f9 \ub370\uc774\ud130\ubc84\uc2a4 \ub0b4\uc5d0\uc11c \uace0\uc720\ud55c \uc11c\uba85\uc744 \uac00\uc838\uc57c \ud569\ub2c8\ub2e4. \uc989, \ub3d9\uc77c\ud55c \ub370\uc774\ud130\ubc84\uc2a4 \ub0b4\uc5d0\uc11c \uc774\ub984\uc740 \uac19\uc9c0\ub9cc \ub9e4\uac1c\ubcc0\uc218 \uc218\uac00 \ub2e4\ub978 \ub450 \uac1c\uc758 \ud568\uc218\ub97c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud568\uc218 \uc11c\uba85\uc774 \uace0\uc720(\uc774\ub984 + \ub9e4\uac1c\ubcc0\uc218 \uc218)\ud558\ubbc0\ub85c \ud5c8\uc6a9\ub429\ub2c8\ub2e4.<\/li>\n<li><strong>\ud568\uc218 \ubcf8\ubb38:<\/strong> \ud568\uc218 \ubcf8\ubb38\uc740 \ud45c\ud604\uc2dd \ub610\ub294 \ud558\uc704 \ucffc\ub9ac\uc77c \uc218 \uc788\uc73c\uba70 \uae30\uc874 \ucffc\ub9ac\ub97c \ucc38\uc870\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/docs.couchbase.com\/server\/current\/analytics\/5_ddl.html?ref=blog#Datasets\" target=\"_blank\" rel=\"noopener\">\ub370\uc774\ud130 \uc138\ud2b8<\/a> \ub610\ub294 \ub3d9\uc77c\ud55c \ub370\uc774\ud130\ubc84\uc2a4 \ub0b4 \ub610\ub294 \ub2e4\ub978 \ub370\uc774\ud130\ubc84\uc2a4\uc5d0 \uc788\ub294 \ub2e4\ub978 \ud568\uc218\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n<div class=\"wp-block-spacer\" style=\"height: 15px;\" aria-hidden=\"true\"><\/div>\n<p>Here are two examples showing the function signature \u2013 `my_dataverse.GetOrders(&#8230;)` \u2013 and the function body (everything between the curly braces below):<\/p>\n<pre class=\"toolbar-overlay:false lang:tsql decode:true\">CREATE OR REPLACE ANALYTICS FUNCTION my_dataverse.GetOrders(customer_id) { \r\n\tSELECT o\r\n\tFROM   Orders AS o\r\n\tWHERE  o.customer_id = customer_id\r\n}<\/pre>\n<pre class=\"toolbar-overlay:false lang:tsql decode:true\">CREATE OR REPLACE ANALYTICS FUNCTION my_dataverse.GetOrders(customer_id, year) {\r\n\tSELECT o\r\n\tFROM   Orders AS o\r\n\tWHERE  o.customer_id = customer_id\r\n\tAND\to.year = year\r\n}\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px;\" aria-hidden=\"true\"><\/div>\n<p>If the `CREATE ANALYTICS FUNCTION` statement doesn&#8217;t provide a dataverse name, then the function is created within the active dataverse. If a dataverse is not specified, then the function is created in the &#8220;Default&#8221; dataverse.<\/p>\n<p>A dataverse can be provided via a `USE &lt;&lt;dataverse&gt;&gt;` statement in the query or via a `query_context` REST API parameter.<\/p>\n<h2>\ubc30\uacbd \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ubd84\uc11d\uc758 \ubc94\uc704 \ubc0f \uceec\ub809\uc158<\/h2>\n<p>Couchbase Analytics UDF\uc758 \uc804\uccb4 \uc218\uba85 \uc8fc\uae30\ub97c \ubcf4\uc5ec\ub4dc\ub9ac\uae30 \uc804\uc5d0 \uba3c\uc800 \uba87 \uac00\uc9c0 \uc911\uc694\ud55c \ucee8\ud14d\uc2a4\ud2b8\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc544\ub798 \ub2e4\uc774\uc5b4\uadf8\ub7a8 A\ub294 \uc5ec\ud589 \uc5c5\uccb4\uc5d0\uc11c \ud56d\uacf5 \ubc0f \ud638\ud154 \uc608\uc57d\uc744 \uad00\ub9ac\ud558\ub294 \ub370 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc0d8\ud50c \ub370\uc774\ud130\ub97c \ub098\ud0c0\ub0c5\ub2c8\ub2e4.<\/p>\n<div id=\"attachment_11794\" style=\"width: 910px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/01\/couchbase-analytics-buckets-scopes-collections-arch-diagram.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-11794\" class=\"size-large wp-image-11794\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/01\/couchbase-analytics-buckets-scopes-collections-arch-diagram-1024x874.png\" alt=\"An architecture diagram of how Couchbase Analytics parallel the Bucket, Scopes and Collections of the Data Service\" width=\"900\" height=\"768\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/couchbase-analytics-buckets-scopes-collections-arch-diagram-1024x874.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/couchbase-analytics-buckets-scopes-collections-arch-diagram-300x256.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/couchbase-analytics-buckets-scopes-collections-arch-diagram-768x655.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/couchbase-analytics-buckets-scopes-collections-arch-diagram-1536x1311.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/couchbase-analytics-buckets-scopes-collections-arch-diagram-20x17.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/couchbase-analytics-buckets-scopes-collections-arch-diagram-1320x1127.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/couchbase-analytics-buckets-scopes-collections-arch-diagram.png 1706w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/a><p id=\"caption-attachment-11794\" class=\"wp-caption-text\">\ub2e4\uc774\uc5b4\uadf8\ub7a8 A<\/p><\/div>\n<p>In this architecture, we have a Bucket named `travel` (similar to a database in a relational database), which contains a Scope called `inventory` (similar to a schema in an RDBMS), and four Collections named `airline`, `airport`, `hotel` and `route` (similar to tables in an RDBMS). For each of these Collections, we have four corresponding Analytics Collections (a.k.a. datasets) and organize them within the `travel.inventory` Scope (a.k.a. dataverse).<\/p>\n<h2>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc560\ub110\ub9ac\ud2f1\uc2a4\ub97c \uc0ac\uc6a9\ud55c UDF \uc608\uc2dc<\/h2>\n<p>\uc774 \uc608\uc81c\uc5d0\uc11c\ub294 \ub370\uc774\ud130 \ubd84\uc11d \ud300\uc5d0\uc11c \ud2b9\uc815 \uad6d\uac00 \ub0b4\uc5d0\uc11c \uac00\uc7a5 \ub9ce\uc740 \ub178\uc120\uc744 \uc6b4\ud56d\ud558\ub294 \ud56d\uacf5\uc0ac\uc640 \ubc31\ubd84\uc704 \uc21c\uc704\ub97c \uc790\uc8fc \ucffc\ub9ac\ud574\uc57c \ud55c\ub2e4\uace0 \uac00\uc815\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ubcf5\uc7a1\ud55c \ucffc\ub9ac\ub97c \uc644\ub8cc\ud560 \ub54c UDF\uac00 \ud300\uc744 \uc9c0\uc6d0\ud558\ub294 \ubc29\ubc95\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>UDF\ub97c \uad00\ub9ac\ud558\ub294 \ubc29\ubc95<\/h3>\n<p>Your first step is to create the user-defined function in the Analytics Scope (or dataverse) designated as `travel.inventory`.<\/p>\n<p>\ub2e4\uc74c\uc740 \ucffc\ub9ac\ub97c \ub354 \uac04\uacb0\ud558\uac8c \ub9cc\ub4dc\ub294 UDF\ub97c \ub9cc\ub4e4\uae30 \uc704\ud55c DDL(\ub370\uc774\ud130 \uc815\uc758 \uc5b8\uc5b4) \ubb38\uc785\ub2c8\ub2e4:<\/p>\n<pre class=\"toolbar-overlay:false lang:tsql decode:true\">CREATE OR REPLACE ANALYTICS FUNCTION travel.inventory.getAirlineRank(in_country) {\r\n\tSELECT a.id,\r\n       \ta.name AS airline,\r\n       \tcount(r.id) AS routecount,\r\n       \tPERCENT_RANK() OVER (ORDER BY count(r.id)) AS `rank`\r\n\tFROM   travel.inventory.airline a\r\n\tJOIN   travel.inventory.route r ON a.id = r.airlineid\r\n\tWHERE  a.country = in_country\r\n\tGROUP BY a.id, a.name\r\n}\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px;\" aria-hidden=\"true\"><\/div>\n<p>The UDF above takes the parameter `in_country` as input for the country name and uses it as a filter for the query. Then, the query performs a JOIN between the `airline` and `route` Collections and performs aggregations for each airline in order to:<\/p>\n<ol>\n<li>\ud56d\uacf5\uc0ac \ub178\uc120 \uc218 \uacc4\uc0b0<\/li>\n<li>Calculate the percentile rank of route counts using the `PERCENT_RANK` function with the `OVER` clause.<\/li>\n<\/ol>\n<p>(The `OVER` clause retrieves a specific set of rows relative to the current row and performs an aggregation over the `id` field. <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/window-functions-in-couchbase-analytics\/?ref=blog\" target=\"_blank\" rel=\"noopener\">\uc774 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0\uc11c \ucc3d \uae30\ub2a5\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uc138\uc694.<\/a>.)<\/p>\n<h3>UDF\ub97c \ud3c9\uac00\ud558\ub294 \ubc29\ubc95<\/h3>\n<p>\uc774\uc81c \uc0c8\ub85c\uc6b4 UDF\ub97c \uc0ac\uc6a9\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c \ucffc\ub9ac\ub294 \uc9c0\uc815\ub41c \uad6d\uac00(\uc774 \uc608\uc5d0\uc11c\ub294 \"\ubbf8\uad6d\")\uc5d0 \ub300\ud55c \uc0c1\uc704 3\uac1c \ud56d\uacf5\uc0ac\ub97c \uacb0\uc815\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"toolbar-overlay:false lang:tsql decode:true\">SELECT ar.airline as Airline,\r\n   \tROUND(ar.rank*100,2) as Rank,\r\n   \tar.routecount as RouteCount\r\nFROM   travel.inventory.getAirlineRank(\"United States\") ar\r\nORDER  BY ar.route_count desc\r\nLIMIT 3;\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px;\" aria-hidden=\"true\"><\/div>\n<p>\uc774 \ucffc\ub9ac\ub97c \ud3c9\uac00\ud55c \uacb0\uacfc, \uac00\uc7a5 \ub9ce\uc740 \ub178\uc120\uc744 \uc6b4\ud56d\ud558\ub294 \uc0c1\uc704 3\uac1c \ud56d\uacf5\uc0ac\uc758 \ubc31\ubd84\uc704 \uc21c\uc704\uc640 \ud568\uaed8 \ud574\ub2f9 \ud56d\uacf5\uc0ac\uac00 \ud45c\uc2dc\ub429\ub2c8\ub2e4:<\/p>\n<pre class=\"toolbar-overlay:false lang:js decode:true\">[\r\n  {\r\n\t\"Rank\": 100,\r\n\t\"RouteCount\": 2354,\r\n\t\"Airline\": \"AMERICAN\"\r\n  },\r\n  {\r\n\t\"Rank\": 96.97,\r\n\t\"RouteCount\": 2180,\r\n\t\"Airline\": \"UNITED\"\r\n  },\r\n  {\r\n\t\"Rank\": 93.94,\r\n\t\"RouteCount\": 1981,\r\n\t\"Airline\": \"DELTA\"\r\n  }\r\n]\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px;\" aria-hidden=\"true\"><\/div>\n<h3>UDF\ub97c \uc0ad\uc81c\ud558\ub294 \ubc29\ubc95<\/h3>\n<p>UDF\uac00 \ub354 \uc774\uc0c1 \ud544\uc694\ud558\uc9c0 \uc54a\uac8c \ub418\uba74 \uc544\ub798\uc758 DDL \ubb38\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc0ad\uc81c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"\u201dtoolbar-overlay:false\" lang:tsql=\"\" decode:true=\"\">DROP ANALYTICS FUNCTION travel.inventory.getAirlineRank(in_country)\r\n<\/pre>\n<div class=\"\u201dwp-block-spacer\u201d\" aria-hidden=\"\u201dtrue\u201d\"><\/div>\n<p>\uc27d\uc8e0?<\/p>\n<h2>\uacb0\ub860<\/h2>\n<p>\uc7ac\uc0ac\uc6a9 \uac00\ub2a5\ud55c \uc0ac\uc6a9\uc790 \uc815\uc758 \ud568\uc218\ub294 \ucf54\ub4dc\ub97c \uac04\uc18c\ud654\ud558\uace0 \ubaa8\ub4c8\ud654\ud558\ub294 \ub3d9\uc2dc\uc5d0 \uc2dc\uc2a4\ud15c\uc5d0 \ub354 \ub9ce\uc740 \uc720\uc5f0\uc131\uc744 \uc81c\uacf5\ud558\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub429\ub2c8\ub2e4. \uc774 \uc0c8\ub85c\uc6b4 UDF \uae30\ub2a5\uc774 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc560\ub110\ub9ac\ud2f1\uc2a4 \uc791\uc5c5\uc5d0 \uc720\uc6a9\ud558\uac8c \uc0ac\uc6a9\ub418\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4.<\/p>\n<p>\uc0c8\ub85c\uc6b4 UDF \uae30\ub2a5\uc774 \ub9c8\uc74c\uc5d0 \ub4dc\uc2dc\ub294\uc9c0, \uc5b4\ub5bb\uac8c \uc0ac\uc6a9\ud558\uace0 \uacc4\uc2e0\uc9c0 \uc5ec\ub7ec\ubd84\uc758 \uc0dd\uac01\uacfc \uc758\uacac\uc744 \uc544\ub798\uc5d0\uc11c \ub4e3\uace0 \uc2f6\uc2b5\ub2c8\ub2e4. \ub610\ub294 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/forums\/?ref=blog\" target=\"_blank\" rel=\"noopener\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ud3ec\ub7fc<\/a>. \uc5ec\ub7ec\ubd84\uc758 \uc758\uacac\uc744 \uae30\ub2e4\ub9ac\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<div class=\"wp-block-spacer\" style=\"height: 30px;\" aria-hidden=\"true\"><\/div>\n<div style=\"text-align: center;\"><strong>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc560\ub110\ub9ac\ud2f1\uc2a4\ub85c \ub098\ub9cc\uc758 UDF\ub97c \ub9cc\ub4e4\uc5b4 \ubcf4\uc138\uc694:<br \/>\n<a href=\"https:\/\/www.couchbase.com\/blog\/ko\/downloads\/?ref=blog\" target=\"_blank\" rel=\"noopener\">\uc9c0\uae08 \ubc14\ub85c Couchbase 7 \uccb4\ud5d8\ud558\uae30<\/a><\/strong><\/div>\n<div class=\"wp-block-spacer\" style=\"height: 15px;\" aria-hidden=\"true\"><\/div>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>User-defined functions put you in the driver\u2019s seat when it comes to querying and analyzing your data. In the Couchbase ecosystem, user-defined functions (UDFs) are reusable and parameterizable SQL++ queries that enable you to modularize queries and increase code reuse [&hellip;]<\/p>","protected":false},"author":58630,"featured_media":11793,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,2294,1816,9336,1812],"tags":[9237,9367,2267,1385,9301,1950,8911],"ppma_author":[8967],"class_list":["post-9931","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-analytics","category-couchbase-server","category-scopes-and-collections","category-n1ql-query","tag-data-analytics","tag-data-definition-language","tag-ddl","tag-rdbms","tag-relational-database","tag-rest-api","tag-udf"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.4 (Yoast SEO v26.4) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Your Guide to User-Defined Functions in Couchbase Analytics<\/title>\n<meta name=\"description\" content=\"Simplify your SQL++ for JSON queries and learn how to harness the power (and precision) of user-defined functions in Couchbase Analytics in this walkthrough example.\" \/>\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\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Your Guide to User-Defined Functions in Couchbase Analytics\" \/>\n<meta property=\"og:description\" content=\"Simplify your SQL++ for JSON queries and learn how to harness the power (and precision) of user-defined functions in Couchbase Analytics in this walkthrough example.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-08-26T07:00:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T06:34:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/user-defined-functions-udfs-couchbase-analytics-guide-social.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"418\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Idris Motiwala\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/user-defined-functions-udfs-couchbase-analytics-guide-social.jpg\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Idris Motiwala\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"TechArticle\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/\"},\"author\":{\"name\":\"Idris Motiwala\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/2fc07a18d91ce2e4e0f1f7c5c9e620b8\"},\"headline\":\"Your Guide to User-Defined Functions in Couchbase Analytics\",\"datePublished\":\"2021-08-26T07:00:42+00:00\",\"dateModified\":\"2025-06-14T06:34:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/\"},\"wordCount\":785,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/user-defined-functions-udfs-couchbase-analytics-guide.jpg\",\"keywords\":[\"data analytics\",\"Data Definition Language\",\"DDL\",\"RDBMS\",\"relational database\",\"REST API\",\"User Defined Function (UDF)\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Analytics\",\"Couchbase Server\",\"Scopes and Collections\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/\",\"name\":\"Your Guide to User-Defined Functions in Couchbase Analytics\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/user-defined-functions-udfs-couchbase-analytics-guide.jpg\",\"datePublished\":\"2021-08-26T07:00:42+00:00\",\"dateModified\":\"2025-06-14T06:34:38+00:00\",\"description\":\"Simplify your SQL++ for JSON queries and learn how to harness the power (and precision) of user-defined functions in Couchbase Analytics in this walkthrough example.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/user-defined-functions-udfs-couchbase-analytics-guide.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/user-defined-functions-udfs-couchbase-analytics-guide.jpg\",\"width\":1200,\"height\":628,\"caption\":\"Learn how to simplify your queries by harnessing user-defined functions (UDFs) in Couchbase Analytics\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Your Guide to User-Defined Functions in Couchbase Analytics\"}]},{\"@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\/2fc07a18d91ce2e4e0f1f7c5c9e620b8\",\"name\":\"Idris Motiwala\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/28d4b56674680cd3d7fe940321c3e98a\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/41b4ee771dab1b1ff8152be7b5545a13ff3cca8ca7e9021e762e3d7af21763f0?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/41b4ee771dab1b1ff8152be7b5545a13ff3cca8ca7e9021e762e3d7af21763f0?s=96&d=mm&r=g\",\"caption\":\"Idris Motiwala\"},\"description\":\"Idris is a Principal Product Manager, Analytics at Couchbase with 20+ years experience in design, development and execution of software products at both Fortune 500s and startups leading teams in digital transformation, cloud and analytics. Idris holds an MS in Technology Management and certifications in product management .\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/idrismotiwala\/\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/idris-motiwala\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc560\ub110\ub9ac\ud2f1\uc2a4\uc758 \uc0ac\uc6a9\uc790 \uc815\uc758 \ud568\uc218\uc5d0 \ub300\ud55c \uac00\uc774\ub4dc","description":"\uc774 \uc6cc\ud06c\uc2a4\ub8e8 \uc608\uc81c\uc5d0\uc11c JSON \ucffc\ub9ac\ub97c \uc704\ud55c SQL++\ub97c \uac04\uc18c\ud654\ud558\uace0 Couchbase Analytics\uc5d0\uc11c \uc0ac\uc6a9\uc790 \uc815\uc758 \ud568\uc218\uc758 \uac15\ub825\ud55c \uae30\ub2a5(\ubc0f \uc815\ubc00\ub3c4)\uc744 \ud65c\uc6a9\ud558\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\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/","og_locale":"ko_KR","og_type":"article","og_title":"Your Guide to User-Defined Functions in Couchbase Analytics","og_description":"Simplify your SQL++ for JSON queries and learn how to harness the power (and precision) of user-defined functions in Couchbase Analytics in this walkthrough example.","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/","og_site_name":"The Couchbase Blog","article_published_time":"2021-08-26T07:00:42+00:00","article_modified_time":"2025-06-14T06:34:38+00:00","og_image":[{"width":800,"height":418,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/user-defined-functions-udfs-couchbase-analytics-guide-social.jpg","type":"image\/jpeg"}],"author":"Idris Motiwala","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/user-defined-functions-udfs-couchbase-analytics-guide-social.jpg","twitter_misc":{"Written by":"Idris Motiwala","Est. reading time":"5\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"TechArticle","@id":"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/"},"author":{"name":"Idris Motiwala","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/2fc07a18d91ce2e4e0f1f7c5c9e620b8"},"headline":"Your Guide to User-Defined Functions in Couchbase Analytics","datePublished":"2021-08-26T07:00:42+00:00","dateModified":"2025-06-14T06:34:38+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/"},"wordCount":785,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/user-defined-functions-udfs-couchbase-analytics-guide.jpg","keywords":["data analytics","Data Definition Language","DDL","RDBMS","relational database","REST API","User Defined Function (UDF)"],"articleSection":["Best Practices and Tutorials","Couchbase Analytics","Couchbase Server","Scopes and Collections","SQL++ \/ N1QL Query"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/","url":"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc560\ub110\ub9ac\ud2f1\uc2a4\uc758 \uc0ac\uc6a9\uc790 \uc815\uc758 \ud568\uc218\uc5d0 \ub300\ud55c \uac00\uc774\ub4dc","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/user-defined-functions-udfs-couchbase-analytics-guide.jpg","datePublished":"2021-08-26T07:00:42+00:00","dateModified":"2025-06-14T06:34:38+00:00","description":"\uc774 \uc6cc\ud06c\uc2a4\ub8e8 \uc608\uc81c\uc5d0\uc11c JSON \ucffc\ub9ac\ub97c \uc704\ud55c SQL++\ub97c \uac04\uc18c\ud654\ud558\uace0 Couchbase Analytics\uc5d0\uc11c \uc0ac\uc6a9\uc790 \uc815\uc758 \ud568\uc218\uc758 \uac15\ub825\ud55c \uae30\ub2a5(\ubc0f \uc815\ubc00\ub3c4)\uc744 \ud65c\uc6a9\ud558\ub294 \ubc29\ubc95\uc744 \uc54c\uc544\ubcf4\uc138\uc694.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/user-defined-functions-udfs-couchbase-analytics-guide.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/user-defined-functions-udfs-couchbase-analytics-guide.jpg","width":1200,"height":628,"caption":"Learn how to simplify your queries by harnessing user-defined functions (UDFs) in Couchbase Analytics"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/streamline-couchbase-analytics-with-user-defined-functions-udfs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Your Guide to User-Defined Functions in Couchbase Analytics"}]},{"@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\/2fc07a18d91ce2e4e0f1f7c5c9e620b8","name":"\uc774\ub4dc\ub9ac\uc2a4 \ubaa8\ud2f0\uc648\ub77c","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/28d4b56674680cd3d7fe940321c3e98a","url":"https:\/\/secure.gravatar.com\/avatar\/41b4ee771dab1b1ff8152be7b5545a13ff3cca8ca7e9021e762e3d7af21763f0?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/41b4ee771dab1b1ff8152be7b5545a13ff3cca8ca7e9021e762e3d7af21763f0?s=96&d=mm&r=g","caption":"Idris Motiwala"},"description":"Idris\ub294 \ub514\uc9c0\ud138 \ud601\uc2e0, \ud074\ub77c\uc6b0\ub4dc \ubc0f \ubd84\uc11d \ubd84\uc57c\uc758 \ud300\uc744 \uc774\ub044\ub294 Fortune 500\ub300 \uae30\uc5c5\uacfc \uc2a4\ud0c0\ud2b8\uc5c5\uc5d0\uc11c \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc81c\ud488\uc758 \uc124\uacc4, \uac1c\ubc1c \ubc0f \uc2e4\ud589 \ubd84\uc57c\uc5d0\uc11c 20\ub144 \uc774\uc0c1\uc758 \uacbd\ub825\uc744 \uc313\uc740 Couchbase\uc758 \ubd84\uc11d \ubd80\ubb38 \uc218\uc11d \uc81c\ud488 \uad00\ub9ac\uc790\uc785\ub2c8\ub2e4. Idris\ub294 \uae30\uc220 \uad00\ub9ac \uc11d\uc0ac \ud559\uc704\uc640 \uc81c\ud488 \uad00\ub9ac \uc790\uaca9\uc99d\uc744 \ubcf4\uc720\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.","sameAs":["https:\/\/www.linkedin.com\/in\/idrismotiwala\/"],"url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/idris-motiwala\/"}]}},"authors":[{"term_id":8967,"user_id":58630,"is_guest":0,"slug":"idris-motiwala","display_name":"Idris Motiwala","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/41b4ee771dab1b1ff8152be7b5545a13ff3cca8ca7e9021e762e3d7af21763f0?s=96&d=mm&r=g","author_category":"","last_name":"Motiwala","first_name":"Idris","job_title":"","user_url":"","description":"Idris\ub294 \ub514\uc9c0\ud138 \ud601\uc2e0, \ud074\ub77c\uc6b0\ub4dc \ubc0f \ubd84\uc11d \ubd84\uc57c\uc758 \ud300\uc744 \uc774\ub044\ub294 Fortune 500\ub300 \uae30\uc5c5\uacfc \uc2a4\ud0c0\ud2b8\uc5c5\uc5d0\uc11c \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc81c\ud488\uc758 \uc124\uacc4, \uac1c\ubc1c \ubc0f \uc2e4\ud589 \ubd84\uc57c\uc5d0\uc11c 20\ub144 \uc774\uc0c1\uc758 \uacbd\ub825\uc744 \uc313\uc740 Couchbase\uc758 \ubd84\uc11d \ubd80\ubb38 \uc218\uc11d \uc81c\ud488 \uad00\ub9ac\uc790\uc785\ub2c8\ub2e4. Idris\ub294 \uae30\uc220 \uad00\ub9ac \uc11d\uc0ac \ud559\uc704\uc640 \uc81c\ud488 \uad00\ub9ac \uc790\uaca9\uc99d\uc744 \ubcf4\uc720\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/9931","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\/58630"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=9931"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/9931\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/11793"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=9931"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=9931"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=9931"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=9931"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}