{"id":8955,"date":"2020-07-29T11:02:28","date_gmt":"2020-07-29T18:02:28","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=8955"},"modified":"2023-05-24T23:55:10","modified_gmt":"2023-05-25T06:55:10","slug":"analytics-query-optimization-lets-demystify-listify","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/analytics-query-optimization-lets-demystify-listify\/","title":{"rendered":"\uc560\ub110\ub9ac\ud2f1\uc2a4 \ucffc\ub9ac \ucd5c\uc801\ud654 - Listify\ub97c \uc774\ud574\ud574 \ubd05\uc2dc\ub2e4."},"content":{"rendered":"<p>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc560\ub110\ub9ac\ud2f1\uc2a4\ub294 \ud6a8\uc728\uc801\uc778 \ubcd1\ub82c \ucc98\ub9ac\ub97c \ud65c\uc6a9\ud558\uc5ec \uc560\ub4dc\ud639 \ucffc\ub9ac\ub97c \uc9c0\uc6d0\ud558\ub3c4\ub85d \uc124\uacc4\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\ub294 \ud55c \ucffc\ub9ac\uc758 \uacb0\uacfc\ub85c \uc778\ud574 \ub610 \ub2e4\ub978 \ucffc\ub9ac\uc5d0\uc11c \ub2f5\uc744 \ucc3e\uc544\uc57c \ud560 \ub54c \ud2b9\ud788 \uc720\uc6a9\ud569\ub2c8\ub2e4. (\uc989, \ubd84\uc11d\uac00\uc5d0\uac8c\ub294 \ud56d\uc0c1 \uadf8\ub807\uc2b5\ub2c8\ub2e4!) \ub2e4\ub978 \ub370\uc774\ud130 \ud50c\ub7ab\ud3fc\uacfc \ub9c8\ucc2c\uac00\uc9c0\ub85c, \uc774\ub7ec\ud55c \ubcf4\uc870 \ucffc\ub9ac\ub294 \ub54c\ub54c\ub85c \uccab \ubc88\uc9f8 \ucffc\ub9ac\uc640 \uc0c1\ub2f9\ud788 \ub2e4\ub978 \uc2e4\ud589 \uc2dc\uac04\uc744 \ucd08\ub798\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucd5c\uadfc\uc5d0 \ucffc\ub9ac\ub97c \uc870\uae08 \ubcc0\uacbd\ud55c \ud6c4 \uc131\ub2a5\uc774 \ub208\uc5d0 \ub744\uac8c \uc800\ud558\ub41c \uace0\uac1d\uacfc \ud568\uaed8 \uc791\uc5c5\ud55c \uc801\uc774 \uc788\uc2b5\ub2c8\ub2e4. \ubb38\uc81c\ub97c \ubd84\ub9ac\ud558\uace0 \ud574\uacb0\ud558\uae30 \uc704\ud574 \uc9c4\ud589\ud55c \ud504\ub85c\uc138\uc2a4\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<h4>\ub370\uc774\ud130<\/h4>\n<p>\ud56d\uc0c1 \uadf8\ub807\ub4ef\uc774 \ucffc\ub9ac\ub97c \uc774\ud574\ud558\uae30 \uc704\ud55c \uccab \ubc88\uc9f8 \ub2e8\uacc4\ub294 \uae30\ucd08 \ub370\uc774\ud130\uc5d0 \uc775\uc219\ud574\uc9c0\ub294 \uac83\uc785\ub2c8\ub2e4. \uc774 \uacbd\uc6b0 \ub370\uc774\ud130\ub294 JSON \ubb38\uc11c\ub85c \uad6c\uc131\ub418\uba70, \uac01 \ubb38\uc11c\ub294 \uc11c\ube44\uc2a4\uc5d0 \ub300\ud55c \ud074\ub77c\uc774\uc5b8\ud2b8 \uc694\uae08\uc5d0 \ub300\ud55c \uc124\uba85\uc785\ub2c8\ub2e4. \uac01 \uc138\uc158\uc5d0 \ub300\ud55c \uc694\uae08\uc740 \ubc30\uc5f4 \uc548\uc5d0 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:js decode:true\">{\r\n\"customer\": 1000002,\r\n\"dtype\": \"session\",\r\n\"sessionCharges\": [\r\n    {\r\n    \"qty\": 1,\r\n    \"revCode\": \"B\",\r\n    \"svc\": 44284,\r\n    \"amt\": 40,\r\n    \"svcDate\": 1592889276\r\n    },\r\n    {\r\n    \"qty\": 1,\r\n    \"revCode\": \"A\",\r\n    \"svc\": 28078,\r\n    \"amt\": 24,\r\n    \"svcDate\": 1592891076\r\n    },\r\n    {\r\n    \"qty\": 1,\r\n    \"revCode\": \"B\",\r\n    \"svc\": 38968,\r\n    \"amt\": 26,\r\n    \"svcDate\": 1592893416\r\n    }\r\n  ]\r\n}\r\n\r\n<\/pre>\n<p>\ub370\uc774\ud130 \ubaa8\ub378 \uc124\uacc4\uc5d0 \ub300\ud55c \uba87 \uac00\uc9c0 \ucc38\uace0 \uc0ac\ud56d\uc785\ub2c8\ub2e4:<\/p>\n<ul>\n<li>\uadf8\ub4e4\uc740 \ud544\ub4dc \uc774\ub984\uc744 \uc124\uba85\ud560 \uc218 \uc788\uc744 \ub9cc\ud07c \uae38\uc9c0\ub9cc \uacf5\uac04\uc744 \uc808\uc57d\ud560 \uc218 \uc788\uc744 \ub9cc\ud07c \uc9e7\uac8c \uc9c0\uc815\ud558\ub294 \ud604\uba85\ud568\uc744 \ubc1c\ud718\ud588\uc2b5\ub2c8\ub2e4. \ubc30\uc5f4 \ub0b4\uc758 \ud544\ub4dc\uba85\uc740 '\uc218\ub7c9', 'revenueCode', '\uc11c\ube44\uc2a4', '\uae08\uc561', '\uc11c\ube44\uc2a4 \ub0a0\uc9dc'\ub85c \uc27d\uac8c \uc791\uc131\ud560 \uc218 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 1\uc5b5 \uac1c\uc758 \uc778\uc2a4\ud134\uc2a4\uc5d0 \uac78\uccd0 \uc774\ub807\uac8c \ud558\uba74 \uc555\ucd95\ud558\uae30 \uc804\uc5d0 3.73GB\uc758 \uacf5\uac04\uc774 \ucd94\uac00\ub85c \ud544\uc694\ud588\uc744 \uac83\uc785\ub2c8\ub2e4.<\/li>\n<li>\ubc00\ub9ac\ucd08\uac00 \uc5c6\ub294 \uc5d0\ud3ec\ud06c \ub0a0\uc9dc\ub97c \uc0ac\uc6a9\ud588\uc2b5\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ub0a0\uc9dc\uac00 ISO 8601 \ud615\uc2dd(\"2020-07- 24T18:17:49\" \ub610\ub294 \ubc00\ub9ac\ucd08 \"2020-07-24T18:17:49.000\")\uc73c\ub85c \uc800\uc7a5\ub418\uba74 \uc800\uc7a5 \uacf5\uac04\uc774 \ub450 \ubc30\ub85c \ub298\uc5b4\ub0a9\ub2c8\ub2e4.<\/li>\n<\/ul>\n<h4>\ucd08\uae30 \ucffc\ub9ac<\/h4>\n<p>\ucd08\uae30 \ucffc\ub9ac\ub294 \uac01 \uc218\uc775 \ucf54\ub4dc \ubc94\uc8fc \ub0b4\uc5d0\uc11c \uac00\uc7a5 \ub192\uc740 \uc218\uc775 \uace0\uac1d\/\uc11c\ube44\uc2a4 \uc870\ud569\uc744 \uac80\uc0c9\ud558\ub3c4\ub85d \uc124\uacc4\ub418\uc5c8\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:tsql decode:true\">select latestService, customer, revCode, service,\r\n       round(totalDollar) dollars, totalQuant from (\r\nselect s.customer,\r\n       c.svc as service,\r\n       c.revCode,\r\n       sum(c.amt) as totalDollar,\r\n       sum(c.qty) as totalQuant,\r\n       millis_to_str(max(c.svcDate)*1000, '1111-11-11') as latestService\r\nfrom sessions s unnest s.sessionCharges c\r\ngroup by s.customer, c.revCode, c.svc \r\n) a\r\nwhere rank() over (partition by revCode order by totalDollar desc) = 1\r\norder by revCode, totalDollar;\r\n<\/pre>\n<p>\ucffc\ub9ac \ub514\uc790\uc778\uc5d0 \ub300\ud55c \uba87 \uac00\uc9c0 \ucc38\uace0 \uc0ac\ud56d\uc785\ub2c8\ub2e4:<\/p>\n<ul>\n<li>\ubc30\uc5f4 \ucf58\ud150\uce20\ub294 \"unnest\" \ub3d9\uc0ac\ub85c \uc561\uc138\uc2a4\ud569\ub2c8\ub2e4. \uc774\ub807\uac8c \ud558\uba74 \uac12\uc744 \uc9d1\uacc4\ud558\uc5ec \ud3c9\ud65c\ud654\ub41c \ub808\ucf54\ub4dc\ub85c \ubc18\ud658\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<li>\ucd5c\uc2e0 \uc11c\ube44\uc2a4 \ub0a0\uc9dc\ub294 millis_to_str() \ud568\uc218\ub97c \ud1b5\ud574 \uc5d0\ud3ec\ud06c\uc5d0\uc11c \uc0ac\ub78c\uc774 \uc77d\uc744 \uc218 \uc788\ub294 \ub0a0\uc9dc\ub85c \ubcc0\ud658\ub429\ub2c8\ub2e4.<\/li>\n<li>\uc708\ub3c4\uc6b0 \ud568\uc218 \"rank() over partition\"\uc740 \uac01 \uc218\uc775 \ucf54\ub4dc \ub0b4\uc5d0\uc11c \uc0c1\uc704 \uac12\ub9cc \ubc18\ud658\ud558\ub294 \ud6a8\uc728\uc801\uc778 \uc218\ub2e8\uc73c\ub85c \uc678\ubd80 \ucffc\ub9ac\uc758 where \uc808\uc5d0 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/li>\n<li>round() \ud568\uc218\ub294 \uc7a5\uc2dd\uc6a9\uc774\uc9c0\ub9cc, \uc77c\ubc18\uc801\uc73c\ub85c \ud398\ub2c8\uac00 \uc911\uc694\ud558\uc9c0 \uc54a\uc740 \ubcf4\uace0\uc11c\uc5d0\uc11c \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/li>\n<\/ul>\n<h4>\uc2ac\ub85c\uc6b0\ub2e4\uc6b4<\/h4>\n<p>\ubcfc\ub968 \ud560\uc778 \uacc4\uc0b0(\uc11c\ube44\uc2a4 \ub204\uc801 \uc218\ub7c9\uc774 10\uac1c \uc774\uc0c1\uc77c \ub54c 20% \ud560\uc778)\uc774 \ucd94\uac00\ub418\uc5c8\uc744 \ub54c \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4. \uc774 \uc0c8\ub85c\uc6b4 \ucffc\ub9ac\ub294 \uc2e4\ud589 \uc2dc\uac04\uc774 6\ubc30\ub098 \ub354 \uc624\ub798 \uac78\ub838\uc2b5\ub2c8\ub2e4!<\/p>\n<pre class=\"lang:tsql decode:true\">select latestService, customer, revCode, service,\r\n       round(totalDollar) dollars, round(adjDollar) dollarsAdj, totalQuant from (\r\nselect s.customer,\r\n       c.svc as service,\r\n       c.revCode,\r\n       sum(c.amt) as totalDollar,\r\n       case\r\n         when sum(c.qty) &lt; 10 then sum(c.amt)\r\n         else sum(c.amt) * .8\r\n       end as adjDollar,\r\n       sum(c.qty) as totalQuant,\r\n       millis_to_str(max(c.svcDate)*1000, '1111-11-11') as latestService\r\nfrom sessions s unnest s.sessionCharges c\r\ngroup by s.customer, c.svc, c.revCode\r\n) a\r\nwhere rank() over (partition by revCode order by totalDollar desc) = 1\r\norder by revCode, totalDollar;<\/pre>\n<p>\uc774 \uc6d0\uc778\uc744 \uc5b4\ub5bb\uac8c \ucd94\uc801\ud560 \uc218 \uc788\ub098\uc694?<\/p>\n<h4>\uc124\uba85\ud558\uae30<\/h4>\n<p>Analytics \ucffc\ub9ac \ucf58\uc194\uc5d0\uc11c\ub294 '\uacc4\ud68d' \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uae30\ub9cc \ud558\uba74 \ubaa8\ub4e0 \ucffc\ub9ac\uc758 \uc2e4\ud589 \uacc4\ud68d\uc744 \uc27d\uac8c \uac80\uc0ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc544\ub798 \uadf8\ub9bc (1)\uc740 \uc774 \ucffc\ub9ac\uc5d0 \ub300\ud55c \ucffc\ub9ac \uacc4\ud68d\uc744 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4. \ub2e4\uc774\uc5b4\uadf8\ub7a8\uc758 \uaddc\ubaa8\uac00 \uc791\uc544\ub3c4 \uac71\uc815\ud558\uc9c0 \ub9c8\uc138\uc694. \ucee8\ud2b8\ub864\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud655\uc7a5 \ubc0f \ucd95\uc18c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uac01 \uac1c\ubcc4 \ub2e8\uacc4\ub97c \ud074\ub9ad\ud558\uc5ec \uc790\uc138\ud55c \uc815\ubcf4\ub97c \ubcfc \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<div id=\"attachment_8956\" style=\"width: 310px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-8956\" class=\"size-medium wp-image-8956\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/07\/Figure1-300x117.png\" alt=\"Figure 1\" width=\"300\" height=\"117\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Figure1-300x117.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Figure1-1024x398.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Figure1-768x299.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Figure1-1536x597.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Figure1-20x8.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Figure1-1320x513.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Figure1.png 1954w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><p id=\"caption-attachment-8956\" class=\"wp-caption-text\">\uadf8\ub9bc 1<\/p><\/div>\n<p>\uc6d0\ud558\ub294 \uacbd\uc6b0 '\uacc4\ud68d \ud14d\uc2a4\ud2b8' \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \uacc4\ud68d\uc744 \uc124\uba85\ud558\ub294 JSON \ubb38\uc11c\ub97c \uc0dd\uc131\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:js decode:true\">{\r\n  \"operator\": \"distribute-result\",\r\n  \"expressions\": [\r\n    \"$$157\"\r\n  ],\r\n  \"operatorId\": \"1.1\",\r\n  \"physical-operator\": \"DISTRIBUTE_RESULT\",\r\n  \"execution-mode\": \"PARTITIONED\",\r\n  \"inputs\": [\r\n    {\r\n      \"operator\": \"exchange\",\r\n      \"operatorId\": \"1.2\",\r\n      \"physical-operator\": \"ONE_TO_ONE_EXCHANGE\",\r\n      \"execution-mode\": \"PARTITIONED\",\r\n      \"inputs\": [\r\n        {\r\n          \"operator\": \"project\",\r\n          \"variables\": [\r\n            \"$$157\"\r\n          ],\r\n          \"operatorId\": \"1.3\",\r\n          \"physical-operator\": \"STREAM_PROJECT\",\r\n          \"execution-mode\": \"PARTITIONED\",\r\n          \"inputs\": [\r\n            {\r\n              \"operator\": \"assign\",\r\n              \"variables\": [\r\n                \"$$157\"\r\n              ], ...\r\netc.\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\ucffc\ub9ac\uac00 \ubcf5\uc7a1\ud574\uc9c0\uba74 \uc911\ucca9\uc774 \ub9e4\uc6b0 \uae4a\uc5b4\uc9c0\uace0 \uc77d\uae30\uac00 \ub2e4\uc18c \uc5b4\ub824\uc6cc\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.  \uc5d4\uc9c0\ub2c8\uc5b4\ub4e4\uc774 \uc790\uc8fc \uc0ac\uc6a9\ud558\ub294 \ud2b8\ub9ad\uc740 \ucffc\ub9ac \uc55e\uc5d0 '\uc124\uba85 \ud14d\uc2a4\ud2b8' \uba85\ub839\uc744 \ucd94\uac00\ud558\ub294 \uac83\uc785\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:tsql decode:true\">explain text\r\nselect ...\r\netc.;<\/pre>\n<p>\uc5ec\uae30\uc5d0\ub294 \uad04\ud638 \uc5c6\uc774 \uacc4\ud68d\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \uc124\uba85\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">distribute result [$$157]\r\n-- DISTRIBUTE_RESULT  |PARTITIONED|\r\n  exchange\r\n  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|\r\n    project ([$$157])\r\n    -- STREAM_PROJECT  |PARTITIONED|\r\n      assign [$$157] &lt;- [{\"latestService\": millis-to-local(numeric-multiply($$168, 1000), \"1111-11-11\"), \"customer\": $$customer, \"revCode\": $$revCode, \"service\": $$svc, \"dollars\": round($$166), \"dollarsAdj\": round($$126), \"totalQuant\": $$167}]\r\n      -- ASSIGN  |PARTITIONED|\r\n        exchange\r\n        -- SORT_MERGE_EXCHANGE [$$revCode(ASC), $$166(ASC) ]  |PARTITIONED|\r\n          order (ASC, $$revCode) (ASC, $$166)\r\n          -- STABLE_SORT [$$revCode(ASC), $$166(ASC)]  |PARTITIONED|\r\n            exchange\r\n            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|\r\netc.<\/pre>\n<p>\uc774\uac83\uc774 \ub2e8\uc11c\ub97c \ucc3e\ub294 \ub370 \uc0ac\uc6a9\ud560 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<h4>\ubaa9\ub85d \ub9cc\ub4e4\uae30<\/h4>\n<p>\ud544\ub4dc\ub97c \uc815\uc758\ud558\ub294 CASE \ubb38\uc744 \ucd94\uac00\ud588\uc744 \ub54c \uc18d\ub3c4 \uc800\ud558\uac00 \ubc1c\uc0dd\ud588\ub2e4\uace0 \ud655\uc2e0\ud558\ubbc0\ub85c \ucf00\uc774\uc2a4 \ub85c\uc9c1\uc744 \uac80\uc0c9\ud558\ub294 \uac83\ubd80\ud130 \uc2dc\uc791\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. 33\ubc88\uc9f8 \uc904\uc5d0\uc11c \ucc3e\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">assign [$$125] &lt;- [switch-case(TRUE, lt($$165, 10), $$117, $$124)]\r\n<\/pre>\n<p>\ub2e4\uc74c \uc904\uc758 \ub17c\ub9ac\ub97c \ub530\ub77c\uac00\ub2e4 \ubcf4\uba74 \uc2e4\ud589 \uacc4\ud68d\uc774 \ubd84\ud560\ub41c \ubc29\uc2dd\uc73c\ub85c \ubcc0\uc218\ub97c \uacc4\uc18d \ud560\ub2f9\ud558\uace0 \uad50\ud658\ud558\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 44\ubc88\uc9f8 \uc904\uc5d0\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ub0b4\uc6a9\uc774 \ud45c\uc2dc\ub429\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">aggregate [$$117] &lt;- [listify($$196)]\r\n<\/pre>\n<p>\ucffc\ub9ac \uc131\ub2a5\uc774\ub098 \uba54\ubaa8\ub9ac \uc18c\ube44\uac00 \uc6b0\ub824\ub418\ub294 \uacbd\uc6b0, \"listify\" \ud568\uc218\ub294 \uc704\ud5d8 \uc2e0\ud638\uac00 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.  (\ud55c \uc5d4\uc9c0\ub2c8\uc5b4\ub294 \ub18d\ub2f4 \uc0bc\uc544 \"\uc545\uc758 \ud568\uc218\"\ub77c\uace0 \ubd80\ub974\uae30\ub3c4 \ud569\ub2c8\ub2e4.) \ud2b9\ud788 \ubc30\uc5f4 \uc9d1\uacc4\uc758 \ub0b4\ubd80 \ubcc0\ud658\uc5d0 \uc0ac\uc6a9\ub418\uc9c0\ub9cc \uc2e4\ud589 \uacc4\ud68d\uc5d0\uc11c \ucd5c\ud6c4\uc758 \uc218\ub2e8\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.  \uc774 \uc608\uc81c\uc5d0\uc11c\ub294 $$117 \ubcc0\uc218\uac00 \uc774 \ub9ac\uc2a4\ud2b8\ud30c\uc774 \ud504\ub85c\uc138\uc2a4\uc758 \uacb0\uacfc\ubb3c\uc784\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc704\uc758 \uc2a4\uc704\uce58 \ucf00\uc774\uc2a4\uc5d0\uc11c \ubcfc \uc218 \uc788\ub294 \uc774 $$117\uc740 \ucffc\ub9ac\uc758 sum(c.amt) \uac1d\uccb4\uc640 \uc5f0\uad00\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c \ud569\uacc4 \uacc4\uc0b0\uc744 \ub0b4\ubd80 \uc2a4\uc704\uce58 \ucf00\uc774\uc2a4 \ubc16\uc73c\ub85c \uc774\ub3d9\ud558\uc5ec LET\uc758 \uc77c\ubd80\ub85c \ub9cc\ub4e4\uc5b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:tsql decode:true\">explain text\r\nselect latestService, customer, revCode, service,\r\n       round(totalDollar) dollars, round(adjDollar) dollarsAdj, totalQuant from (\r\nselect s.customer,\r\n       c.svc as service,\r\n       c.revCode,\r\n       totalDollar,\r\n       case\r\n         when totalQuant &lt; 10 then totalDollar\r\n         else totalDollar * .8\r\n       end as adjDollar,\r\n       totalQuant,\r\n       millis_to_str(max(c.svcDate)*1000, '1111-11-11') as latestService\r\nfrom sessions s unnest s.sessionCharges c\r\ngroup by s.customer, c.svc, c.revCode\r\nlet totalQuant = sum(c.qty), totalDollar = sum(c.amt)\r\n) a\r\nwhere rank() over (partition by revCode order by totalDollar desc) = 1\r\norder by revCode, totalDollar;\r\n<\/pre>\n<p>\uc774 \uc791\uc5c5\uc744 \uc644\ub8cc\ud558\uace0 explain plan\uc744 \ub2e4\uc2dc \uc0b4\ud3b4\ubcf8 \uacb0\uacfc \uae38\uc774\uac00 \uc808\ubc18\uc73c\ub85c \uc904\uc5c8\uace0 \uc2e4\ud589 \ud504\ub85c\uc138\uc2a4\uc5d0 \ub354 \uc774\uc0c1 listify \ud568\uc218\uac00 \ud3ec\ud568\ub418\uc9c0 \uc54a\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\uba74 \ucffc\ub9ac\ub97c \uc2e4\ud589\ud558\uba74 \ud6e8\uc52c \ub354 \ub098\uc740 \uc131\ub2a5\uc744 \ubcf4\uc5ec\uc57c \ud558\uba70 \uc2e4\uc81c\ub85c\ub3c4 \uadf8\ub807\uc2b5\ub2c8\ub2e4. \ubb38\uc81c\uac00 \ud574\uacb0\ub418\uc5c8\uc2b5\ub2c8\ub2e4!<\/p>\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c \ud55c \uac00\uc9c0 \ucc38\uace0\uc0ac\ud56d: \uc5d4\uc9c0\ub2c8\uc5b4\ub4e4\uc740 \ud56d\uc0c1 \ucffc\ub9ac \ucd5c\uc801\ud654 \ub3c4\uad6c\ub97c \uac1c\uc120\ud560 \ubc29\ubc95\uc744 \ucc3e\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ucffc\ub9ac \uc911 \ud558\ub098\ub97c \ucd5c\uc801\ud654\ud558\ub294 \uacfc\uc815\uc5d0\uc11c \uc124\uba85 \ud14d\uc2a4\ud2b8\uc5d0\uc11c \ubd88\ub7c9 'listify' \ud568\uc218(\uc774\ubbf8 \ub4dc\ubb3c\uc9c0\ub9cc \uc810\uc810 \ub354 \ub4dc\ubb3c\uc5b4\uc9c0\uace0 \uc788\uc74c)\ub97c \ubc1c\uacac\ud55c \uacbd\uc6b0, support.couchbase.com\uc5d0\uc11c \uc9c0\uc6d0 \ud2f0\ucf13\uc744 \uc5f4\uace0 \uc124\uba85 \uacc4\ud68d\uc744 \uc5c5\ub85c\ub4dc\ud558\uc5ec \uc5d4\uc9c0\ub2c8\uc5b4\uac00 \uc0b4\ud3b4\ubcfc \uc218 \uc788\ub3c4\ub85d \ud574 \uc8fc\uc138\uc694.  \uc2e4\uc81c\ub85c \uc704\uc5d0\uc11c \uc5b8\uae09\ud55c \uace0\uac1d\uacfc\uc758 \uc791\uc5c5 \uacb0\uacfc\ub85c \uc774 \ud2b9\uc815 \uc608\uc81c(\uc9d1\uacc4 \ud568\uc218\uc640 \ud568\uaed8 \uc0ac\uc6a9\ub418\ub294 \uc2a4\uc704\uce58 \ucf00\uc774\uc2a4)\ub294 6.6 \ub9b4\ub9ac\uc2a4\ubd80\ud130 \ucd5c\uc801\ud654 \ud504\ub85c\uadf8\ub7a8\uc5d0 \uc758\ud574 \uc790\ub3d9\uc73c\ub85c \uc7ac\uc791\uc131\ub429\ub2c8\ub2e4.<\/p>\n<h4>\ubb38\uc11c \ubc0f \ub9ac\uc18c\uc2a4<\/h4>\n<p>Couchbase \ubb38\uc11c \uc0ac\uc774\ud2b8\uc5d0\ub294 \ubd84\uc11d \uc5b8\uc5b4\uc6a9 N1QL \ucc38\uc870\uc5d0 \ub300\ud55c \ub9c1\ud06c\uac00 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4: <a href=\"https:\/\/docs.couchbase.com\/server\/current\/analytics\/introduction.html\">https:\/\/docs.couchbase.com\/server\/current\/analytics\/introduction.html<\/a>. \ub610\ud55c \uc5ec\uae30\uc5d0\uc11c \uc5b8\uc5b4\uc5d0 \ub300\ud55c \ud29c\ud1a0\ub9ac\uc5bc\uacfc Don Chamberlin(SQL \uc5b8\uc5b4\uc758 \uacf5\ub3d9 \ubc1c\uba85\uac00)\uc758 \ucc45\uc5d0 \ub300\ud55c \ub9c1\ud06c\ub97c \ucc3e\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4: <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/sql-plus-plus-for-sql-users\/\">https:\/\/www.couchbase.com\/sql-plus-plus-for-sql-users<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<p><em>\uc774 \uac8c\uc2dc\ubb3c\uc744 \uaf3c\uaf3c\ud558\uac8c \uac80\ud1a0\ud574 \uc8fc\uc2e0 Dmitry Lychagin\uacfc Mike Carey\uc5d0\uac8c \uae4a\uc740 \uac10\uc0ac\ub97c \ub4dc\ub9bd\ub2c8\ub2e4.<\/em><\/p>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>Couchbase Analytics is designed to support ad hoc queries by leveraging efficient parallel processing. This is particularly helpful when the results of one query lead you to seek answers from yet another another query. (For analysts, in other words, all [&hellip;]<\/p>","protected":false},"author":41576,"featured_media":8958,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[2294],"tags":[],"ppma_author":[9066],"class_list":["post-8955","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analytics"],"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>Analytics Query Optimization - Let&#039;s Demystify Listify - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Inspecting the execution plan via &quot;explain text&quot; can help you design your queries to optimize the performance of your Analytics service on Couchbase.\" \/>\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\/analytics-query-optimization-lets-demystify-listify\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Analytics Query Optimization - Let&#039;s Demystify Listify\" \/>\n<meta property=\"og:description\" content=\"Inspecting the execution plan via &quot;explain text&quot; can help you design your queries to optimize the performance of your Analytics service on Couchbase.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/analytics-query-optimization-lets-demystify-listify\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-29T18:02:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-25T06:55:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/07\/BlogImage.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"666\" \/>\n\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Peter Reale\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Peter Reale\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/\"},\"author\":{\"name\":\"Peter Reale\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/391cf559b28ca6b4c1660a1ce283752c\"},\"headline\":\"Analytics Query Optimization &#8211; Let&#8217;s Demystify Listify\",\"datePublished\":\"2020-07-29T18:02:28+00:00\",\"dateModified\":\"2023-05-25T06:55:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/\"},\"wordCount\":945,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/BlogImage.jpg\",\"articleSection\":[\"Couchbase Analytics\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/\",\"name\":\"Analytics Query Optimization - Let's Demystify Listify - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/BlogImage.jpg\",\"datePublished\":\"2020-07-29T18:02:28+00:00\",\"dateModified\":\"2023-05-25T06:55:10+00:00\",\"description\":\"Inspecting the execution plan via \\\"explain text\\\" can help you design your queries to optimize the performance of your Analytics service on Couchbase.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/BlogImage.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/BlogImage.jpg\",\"width\":666,\"height\":350},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Analytics Query Optimization &#8211; Let&#8217;s Demystify Listify\"}]},{\"@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\/391cf559b28ca6b4c1660a1ce283752c\",\"name\":\"Peter Reale\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ec988e11a3058e02331c83244e993ea2\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/19012c1e7433fcde0d634a14a0f76610c40ce876b6c5a04b23d43c2181301761?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/19012c1e7433fcde0d634a14a0f76610c40ce876b6c5a04b23d43c2181301761?s=96&d=mm&r=g\",\"caption\":\"Peter Reale\"},\"description\":\"Peter Reale is a Senior Solutions Engineer at Couchbase and has been in the data business since 1984. He is based in Los Angeles.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/peter-reale\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Analytics Query Optimization - Let's Demystify Listify - The Couchbase Blog","description":"Inspecting the execution plan via \"explain text\" can help you design your queries to optimize the performance of your Analytics service on Couchbase.","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\/analytics-query-optimization-lets-demystify-listify\/","og_locale":"ko_KR","og_type":"article","og_title":"Analytics Query Optimization - Let's Demystify Listify","og_description":"Inspecting the execution plan via \"explain text\" can help you design your queries to optimize the performance of your Analytics service on Couchbase.","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/analytics-query-optimization-lets-demystify-listify\/","og_site_name":"The Couchbase Blog","article_published_time":"2020-07-29T18:02:28+00:00","article_modified_time":"2023-05-25T06:55:10+00:00","og_image":[{"width":666,"height":350,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/07\/BlogImage.jpg","type":"image\/jpeg"}],"author":"Peter Reale","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Peter Reale","Est. reading time":"6\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/"},"author":{"name":"Peter Reale","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/391cf559b28ca6b4c1660a1ce283752c"},"headline":"Analytics Query Optimization &#8211; Let&#8217;s Demystify Listify","datePublished":"2020-07-29T18:02:28+00:00","dateModified":"2023-05-25T06:55:10+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/"},"wordCount":945,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/BlogImage.jpg","articleSection":["Couchbase Analytics"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/","url":"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/","name":"Analytics Query Optimization - Let's Demystify Listify - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/BlogImage.jpg","datePublished":"2020-07-29T18:02:28+00:00","dateModified":"2023-05-25T06:55:10+00:00","description":"Inspecting the execution plan via \"explain text\" can help you design your queries to optimize the performance of your Analytics service on Couchbase.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/BlogImage.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/BlogImage.jpg","width":666,"height":350},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/analytics-query-optimization-lets-demystify-listify\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Analytics Query Optimization &#8211; Let&#8217;s Demystify Listify"}]},{"@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\/391cf559b28ca6b4c1660a1ce283752c","name":"\ud53c\ud130 \ub808\uc54c","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ec988e11a3058e02331c83244e993ea2","url":"https:\/\/secure.gravatar.com\/avatar\/19012c1e7433fcde0d634a14a0f76610c40ce876b6c5a04b23d43c2181301761?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/19012c1e7433fcde0d634a14a0f76610c40ce876b6c5a04b23d43c2181301761?s=96&d=mm&r=g","caption":"Peter Reale"},"description":"Peter Reale is a Senior Solutions Engineer at Couchbase and has been in the data business since 1984. He is based in Los Angeles.","url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/peter-reale\/"}]}},"authors":[{"term_id":9066,"user_id":41576,"is_guest":0,"slug":"peter-reale","display_name":"Peter Reale","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/19012c1e7433fcde0d634a14a0f76610c40ce876b6c5a04b23d43c2181301761?s=96&d=mm&r=g","author_category":"","last_name":"Reale, Senior Solutions Engineer, Couchbase","first_name":"Peter","job_title":"","user_url":"","description":"Peter Reale\uc740 1984\ub144\ubd80\ud130 \ub370\uc774\ud130 \ube44\uc988\ub2c8\uc2a4\uc5d0 \uc885\uc0ac\ud574 \uc628 Couchbase\uc758 \uc218\uc11d \uc194\ub8e8\uc158 \uc5d4\uc9c0\ub2c8\uc5b4\uc785\ub2c8\ub2e4.  \ud604\uc7ac \ub85c\uc2a4\uc564\uc824\ub808\uc2a4\uc5d0 \uac70\uc8fc\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/8955","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\/41576"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=8955"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/8955\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/8958"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=8955"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=8955"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=8955"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=8955"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}