{"id":15566,"date":"2024-04-05T09:33:32","date_gmt":"2024-04-05T16:33:32","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=15566"},"modified":"2025-07-08T09:15:58","modified_gmt":"2025-07-08T16:15:58","slug":"improved-debuggability-for-sql-user-defined-functions","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/improved-debuggability-for-sql-user-defined-functions\/","title":{"rendered":"SQL++ \uc0ac\uc6a9\uc790 \uc815\uc758 \ud568\uc218\uc5d0 \ub300\ud55c \ud5a5\uc0c1\ub41c \ub514\ubc84\uae45 \uae30\ub2a5"},"content":{"rendered":"<p><span style=\"font-weight: 400;\"><a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/userfun.html\">\uc0ac\uc6a9\uc790 \uc815\uc758 \ud568\uc218(UDF)<\/a> \ub294 SQL++\uc5d0\uc11c \uc9c0\uc6d0\ub418\ub294 \ub9e4\uc6b0 \uc720\uc6a9\ud55c \uae30\ub2a5\uc785\ub2c8\ub2e4.\u00a0<\/span><span style=\"font-weight: 400;\">Couchbase 7.6\uc5d0\ub294 UDF \uc2e4\ud589\uc5d0 \ub300\ud55c \ub514\ubc84\uae45 \uae30\ub2a5\uacfc \uac00\uc2dc\uc131\uc744 \uac15\ud654\ud558\ub294 \uac1c\uc120 \uc0ac\ud56d\uc774 \ub3c4\uc785\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\uc774 \ube14\ub85c\uadf8\uc5d0\uc11c\ub294 Couchbase 7.6\uc758 \uc0c8\ub85c\uc6b4 \uae30\ub2a5 \uc911 UDF\uc640 \uad00\ub828\ub41c \ub450 \uac00\uc9c0\ub97c \uc0b4\ud3b4\ubd05\ub2c8\ub2e4.<\/span><\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">\uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8 UDF\uc5d0\uc11c \uc2e4\ud589\ub418\ub294 SQL++ \ubb38\uc5d0 \ub300\ud55c \ud504\ub85c\ud30c\uc77c\ub9c1<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">UDF \ub0b4\uc5d0\uc11c SQL++ \ubb38\uc758 \ucffc\ub9ac \uacc4\ud68d\uc5d0 \uc561\uc138\uc2a4\ud558\ub294 \ud568\uc218 \uc124\uba85\ud558\uae30<\/span><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">\uc774 \uac8c\uc2dc\ubb3c\uc758 \uc608\uc81c\uc5d0\uc11c\ub294 <a href=\"https:\/\/docs.couchbase.com\/server\/current\/manage\/manage-settings\/install-sample-buckets.html\">\uc5ec\ud589 \uc0d8\ud50c \ub370\uc774\ud130 \uc138\ud2b8<\/a> \ub97c \uc124\uce58\ud574\uc57c \ud569\ub2c8\ub2e4.<\/span><\/p>\n<h2>\uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8 UDF\uc5d0\uc11c \uc2e4\ud589\ub418\ub294 SQL++ \ud504\ub85c\ud30c\uc77c\ub9c1<\/h2>\n<p><span style=\"font-weight: 400;\">\ucffc\ub9ac \ud504\ub85c\ud30c\uc77c\ub9c1\uc740 SQL++\uac00 \uc81c\uacf5\ud558\ub294 \ub514\ubc84\uae45 \uae30\ub2a5\uc785\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\ubb38 \uc2e4\ud589\uc5d0 \ub300\ud574 \ud504\ub85c\ud30c\uc77c\ub9c1\uc774 \ud65c\uc131\ud654\ub41c \uacbd\uc6b0 \uc694\uccad \uacb0\uacfc\uc5d0\ub294 \ubb38 \uc2e4\ud589\uc758 \uac01 \ub2e8\uacc4\uc5d0 \ub300\ud55c \ud0c0\uc774\ubc0d \ubc0f \uba54\ud2b8\ub9ad\uc774 \ud3ec\ud568\ub41c \uc790\uc138\ud55c \uc2e4\ud589 \ud2b8\ub9ac\uac00 \ud3ec\ud568\ub429\ub2c8\ub2e4. \ud504\ub85c\ud30c\uc77c\ub9c1 \uc815\ubcf4\ub294 \ubb38 \uc2e4\ud589 \uacb0\uacfc\uc5d0\uc11c \ubc18\ud658\ub418\ub294 \uac83 \uc678\uc5d0\ub3c4 \uc694\uccad\uc5d0 \ub300\ud55c \uc561\uc138\uc2a4 \uad8c\ud55c\uc774 \uc788\ub294 <em>\uc2dc\uc2a4\ud15c:\ud65c\uc131_\uc694\uccad<\/em> \uadf8\ub9ac\uace0 <em>\uc2dc\uc2a4\ud15c:\uc644\ub8cc_\uc694\uccad<\/em> \uc2dc\uc2a4\ud15c \ud0a4 \uacf5\uac04.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\ub2e4\uc74c\uc740 \ub2e4\uc74c\uacfc \uac19\uc740 \uac8c\uc2dc\ubb3c\uc785\ub2c8\ub2e4. <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/optimize-n1ql-performance-using-request-profiling\/\">\uc694\uccad \ud504\ub85c\ud30c\uc77c\ub9c1\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uae30<\/a>.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Couchbase 7.0\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ud558\uc704 \ucffc\ub9ac\uc5d0 \ub300\ud55c \ud504\ub85c\ud30c\uc77c\ub9c1\uc774 \ud3ec\ud568\ub418\uc5c8\uc2b5\ub2c8\ub2e4. <em>\uc778\ub77c\uc778 UDF<\/em>.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\uadf8\ub7ec\ub098 Couchbase 7.6\uc758 \uc0c8\ub85c\uc6b4 \uae30\ub2a5\uc744 \ud1b5\ud574 \ud504\ub85c\ud30c\uc77c\ub9c1\uc774 \ub2e4\uc74c\uacfc \uac19\uc740 SQL++ \ubb38\uc73c\ub85c \ud655\uc7a5\ub418\uc5c8\uc2b5\ub2c8\ub2e4. <em>\uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8 UDF<\/em>.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\uc774\uc804 \ubc84\uc804\uc5d0\uc11c\ub294 JavaScript UDF \ub0b4\uc758 \ubb38\uc744 \ud504\ub85c\ud30c\uc77c\ub9c1\ud558\ub824\uba74 \uc0ac\uc6a9\uc790\uac00 \ud568\uc218 \uc815\uc758\ub97c \uc5f4\uace0 UDF \ub0b4\uc5d0\uc11c \uac01 \ubb38\uc744 \uac1c\ubcc4\uc801\uc73c\ub85c \uc2e4\ud589\ud55c \ud6c4 \ud504\ub85c\ud30c\uc77c\uc744 \uc218\uc9d1\ud574\uc57c \ud588\uc2b5\ub2c8\ub2e4. 7.6.0\uc5d0\uc11c\ub294 \uc774 \ucd94\uac00 \ub2e8\uacc4\uac00 \ub354 \uc774\uc0c1 \ud544\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4!<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\uc774\uc81c \ud504\ub85c\ud30c\uc77c\ub9c1\uc774 \ud65c\uc131\ud654\ub418\uba74 \ubb38\uc5d0 JavaScript UDF \uc2e4\ud589\uc774 \ud3ec\ud568\ub41c \uacbd\uc6b0 UDF\uc5d0\uc11c \uc2e4\ud589\ub41c \ubaa8\ub4e0 SQL++ \ubb38\uc5d0 \ub300\ud55c \ud504\ub85c\ud30c\uc77c\ub3c4 \uc218\uc9d1\ub429\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \uc774 UDF \uad00\ub828 \ud504\ub85c\ud30c\uc77c\ub9c1 \uc815\ubcf4\ub294 \uc694\uccad \ucd9c\ub825\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4, <em>\uc2dc\uc2a4\ud15c:\ud65c\uc131_\uc694\uccad<\/em> \uadf8\ub9ac\uace0 <em>\uc2dc\uc2a4\ud15c:\uc644\ub8cc_\uc694\uccad<\/em> \uc2dc\uc2a4\ud15c \ud0a4 \uacf5\uac04\ub3c4 \ub9c8\ucc2c\uac00\uc9c0\uc785\ub2c8\ub2e4.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">\uc608 1:<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">\uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8 UDF \uc0dd\uc131 <em>js1<\/em> \uae00\ub85c\ubc8c \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0\uc11c <em>lib1<\/em>\u00a0REST \uc5d4\ub4dc\ud3ec\uc778\ud2b8 \ub610\ub294 UI\ub97c \ud1b5\ud574.<\/span><\/p>\n<pre class=\"nums:false lang:js decode:true\">\ud568\uc218 js1() {\r\n\r\n    var query = SELECT * FROM default:`travel-sample`.inventory.airline LIMIT 1;\r\n\r\n    var res = [];\r\n    for (const \ud589\uc758 \ucffc\ub9ac) {\r\n        res.push(row);\r\n   }\r\n    query.close()\r\n\r\n    \ubc18\ud658 res;\r\n}<\/pre>\n<p><span style=\"font-weight: 400;\">\ud574\ub2f9 SQL++ \ud568\uc218\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"nums:false lang:default decode:true\">CREATE FUNCTION js1() \uc5b8\uc5b4 \uc790\ubc14 \uc2a4\ud06c\ub9bd\ud2b8 \"lib1\"\uc5d0\uc11c \"js1\"\ub85c \uc791\uc131\ud569\ub2c8\ub2e4;<\/pre>\n<p><span style=\"font-weight: 400;\"> \ud504\ub85c\ud30c\uc77c\ub9c1\uc744 \ud65c\uc131\ud654\ud55c \uc0c1\ud0dc\uc5d0\uc11c UDF\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"nums:false lang:default decode:true\">\ud568\uc218 js1()\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4;\r\n<\/pre>\n<p><span style=\"font-weight: 400;\">\uc5d0\uc11c <\/span><b>\ud504\ub85c\ud544<\/b><span style=\"font-weight: 400;\"> \uc139\uc158\uc5d0 \ubc18\ud658\ub41c \uc751\ub2f5\uc758 <\/span><b>\uc2e4\ud589 \ud0c0\uc774\ubc0d<\/b><span style=\"font-weight: 400;\"> \ud558\uc704 \uc139\uc158\uc5d0 \ud3ec\ud568\ub41c \ud544\ub4dc <\/span><b>~udfStatements<\/b><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><b>~udfStatements<\/b><span style=\"font-weight: 400;\">\u00a0\ub294 JavaScript UDF \ub0b4\uc758 \ubaa8\ub4e0 SQL++ \ubb38\uc5d0 \ub300\ud55c \ud56d\ubaa9\uc774 \ud3ec\ud568\ub41c \ud504\ub85c\ud30c\uc77c\ub9c1 \uc815\ubcf4 \ubc30\uc5f4\uc785\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\ub0b4\uc758 \ubaa8\ub4e0 \ud56d\ubaa9 <\/span><b>~udfStatements<\/b><span style=\"font-weight: 400;\"> \uc139\uc158\uc5d0 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4:<\/span><\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\"><b>\uc2e4\ud589 \ud0c0\uc774\ubc0d <\/b>&#8211; <span style=\"font-weight: 400;\">\ubb38\uc5d0 \ub300\ud55c \uc2e4\ud589 \ud2b8\ub9ac\uc785\ub2c8\ub2e4. \uc5ec\uae30\uc5d0\ub294 \ubb38 \uc2e4\ud589\uc758 \ubaa8\ub4e0 \ub2e8\uacc4\uc5d0 \ub300\ud55c \uba54\ud2b8\ub9ad \ubc0f \ud0c0\uc774\ubc0d \uc815\ubcf4\uac00 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/li>\n<li style=\"font-weight: 400;\"><b>\ubb38<\/b> &#8211; <span style=\"font-weight: 400;\">\ubb38 \ubb38\uc790\uc5f4\uc785\ub2c8\ub2e4.<\/span><\/li>\n<li style=\"font-weight: 400;\"><b>\ud568\uc218<\/b> &#8211; <span style=\"font-weight: 400;\">\ubb38\uc774 \uc2e4\ud589\ub41c \ud568\uc218\uc758 \uc774\ub984\uc785\ub2c8\ub2e4. \uc911\ucca9\ub41c UDF \uc2e4\ud589\uc774 \uc788\ub294 \uacbd\uc6b0 \ubb38\uc744 \uc2e4\ud589\ud55c UDF\ub97c \uc2dd\ubcc4\ud558\ub294 \ub370 \uc720\uc6a9\ud569\ub2c8\ub2e4.<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<pre class=\"lang:js decode:true\">{\r\n  \"\uc694\uccadID\": \"2c5576b5-f01d-445f-a35b-2213c606f394\",\r\n  \"signature\": null,\r\n  \"results\": [\r\n    [\r\n      {\r\n        \"\ud56d\uacf5\uc0ac\": {\r\n          \"\ucf5c\uc0ac\uc778\": \"MILE-AIR\",\r\n          \"\uad6d\uac00\": \"\ubbf8\uad6d\",\r\n          \"iata\": \"Q5\",\r\n          \"icao\": \"MLA\",\r\n          \"id\": 10,\r\n          \"name\": \"40\ub9c8\uc77c \uc5d0\uc5b4\",\r\n          \"type\": \"\ud56d\uacf5\uc0ac\"\r\n        }\r\n      }\r\n    ]\r\n  ],\r\n  \"status\": \"\uc131\uacf5\",\r\n  \"metrics\": {\r\n    \"elapsedTime\": \"20.757583ms\",\r\n    \"executionTime\": \"20.636792ms\",\r\n    \"resultCount\": 1,\r\n    \"resultSize\": 310,\r\n    \"serviceLoad\": 2\r\n  },\r\n  \"profile\": {\r\n    \"phaseTimes\": {\r\n      \"authorize\": \"12.835\u00b5s\",\r\n      \"fetch\": \"374.667\u00b5s\",\r\n      \"instantiate\": \"27.75\u00b5s\",\r\n      \"parse\": \"251.708\u00b5s\",\r\n      \"plan\": \"9.125\u00b5s\",\r\n      \"primaryScan\": \"813.249\u00b5s\",\r\n      \"primaryScan.GSI\": \"813.249\u00b5s\",\r\n      \"project\": \"5.541\u00b5s\",\r\n      \"run\": \"27.925833ms\",\r\n      \"stream\": \"26.375\u00b5s\"\r\n    },\r\n    \"phaseCounts\": {\r\n      \"fetch\": 1,\r\n      \"primaryScan\": 1,\r\n      \"primaryScan.GSI\": 1\r\n    },\r\n    \"phaseOperators\": {\r\n      \"authorize\": 2,\r\n      \"fetch\": 1,\r\n      \"primaryScan\": 1,\r\n      \"primaryScan.GSI\": 1,\r\n      \"project\": 1,\r\n      \"stream\": 1\r\n    },\r\n    \"cpuTime\": \"468.626\u00b5s\",\r\n    \"\uc694\uccad \uc2dc\uac04\": \"2023-12-04T20:30:00.369+05:30\",\r\n    \"servicingHost\": \"127.0.0.1:8091\",\r\n    \"executionTimings\": {\r\n      \"#operator\": \"Authorize\",\r\n      \"#planPreparedTime\": \"2023-12-04T20:30:00.369+05:30\",\r\n      \"#stats\": {\r\n        \"#phaseSwitches\": 4,\r\n        \"execTime\": \"1.918\u00b5s\",\r\n        \"servTime\": \"1.125\u00b5s\"\r\n      },\r\n      \"privileges\": {\r\n        \"List\": []\r\n      },\r\n      \"~child\": {\r\n        \"#operator\": \"\uc2dc\ud000\uc2a4\",\r\n        \"#stats\": {\r\n          \"#phaseSwitches\": 2,\r\n          \"execTime\": \"2.208\u00b5s\"\r\n        },\r\n        \"~children\": [\r\n          {\r\n            \"#operator\": \"ExecuteFunction\",\r\n            \"#stats\": {\r\n              \"#itemsOut\": 1,\r\n              \"#phaseSwitches\": 4,\r\n              \"execTime\": \"22.375\u00b5s\",\r\n              \"kernTime\": \"20.271708ms\"\r\n            },\r\n            \"identity\": {\r\n              \"name\": \"js1\",\r\n              \"\ub124\uc784\uc2a4\ud398\uc774\uc2a4\": \"default\",\r\n              \"type\": \"global\"\r\n            }\r\n          },\r\n          {\r\n            \"#operator\": \"Stream\",\r\n            \"#stats\": {\r\n              \"#itemsIn\": 1,\r\n              \"#itemsOut\": 1,\r\n              \"#phaseSwitches\": 2,\r\n              \"execTime\": \"26.375\u00b5s\"\r\n            },\r\n            \"serializable\": true\r\n          }\r\n        ]\r\n      },\r\n      \"~udfStatements\": [\r\n        {\r\n          \"\uc2e4\ud589 \ud0c0\uc774\ubc0d\": {\r\n            \"#operator\": \"Authorize\",\r\n            \"#stats\": {\r\n              \"#phaseSwitches\": 4,\r\n              \"execTime\": \"2.626\u00b5s\",\r\n              \"servTime\": \"7.166\u00b5s\"\r\n            },\r\n            \"privileges\": {\r\n              \"List\": [\r\n                {\r\n                  \"Priv\": 7,\r\n                  \"Props\": 0,\r\n                  \"Target\": \"default:travel-sample.inventory.airline\"\r\n                }\r\n              ]\r\n            },\r\n            \"~\uc790\ub140\": {\r\n              \"#operator\": \"\uc2dc\ud000\uc2a4\",\r\n              \"#stats\": {\r\n                \"#phaseSwitches\": 2,\r\n                \"execTime\": \"4.375\u00b5s\"\r\n              },\r\n              \"~children\": [\r\n                {\r\n                  \"#operator\": \"PrimaryScan3\",\r\n                  \"#stats\": {\r\n                    \"#itemsIn\": 1,\r\n                    \"#itemsOut\": 1,\r\n                    \"#phaseSwitches\": 7,\r\n                    \"execTime\": \"22.082\u00b5s\",\r\n                    \"kernTime\": \"1.584\u00b5s\",\r\n                    \"servTime\": \"791.167\u00b5s\"\r\n                  },\r\n                  \"bucket\": \"travel-sample\",\r\n                  \"index\": \"def_inventory_airline_primary\",\r\n                  \"index_projection\": {\r\n                    \"primary_key\": true\r\n                  },\r\n                  \"\ud0a4\uacf5\uac04\": \"\ud56d\uacf5\uc0ac\",\r\n                  \"limit\": \"1\",\r\n                  \"\ub124\uc784\uc2a4\ud398\uc774\uc2a4\": \"default\",\r\n                  \"optimizer_estimates\": {\r\n                    \"\uce74\ub514\ub110\ub9ac\ud2f0\": 187,\r\n                    \"cost\": 45.28617059639748,\r\n                    \"fr_cost\": 12.1780009122802,\r\n                    \"size\": 12\r\n                  },\r\n                  \"scope\": \"\uc778\ubca4\ud1a0\ub9ac\",\r\n                  \"using\": \"gsi\"\r\n                },\r\n                {\r\n                  \"#operator\": \"Fetch\",\r\n                  \"#stats\": {\r\n                    \"#itemsIn\": 1,\r\n                    \"#itemsOut\": 1,\r\n                    \"#phaseSwitches\": 10,\r\n                    \"execTime\": \"18.376\u00b5s\",\r\n                    \"kernTime\": \"797.542\u00b5s\",\r\n                    \"servTime\": \"356.291\u00b5s\"\r\n                  },\r\n                  \"bucket\": \"travel-sample\",\r\n                  \"keyspace\": \"\ud56d\uacf5\uc0ac\",\r\n                  \"\ub124\uc784\uc2a4\ud398\uc774\uc2a4\": \"default\",\r\n                  \"optimizer_estimates\": {\r\n                    \"\uce74\ub514\ub110\ub9ac\ud2f0\": 187,\r\n                    \"cost\": 192.01699202888378,\r\n                    \"fr_cost\": 24.89848658838975,\r\n                    \"size\": 204\r\n                  },\r\n                  \"scope\": \"inventory\"\r\n                },\r\n                {\r\n                  \"#operator\": \"\ucd08\uae30 \ud504\ub85c\uc81d\ud2b8\",\r\n                  \"#stats\": {\r\n                    \"#itemsIn\": 1,\r\n                    \"#itemsOut\": 1,\r\n                    \"#phaseSwitches\": 7,\r\n                    \"execTime\": \"5.541\u00b5s\",\r\n                    \"kernTime\": \"1.1795ms\"\r\n                  },\r\n                  \"discard_original\": true,\r\n                  \"optimizer_estimates\": {\r\n                    \"\uce74\ub514\ub110\ub9ac\ud2f0\": 187,\r\n                    \"cost\": 194.6878862611588,\r\n                    \"fr_cost\": 24.912769445246838,\r\n                    \"size\": 204\r\n                  },\r\n                  \"preserve_order\": true,\r\n                  \"result_terms\": [\r\n                    {\r\n                      \"expr\": \"self\",\r\n                      \"star\": true\r\n                    }\r\n                  ]\r\n                },\r\n                {\r\n                  \"#operator\": \"Limit\",\r\n                  \"#stats\": {\r\n                    \"#itemsIn\": 1,\r\n                    \"#itemsOut\": 1,\r\n                    \"#phaseSwitches\": 4,\r\n                    \"execTime\": \"6.25\u00b5s\",\r\n                    \"kernTime\": \"333ns\"\r\n                  },\r\n                  \"expr\": \"1\",\r\n                  \"optimizer_estimates\": {\r\n                    \"\uce74\ub514\ub110\ub9ac\ud2f0\": 1,\r\n                    \"cost\": 24.927052302103924,\r\n                    \"fr_cost\": 24.927052302103924,\r\n                    \"size\": 204\r\n                  }\r\n                },\r\n                {\r\n                  \"#operator\": \"\uc218\uc2e0\",\r\n                  \"#stats\": {\r\n                    \"#phaseSwitches\": 3,\r\n                    \"execTime\": \"10.324833ms\",\r\n                    \"kernTime\": \"792ns\",\r\n                    \"state\": \"running\"\r\n                  }\r\n                }\r\n              ]\r\n            }\r\n          },\r\n          \"\ubb38\": \"SELECT * FROM default:`travel-sample`.inventory.airline LIMIT 1;\",\r\n          \"function\": \"default:JS1\"\r\n        }\r\n      ],\r\n      \"~\ubc84\uc83c\": [\r\n        \"7.6.0-N1QL\",\r\n        \"7.6.0-1847-enterprise\"\r\n      ]\r\n    }\r\n  }\r\n}<\/pre>\n<h2>\uc124\uba85 \ud568\uc218\uac00 \uc788\ub294 \ucffc\ub9ac \ud50c\ub79c<\/h2>\n<p><span style=\"font-weight: 400;\">SQL++\ub294 EXPLAIN \ubb38\uc744 \uc0ac\uc6a9\ud558\uc5ec \ubb38\uc758 \ud50c\ub79c\uc5d0 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\ub294 \ub610 \ub2e4\ub978 \ud6cc\ub96d\ud55c \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uadf8\ub7ec\ub098 EXPLAIN \ubb38\uc740 \uc778\ub77c\uc778\uc774\ub098 JavaScript UDF\uc640 \uac19\uc740 UDF \ub0b4\uc758 \ubb38 \ud50c\ub79c\uc5d0\ub294 \ud655\uc7a5\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\uc774\uc804 \ubc84\uc804\uc5d0\uc11c\ub294 UDF \ub0b4\uc5d0\uc11c SQL++\uc5d0 \ub300\ud55c \ucffc\ub9ac \uacc4\ud68d\uc744 \ubd84\uc11d\ud558\ub824\uba74 \uc0ac\uc6a9\uc790\uac00 \ud568\uc218\uc758 \uc815\uc758\ub97c \uc5f4\uace0 UDF \ub0b4\uc758 \ubaa8\ub4e0 \ubb38\uc5d0 \ub300\ud574 \uac1c\ubcc4\uc801\uc73c\ub85c EXPLAIN\uc744 \uc2e4\ud589\ud574\uc57c \ud588\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Couchbase 7.6\uc5d0\uc11c\ub294 \uc774\ub7ec\ud55c \ucd94\uac00 \ub2e8\uacc4\uac00 \uc0c8\ub85c\uc6b4 \ubb38\uc744 \ub3c4\uc785\ud558\uc5ec \ucd5c\uc18c\ud654\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<em>\uc124\uba85 \uae30\ub2a5<\/em>. \uc774 \ubb38\uc740 EXPLAIN\uacfc \ub3d9\uc77c\ud55c \uae30\ub2a5\uc744 \uc218\ud589\ud558\uc9c0\ub9cc UDF \ub0b4\uc758 SQL++ \ubb38\uc5d0 \ub300\ud574 \uc218\ud589\ud569\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">EXPLAIN FUNCTION \ubb38\uc744 \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc744 \uc0b4\ud3b4\ubd05\uc2dc\ub2e4!<\/span><\/p>\n<h3>\uad6c\ubb38<\/h3>\n<pre class=\"lang:default decode:true\">\uc124\uba85_\uae30\ub2a5 ::= '\uc124\uba85' '\ud568\uc218' \ud568\uc218<\/pre>\n<p><span style=\"font-weight: 400;\">\uc5ec\uae30, <em>\ud568\uc218<\/em>\u00a0\ub294 \ud568\uc218\uc758 \uc774\ub984\uc744 \ub098\ud0c0\ub0c5\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\uad6c\ubb38\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \ubb38\uc11c\ub97c \ucc38\uc870\ud558\uc138\uc694.<\/span><\/p>\n<h3>\uc804\uc81c \uc870\uac74<\/h3>\n<p><span style=\"font-weight: 400;\">UDF\uc5d0\uc11c \uc124\uba85 \ud568\uc218\ub97c \uc2e4\ud589\ud558\ub824\uba74 \uc0ac\uc6a9\uc790\uc5d0\uac8c \ucda9\ubd84\ud55c <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/userfun.html#rbac-privileges\">RBAC \uad8c\ud55c<\/a> \uc5d0 <\/span><i><span style=\"font-weight: 400;\">\uc2e4\ud589<\/span><\/i><span style=\"font-weight: 400;\"> \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\ub610\ud55c \uc0ac\uc6a9\uc790\ub294 UDF \ud568\uc218 \ubcf8\ubb38 \ub0b4\uc5d0\uc11c SQL++ \ubb38\uc744 \uc2e4\ud589\ud558\ub294 \ub370 \ud544\uc694\ud55c RBAC \uad8c\ud55c\uc774 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\ub2e4\uc74c\uc740 <a href=\"https:\/\/docs.couchbase.com\/server\/current\/learn\/security\/roles.html\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc5d0\uc11c \uc9c0\uc6d0\ub418\ub294 \uc5ed\ud560<\/a>.<\/span><\/p>\n<h3>\uc778\ub77c\uc778 UDF<\/h3>\n<p><span style=\"font-weight: 400;\">\uc778\ub77c\uc778 UDF\uc758 EXPLAIN FUNCTION\uc740 \uc815\uc758 \ub0b4\uc5d0 \uc788\ub294 \ubaa8\ub4e0 \ud558\uc704 \ucffc\ub9ac\uc758 \ucffc\ub9ac \uacc4\ud68d\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">\uc608\uc81c 2 - \uc778\ub77c\uc778 \ud568\uc218\uc5d0 \ud568\uc218 \uc124\uba85\ud558\uae30<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">\uc778\ub77c\uc778 UDF\ub97c \uc0dd\uc131\ud558\uace0 EXPLAIN FUNCTION\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"lang:default decode:true\">CREATE FUNCTION inline1() { (\r\n  SELECT * FROM default:`travel-sample`.inventory.airport WHERE city = \"Zachar Bay\"\r\n) };<\/pre>\n<pre class=\"lang:default decode:true\">\ud568\uc218 \uc124\uba85 inline1();<\/pre>\n<p><span style=\"font-weight: 400;\">\uc704 \ubb38\uc7a5\uc758 \uacb0\uacfc\uc5d0\ub294 \ub2e4\uc74c\uc774 \ud3ec\ud568\ub429\ub2c8\ub2e4:<\/span><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\"><b>\ud568\uc218<\/b><span style=\"font-weight: 400;\">\u00a0- \uc2e4\ud589\ub41c \ud568\uc218\uc758 \uc774\ub984\uc740 EXPLAIN FUNCTION\uc785\ub2c8\ub2e4.<\/span><\/li>\n<li style=\"font-weight: 400;\"><b>\uc694\uae08\uc81c<\/b><span style=\"font-weight: 400;\">\u00a0- \uc778\ub77c\uc778 UDF \ub0b4\uc758 \ubaa8\ub4e0 \ud558\uc704 \ucffc\ub9ac\uc5d0 \ub300\ud55c \ud56d\ubaa9\uc774 \ud3ec\ud568\ub41c \ud50c\ub79c \uc815\ubcf4 \ubc30\uc5f4\uc785\ub2c8\ub2e4.<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre class=\"lang:js decode:true\">{\r\n        \"\ud568\uc218\": \"default:inline1\",\r\n        \"plans\": [\r\n            {\r\n                \"\uce74\ub514\ub110\ub9ac\ud2f0\": 1.1176470588235294,\r\n                \"cost\": 25.117642854609013,\r\n                \"plan\": {\r\n                    \"#operator\": \"\uc2dc\ud000\uc2a4\",\r\n                    \"~children\": [\r\n                        {\r\n                            \"#operator\": \"IndexScan3\",\r\n                            \"bucket\": \"travel-sample\",\r\n                            \"index\": \"def_inventory_airport_city\",\r\n                            \"index_id\": \"2605C88C115DD3A2\",\r\n                            \"index_projection\": {\r\n                                \"primary_key\": true\r\n                            },\r\n                            \"keyspace\": \"airport\",\r\n                            \"\ub124\uc784\uc2a4\ud398\uc774\uc2a4\": \"default\",\r\n                            \"optimizer_estimates\": {\r\n                                \"\uce74\ub514\ub110\ub9ac\ud2f0\": 1.1176470588235294,\r\n                                \"cost\": 12.200561852726496,\r\n                                \"fr_cost\": 12.179450078755286,\r\n                                \"size\": 12\r\n                            },\r\n                            \"scope\": \"\uc778\ubca4\ud1a0\ub9ac\",\r\n                            \"\uc2a4\ud32c\": [\r\n                                {\r\n                                    \"exact\": true,\r\n                                    \"\ubc94\uc704\": [\r\n                                        {\r\n                                            \"high\": \"\\\\\"\uc790\uce74\ub974 \ubca0\uc774\\\\\"\",\r\n                                            \"\ud3ec\ud568\": 3,\r\n                                            \"index_key\": \"`city`\",\r\n                                            \"low\": \"\\\\\"\uc790\uce74\ub974 \ubca0\uc774\\\\\"\"\"\r\n                                        }\r\n                                    ]\r\n                                }\r\n                            ],\r\n                            \"using\": \"gsi\"\r\n                        },\r\n                        {\r\n                            \"#operator\": \"Fetch\",\r\n                            \"bucket\": \"travel-sample\",\r\n                            \"\ud0a4\uacf5\uac04\": \"airport\",\r\n                            \"\ub124\uc784\uc2a4\ud398\uc774\uc2a4\": \"default\",\r\n                            \"optimizer_estimates\": {\r\n                                \"\uce74\ub514\ub110\ub9ac\ud2f0\": 1.1176470588235294,\r\n                                \"cost\": 25.082370508382763,\r\n                                \"fr_cost\": 24.96843677065826,\r\n                                \"size\": 249\r\n                            },\r\n                            \"scope\": \"inventory\"\r\n                        },\r\n                        {\r\n                            \"#operator\": \"Parallel\",\r\n                            \"~\uc790\uc2dd\": {\r\n                                \"#operator\": \"Sequence\",\r\n                                \"~\uc790\uc2dd\": [\r\n                                    {\r\n                                        \"#operator\": \"\ud544\ud130\",\r\n                                        \"\uc870\uac74\": \"((`\uc5d0\uc5b4\ud3ec\ud2b8`.`\uc2dc\ud2f0`) = \\\\\"\uc790\uce74\ub974\ub9cc\\\\\")\",\r\n                                        \"optimizer_estimates\": {\r\n                                            \"\uce74\ub514\ub110\ub9ac\ud2f0\": 1.1176470588235294,\r\n                                            \"cost\": 25.100006681495888,\r\n                                            \"fr_cost\": 24.98421650449632,\r\n                                            \"size\": 249\r\n                                        }\r\n                                    },\r\n                                    {\r\n                                        \"#operator\": \"\ucd08\uae30 \ud504\ub85c\uc81d\ud2b8\",\r\n                                        \"discard_original\": true,\r\n                                        \"optimizer_estimates\": {\r\n                                            \"\uce74\ub514\ub110\ub9ac\ud2f0\": 1.1176470588235294,\r\n                                            \"cost\": 25.117642854609013,\r\n                                            \"fr_cost\": 24.99999623833438,\r\n                                            \"size\": 249\r\n                                        },\r\n                                        \"result_terms\": [\r\n                                            {\r\n                                                \"expr\": \"self\",\r\n                                                \"star\": true\r\n                                            }\r\n                                        ]\r\n                                    }\r\n                                ]\r\n                            }\r\n                        }\r\n                    ]\r\n                },\r\n                \"\ubb38\": \"select self.* from `default`:`travel-sample`.`inventory`.`airport` where ((`airport`.`city`) = \\\\\"Zachar Bay\\\\\")\"\"\r\n            }\r\n        ]\r\n    }<\/pre>\n<h3>\uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8 UDF<\/h3>\n<p><span style=\"font-weight: 400;\">JavaScript UDF \ub0b4\uc758 SQL++ \ubb38\uc740 \ub450 \uac00\uc9c0 \uc720\ud615\uc774 \uc788\uc744 \uc218 \uc788\uc73c\uba70, SQL++ \ubb38\uc774 \ud638\ucd9c\ub418\ub294 \ubc29\uc2dd\uc5d0 \ub530\ub77c EXPLAIN FUNCTION\uc774 \ub2e4\ub974\uac8c \uc791\ub3d9\ud569\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\ub2e4\uc74c\uc5d0 \ub300\ud55c \ubb38\uc11c \ucc38\uc870\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/docs.couchbase.com\/server\/current\/javascript-udfs\/calling-n1ql-from-javascript.html\">\uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8 \ud568\uc218\uc5d0\uc11c SQL++ \ud638\ucd9c<\/a>.<\/span><\/p>\n<h4>\uc784\ubca0\ub514\ub4dc SQL++<\/h4>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">\uc784\ubca0\ub514\ub4dc SQL++\ub294 \ud568\uc218 \ubcf8\ubb38\uc5d0 '\uc784\ubca0\ub514\ub4dc'\ub418\uba70, \uadf8 \uac10\uc9c0\ub294 \uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8 \ud2b8\ub79c\uc2a4\ud30c\uc77c\ub7ec\uac00 \ucc98\ub9ac\ud569\ub2c8\ub2e4.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">\uc124\uba85 \ud568\uc218\ub294 \ub0b4\uc7a5\ub41c SQL++ \ubb38\uc5d0 \ub300\ud55c \ucffc\ub9ac \uacc4\ud68d\uc744 \ubc18\ud658\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4><\/h4>\n<h4>\u00a0N1QL() \ud568\uc218 \ud638\ucd9c\ub85c \uc2e4\ud589\ub418\ub294 SQL++<\/h4>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">SQL++\ub294 \ubb38\uc790\uc5f4 \ud615\uc2dd\uc758 \ubb38\uc744 N1QL() \ud568\uc218\uc5d0 \uc778\uc218\ub85c \uc804\ub2ec\ud558\uc5ec \uc2e4\ud589\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">\ud568\uc218\ub97c \uad6c\ubb38 \ubd84\uc11d\ud560 \ub54c EXPLAIN\uc744 \uc2e4\ud589\ud560 \uc7a0\uc7ac\uc801\uc778 SQL++ \ubb38\uc5d0 \ub300\ud574 \ud568\uc218 \uc778\uc218\uc758 \ub3d9\uc801 \ubb38\uc790\uc5f4\uc744 \uac00\uc838\uc624\uae30\uac00 \uc5b4\ub835\uc2b5\ub2c8\ub2e4. \uc774 \ubb38\uc81c\ub294 \ub7f0\ud0c0\uc784\uc5d0\ub9cc \uc548\uc815\uc801\uc73c\ub85c \ud574\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">\uc774\ub7ec\ud55c \ucd94\ub860\uc5d0 \ub530\ub77c EXPLAIN FUNCTION\uc740 N1QL() \ud638\ucd9c\uc744 \ud1b5\ud574 \uc2e4\ud589\ub41c SQL++ \ubb38\uc5d0 \ub300\ud55c \ucffc\ub9ac \uacc4\ud68d\uc744 \ubc18\ud658\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ub300\uc2e0 N1QL() \ud568\uc218 \ud638\ucd9c\uc774 \uc218\ud589\ub41c \uc904 \ubc88\ud638\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4. \uc774 \uc904 \ubc88\ud638\ub294 \ud568\uc218 \uc815\uc758\uc758 \uc2dc\uc791 \ubd80\ubd84\uc5d0\uc11c \uacc4\uc0b0\ub429\ub2c8\ub2e4.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">\uadf8\ub7f0 \ub2e4\uc74c \uc0ac\uc6a9\uc790\ub294 \uc2e4\uc81c \ud568\uc218 \uc815\uc758\uc5d0\uc11c \uc904 \ubc88\ud638\ub97c \ub9e4\ud551\ud558\uace0 \ub354 \uc790\uc138\ud788 \uc870\uc0ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3><span style=\"font-weight: 400;\">\uc608\uc81c 3 - \uc678\ubd80 \uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8 \ud568\uc218\uc5d0 \ub300\ud55c \ud568\uc218 \uc124\uba85<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">\uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8 UDF \uc0dd\uc131 <em>js2<\/em> \uae00\ub85c\ubc8c \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0\uc11c <em>lib1<\/em> REST \uc5d4\ub4dc\ud3ec\uc778\ud2b8 \ub610\ub294 UI\ub97c \ud1b5\ud574:<\/span><\/p>\n<pre class=\"lang:js decode:true\">\ud568\uc218 js2() {\r\n    \/\/ N1QL() \ud568\uc218 \ud638\ucd9c\uc5d0 \uc758\ud574 \uc2e4\ud589\ub418\ub294 SQL++\r\n    var query1 = N1QL(\"UPDATE default:`travel-sample` SET test = 1 LIMIT 1\");\r\n    \r\n    \/\/ \uc784\ubca0\ub514\ub4dc SQL++\r\n    var query2 = SELECT * FROM default:`travel-sample` LIMIT 1;\r\n    \r\n    var res = [];\r\n    for (query2\uc758 const \ud589) {\r\n        res.push(row);\r\n    }\r\n    query2.close()\r\n\r\n    res\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4;\r\n}\r\n<\/pre>\n<p><span style=\"font-weight: 400;\"> \ud574\ub2f9 SQL++ \ud568\uc218\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"lang:default decode:true\">CREATE FUNCTION js2() \uc5b8\uc5b4 \uc790\ubc14 \uc2a4\ud06c\ub9bd\ud2b8 \"lib1\"\uc5d0\uc11c \"js2\"\ub85c \uc791\uc131\ud569\ub2c8\ub2e4;<\/pre>\n<p><span style=\"font-weight: 400;\"> SQL++ \ud568\uc218\uc5d0\uc11c EXPLAIN FUNCTION\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"lang:default decode:true\">\ud568\uc218 \uc124\uba85 js2;<\/pre>\n<p><span style=\"font-weight: 400;\">\uc704 \ubb38\uc7a5\uc758 \uacb0\uacfc\uc5d0\ub294 \ub2e4\uc74c\uc774 \ud3ec\ud568\ub429\ub2c8\ub2e4:<\/span><\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\n<li style=\"font-weight: 400;\"><b>\ud568\uc218<\/b><span style=\"font-weight: 400;\">\u00a0- \uc2e4\ud589\ub41c \ud568\uc218\uc758 \uc774\ub984\uc740 EXPLAIN FUNCTION\uc785\ub2c8\ub2e4.<\/span><\/li>\n<li style=\"font-weight: 400;\"><b>\ub77c\uc778 \ubc88\ud638<\/b><span style=\"font-weight: 400;\">\u00a0- N1QL() \ud568\uc218 \ud638\ucd9c\uc774 \uc788\ub294 JavaScript \ud568\uc218 \uc815\uc758\uc758 \uc2dc\uc791 \ubd80\ubd84\uc5d0\uc11c \uacc4\uc0b0\ub41c \uc904 \ubc88\ud638 \ubc30\uc5f4\uc785\ub2c8\ub2e4.<\/span><\/li>\n<li style=\"font-weight: 400;\"><b>\uc694\uae08\uc81c<\/b><span style=\"font-weight: 400;\">\u00a0- \ubaa8\ub4e0 \ud56d\ubaa9\uc774 \ud3ec\ud568\ub41c \uc694\uae08\uc81c \uc815\ubcf4\uc758 \ubc30\uc5f4\uc785\ub2c8\ub2e4. <\/span><i><span style=\"font-weight: 400;\">\uc784\ubca0\ub514\ub4dc<\/span><\/i><span style=\"font-weight: 400;\"> SQL++ \ubb38\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/span><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<pre class=\"lang:js decode:true\">{\r\n  \"\ud568\uc218\": \"default:js2\",\r\n  \"line_numbers\": [\r\n    4\r\n  ],\r\n  \"plans\": [\r\n    {\r\n      \"\uce74\ub514\ub110\ub9ac\ud2f0\": 1,\r\n      \"cost\": 25.51560885530435,\r\n      \"plan\": {\r\n        \"1TP5\uc6b4\uc601\uc790\": \"Authorize\",\r\n        \"\uad8c\ud55c\": {\r\n          \"List\": [\r\n            {\r\n              \"\ub300\uc0c1\": \"default:travel-sample\",\r\n              \"Priv\": 7,\r\n              \"Props\": 0\r\n            }\r\n          ]\r\n        },\r\n        \"~child\": {\r\n          \"#operator\": \"Sequence\",\r\n          \"~children\": [\r\n            {\r\n              \"#operator\": \"Sequence\",\r\n              \"~\uc790\ub140\": [\r\n                {\r\n                  \"#operator\": \"Sequence\",\r\n                  \"~\uc790\ub140\": [\r\n                    {\r\n                      \"#operator\": \"PrimaryScan3\",\r\n                      \"index\": \"def_primary\",\r\n                      \"index_projection\": {\r\n                        \"primary_key\": true\r\n                      },\r\n                      \"\ud0a4\uacf5\uac04\": \"travel-sample\",\r\n                      \"limit\": \"1\",\r\n                      \"\ub124\uc784\uc2a4\ud398\uc774\uc2a4\": \"default\",\r\n                      \"optimizer_estimates\": {\r\n                        \"\uce74\ub514\ub110\ub9ac\ud2f0\": 31591,\r\n                        \"cost\": 5402.279801258844,\r\n                        \"fr_cost\": 12.170627071041082,\r\n                        \"size\": 11\r\n                      },\r\n                      \"using\": \"gsi\"\r\n                    },\r\n                    {\r\n                      \"#operator\": \"Fetch\",\r\n                      \"\ud0a4\uacf5\uac04\": \"travel-sample\",\r\n                      \"\ub124\uc784\uc2a4\ud398\uc774\uc2a4\": \"default\",\r\n                      \"optimizer_estimates\": {\r\n                        \"\uce74\ub514\ub110\ub9ac\ud2f0\": 31591,\r\n                        \"cost\": 46269.39474997121,\r\n                        \"fr_cost\": 25.46387878667884,\r\n                        \"size\": 669\r\n                      }\r\n                    },\r\n                    {\r\n                      \"#operator\": \"Parallel\",\r\n                      \"~child\": {\r\n                        \"#operator\": \"Sequence\",\r\n                        \"~\uc790\uc2dd\": [\r\n                          {\r\n                            \"#operator\": \"InitialProject\",\r\n                            \"discard_original\": true,\r\n                            \"optimizer_estimates\": {\r\n                              \"\uce74\ub514\ub110\ub9ac\ud2f0\": 31591,\r\n                              \"cost\": 47086.49704894546,\r\n                              \"fr_cost\": 25.489743820991595,\r\n                              \"size\": 669\r\n                            },\r\n                            \"preserve_order\": true,\r\n                            \"result_terms\": [\r\n                              {\r\n                                \"expr\": \"self\",\r\n                                \"star\": true\r\n                              }\r\n                            ]\r\n                          }\r\n                        ]\r\n                      }\r\n                    }\r\n                  ]\r\n                },\r\n                {\r\n                  \"#operator\": \"Limit\",\r\n                  \"expr\": \"1\",\r\n                  \"optimizer_estimates\": {\r\n                    \"\uce74\ub514\ub110\ub9ac\ud2f0\": 1,\r\n                    \"cost\": 25.51560885530435,\r\n                    \"fr_cost\": 25.51560885530435,\r\n                    \"size\": 669\r\n                  }\r\n                }\r\n              ]\r\n            },\r\n            {\r\n              \"#operator\": \"Stream\",\r\n              \"optimizer_estimates\": {\r\n                \"\uce74\ub514\ub110\ub9ac\ud2f0\": 1,\r\n                \"cost\": 25.51560885530435,\r\n                \"fr_cost\": 25.51560885530435,\r\n                \"size\": 669\r\n              },\r\n              \"serializable\": true\r\n            }\r\n          ]\r\n        }\r\n      },\r\n      \"\ubb38\": \"SELECT * FROM default:`travel-sample` LIMIT 1 ;\"\r\n    }\r\n  ]\r\n}<\/pre>\n<h3>\uc81c\uc57d \uc870\uac74<\/h3>\n<p><span style=\"font-weight: 400;\">JavaScript \ud568\uc218 \uc815\uc758\uc5d0\uc11c N1QL() \ud568\uc218\uac00 \ubcc4\uce6d\uc774 \uc9c0\uc815\ub41c \uacbd\uc6b0, EXPLAIN FUNCTION\uc740 \uc774 \ubcc4\uce6d\uc774 \uc9c0\uc815\ub41c \ud568\uc218\uac00 \ud638\ucd9c\ub41c \uc904 \ubc88\ud638\ub97c \ubc18\ud658\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4<\/span><\/p>\n<pre class=\"lang:js decode:true\">\ud568\uc218 js3() {\r\n  var alias = N1QL;\r\n  var q = alias(\"SELECT 1\");\r\n}<\/pre>\n<p><span style=\"font-weight: 400;\">UDF\uc5d0 \uc911\ucca9\ub41c UDF \uc2e4\ud589\uc774 \ud3ec\ud568\ub41c \uacbd\uc6b0, EXPLAIN FUNCTION\uc740 \uc774\ub7ec\ud55c \uc911\ucca9\ub41c UDF \ub0b4\uc5d0\uc11c SQL++ \ubb38\uc758 \ucffc\ub9ac \uacc4\ud68d \uc0dd\uc131\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<h2>\uc694\uc57d<\/h2>\n<p>Couchbase 7.6\uc740 UDF \ub514\ubc84\uae45\uc744 \uc704\ud55c \uc0c8\ub85c\uc6b4 \uae30\ub2a5\uc744 \ub3c4\uc785\ud558\uc5ec \uc0ac\uc6a9\uc790\uac00 UDF \uc2e4\ud589\uc744 \uc27d\uac8c \ub4e4\uc5ec\ub2e4\ubcfc \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc90d\ub2c8\ub2e4.<\/p>\n<p>\uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \ub2e4\uc74c \ubb38\uc11c \ub9c1\ud06c\ub97c \ucc38\uc870\ud558\uac70\ub098 \ub2e4\ub978 Couchbase 7.6\uc758 \ud601\uc2e0 \uc0ac\ud56d\uc744 \ud655\uc778\ud574 \ubcf4\uc138\uc694:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/couchbase-server-7-6-top-developer-features\/\">\uac1c\ubc1c\uc790\uac00 \uc88b\uc544\ud560 \ub9cc\ud55c Couchbase Server 7.6 \uae30\ub2a5<\/a><\/li>\n<li><a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/userfun.html\">\uc0ac\uc6a9\uc790 \uc815\uc758 \uae30\ub2a5<\/a><\/li>\n<li><a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/createfunction.html#create-function-inline\"> \uc778\ub77c\uc778 UDF<\/a><\/li>\n<li><span style=\"font-weight: 400;\"><a href=\"https:\/\/docs.couchbase.com\/server\/current\/javascript-udfs\/javascript-functions-with-couchbase.html\">\uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8 UDF \uac00\uc774\ub4dc<\/a><\/span><\/li>\n<li><a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/createfunction.html#create-function-external\">\uc678\ubd80 UDF \uc0dd\uc131<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/from-n1ql-to-javascript-and-back-part-1-introduction\/\">\uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8 UDF\uc5d0 \uad00\ud55c \ube14\ub85c\uadf8 \uc2dc\ub9ac\uc988<\/a><\/li>\n<li><a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/explain.html\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 SQL++ EXPLAIN \ubb38<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>User-defined functions (UDFs) are a very useful feature supported in SQL++.\u00a0Couchbase 7.6 introduces improvements that allow for more debuggability and visibility into UDF execution. This blog will explore two new features in Couchbase 7.6 in the world of UDFs. Profiling [&hellip;]<\/p>","protected":false},"author":85183,"featured_media":15569,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,1816,10133,9327,1812],"tags":[9945,9949,1854,8911],"ppma_author":[9950],"class_list":["post-15566","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-server","category-engineering","category-javascript","category-n1ql-query","tag-couchbase-7-6","tag-debug","tag-profiling","tag-udf"],"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>Debuggability for SQL++ UDFs Improved in Couchbase 7.6<\/title>\n<meta name=\"description\" content=\"Couchbase 7.6 introduces new features to debug user-defined functions (UDFs) which will help users peek into execution easily. Learn about them here.\" \/>\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\/improved-debuggability-for-sql-user-defined-functions\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Improved Debuggability for SQL++ User-Defined Functions\" \/>\n<meta property=\"og:description\" content=\"Couchbase 7.6 introduces new features to debug user-defined functions (UDFs) which will help users peek into execution easily. Learn about them here.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/improved-debuggability-for-sql-user-defined-functions\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-04-05T16:33:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-08T16:15:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/04\/Screenshot-2024-04-05-at-10.36.07\u202fAM.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2868\" \/>\n\t<meta property=\"og:image:height\" content=\"1574\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Dhanya Gowrish, Software Engineer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Dhanya Gowrish, Software Engineer\" \/>\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\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/\"},\"author\":{\"name\":\"Dhanya Gowrish, Software Engineer\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/1515ea2da3d43fe576990a63041fbd73\"},\"headline\":\"Improved Debuggability for SQL++ User-Defined Functions\",\"datePublished\":\"2024-04-05T16:33:32+00:00\",\"dateModified\":\"2025-07-08T16:15:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/\"},\"wordCount\":1081,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/04\/Screenshot-2024-04-05-at-10.36.07\u202fAM.png\",\"keywords\":[\"Couchbase 7.6\",\"debug\",\"profiling\",\"User Defined Function (UDF)\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Server\",\"Engineering\",\"JavaScript\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/\",\"name\":\"Debuggability for SQL++ UDFs Improved in Couchbase 7.6\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/04\/Screenshot-2024-04-05-at-10.36.07\u202fAM.png\",\"datePublished\":\"2024-04-05T16:33:32+00:00\",\"dateModified\":\"2025-07-08T16:15:58+00:00\",\"description\":\"Couchbase 7.6 introduces new features to debug user-defined functions (UDFs) which will help users peek into execution easily. Learn about them here.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/04\/Screenshot-2024-04-05-at-10.36.07\u202fAM.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/04\/Screenshot-2024-04-05-at-10.36.07\u202fAM.png\",\"width\":2868,\"height\":1574},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Improved Debuggability for SQL++ User-Defined Functions\"}]},{\"@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\/1515ea2da3d43fe576990a63041fbd73\",\"name\":\"Dhanya Gowrish, Software Engineer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/e3bcefcd291385aabb0a1a9135722c59\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/04\/dhanyagowrish-couchbase.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/04\/dhanyagowrish-couchbase.png\",\"caption\":\"Dhanya Gowrish, Software Engineer\"},\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/dhanyagowrish\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Couchbase 7.6\uc5d0\uc11c \uac1c\uc120\ub41c SQL++ UDF\uc758 \ub514\ubc84\uae45 \uae30\ub2a5","description":"Couchbase 7.6\uc5d0\ub294 \uc0ac\uc6a9\uc790 \uc815\uc758 \ud568\uc218(UDF)\ub97c \ub514\ubc84\uae45\ud558\ub294 \uc0c8\ub85c\uc6b4 \uae30\ub2a5\uc774 \ub3c4\uc785\ub418\uc5b4 \uc0ac\uc6a9\uc790\uac00 \uc2e4\ud589\uc744 \uc27d\uac8c \ub4e4\uc5ec\ub2e4\ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc5ec\uae30\uc5d0\uc11c \uc790\uc138\ud788 \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\/improved-debuggability-for-sql-user-defined-functions\/","og_locale":"ko_KR","og_type":"article","og_title":"Improved Debuggability for SQL++ User-Defined Functions","og_description":"Couchbase 7.6 introduces new features to debug user-defined functions (UDFs) which will help users peek into execution easily. Learn about them here.","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/improved-debuggability-for-sql-user-defined-functions\/","og_site_name":"The Couchbase Blog","article_published_time":"2024-04-05T16:33:32+00:00","article_modified_time":"2025-07-08T16:15:58+00:00","og_image":[{"width":2868,"height":1574,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/04\/Screenshot-2024-04-05-at-10.36.07\u202fAM.png","type":"image\/png"}],"author":"Dhanya Gowrish, Software Engineer","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Dhanya Gowrish, Software Engineer","Est. reading time":"5\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/"},"author":{"name":"Dhanya Gowrish, Software Engineer","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/1515ea2da3d43fe576990a63041fbd73"},"headline":"Improved Debuggability for SQL++ User-Defined Functions","datePublished":"2024-04-05T16:33:32+00:00","dateModified":"2025-07-08T16:15:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/"},"wordCount":1081,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/04\/Screenshot-2024-04-05-at-10.36.07\u202fAM.png","keywords":["Couchbase 7.6","debug","profiling","User Defined Function (UDF)"],"articleSection":["Best Practices and Tutorials","Couchbase Server","Engineering","JavaScript","SQL++ \/ N1QL Query"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/","url":"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/","name":"Couchbase 7.6\uc5d0\uc11c \uac1c\uc120\ub41c SQL++ UDF\uc758 \ub514\ubc84\uae45 \uae30\ub2a5","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/04\/Screenshot-2024-04-05-at-10.36.07\u202fAM.png","datePublished":"2024-04-05T16:33:32+00:00","dateModified":"2025-07-08T16:15:58+00:00","description":"Couchbase 7.6\uc5d0\ub294 \uc0ac\uc6a9\uc790 \uc815\uc758 \ud568\uc218(UDF)\ub97c \ub514\ubc84\uae45\ud558\ub294 \uc0c8\ub85c\uc6b4 \uae30\ub2a5\uc774 \ub3c4\uc785\ub418\uc5b4 \uc0ac\uc6a9\uc790\uac00 \uc2e4\ud589\uc744 \uc27d\uac8c \ub4e4\uc5ec\ub2e4\ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc5ec\uae30\uc5d0\uc11c \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uc138\uc694.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/04\/Screenshot-2024-04-05-at-10.36.07\u202fAM.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/04\/Screenshot-2024-04-05-at-10.36.07\u202fAM.png","width":2868,"height":1574},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/improved-debuggability-for-sql-user-defined-functions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Improved Debuggability for SQL++ User-Defined Functions"}]},{"@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\/1515ea2da3d43fe576990a63041fbd73","name":"Dhanya Gowrish, \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc5d4\uc9c0\ub2c8\uc5b4","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/e3bcefcd291385aabb0a1a9135722c59","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/04\/dhanyagowrish-couchbase.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/04\/dhanyagowrish-couchbase.png","caption":"Dhanya Gowrish, Software Engineer"},"url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/dhanyagowrish\/"}]}},"authors":[{"term_id":9950,"user_id":85183,"is_guest":0,"slug":"dhanyagowrish","display_name":"Dhanya Gowrish, Software Engineer","avatar_url":{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/04\/dhanyagowrish-couchbase.png","url2x":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/04\/dhanyagowrish-couchbase.png"},"author_category":"","last_name":"Gowrish, Software Engineer","first_name":"Dhanya","job_title":"","user_url":"","description":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/15566","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\/85183"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=15566"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/15566\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/15569"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=15566"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=15566"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=15566"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=15566"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}