{"id":17369,"date":"2025-07-25T10:09:07","date_gmt":"2025-07-25T17:09:07","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=17369"},"modified":"2025-08-13T06:52:59","modified_gmt":"2025-08-13T13:52:59","slug":"choosing-the-right-query-language-sql-vs-mongo","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/choosing-the-right-query-language-sql-vs-mongo\/","title":{"rendered":"\uc62c\ubc14\ub978 \ucffc\ub9ac \uc5b8\uc5b4 \uc120\ud0dd\ud558\uae30: SQL++ \ub300 \ubabd\uace0"},"content":{"rendered":"<p>\uc571\uc744 \uad6c\ucd95\ud560 \ub54c \uc791\uc5c5\ud558\ub294 \ucffc\ub9ac \uc5b8\uc5b4\ub294 \ud070 \ucc28\uc774\ub97c \ub9cc\ub4ed\ub2c8\ub2e4. \uc131\ub2a5\ubd80\ud130 \ud300\uc774 \uae30\ub2a5\uc744 \uc5bc\ub9c8\ub098 \ube68\ub9ac \ucd9c\uc2dc\ud560 \uc218 \uc788\ub294\uc9c0\uc5d0 \uc774\ub974\uae30\uae4c\uc9c0 \ubaa8\ub4e0 \uac83\uc5d0 \uc601\ud5a5\uc744 \ubbf8\uce69\ub2c8\ub2e4. \uc774 \uae00\uc5d0\uc11c\ub294 LLM\uc5d0\uac8c \uc5b4\ub5a4 \ucffc\ub9ac \uc5b8\uc5b4\ub97c \uc0ac\uc6a9\ud560\uc9c0 \uacb0\uc815\ud560 \ub54c \uac00\uc7a5 \uc911\uc694\ud55c 21\uac00\uc9c0 \uae30\uc900\uc758 \ubaa9\ub85d\uc744 \uc791\uc131\ud574 \ub2ec\ub77c\uace0 \uc694\uccad\ud588\uc2b5\ub2c8\ub2e4. \uac01 \ud56d\ubaa9\uc744 \uc0b4\ud3b4\ubcf4\uace0 Couchbase\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 SQL++\uc640 Mongo\uc758 \ucffc\ub9ac API(\uc774\uc804\uc5d0\ub294 MQL\ub85c \uc54c\ub824\uc9d0) \uc5b8\uc5b4\uac00 \uc5b4\ub5bb\uac8c \ube44\uad50\ub418\ub294\uc9c0 \ubcf4\uc5ec\ub4dc\ub9ac\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc0c8 \ud504\ub85c\uc81d\ud2b8\ub97c \uc704\ud574 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \ud3c9\uac00\ud558\uace0 \uc788\uac70\ub098 \uc774 \ub450 \uac00\uc9c0 \uc811\uadfc \ubc29\uc2dd\uc758 \ucc28\uc774\uc810\uc774 \uad81\uae08\ud55c \uacbd\uc6b0, \uac01 \uc811\uadfc \ubc29\uc2dd\uc758 \uc7a5\uc810\uacfc \ub2e8\uc810\uc744 \uba85\ud655\ud558\uac8c \ud30c\uc545\ud560 \uc218 \uc788\uc744 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<h2 style=\"font-weight: 400;\">\ud45c\ud604\ub825<\/h2>\n<p>SQL++\ub97c \uc0ac\uc6a9\ud558\uba74 \uc870\uc778, \ud558\uc704 \ucffc\ub9ac, \uc9d1\uacc4, \ucc3d \ud568\uc218 \ub4f1 \ud48d\ubd80\ud558\uace0 \ubcf5\uc7a1\ud55c \ucffc\ub9ac\ub97c \uc791\uc131\ud558\ub294 \ub3d9\uc2dc\uc5d0 \uc720\uc5f0\ud55c \ubb38\uc11c \ub370\uc774\ud130\ub85c \uc791\uc5c5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. SQL\uc5d0\uc11c \uae30\ub300\ud560 \uc218 \uc788\ub294 \uac70\uc758 \ubaa8\ub4e0 \uac83\uc744 \ud45c\ud604\ud560 \uc218 \uc788\uc73c\uba70 JSON\uc5d0 \ub300\ud55c \uae30\ubcf8 \uc9c0\uc6d0\ub3c4 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n<p>Mongo\uc758 \ucffc\ub9ac \uc5b8\uc5b4\ub294 \ub354 \uc81c\ud55c\uc801\uc785\ub2c8\ub2e4. \uc9d1\uacc4 \ud30c\uc774\ud504\ub77c\uc778\uc73c\ub85c \ub9ce\uc740 \uc791\uc5c5\uc744 \uc218\ud589\ud560 \uc218 \uc788\uc9c0\ub9cc, \ub2e4\uc911 \uceec\ub809\uc158 \uc870\uc778\uc774\ub098 \uc2ec\uce35 \ud558\uc704 \ucffc\ub9ac\ub97c \ud45c\ud604\ud558\ub294 \uac83\uc740 \uc7a5\ud669\ud574\uc9c8 \uc218 \uc788\uc73c\uba70 \ud574\uacb0 \ubc29\ubc95\uc774\ub098 \uace0\uae09 \ud30c\uc774\ud504\ub77c\uc778 \uad6c\uc131\uc774 \ud544\uc694\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<table>\n<tbody>\n<tr>\n<th><strong>SQL++<\/strong><\/th>\n<th><strong>\ubabd\uace0<\/strong><\/th>\n<\/tr>\n<tr>\n<td>\n<pre>SELECT c.name, o.total\r\nFROM customers c\r\nJOIN orders o ON c.id = o.customer_id\r\nWHERE o.total &gt; 100\r\nORDER BY o.total DESC;<\/pre>\n<\/td>\n<td>\ubabd\uace0\uc5d0\ub294 \ubcf4\ub2e4 \uc808\ucc28\uc801\uc778 \ud30c\uc774\ud504\ub77c\uc778\uc774 \ud544\uc694\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"\">db.orders.aggregate([\r\n\u00a0 { $match: { total: { $gt: 100 } } },\r\n\u00a0 { $lookup: {\r\n\u00a0 \u00a0 \u00a0 from: \"customers\",\r\n\u00a0 \u00a0 \u00a0 localField: \"customer_id\",\r\n\u00a0 \u00a0 \u00a0 foreignField: \"id\",\r\n\u00a0 \u00a0 \u00a0 as: \"customer\"\r\n\u00a0 \u00a0 }\r\n\u00a0 },\r\n\u00a0 { $unwind: \"$customer\" },\r\n\u00a0 { $project: { name: \"$customer.name\", total: 1 } },\r\n\u00a0 { $sort: { total: -1 } }\r\n]);\r\n<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 style=\"font-weight: 400;\">\uac00\ub3c5\uc131<\/h2>\n<p>SQL++\ub294 \uc120\uc5b8\uc801\uc774\uba70 SQL \uacbd\ud5d8\uc774 \uc788\ub294 \uc0ac\ub78c\uc774\ub77c\uba74 \ub204\uad6c\uc5d0\uac8c\ub098 \uce5c\uc219\ud569\ub2c8\ub2e4. \ucffc\ub9ac\uc758 \uc758\ub3c4\ub97c \uc27d\uac8c \ud30c\uc545\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre>SELECT name, age\r\nFROM users\r\nWHERE age &gt;= 21\r\nORDER BY name;\r\n<\/pre>\n<p>\ubabd\uace0\uc758 \ud30c\uc774\ud504\ub77c\uc778\uc740 \uc880 \ub354 \uc7a5\ud669\ud558\uace0 \uc808\ucc28\uc801\uc774\uc5b4\uc11c \uac01 \ub2e8\uacc4\ub97c \uc815\uc2e0\uc801\uc73c\ub85c \ubc1f\uc544\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<pre>db.users.find(\r\n\u00a0 { age: { $gte: 21 } },\r\n\u00a0 { name: 1, age: 1, _id: 0 }\r\n).sort({ name: 1 });\r\n<\/pre>\n<p>\uac04\ub2e8\ud55c \ucffc\ub9ac\uc758 \uacbd\uc6b0 <b>\ub054\ucc0d\ud55c<\/b>. \uadf8\ub7ec\ub098 \ucffc\ub9ac\uac00 \uc99d\uac00\ud558\uba74(\uc870\uc778, \ud558\uc704 \ucffc\ub9ac, \uc9d1\uacc4) \ubabd\uace0\uc758 \ud30c\uc774\ud504\ub77c\uc778 \ud615\uc2dd\uc5d0\uc11c \uac00\ub3c5\uc131\uc774 \ube60\ub974\uac8c \ub5a8\uc5b4\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2 style=\"font-weight: 400;\">\uc77c\uad00\uc131<\/h2>\n<p>SQL++\ub294 \uc77c\uad00\uc131\uc774 \ub9e4\uc6b0 \ub192\uc2b5\ub2c8\ub2e4. \uad6c\ubb38\uacfc \uc758\ubbf8\uac00 \uc608\uce21 \uac00\ub2a5\ud558\uba70 \uc804\ubc18\uc801\uc73c\ub85c \"\ubb38\uc11c\uc6a9 SQL\"\ucc98\ub7fc \ub290\uaef4\uc9d1\ub2c8\ub2e4.<\/p>\n<p>\uc911\ucca9\ub41c \ub370\uc774\ud130\uac00 \uc788\ub294 \uc608\uc81c\uc785\ub2c8\ub2e4:<\/p>\n<pre>SELECT u.name, a.city\r\nFROM users u\r\nUNNEST u.addresses AS a\r\nWHERE a.country = \"USA\";\r\n<\/pre>\n<p>\ubabd\uace0\uc5d0\uc11c \uc911\ucca9 \uad6c\uc870\ub97c \ucffc\ub9ac\ud558\ub824\uba74 \uc810 \ud45c\uae30\ubc95\uc774\ub098 \ubc30\uc5f4 \uc5f0\uc0b0\uc790\ub85c \uc804\ud658\ud574\uc57c \ud558\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc73c\uba70 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ub2e4\uc74c\uacfc \ub2e4\ub978 \uc2a4\ud0c0\uc77c\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. <em>find()<\/em>. \uacb0\uad6d \uc5ec\ub7ec \uad6c\ubb38\uc744 \ubc30\uc6b0\uac8c \ub429\ub2c8\ub2e4:<\/p>\n<p>\uc810 \ud45c\uae30\ubc95\uc744 \uc0ac\uc6a9\ud55c \uac04\ub2e8\ud55c \ucffc\ub9ac:<\/p>\n<pre>db.users.find(\r\n\u00a0 { \"addresses.country\": \"USA\" },\r\n\u00a0 { name: 1, \"addresses.city\": 1, _id: 0 }\r\n);\r\n<\/pre>\n<p>\ub354 \ubcf5\uc7a1\ud558\uc2dc\ub098\uc694? \ub2e4\uc2dc \uc9d1\ud569\uc758 \ub098\ub77c\ub85c \ub3cc\uc544\uc654\uc2b5\ub2c8\ub2e4:<\/p>\n<pre>db.users.aggregate([\r\n\u00a0 { $unwind: \"$addresses\" },\r\n\u00a0 { $match: { \"addresses.country\": \"USA\" } },\r\n\u00a0 { $project: { name: 1, city: \"$addresses.city\", _id: 0 } }\r\n]);\r\n<\/pre>\n<h2 style=\"font-weight: 400;\">\uc131\ub2a5<\/h2>\n<p>\uc6d0\uc2dc \uc131\ub2a5\uc758 \uacbd\uc6b0, \ud2b9\ud788 \ucc98\ub9ac\ub7c9\uc774 \ub9ce\uace0 \uc9c0\uc5f0 \uc2dc\uac04\uc774 \uc9e7\uc740 \uc6cc\ud06c\ub85c\ub4dc\uc5d0\uc11c \ubca4\uce58\ub9c8\ud06c\uc5d0\uc11c Couchbase SQL++\uac00 MongoDB\uc758 \ucffc\ub9ac \uc5b8\uc5b4\ub97c \uc9c0\uc18d\uc801\uc73c\ub85c \uc55e\uc130\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Couchbase\ub294 \ub2e4\uc591\ud55c \ubca4\uce58\ub9c8\ud06c\uc5d0\uc11c \ub6f0\uc5b4\ub09c \ud655\uc7a5\uc131\uacfc \ud6a8\uc728\uc131\uc744 \uc785\uc99d\ud588\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, \uc57c\ud6c4 \ud074\ub77c\uc6b0\ub4dc \uc11c\ube44\uc2a4 \ubca4\uce58\ub9c8\ud06c(YCSB)\uc5d0\uc11c \uce74\uc6b0\uce58\ubca0\uc774\uc2a4\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\ud0c0\ub0ac\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/benchmarks\/\" target=\"_blank\" rel=\"noopener\">\uc2a4\ucf00\uc77c\uc5c5 \uc2dc \ud604\uc800\ud788 \ud5a5\uc0c1\ub41c \uc131\ub2a5<\/a> MongoDB\uc640 \ube44\uad50.<\/p>\n<p>\ubca4\uce58\ub9c8\ud06c \uc678\uc5d0\ub3c4 Couchbase \uace0\uac1d\ub4e4\uc740 \uc0c1\ub2f9\ud55c \uc131\ub2a5 \ud5a5\uc0c1\uc744 \ubcf4\uace0\ud588\uc2b5\ub2c8\ub2e4:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/customers\/fico\/\" target=\"_blank\" rel=\"noopener\">FICO, \ubabd\uace0DB \ub300\uc2e0 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4\ub97c \uc120\ud0dd\ud55c \uc774\uc720<\/a> 1ms \ubbf8\ub9cc\uc758 \uc751\ub2f5 \uc2dc\uac04\uc744 \ub2ec\uc131\ud558\uae30 \uc704\ud574<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/customers\/linkedin\/\" target=\"_blank\" rel=\"noopener\">LinkedIn, MongoDB \ub300\uc2e0 Couchbase \uc120\ud0dd<\/a> \ub97c \uc0ac\uc6a9\ud558\uc5ec \ucd08\ub2f9 10m \uc774\uc0c1\uc758 \ucffc\ub9ac\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>MongoDB\uc758 \ucd5c\uc2e0 \ubc84\uc804\uc740 \uc774\uc804 \ubc84\uc804\uc5d0 \ube44\ud574 \uac1c\uc120\ub418\uc5c8\uc9c0\ub9cc \ud2b9\uc815 \uc2dc\ub098\ub9ac\uc624\uc5d0\uc11c\ub294 \uc5ec\uc804\ud788 \ub4a4\ucc98\uc9d1\ub2c8\ub2e4. MongoDB 8.0\uc740 \uc131\ub2a5 \ud5a5\uc0c1\uc744 \ud1b5\ud574 MongoDB 7.0\uc5d0 \ube44\ud574 \uc77d\uae30\/\uc4f0\uae30 \ud63c\ud569 \uc6cc\ud06c\ub85c\ub4dc\uc5d0\uc11c \ub354 \ube60\ub978 \uc18d\ub3c4\ub97c \ub2ec\uc131\ud588\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uc774\ub7ec\ud55c \uac1c\uc120\uc740 \uc774\uc804 \uc131\ub2a5\uc5d0 \ub300\ud55c \uc0c1\ub300\uc801\uc778 \uac83\uc774\uba70 \ub3c5\ub9bd\uc801\uc778 \ubca4\uce58\ub9c8\ud06c( <a href=\"https:\/\/benchant.com\/ranking\/database-ranking\" target=\"_blank\" rel=\"noopener\">BenchANT \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc21c\uc704<\/a>).<\/p>\n<h2 style=\"font-weight: 400;\">\uc0c9\uc778 \uc9c0\uc6d0<\/h2>\n<p>SQL++\ub294 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/create-right-index-get-right-performance\/\" target=\"_blank\" rel=\"noopener\">\uad11\ubc94\uc704\ud55c \uc778\ub371\uc2a4 \uc138\ud2b8<\/a>\uae30\ubcf8, \ubcf4\uc870, \ud569\uc131, \ubc30\uc5f4, \ubd80\ubd84, \ucee4\ubc84\ub9c1, FTS \ub4f1 \ub2e8\uc77c \uc5b8\uc5b4\uc5d0\uc11c \ubaa8\ub450 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ubabd\uace0\ub294 \uae30\ubcf8(<em>ON _ID<\/em>), \ubcf4\uc870, \ubcf5\ud569, \uba40\ud2f0\ud0a4, \ud14d\uc2a4\ud2b8, \ud574\uc2dc \uc778\ub371\uc2a4\ub97c \uc9c0\uc6d0\ud569\ub2c8\ub2e4. \uac15\ub825\ud558\uc9c0\ub9cc \uae4a\uac8c \uc911\ucca9\ub41c \ud544\ub4dc\ub098 \ud45c\ud604\uc2dd\uc744 \uc0c9\uc778\ud558\ub294 \ub370 \uc788\uc5b4\uc11c\ub294 SQL++\uc758 \uc720\uc5f0\uc131\uc774 \ub2e4\uc18c \ubd80\uc871\ud569\ub2c8\ub2e4.<\/p>\n<p>SQL++\uc5d0\uc11c \ubd80\ubd84 \uc778\ub371\uc2a4\ub97c \uc0ac\uc6a9\ud55c \uc608\uc81c\uc785\ub2c8\ub2e4:<\/p>\n<pre>CREATE INDEX idx_active_users ON users(email)\r\nWHERE active = TRUE;\r\n<\/pre>\n<p>\ubabd\uace0 \ubd80\ubd84 \uc778\ub371\uc2a4\ub3c4 \ube44\uc2b7\ud569\ub2c8\ub2e4:<\/p>\n<pre>db.users.createIndex(\r\n\u00a0 { email: 1 },\r\n\u00a0 { partialFilterExpression: { active: true } }\r\n);\r\n<\/pre>\n<h2 style=\"font-weight: 400;\">\uc870\uc778 \uae30\ub2a5<\/h2>\n<p>SQL++\ub294 \uc804\uccb4 JOIN \uad6c\ubb38(\uc548\ucabd, \uc67c\ucabd \ubc14\uae65\ucabd)\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4, <em>UNNEST<\/em>\ubc0f \uc870\ud569\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uad00\uacc4\ud615 \ucffc\ub9ac\uc5d0\uc11c \ubb38\uc11c\ub97c \uc77c\uae09 \uc2dc\ubbfc\uc73c\ub85c \ucde8\uae09\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc608\uc2dc:<\/p>\n<pre>SELECT u.name, o.total\r\nFROM users u\r\nJOIN orders o ON u.id = o.user_id\r\nWHERE o.total &gt; 100;\r\n<\/pre>\n<p>\ubabd\uace0 <em>$\uc870\ud68c<\/em> 5.0 \uc774\ud6c4 \ub354\uc6b1 \ud45c\ud604\ub825\uc774 \ud48d\ubd80\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc9c0\uc6d0\ud558\uc9c0\ub9cc, \uc5ec\uc804\ud788 <em>\uc67c\ucabd \uc678\ubd80<\/em> \uc804\uccb4 \uc870\uc778 \uad6c\ubb38\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.<\/p>\n<pre>db.orders.aggregate([\r\n\u00a0 { $match: { total: { $gt: 100 } } },\r\n\u00a0 { $lookup: {\r\n\u00a0 \u00a0 \u00a0 from: \"users\",\r\n\u00a0 \u00a0 \u00a0 localField: \"user_id\",\r\n\u00a0 \u00a0 \u00a0 foreignField: \"id\",\r\n\u00a0 \u00a0 \u00a0 as: \"user\"\r\n\u00a0 \u00a0 }\r\n\u00a0 },\r\n\u00a0 { $unwind: \"$user\" },\r\n\u00a0 { $project: { name: \"$user.name\", total: 1 } }\r\n]);\r\n<\/pre>\n<p>SQL++\ub294 \ub610\ud55c \ud45c\ud604\uc2dd\uc5d0 \ub300\ud55c \ub2e4\uc911 \uc870\uc778 \ubc0f \uc870\uc778\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4 - \ubabd\uace0\uc758 <em>$\uc870\ud68c<\/em> \ub294 \uc774\uc5d0 \ube44\ud574 \ub354 \uc81c\ud55c\uc801\uc785\ub2c8\ub2e4.<\/p>\n<h2 style=\"font-weight: 400;\">\uc9d1\uacc4 \uc9c0\uc6d0<\/h2>\n<p>SQL++\uc5d0\ub294 \ud45c\uc900 SQL\uacfc \ub9c8\ucc2c\uac00\uc9c0\ub85c GROUP BY, HAVING, \uc708\ub3c4\uc6b0 \ud568\uc218 \ubc0f \uc720\uc5f0\ud55c \ud45c\ud604\uc2dd\uc774 \ubaa8\ub450 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc608\uc2dc:<\/p>\n<pre>SELECT department, AVG(salary) AS avg_salary\r\nFROM employees\r\nGROUP BY department\r\nHAVING avg_salary &gt; 75000;\r\n<\/pre>\n<p>\ubabd\uace0\uc758 \uc9d1\uacc4 \ud30c\uc774\ud504\ub77c\uc778\ub3c4 \uac00\ub2a5\ud558\uc9c0\ub9cc \uc808\ucc28\uac00 \ub354 \ubcf5\uc7a1\ud569\ub2c8\ub2e4. \ub2e4\uc74c\uacfc \uac19\uc740 \ub2e8\uacc4\ub97c \uc5f0\uacb0\ud569\ub2c8\ub2e4. <em>$group<\/em>, <em>$match<\/em>, <em>$\ud504\ub85c\uc81d\ud2b8<\/em>\ub4f1..:<\/p>\n<pre>db.employees.aggregate([\r\n\u00a0 { $group: { _id: \"$department\", avg_salary: { $avg: \"$salary\" } } },\r\n\u00a0 { $match: { avg_salary: { $gt: 75000 } } }\r\n]);\r\n<\/pre>\n<p>\ub458 \ub2e4 \uac15\ub825\ud558\uc9c0\ub9cc SQL++\ub294 \uc77c\ubc18\uc801\uc73c\ub85c SQL \uc0ac\uc6a9\uc790\uc5d0\uac8c \ub354 \uac04\uacb0\ud558\uace0 \uce5c\uc219\ud558\uba70 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. <a href=\"https:\/\/docs.couchbase.com\/cloud\/n1ql\/n1ql-language-reference\/windowfun.html\" target=\"_blank\" rel=\"noopener\">\ucc3d \uae30\ub2a5<\/a> \ubabd\uace0\uc758 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\ub294 \ubd80\uc871\ud55c \ubd80\ubd84\uc774 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2 style=\"font-weight: 400;\">\ud544\ud130\ub9c1 \ubc0f \uc220\uc5b4 \ub17c\ub9ac<\/h2>\n<p>SQL++\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ubcf5\uc7a1\ud55c \ud544\ud130\ub9c1\uc744 \uc644\ubcbd\ud558\uac8c \uc9c0\uc6d0\ud569\ub2c8\ub2e4. <em>AND<\/em>, <em>\ub610\ub294<\/em>, <em>NOT<\/em>, <em>\uc0ac\uc774<\/em>, <em>IN<\/em>, \ud558\uc704 \ucffc\ub9ac \ubc0f \uc784\uc758\uc758 \ud45c\ud604\uc2dd\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc608\uc2dc:<\/p>\n<pre>SELECT name\r\nFROM users\r\nWHERE (age BETWEEN 21 AND 65)\r\n\u00a0 AND (email LIKE \"%@example.com\")\r\n\u00a0 AND (status IN [\"active\", \"pending\"]);\r\n<\/pre>\n<p>\ubabd\uace0\ub294 \ub2e4\uc74c\uc5d0\uc11c \ud544\ud130\ub9c1\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. <em>find()<\/em> \uadf8\ub9ac\uace0 <em>$match<\/em> \ub2e8\uacc4\uc640 \ube44\uc2b7\ud558\uc9c0\ub9cc \uad6c\ubb38\uc774 \ub354 \uc7a5\ud669\ud558\uace0 JSON \uae30\ubc18\uc785\ub2c8\ub2e4:<\/p>\n<pre>db.users.find({\r\n\u00a0 age: { $gte: 21, $lte: 65 },\r\n\u00a0 email: { $regex: \"@example\\\\.com$\" },\r\n\u00a0 status: { $in: [\"active\", \"pending\"] }\r\n});\r\n<\/pre>\n<p>\ub458 \ub2e4 \ubcf5\uc7a1\ud55c \uc220\uc5b4\ub97c \ud45c\ud604\ud560 \uc218 \uc788\uc9c0\ub9cc SQL++\ub294 \ub9e4\uc6b0 \ubcf5\uc7a1\ud55c \ubd80\uc6b8 \ub17c\ub9ac\uc5d0 \ub354 \uac00\ub3c5\uc131\uc774 \ub192\uc740 \uacbd\ud5a5\uc774 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2 style=\"font-weight: 400;\">\ud558\uc704 \ucffc\ub9ac \uc9c0\uc6d0<\/h2>\n<p>SQL++\ub294 \uc0c1\uad00\uad00\uacc4, \ube44\uc0c1\uad00\uad00\uacc4, \uc2a4\uce7c\ub77c \ub4f1 \ubaa8\ub4e0 \ud558\uc704 \ucffc\ub9ac\ub97c \uc9c0\uc6d0\ud569\ub2c8\ub2e4, <em>\uc874\uc7ac<\/em>\/<em>\uc874\uc7ac\ud558\uc9c0 \uc54a\uc74c<\/em>-\uc608\uc0c1\ud560 \uc218 \uc788\ub294 \ubaa8\ub4e0 \ud328\ud134.<\/p>\n<p>\uc608\uc2dc:<\/p>\n<pre>SELECT name\r\nFROM users u\r\nWHERE EXISTS (\r\n\u00a0 SELECT 1 FROM orders o\r\n\u00a0 WHERE o.user_id = u.id AND o.total &gt; 100\r\n);\r\n<\/pre>\n<p>\ubabd\uace0\ub294 \uac19\uc740 \ubc29\uc2dd\uc73c\ub85c \ud558\uc704 \ucffc\ub9ac\ub97c \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c \ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud558\uc5ec \ub2e4\uc2dc \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4. <em>$\uc870\ud68c<\/em>, <em>$\ud328\uc2ef<\/em>\ub610\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ucf54\ub4dc\uc758 \uc5ec\ub7ec \ucffc\ub9ac\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. SQL++\uac00 \ud6e8\uc52c \ub354 \uac15\ub825\ud558\uace0 \uc790\uc5f0\uc2a4\ub7ec\uc6b4 \uc601\uc5ed \uc911 \ud558\ub098\uc785\ub2c8\ub2e4.<\/p>\n<h2 style=\"font-weight: 400;\">\ub370\uc774\ud130 \uc870\uc791 \uc9c0\uc6d0<\/h2>\n<p>SQL++\ub294 \uc804\uccb4 <em>\uc0bd\uc785<\/em>, <em>\uc5c5\ub370\uc774\ud2b8<\/em>, <em>\uc0ad\uc81c<\/em>, <em>MERGE<\/em> - \ubaa8\ub4e0 \ud45c\uc900 \ub370\uc774\ud130 \uc870\uc791 \uc791\uc5c5\uc744 \uc218\ud589\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc608 <em>\uc5c5\ub370\uc774\ud2b8<\/em>:<\/p>\n<pre>UPDATE users\r\nSET status = \"inactive\"\r\nWHERE last_login &lt; \"2024-01-01\";\r\n<\/pre>\n<p>\ubabd\uace0\ub294 \ub610\ud55c \ub2e4\uc74c\uc744 \ud1b5\ud574 \ub370\uc774\ud130 \uc870\uc791\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. <em>insertOne<\/em>, <em>insertMany<\/em>, <em>updateOne<\/em>, <em>updateMany<\/em>, <em>deleteOne<\/em>, <em>deleteMany<\/em>\ubc0f <em>replaceOne<\/em>. \uae30\ub2a5\uc740 \uacac\uace0\ud558\uc9c0\ub9cc \uc791\uc5c5\uc740 \ud558\ub098\uc758 \ucffc\ub9ac \uc5b8\uc5b4\ub85c \ud1b5\ud569\ub418\uc9c0 \uc54a\uace0 \ubcc4\ub3c4\uc758 API \ud638\ucd9c\ub85c \uc774\ub8e8\uc5b4\uc9d1\ub2c8\ub2e4.<\/p>\n<p>\uc5c5\ub370\uc774\ud2b8 \uc608\uc2dc:<\/p>\n<pre>db.users.updateMany(\r\n\u00a0 { last_login: { $lt: new Date(\"2024-01-01\") } },\r\n\u00a0 { $set: { status: \"inactive\" } }\r\n);\r\n<\/pre>\n<p>\ub458 \ub2e4 \uac00\ub2a5\ud558\uc9c0\ub9cc SQL++\ub294 \ub370\uc774\ud130 \ucffc\ub9ac \ubc0f \uc218\uc815\uc744 \uc704\ud55c \uc77c\uad00\ub41c \ub2e8\uc77c \uc5b8\uc5b4\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n<h2 style=\"font-weight: 400;\">\uac70\ub798 \uc9c0\uc6d0<\/h2>\n<p>SQL++\ub294 \ub2e4\uc911 \ubb38 ACID \ud2b8\ub79c\uc7ad\uc158\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4(\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc758 <em>\uac70\ub798 \uc2dc\uc791<\/em>, <em>\ucee4\ubc0b<\/em>, <em>\ub864\ubc31<\/em>), \ud2b8\ub79c\uc7ad\uc158\uc740 \uc5ec\ub7ec \ubb38\uc11c, \uceec\ub809\uc158, \uc2ec\uc9c0\uc5b4 \uc5ec\ub7ec \uba85\uc138\uc11c\uc5d0 \uac78\uccd0 \uc788\uc744 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc608\uc2dc:<\/p>\n<pre>BEGIN TRANSACTION;\r\nUPDATE accounts SET balance = balance - 100 WHERE id = \"user123\";\r\nUPDATE accounts SET balance = balance + 100 WHERE id = \"user456\";\r\nCOMMIT;\r\n<\/pre>\n<p>Mongo\ub294 \ubc84\uc804 4.0\uc5d0\uc11c \ub2e4\uc911 \ubb38\uc11c ACID \ud2b8\ub79c\uc7ad\uc158\uc744 \ub3c4\uc785\ud588\uc2b5\ub2c8\ub2e4. \uc774 \ud2b8\ub79c\uc7ad\uc158\uc740 \uc9c0\uc6d0\ub418\uc9c0\ub9cc, Mongo \ucffc\ub9ac \uc5b8\uc5b4 \uc790\uccb4\uc758 \uc77c\ubd80\uac00 \uc544\ub2cc \uc138\uc158 \uac1d\uccb4 \ub610\ub294 mongosh\ub97c \uc0ac\uc6a9\ud558\ub294 \ub4dc\ub77c\uc774\ubc84\uc5d0\uc11c \uc2dc\uc791\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>\uc608\uc81c(Node.js\uc758 \ub4dc\ub77c\uc774\ubc84 \uae30\ubc18):<\/p>\n<pre>const session = client.startSession();\r\nsession.startTransaction();\r\ntry {\r\n\u00a0 db.accounts.updateOne({ id: \"user123\" }, { $inc: { balance: -100 } }, { session });\r\n\u00a0 db.accounts.updateOne({ id: \"user456\" }, { $inc: { balance: 100 } }, { session });\r\n\u00a0 await session.commitTransaction();\r\n} catch (error) {\r\n\u00a0 await session.abortTransaction();\r\n}\r\nsession.endSession();\r\n<\/pre>\n<p>\uc694\uc57d: \ub458 \ub2e4 ACID \ud2b8\ub79c\uc7ad\uc158\uc744 \uc9c0\uc6d0\ud558\uc9c0\ub9cc SQL++\ub97c \uc0ac\uc6a9\ud558\uba74 \ucffc\ub9ac \uc5b8\uc5b4 \uc790\uccb4 \ub0b4\uc5d0\uc11c \uc120\uc5b8\uc801\uc73c\ub85c \ud45c\ud604\ud560 \uc218 \uc788\uc5b4 \ub354 \uc27d\uace0 \uba85\ud655\ud569\ub2c8\ub2e4.<\/p>\n<h2 style=\"font-weight: 400;\">\uc624\ub958 \ucc98\ub9ac<\/h2>\n<p>SQL++\ub294 \ucffc\ub9ac \uc2e4\ud328 \uc2dc \uad6c\uc870\ud654\ub41c \uc624\ub958 \ucf54\ub4dc\uc640 \uba54\uc2dc\uc9c0\ub97c \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0 \ud45c\uc2dc\ud558\uba70, SDK\uc640 \ucffc\ub9ac \uba54\ud0c0\ub370\uc774\ud130\ub97c \ud1b5\ud574 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub610\ud55c \ub3d9\uc791\uc744 \uc81c\uc5b4\ud558\uae30 \uc704\ud574 \ubc29\uc5b4\uc801\uc73c\ub85c \ucffc\ub9ac\ub97c \uc791\uc131\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4(\uc608: IF EXISTS, IF MISSING, CASE \ud45c\ud604\uc2dd).<\/p>\n<p>\uc608(\ubc29\uc5b4 \ub85c\uc9c1):<\/p>\n<pre>UPDATE users\r\nSET last_login = CURRENT_TIMESTAMP\r\nWHERE user_id = \"user123\"\r\nAND last_login IS NOT MISSING;\r\n<\/pre>\n<p>\uc624\ub958 \ucf54\ub4dc\ub294 \uc5ec\uae30\uc5d0 \ubb38\uc11c\ud654\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4: <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/n1ql-error-codes.html\" target=\"_blank\" rel=\"noopener\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 SQL++ \uc624\ub958 \ucf54\ub4dc<\/a>.<\/p>\n<p>\ub610\ud55c, \ucffc\ub9ac\ub098 \uba85\ub839\uc774 \uc2e4\ud328\ud558\uba74 \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0 \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\ub294 \ub4dc\ub77c\uc774\ubc84 \uc218\uc900\uc758 \uc624\ub958 \ucc98\ub9ac\uc5d0 \uc758\uc874\ud569\ub2c8\ub2e4. Mongo\uc758 \uc9d1\uacc4 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ucffc\ub9ac \ub0b4 \uc624\ub958 \ucc98\ub9ac\ub3c4 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc608(\ubabd\uace0 \ubc29\uc5b4 \uc5c5\ub370\uc774\ud2b8):<\/p>\n<pre>db.users.updateOne(\r\n\u00a0 { user_id: \"user123\", last_login: { $exists: true } },\r\n\u00a0 { $set: { last_login: new Date() } }\r\n);\r\n<\/pre>\n<p>\uc694\uc57d: SQL++\uc640 Mongo\ub294 \ubaa8\ub450 \uc678\ubd80(\ub4dc\ub77c\uc774\ubc84 \uc218\uc900) \uc624\ub958 \ucc98\ub9ac\uc5d0 \uc758\uc874\ud569\ub2c8\ub2e4. \ubc29\uc5b4\uc801\uc778 \ucffc\ub9ac \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc77c\ubc18\uc801\uc778 \uc624\ub958\ub97c \uc644\ud654\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2 style=\"font-weight: 400;\">\ud655\uc7a5\uc131<\/h2>\n<p>SQL++\uc5d0\uc11c\ub294 SQL++ \uc790\uccb4\ub85c \uc791\uc131\ub41c \uc0ac\uc6a9\uc790 \uc815\uc758 \ud568\uc218(UDF)\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ubcf5\uc7a1\ud55c \ub85c\uc9c1\uc744 \ucea1\uc290\ud654\ud558\uace0, \ud45c\ud604\uc2dd\uc744 \uc7ac\uc0ac\uc6a9\ud558\uace0, \ucffc\ub9ac\ub97c \uac04\uc18c\ud654\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>UDF \uc608\uc2dc:<\/p>\n<pre>CREATE FUNCTION get_discount(total FLOAT)\r\nRETURNS FLOAT\r\nAS\r\n\u00a0 CASE WHEN total &gt; 500 THEN 0.10\r\n \u00a0 \u00a0 \u00a0 WHEN total &gt; 100 THEN 0.05\r\n \u00a0 \u00a0 \u00a0 ELSE 0.0\r\n\u00a0 END;\r\n<\/pre>\n<p>\uc0ac\uc6a9\ubc95:<\/p>\n<pre>SELECT customer_id, total, get_discount(total) AS discount\r\nFROM orders;\r\n<\/pre>\n<p>\ubabd\uace0\uc5d0\ub294 \ucffc\ub9ac \uc5b8\uc5b4\ub098 \uc9d1\uacc4 \ud30c\uc774\ud504\ub77c\uc778\uc5d0 \ucffc\ub9ac \ub0b4 UDF\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \ub300\uc2e0 <em>$\uae30\ub2a5<\/em> (\ubabd\uace0DB 4.4\uc5d0 \ub3c4\uc785)\ub97c \uc0ac\uc6a9\ud558\uba74 \uc9d1\uacc4 \ub0b4\uc5d0\uc11c JavaScript \ud568\uc218\ub97c \uc2e4\ud589\ud560 \uc218 \uc788\uc9c0\ub9cc \ud6a8\uc728\uc131\uc774 \ub5a8\uc5b4\uc9c0\uace0 \uc774\uc2dd\uc131\uc5d0 \uc81c\ud55c\uc774 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre>db.orders.aggregate([\r\n\u00a0 {\r\n\u00a0 \u00a0 $addFields: {\r\n\u00a0 \u00a0 \u00a0 discount: {\r\n\u00a0 \u00a0 \u00a0 \u00a0 $function: {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 body: function(total) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (total &gt; 500) return 0.10;\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (total &gt; 100) return 0.05;\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return 0.0;\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 },\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 args: [\"$total\"],\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 lang: \"js\"\r\n\u00a0 \u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 }\r\n\u00a0 }\r\n]);\r\n<\/pre>\n<p>\uc694\uc57d: SQL++ UDF\ub294 \uae30\ubcf8\uc801\uc774\uace0 \ud6a8\uc728\uc801\uc774\uba70 \uc774\uc2dd\uc131\uc774 \ub6f0\uc5b4\ub098\uba70, Mongo\uc758 <em>$\uae30\ub2a5<\/em> \ub294 JavaScript\ub97c \uc0ac\uc6a9\ud558\uba70 \uc131\ub2a5 \uc800\ud558\uac00 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2 style=\"font-weight: 400;\">\uc120\uc5b8\uc801 \uc131\uaca9<\/h2>\n<p>SQL++\ub294 \uc644\uc804\ud788 \uc120\uc5b8\uc801\uc785\ub2c8\ub2e4. \uc6d0\ud558\ub294 \uac83\uc744 \ud45c\ud604\ud558\ub294 \uac83\uc774\uc9c0 \uacc4\uc0b0\ud558\ub294 \ubc29\ubc95\uc744 \ud45c\ud604\ud558\ub294 \uac83\uc774 \uc544\ub2d9\ub2c8\ub2e4. \ucffc\ub9ac \ucd5c\uc801\ud654 \ub3c4\uad6c\uc5d0 \uc758\uc874\ud558\uc5ec \ucd5c\uc0c1\uc758 \uc2e4\ud589 \uacc4\ud68d\uc744 \uacb0\uc815\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c \ucffc\ub9ac \uc791\uc131\uacfc \uc720\uc9c0 \uad00\ub9ac\uac00 \ub354 \uac04\ub2e8\ud574\uc9d1\ub2c8\ub2e4.<\/p>\n<p>Mongo\uc758 \uc9d1\uacc4 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ubcf4\ub2e4 \uc808\ucc28\uc801\uc774\uc5b4\uc11c \uc815\ud655\ud55c \uc791\uc5c5 \uc21c\uc11c\ub97c \uc9c0\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4(<em>$match<\/em>, <em>$group<\/em>, <em>$\ud504\ub85c\uc81d\ud2b8<\/em>, <em>$sort<\/em>\ub4f1). \ubcf5\uc7a1\ud55c \ub17c\ub9ac\uc758 \uacbd\uc6b0 \uc6d0\ud558\ub294 \uacb0\uacfc\uac00 \uc544\ub2c8\ub77c \ub370\uc774\ud130 \ud750\ub984 \uce21\uba74\uc5d0\uc11c \uc0dd\uac01\ud574\uc57c \ud558\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4.<\/p>\n<h2 style=\"font-weight: 400;\">\ud734\ub300\uc131<\/h2>\n<p>SQL++\ub294 JSON \ud655\uc7a5\uc774 \ud3ec\ud568\ub41c SQL\uc744 \uae30\ubc18\uc73c\ub85c \ud569\ub2c8\ub2e4. SQL\uc744 \uc54c\uace0 \uc788\ub2e4\uba74 SQL++\ub97c \uc27d\uac8c \ubc30\uc6b8 \uc218 \uc788\uc73c\uba70, \ub300\ubd80\ubd84\uc758 \uc9c0\uc2dd\uc774 \uadf8\ub300\ub85c \uc774\uc5b4\uc9d1\ub2c8\ub2e4. \ub610\ud55c \uc774 \uc5b8\uc5b4\ub294 \ud074\ub77c\uc6b0\ub4dc, \uc790\uccb4 \uad00\ub9ac\ud615, \uc5d0\uc9c0 \ub4f1 Couchbase \ubc30\ud3ec \uc804\ubc18\uc5d0\uc11c \uc774\uc2dd\ud560 \uc218 \uc788\ub3c4\ub85d \uc124\uacc4\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Mongo\uc758 \ucffc\ub9ac \uc5b8\uc5b4\ub294 MongoDB\uc5d0 \ud2b9\ud654\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uadf8 \uad6c\ubb38\uc740 SQL\uacfc \uc720\uc0ac\ud558\uc9c0 \uc54a\uc740 JSON \uae30\ubc18\uc774\uba70, \ub300\ubd80\ubd84 \ub2e4\ub978 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub85c \uc804\uc1a1\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. Mongo \uc0dd\ud0dc\uacc4 \ub0b4\ubd80\uc5d0\uc11c\ub294 \ud6cc\ub96d\ud558\uc9c0\ub9cc \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4, Couchbase \ub610\ub294 \ud074\ub77c\uc6b0\ub4dc \ub370\uc774\ud130 \uc6e8\uc5b4\ud558\uc6b0\uc2a4\uc640 \uac19\uc740 \uc2dc\uc2a4\ud15c\uc73c\ub85c \uc774\uc2dd\ud558\uae30\ub294 \uc5b4\ub835\uc2b5\ub2c8\ub2e4.<\/p>\n<h2 style=\"font-weight: 400;\">\ud398\uc774\uc9c0 \ub9e4\uae40 \uc9c0\uc6d0<\/h2>\n<p>SQL++\ub294 \ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud398\uc774\uc9c0 \ub9e4\uae40\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. <em>LIMIT<\/em> \uadf8\ub9ac\uace0 <em>\uc624\ud504\uc14b<\/em> - \ud45c\uc900 SQL \uc2a4\ud0c0\uc77c:<\/p>\n<pre>SELECT \uc774\ub984\r\nFROM \uc0ac\uc6a9\uc790\r\nORDER BY \uc774\ub984\r\n\uc81c\ud55c 10 \uc624\ud504\uc14b 20;\r\n<\/pre>\n<p>\ubabd\uace0\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ud398\uc774\uc9c0 \ub9e4\uae40\ub3c4 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. <em>.limit()<\/em> \uadf8\ub9ac\uace0 <em>.skip()<\/em>:<\/p>\n<pre>db.users.find({})\r\n\u00a0 .sort({ name: 1 })\r\n\u00a0 .skip(20)\r\n\u00a0 .limit(10);\r\n<\/pre>\n<p>\ub458 \ub2e4 \uae30\ubcf8\uc801\uc778 \ud398\uc774\uc9c0 \ub9e4\uae40\uc744 \uc798 \ucc98\ub9ac\ud569\ub2c8\ub2e4.<\/p>\n<p>\uadf8\ub7ec\ub098 SQL++\ub294 \ucc3d \ud568\uc218(\uc608 <em>row_number() over (...)<\/em>), \ubcf4\ub2e4 \uace0\uae09 \ud398\uc774\uc9c0 \ub9e4\uae40 \ubc0f \ucee4\uc11c \uae30\ubc18 \ud328\ud134\uc744 \ud5c8\uc6a9\ud558\ub294 \ubc18\uba74, \ubabd\uace0\ub294 \uc774\ub97c \uc2dc\ubbac\ub808\uc774\uc158\ud558\uae30 \uc704\ud574 \ucd94\uac00\uc801\uc778 \ud30c\uc774\ud504\ub77c\uc778 \ub2e8\uacc4 \ub610\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub85c\uc9c1\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n<h2 style=\"font-weight: 400;\">\uc2a4\ud0a4\ub9c8 \uc778\ud2b8\ub85c\uc2a4\ud399\uc158<\/h2>\n<p>SQL++\/Couchbase\ub294 \ub2e4\uc74c\uc744 \ud1b5\ud574 \uc790\ub3d9 \uc2a4\ud0a4\ub9c8 \uac80\uc0c9\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. <em>INFER<\/em> \uba85\ub839\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uce74\uc6b0\uce58\ubca0\uc774\uc2a4\ub294 \uc2a4\ud0a4\ub9c8\uac00 \uc720\uc5f0\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4, <em>INFER<\/em> \ub97c \uc0ac\uc6a9\ud558\uba74 \uceec\ub809\uc158\uc758 \ubb38\uc11c\ub97c \ubd84\uc11d\ud558\uace0 \ud655\ub960\uc801 \uc2a4\ud0a4\ub9c8\ub97c \uc0dd\uc131\ud558\uc5ec \uc874\uc7ac\ud558\ub294 \ud544\ub4dc, \uc720\ud615, \uc911\ucca9 \ubc0f \ubc1c\uc0dd \ube44\uc728\uc744 \ud45c\uc2dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc608\uc2dc:<\/p>\n<pre>INFER `travel-sample`.inventory.airline WITH { \"sample_size\": 1000 };\r\n<\/pre>\n<p>\ud544\ub4dc \uc774\ub984, \uc720\ud615 \ubc0f \ubc1c\uc0dd \ube44\uc728\uc744 \ud3ec\ud568\ud558\uc5ec \ud56d\uacf5\uc0ac \uceec\ub809\uc158\uc5d0 \ub300\ud55c \uc815\ubcf4\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4:<\/p>\n<pre>[\r\n\u00a0 [\r\n\u00a0 \u00a0 {\r\n\u00a0 \u00a0 \u00a0 \"#docs\": 187,\r\n\u00a0 \u00a0 \u00a0 \"$schema\": \"https:\/\/json-schema.org\/draft-06\/schema\",\r\n\u00a0 \u00a0 \u00a0 \"Flavor\": \"`type` = \\\"airline\\\"\",\r\n\u00a0 \u00a0 \u00a0 \"properties\": {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \"callsign\": { ... }, \"country\": { ... }, \"name\": { ... }, ...\r\n\u00a0 \u00a0 \u00a0 },\r\n\u00a0 \u00a0 \u00a0 \"type\": \"object\"\r\n\u00a0 \u00a0 }\r\n\u00a0 ]\r\n]\r\n<\/pre>\n<p>\ubabd\uace0\uc5d0\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc9c1\uc811 \ucffc\ub9ac \uc5b8\uc5b4\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. <em>INFER<\/em>\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc9c0\ub9cc, \ubabd\uace0DB Atlas\ub294 UI\uc5d0\uc11c \uc2a4\ud0a4\ub9c8 \ud0d0\uc0c9\uae30\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n<p>\uac00\uc7a5 \uac00\uae4c\uc6b4 \uc635\uc158:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><em>db.collection.aggregate([ { $sample: { size: N } } ]) + \uc218\ub3d9 \uac80\uc0ac<\/em><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\ud0c0\uc0ac \ub3c4\uad6c<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2 style=\"font-weight: 400;\">\ud234\ub9c1 \ubc0f IDE \uc9c0\uc6d0<\/h2>\n<p>SQL++\uc5d0\uc11c \uc9c0\uc6d0\ub429\ub2c8\ub2e4:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc6f9 UI \ucffc\ub9ac \uc6cc\ud06c\ubca4\uce58<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">VS \ucf54\ub4dc SQL++ \ud655\uc7a5<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">JetBrains IDE(\ud50c\ub7ec\uadf8\uc778)<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">REST API \/ CLI<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc178<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\ubabd\uace0\uc758 \ud234\ub9c1\uc5d0\ub294 \ub2e4\uc74c\uc774 \ud3ec\ud568\ub429\ub2c8\ub2e4:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\ubabd\uace0DB \ub098\uce68\ubc18(GUI)<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\ubabd\uace0\uc258 \/ \ubabd\uace0\uc26c<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">MongoDB Atlas UI<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">VS \ucf54\ub4dc \ubabd\uace0DB \ud655\uc7a5<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\ub2e4\ub978 \ub3c4\uad6c\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \ub458 \ub2e4 \uc88b\uc740 \ub3c4\uad6c\uac00 \uc788\uc2b5\ub2c8\ub2e4. SQL++\ub294 SQL \uce5c\ud654\uc801\uc778 \ub3c4\uad6c(DataGrip, BI \ub3c4\uad6c \ub4f1)\uc640 \ub354 \uc798 \ud1b5\ud569\ub429\ub2c8\ub2e4. \ubabd\uace0 \ub3c4\uad6c\ub294 \ubabd\uace0\uc5d0 \ub354 \ud2b9\ud654\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2 style=\"font-weight: 400;\">\ucee4\ubba4\ub2c8\ud2f0 \ubc0f \ubb38\uc11c<\/h2>\n<p>SQL++ \/ Couchbase:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\uacf5\uc2dd \ubb38\uc11c: <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/index.html\" target=\"_blank\" rel=\"noopener\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 SQL++ \ucc38\uc870<\/a><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\ud65c\ubc1c\ud55c Couchbase \uac1c\ubc1c\uc790 \ucee4\ubba4\ub2c8\ud2f0<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\ube14\ub85c\uadf8, \ud3ec\ub7fc, \uc2a4\ud0dd \uc624\ubc84\ud50c\ub85c, \ub514\uc2a4\ucf54\ub4dc<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">SQL++\ub294 \uc775\uc219\ud55c SQL\uc744 \uae30\ubc18\uc73c\ub85c \ud558\ubbc0\ub85c \uae30\uc874 SQL \ub9ac\uc18c\uc2a4\ub3c4 \uc801\uc6a9\ub429\ub2c8\ub2e4.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\ubabd\uace0:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\uacf5\uc2dd \ubb38\uc11c: MongoDB \ucffc\ub9ac \uc5b8\uc5b4 \ucc38\uc870<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\ub300\uaddc\ubaa8 \ucee4\ubba4\ub2c8\ud2f0<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\ub2e4\uc591\ud55c \ud29c\ud1a0\ub9ac\uc5bc, \uac15\uc88c, \uc11c\uc801<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\uc6f9 \uac1c\ubc1c\/\uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8 \ucee4\ubba4\ub2c8\ud2f0\uc5d0\uc11c \ub9ce\uc774 \uc0ac\uc6a9\ub428<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Mongo\ub294 \ub354 \ud070 \ucee4\ubba4\ub2c8\ud2f0\ub97c \uac00\uc9c0\uace0 \uc788\uc9c0\ub9cc(\ub2e8\uc21c\ud788 \ub354 \ud3ed\ub113\uc740 \ucc44\ud0dd\uc73c\ub85c \uc778\ud574), SQL++\ub294 SQL\uc5d0 \uce5c\uc219\ud558\uace0 \uc810\uc810 \ub354 \ud65c\ubc1c\ud574\uc9c0\ub294 Couchbase \uac1c\ubc1c\uc790 \uc5d0\ucf54\uc2dc\uc2a4\ud15c\uc758 \uc774\uc810\uc744 \ub204\ub9ac\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2 style=\"font-weight: 400;\">\uc571 \ud504\ub808\uc784\uc6cc\ud06c\uc640 \ud1b5\ud569<\/h2>\n<p>SQL++\/Couchbase\ub294 \ub2e4\uc74c\uc744 \ud1b5\ud574 \uc9c0\uc6d0\ub429\ub2c8\ub2e4:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\uc8fc\uc694 \uc5b8\uc5b4\uc758 SDK: Java, .NET(C#), Node.js, Python, Go, C++, Scala<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">ODBC \/ JDBC \ub4dc\ub77c\uc774\ubc84 \u2192 BI \ub3c4\uad6c(Tableau, Power BI, Excel, Looker)\uc5d0\uc11c \uc791\ub3d9\ud569\ub2c8\ub2e4.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">REST API<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\uc131\uc7a5\ud558\ub294 \uc5d0\ucf54\uc2dc\uc2a4\ud15c <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/developers\/integrations\/\" target=\"_blank\" rel=\"noopener\">\ud1b5\ud569<\/a>\uc2a4\ud504\ub9c1 \ub370\uc774\ud130, EF \ucf54\uc5b4, \ucffc\ucee4\uc2a4 \ub4f1<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\ubabd\uace0\ub294 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\uac70\uc758 \ubaa8\ub4e0 \uc8fc\uc694 \uc5b8\uc5b4\uc5d0 \ub300\ud55c \uacf5\uc2dd \ub4dc\ub77c\uc774\ubc84<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\uac1c\ubc1c\uc790\ub97c \uc704\ud55c \uac15\ub825\ud55c \uc5d0\ucf54\uc2dc\uc2a4\ud15c<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\ubabd\uace0\ub294 \ub354 \ud070 \uc5d0\ucf54\uc2dc\uc2a4\ud15c\uc744 \uac00\uc9c0\uace0 \uc788\uc9c0\ub9cc, \uc77c\ubc18\uc801\uc73c\ub85c SQL \uac1c\ubc1c\uc790\uc5d0\uac8c\ub294 SQL++\uac00 \ub354 \uce5c\uc219\ud569\ub2c8\ub2e4.<\/p>\n<h2 style=\"font-weight: 400;\">\ud45c\uc900 \uc900\uc218<\/h2>\n<p>SQL++\ub294 SQL\uc5d0\uc11c \ud30c\uc0dd\ub41c \uc5b8\uc5b4\uc785\ub2c8\ub2e4:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">JSON \ubb38\uc11c, \ubc30\uc5f4, \uc911\ucca9\uc744 \uc704\ud55c \ud655\uc7a5 \uae30\ub2a5\uc744 \uac16\ucd98 ANSI SQL \uae30\ubc18<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\ud45c\uc900 SQL \uae30\uc220\uc744 \uac00\uc838\uc640\uc11c \ubc14\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\uae30\uc874\uc758 \ub9ce\uc740 SQL \uae30\ubc18 \ub3c4\uad6c\uc640 \ud328\ud134\uc774 \uc801\uc6a9\ub429\ub2c8\ub2e4.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\ubabd\uace0\uc758 \ucffc\ub9ac \uc5b8\uc5b4\ub294 \ube44\ud45c\uc900 \uc5b8\uc5b4\uc785\ub2c8\ub2e4:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">JSON \uad6c\ubb38 \ubc0f \uc5f0\uc0b0\uc790 \uae30\ubc18<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">ANSI SQL\uc5d0 \uc9c1\uc811 \ub9e4\ud551\ud558\uc9c0 \uc54a\uc74c<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Mongo \uad00\ub828 \ucffc\ub9ac \ud328\ud134 \ud559\uc2b5 \ud544\uc694<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>SQL \ud638\ud658\uc131 \ubc0f \ud45c\uc900 \uc815\ub82c\uc744 \uc6d0\ud55c\ub2e4\uba74 SQL++\ub97c \uc0ac\uc6a9\ud558\uc138\uc694. Mongo \uc804\uc6a9 \uc5b8\uc5b4\uc5d0 \uc775\uc219\ud558\ub2e4\uba74 Mongo\uc758 \uc811\uadfc \ubc29\uc2dd\uc774 \ud6a8\uacfc\uc801\uc774\uc9c0\ub9cc \uc774\uc2dd\ud558\uae30\uac00 \ub354 \uc5b4\ub835\uc2b5\ub2c8\ub2e4.<\/p>\n<hr \/>\n<h2 style=\"font-weight: 400;\">\uc694\uc57d<\/h2>\n<p>SQL++\ub294 SQL\uc5d0 \uc775\uc219\ud55c \uac1c\ubc1c\uc790\uc5d0\uac8c \uc801\ud569\ud569\ub2c8\ub2e4. SQL\uc758 \uc0c1\uc704 \uc9d1\ud569\uc774\ubbc0\ub85c \uae30\uc874 SQL \uc9c0\uc2dd\uc774 \uadf8\ub300\ub85c \uc774\uc5b4\uc9d1\ub2c8\ub2e4.<\/p>\n<p>MongoDB\uc758 \ucffc\ub9ac \uc5b8\uc5b4\ub294 \ubcf4\ub2e4 \uc804\ubb38\uc801\uc774\uace0 \uc808\ucc28\uc801\uc774\uc5b4\uc11c \uac15\ub825\ud560 \uc218 \uc788\uc9c0\ub9cc \ub2e4\ub978 \uc0ac\uace0\ubc29\uc2dd\uc744 \uc694\uad6c\ud558\uae30\ub3c4 \ud569\ub2c8\ub2e4.<\/p>\n<p>\uc804\uccb4 \uae30\uc900 \ubaa9\ub85d\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4:<\/p>\n<table>\n<tbody>\n<tr>\n<td><strong>\uc21c\uc704<\/strong><\/td>\n<td><strong>\uae30\uc900 \uc774\ub984<\/strong><\/td>\n<td><strong>\uc801\uc6a9 \ubc29\ubc95<\/strong><\/td>\n<td><strong>\uc911\uc694\ud55c \uc774\uc720<\/strong><\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>\ud45c\ud604\ub825<\/td>\n<td>\uc5bc\ub9c8\ub098 \ub9ce\uc740 \uc720\ud615\uc758 \ucffc\ub9ac\ub97c \uc791\uc131\ud560 \uc218 \uc788\ub294\uc9c0 \ud3c9\uac00\ud569\ub2c8\ub2e4.<\/td>\n<td>\ub370\uc774\ud130 \uc791\uc5c5 \ucc98\ub9ac\uc758 \uc720\uc5f0\uc131 \uacb0\uc815<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>\uac00\ub3c5\uc131<\/td>\n<td>\uba85\ud655\uc131\uc744 \uc704\ud574 \uc0d8\ud50c \ucffc\ub9ac \uac80\ud1a0<\/td>\n<td>\ud559\uc2b5 \uace1\uc120 \ubc0f \uc720\uc9c0 \uad00\ub9ac\uc5d0 \uc601\ud5a5\uc744 \ubbf8\uce69\ub2c8\ub2e4.<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>\uc77c\uad00\uc131<\/td>\n<td>\uc77c\uad00\ub41c \uad6c\ubb38\uacfc \uc758\ubbf8 \ucc3e\uae30<\/td>\n<td>\ubc84\uadf8 \ubc0f \uc608\uc0c1\uce58 \ubabb\ud55c \uc0c1\ud669 \uac10\uc18c<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>\uc131\ub2a5<\/td>\n<td>\uc2e4\uc81c \uc6cc\ud06c\ub85c\ub4dc\uc5d0 \ub300\ud55c \ucffc\ub9ac \uc2e4\ud589 \ubca4\uce58\ub9c8\ud06c<\/td>\n<td>\uc18d\ub3c4\uc640 \ud655\uc7a5\uc131\uc5d0 \uc601\ud5a5\uc744 \ubbf8\uce69\ub2c8\ub2e4.<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td>\uc0c9\uc778 \uc9c0\uc6d0<\/td>\n<td>\uc778\ub371\uc2a4 \uc720\ud615 \ubc0f \uc0ac\uc6a9 \uc635\uc158 \ubc94\uc704 \ud655\uc778<\/td>\n<td>\ucffc\ub9ac \uc18d\ub3c4 \ucd5c\uc801\ud654\uc5d0 \uc911\uc694<\/td>\n<\/tr>\n<tr>\n<td>6<\/td>\n<td>\uc870\uc778 \uae30\ub2a5<\/td>\n<td>\ub2e4\uc591\ud55c \uc870\uc778 \uc720\ud615\uc5d0 \ub300\ud55c \ud14c\uc2a4\ud2b8 \uc9c0\uc6d0<\/td>\n<td>\uad00\ub828 \ub370\uc774\ud130 \uc791\uc5c5\uc758 \ud575\uc2ec<\/td>\n<\/tr>\n<tr>\n<td>7<\/td>\n<td>\uc9d1\uacc4 \uc9c0\uc6d0<\/td>\n<td>\uadf8\ub8f9\ud654 \ubc0f \uc9d1\uacc4\uc5d0 \ub300\ud55c \uc9c0\uc6d0 \ud3c9\uac00<\/td>\n<td>\ubd84\uc11d \ubc0f \ubcf4\uace0\uc5d0 \ud544\uc694<\/td>\n<\/tr>\n<tr>\n<td>8<\/td>\n<td>\ud544\ud130\ub9c1 \ubc0f \uc220\uc5b4 \ub17c\ub9ac<\/td>\n<td>\ubcf5\uc7a1\ud55c WHERE \ubc0f HAVING \uc808\uc744 \ud14c\uc2a4\ud2b8\ud569\ub2c8\ub2e4.<\/td>\n<td>\uc815\ud655\ud55c \ub370\uc774\ud130 \uac80\uc0c9 \uc9c0\uc6d0<\/td>\n<\/tr>\n<tr>\n<td>9<\/td>\n<td>\ud558\uc704 \ucffc\ub9ac \uc9c0\uc6d0<\/td>\n<td>\uc0c1\uad00\uad00\uacc4 \ubc0f \uc911\ucca9\ub41c \ud558\uc704 \ucffc\ub9ac\uc5d0 \ub300\ud55c \uc9c0\uc6d0 \ud655\uc778<\/td>\n<td>\ucffc\ub9ac\uc5d0 \uae4a\uc774 \uc788\ub294 \uc815\ubcf4 \ucd94\uac00<\/td>\n<\/tr>\n<tr>\n<td>10<\/td>\n<td>\ub370\uc774\ud130 \uc870\uc791 \uc9c0\uc6d0<\/td>\n<td>\uc0bd\uc785, \uc5c5\ub370\uc774\ud2b8, \uc0ad\uc81c, \ubcd1\ud569 \uae30\ub2a5 \ud14c\uc2a4\ud2b8<\/td>\n<td>\ub370\uc774\ud130 \uc720\uc9c0 \uad00\ub9ac\uc5d0 \uc911\uc694<\/td>\n<\/tr>\n<tr>\n<td>11<\/td>\n<td>\uac70\ub798 \uc9c0\uc6d0<\/td>\n<td>\ub2e4\uc911 \uba85\uc138\uc11c \uac70\ub798 \uc9c0\uc6d0 \ud655\uc778<\/td>\n<td>\ub370\uc774\ud130 \uc77c\uad00\uc131 \ubc0f \uc6d0\uc790\uc131 \ubcf4\uc7a5<\/td>\n<\/tr>\n<tr>\n<td>12<\/td>\n<td>\uc624\ub958 \ucc98\ub9ac<\/td>\n<td>\uc624\ub958 \uac10\uc9c0 \ubc0f \ubcf4\uace0 \uba54\ucee4\ub2c8\uc998 \uac80\ud1a0\ud558\uae30<\/td>\n<td>\ub514\ubc84\uae45 \ubc0f \uc548\uc815\uc131 \uc9c0\uc6d0<\/td>\n<\/tr>\n<tr>\n<td>13<\/td>\n<td>\ud655\uc7a5\uc131<\/td>\n<td>\uc0ac\uc6a9\uc790 \uc815\uc758 \ud568\uc218(UDF) \ucd94\uac00 \uae30\ub2a5 \ud655\uc778<\/td>\n<td>\uace0\uae09 \uc694\uad6c \uc0ac\ud56d\uc744 \uc704\ud55c \uc0ac\uc6a9\uc790 \uc9c0\uc815 \uac00\ub2a5<\/td>\n<\/tr>\n<tr>\n<td>14<\/td>\n<td>\uc120\uc5b8\uc801 \uc131\uaca9<\/td>\n<td>\uc5b8\uc5b4\uac00 \ub2e4\uc74c\uc744 \uc9c0\uc815\ud558\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4. <b>\ubb34\uc5c7<\/b> \ud574\uc57c \ud558\ub294 \uac83\uc774 \uc544\ub2c8\ub77c <b>\uc5b4\ub5bb\uac8c<\/b><\/td>\n<td>\uac1c\ubc1c \ubc0f \ucd5c\uc801\ud654 \uac04\uc18c\ud654<\/td>\n<\/tr>\n<tr>\n<td>15<\/td>\n<td>\ud734\ub300\uc131<\/td>\n<td>\uc2dc\uc2a4\ud15c \uac04\uc5d0 \ucffc\ub9ac\uac00 \uc5bc\ub9c8\ub098 \uc27d\uac8c \ub9c8\uc774\uadf8\ub808\uc774\uc158\ub418\ub294\uc9c0 \ud655\uc778\ud558\uc138\uc694.<\/td>\n<td>\uacf5\uae09\uc5c5\uccb4 \uc885\uc18d\uc131 \uac10\uc18c \ubc0f \uc720\uc5f0\uc131 \uc9c0\uc6d0<\/td>\n<\/tr>\n<tr>\n<td>16<\/td>\n<td>\ud398\uc774\uc9c0 \ub9e4\uae40 \uc9c0\uc6d0<\/td>\n<td>\ud14c\uc2a4\ud2b8 \uc81c\ud55c, \uc624\ud504\uc14b \ub610\ub294 \uc708\ub3c4\uc6b0 \uc9c0\uc6d0<\/td>\n<td>API \ubc0f UI \uae30\ubc18 \ub370\uc774\ud130 \uc561\uc138\uc2a4\uc5d0 \uc911\uc694<\/td>\n<\/tr>\n<tr>\n<td>17<\/td>\n<td>\uc2a4\ud0a4\ub9c8 \uc778\ud2b8\ub85c\uc2a4\ud399\uc158<\/td>\n<td>\uc2a4\ud0a4\ub9c8\/\uce74\ud0c8\ub85c\uadf8 \uba54\ud0c0\ub370\uc774\ud130 \ucffc\ub9ac \ud655\uc778<\/td>\n<td>\uc790\ub3d9\ud654 \ubc0f \ud234\ub9c1 \uc9c0\uc6d0<\/td>\n<\/tr>\n<tr>\n<td>18<\/td>\n<td>\ud234\ub9c1 \ubc0f IDE \uc9c0\uc6d0<\/td>\n<td>\ucffc\ub9ac \ud3b8\uc9d1\uae30, \ud50c\ub7ec\uadf8\uc778 \ub4f1\uc73c\ub85c \uad6c\uc131\ub41c \uc124\ubb38\uc870\uc0ac \uc5d0\ucf54\uc2dc\uc2a4\ud15c<\/td>\n<td>\uac1c\ubc1c\uc790 \uc0dd\uc0b0\uc131 \ud5a5\uc0c1<\/td>\n<\/tr>\n<tr>\n<td>19<\/td>\n<td>\ucee4\ubba4\ub2c8\ud2f0 \ubc0f \ubb38\uc11c<\/td>\n<td>\ubb38\uc11c, \ucee4\ubba4\ub2c8\ud2f0 \ud3ec\ub7fc, \ud29c\ud1a0\ub9ac\uc5bc\uc758 \ud488\uc9c8 \uac80\ud1a0<\/td>\n<td>\ud559\uc2b5 \ubc0f \ubb38\uc81c \ud574\uacb0\uc758 \uc6a9\uc774\uc131\uc5d0 \uc601\ud5a5\uc744 \ubbf8\uce69\ub2c8\ub2e4.<\/td>\n<\/tr>\n<tr>\n<td>20<\/td>\n<td>\uc571 \ud504\ub808\uc784\uc6cc\ud06c\uc640 \ud1b5\ud569<\/td>\n<td>\uc778\uae30 \uc5b8\uc5b4\ub85c \ub41c \ub77c\uc774\ube0c\ub7ec\ub9ac \ubc0f \ub4dc\ub77c\uc774\ubc84 \uc9c0\uc6d0 \ud655\uc778<\/td>\n<td>\uc571 \uac1c\ubc1c \uc6a9\uc774\uc131<\/td>\n<\/tr>\n<tr>\n<td>21<\/td>\n<td>\ud45c\uc900 \uc900\uc218<\/td>\n<td>\uc5c5\uacc4 \ud45c\uc900\uacfc \ube44\uad50(\uc608: SQL)<\/td>\n<td>\ud734\ub300\uc131 \ubc0f \uc0c1\ud638 \uc6b4\uc6a9\uc131 \uc9c0\uc6d0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>When you\u2019re building apps, the query language you work with makes a big difference. It affects everything from performance to how quickly your team can ship features. In this post, I\u2019ve asked an LLM to create a list of 21 [&hellip;]<\/p>","protected":false},"author":71,"featured_media":17371,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1812],"tags":[9639],"ppma_author":[8937],"class_list":["post-17369","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-n1ql-query","tag-mongodb-query"],"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>Choosing the Right Query Language: SQL++ vs. Mongo - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Show how SQL++, used by Couchbase, and Mongo\u2019s Query API (previously known as MQL) languages stack up on the most popular types of query capabilities.\" \/>\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\/choosing-the-right-query-language-sql-vs-mongo\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Choosing the Right Query Language: SQL++ vs. Mongo\" \/>\n<meta property=\"og:description\" content=\"Show how SQL++, used by Couchbase, and Mongo\u2019s Query API (previously known as MQL) languages stack up on the most popular types of query capabilities.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/choosing-the-right-query-language-sql-vs-mongo\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-07-25T17:09:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-13T13:52:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/blog-sql-vs-mongo-mql.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1256\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"Choosing the Right Query Language: SQL++ vs. Mongo\",\"datePublished\":\"2025-07-25T17:09:07+00:00\",\"dateModified\":\"2025-08-13T13:52:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/\"},\"wordCount\":2040,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/blog-sql-vs-mongo-mql.png\",\"keywords\":[\"mongodb query\"],\"articleSection\":[\"Application Design\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/\",\"name\":\"Choosing the Right Query Language: SQL++ vs. Mongo - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/blog-sql-vs-mongo-mql.png\",\"datePublished\":\"2025-07-25T17:09:07+00:00\",\"dateModified\":\"2025-08-13T13:52:59+00:00\",\"description\":\"Show how SQL++, used by Couchbase, and Mongo\u2019s Query API (previously known as MQL) languages stack up on the most popular types of query capabilities.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/blog-sql-vs-mongo-mql.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/blog-sql-vs-mongo-mql.png\",\"width\":2400,\"height\":1256},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Choosing the Right Query Language: SQL++ vs. Mongo\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\/\/crosscuttingconcerns.com\",\"https:\/\/x.com\/mgroves\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Choosing the Right Query Language: SQL++ vs. Mongo - The Couchbase Blog","description":"Show how SQL++, used by Couchbase, and Mongo\u2019s Query API (previously known as MQL) languages stack up on the most popular types of query capabilities.","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\/choosing-the-right-query-language-sql-vs-mongo\/","og_locale":"ko_KR","og_type":"article","og_title":"Choosing the Right Query Language: SQL++ vs. Mongo","og_description":"Show how SQL++, used by Couchbase, and Mongo\u2019s Query API (previously known as MQL) languages stack up on the most popular types of query capabilities.","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/choosing-the-right-query-language-sql-vs-mongo\/","og_site_name":"The Couchbase Blog","article_published_time":"2025-07-25T17:09:07+00:00","article_modified_time":"2025-08-13T13:52:59+00:00","og_image":[{"width":2400,"height":1256,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/blog-sql-vs-mongo-mql.png","type":"image\/png"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"10\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"Choosing the Right Query Language: SQL++ vs. Mongo","datePublished":"2025-07-25T17:09:07+00:00","dateModified":"2025-08-13T13:52:59+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/"},"wordCount":2040,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/blog-sql-vs-mongo-mql.png","keywords":["mongodb query"],"articleSection":["Application Design","SQL++ \/ N1QL Query"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/","url":"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/","name":"Choosing the Right Query Language: SQL++ vs. Mongo - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/blog-sql-vs-mongo-mql.png","datePublished":"2025-07-25T17:09:07+00:00","dateModified":"2025-08-13T13:52:59+00:00","description":"Show how SQL++, used by Couchbase, and Mongo\u2019s Query API (previously known as MQL) languages stack up on the most popular types of query capabilities.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/blog-sql-vs-mongo-mql.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/blog-sql-vs-mongo-mql.png","width":2400,"height":1256},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/choosing-the-right-query-language-sql-vs-mongo\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Choosing the Right Query Language: SQL++ vs. Mongo"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","description":"NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4, Couchbase","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58","name":"\ub9e4\ud29c \uadf8\ub85c\ube0c\uc2a4","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"Matthew D. Groves\ub294 \ucf54\ub529\uc744 \uc88b\uc544\ud558\ub294 \uc0ac\ub78c\uc785\ub2c8\ub2e4. C#, jQuery, PHP \ub4f1 \ubb34\uc5c7\uc774\ub4e0 \ud480 \ub9ac\ud018\uc2a4\ud2b8\ub97c \uc81c\ucd9c\ud560 \uc815\ub3c4\ub85c \ucf54\ub529\uc744 \uc88b\uc544\ud569\ub2c8\ub2e4. 90\ub144\ub300\uc5d0 \ubd80\ubaa8\ub2d8\uc758 \ud53c\uc790 \uac00\uac8c\ub97c \uc704\ud574 QuickBASIC POS \uc571\uc744 \ub9cc\ub4e0 \uc774\ud6c4\ub85c \uc804\ubb38\uc801\uc73c\ub85c \ucf54\ub529\uc744 \ud574\uc654\uc2b5\ub2c8\ub2e4. \ud604\uc7ac Couchbase\uc758 \uc120\uc784 \uc81c\ud488 \ub9c8\ucf00\ud305 \uad00\ub9ac\uc790\ub85c \uc77c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc5ec\uac00 \uc2dc\uac04\uc5d0\ub294 \uac00\uc871\uacfc \ud568\uaed8 \ucd95\uad6c \uacbd\uae30\ub97c \uad00\ub78c\ud558\uace0 \uac1c\ubc1c\uc790 \ucee4\ubba4\ub2c8\ud2f0\uc5d0 \ucc38\uc5ec\ud558\uba70 \uc2dc\uac04\uc744 \ubcf4\ub0c5\ub2c8\ub2e4. \uadf8\ub294 .NET\uc758 AOP, .NET\uc758 \ud504\ub85c \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4, Pluralsight \uc800\uc790, Microsoft MVP\uc758 \uc800\uc790\uc774\uae30\ub3c4 \ud569\ub2c8\ub2e4.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/matthew-groves\/"}]}},"authors":[{"term_id":8937,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","author_category":"","last_name":"Groves","first_name":"Matthew","job_title":"","user_url":"https:\/\/crosscuttingconcerns.com","description":"Matthew D. Groves\ub294 \ucf54\ub529\uc744 \uc88b\uc544\ud558\ub294 \uc0ac\ub78c\uc785\ub2c8\ub2e4.  C#, jQuery, PHP \ub4f1 \ubb34\uc5c7\uc774\ub4e0 \ud480 \ub9ac\ud018\uc2a4\ud2b8\ub97c \uc81c\ucd9c\ud560 \uc815\ub3c4\ub85c \ucf54\ub529\uc744 \uc88b\uc544\ud569\ub2c8\ub2e4.  90\ub144\ub300\uc5d0 \ubd80\ubaa8\ub2d8\uc758 \ud53c\uc790 \uac00\uac8c\ub97c \uc704\ud574 QuickBASIC POS \uc571\uc744 \ub9cc\ub4e0 \uc774\ud6c4\ub85c \uc804\ubb38\uc801\uc73c\ub85c \ucf54\ub529\uc744 \ud574\uc654\uc2b5\ub2c8\ub2e4.  \ud604\uc7ac Couchbase\uc758 \uc120\uc784 \uc81c\ud488 \ub9c8\ucf00\ud305 \uad00\ub9ac\uc790\ub85c \uc77c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc5ec\uac00 \uc2dc\uac04\uc5d0\ub294 \uac00\uc871\uacfc \ud568\uaed8 \ucd95\uad6c \uacbd\uae30\ub97c \uad00\ub78c\ud558\uace0 \uac1c\ubc1c\uc790 \ucee4\ubba4\ub2c8\ud2f0\uc5d0 \ucc38\uc5ec\ud558\uba70 \uc2dc\uac04\uc744 \ubcf4\ub0c5\ub2c8\ub2e4.  \uadf8\ub294 .NET\uc758 AOP, .NET\uc758 \ud504\ub85c \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4, Pluralsight \uc800\uc790, Microsoft MVP\uc758 \uc800\uc790\uc774\uae30\ub3c4 \ud569\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/17369","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=17369"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/17369\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/17371"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=17369"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=17369"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=17369"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=17369"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}