{"id":13499,"date":"2022-06-28T14:33:16","date_gmt":"2022-06-28T21:33:16","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=13499"},"modified":"2025-06-13T21:51:46","modified_gmt":"2025-06-14T04:51:46","slug":"asp-net-core-crud-nosql-part-4","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/asp-net-core-crud-nosql-part-4\/","title":{"rendered":"NoSQL\uc744 \uc0ac\uc6a9\ud55c ASP.NET Core CRUD: 4\ubd80"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">ASP.NET CRUD \uc571\uc5d0\ub294 \ub9cc\ub4e4\uae30, \uc77d\uae30, \uc5c5\ub370\uc774\ud2b8 \ubc0f \uc0ad\uc81c\ub85c \uad6c\uc131\ub41c \ub370\uc774\ud130\uc640\uc758 \uc0c1\ud638 \uc791\uc6a9\uc774 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. In <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/asp-net-core-crud-with-nosql-part-1\/\"><span style=\"font-weight: 400;\">\ud30c\ud2b8 1<\/span><\/a><span style=\"font-weight: 400;\">\ub97c \uc0ac\uc6a9\ud558\uc5ec \uae30\ubcf8 ASP.NET Core \ud504\ub85c\uc81d\ud2b8\ub97c \uc124\uc815\ud569\ub2c8\ub2e4. In <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/asp-net-crud-nosql-part-2\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">\ud30c\ud2b8 2<\/span><\/a><span style=\"font-weight: 400;\">\uc5d0 \uccab \ubc88\uc9f8 <\/span><i><span style=\"font-weight: 400;\">\uc77d\uae30<\/span><\/i><span style=\"font-weight: 400;\"> \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc5d0\uc11c \uc704\uc2dc\ub9ac\uc2a4\ud2b8 \ub370\uc774\ud130\uc5d0 \ub300\ud55c SQL++ \ucffc\ub9ac\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. In <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/asp-net-core-crud-nosql-part-3\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">\ud30c\ud2b8 3<\/span><\/a><span style=\"font-weight: 400;\">\uc5d0\uc11c \uc774\ubc88\uc5d0\ub294 \ud0a4-\uac12 API\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub610 \ub2e4\ub978 \uc77d\uae30 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub97c \ucd94\uac00\ud588\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\uc9c0\uae08\uae4c\uc9c0 \uc800\ud76c\uac00 \uc218\uc815\ud55c \uc720\uc77c\ud55c \ub370\uc774\ud130\ub294 Couchbase Capella UI\uc5d0\uc11c \uc9c1\uc811 \uc218\uc815\ud55c \uac83\uc774\uc5c8\uc2b5\ub2c8\ub2e4. \uc774 \uae00\uc5d0\uc11c\ub294 \uc704\uc2dc\ub9ac\uc2a4\ud2b8 \ub370\uc774\ud130 \uc0dd\uc131 \ubc0f \uc5c5\ub370\uc774\ud2b8\ub97c \ucc98\ub9ac\ud558\ub294 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub97c \ucd94\uac00\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<h2><b>SQL++ \ub300 \ud0a4-\uac12: \uc7ac\uac80\ud1a0<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">SQL++\uc5d0\ub294 \ub2e4\uc74c\uc774 \ud3ec\ud568\ub429\ub2c8\ub2e4. <\/span><em><span style=\"font-weight: 400;\">\uc0bd\uc785<\/span><span style=\"font-weight: 400;\">, <\/span><span style=\"font-weight: 400;\">\uc5c5\ub370\uc774\ud2b8<\/span><span style=\"font-weight: 400;\">, <\/span><span style=\"font-weight: 400;\">\uc0ad\uc81c<\/span><\/em><span style=\"font-weight: 400;\"> \uad6c\ubb38\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c SQL++\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub370\uc774\ud130 \ubcc0\ud615\uc744 \uc704\ud55c \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub97c \uad6c\ucd95\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ub41c \ucf54\ub4dc\uc640 \ub9e4\uc6b0 \uc720\uc0ac\ud569\ub2c8\ub2e4. <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/asp-net-crud-nosql-part-2\/\"><span style=\"font-weight: 400;\">\ud30c\ud2b8 2<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">SQL++\uc5d0\uc11c \uc774\uc804\uc5d0 \ubcf4\uc9c0 \ubabb\ud588\uc744 \uc218\ub3c4 \uc788\ub294 \ud55c \uac00\uc9c0 \ud0a4\uc6cc\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. <\/span><em><span style=\"font-weight: 400;\">UPSERT<\/span><\/em><span style=\"font-weight: 400;\">. \uc9d0\uc791\ud560 \uc218 \uc788\ub4ef\uc774 \ub2e4\uc74c\uacfc \uac19\uc740 \uc870\ud569\uc785\ub2c8\ub2e4. <\/span><em><span style=\"font-weight: 400;\">\uc5c5\ub370\uc774\ud2b8<\/span><\/em><span style=\"font-weight: 400;\"> \uadf8\ub9ac\uace0 <\/span><em><span style=\"font-weight: 400;\">\uc0bd\uc785<\/span><\/em><span style=\"font-weight: 400;\"><em>.<\/em> \ub370\uc774\ud130\uac00 \uc774\ubbf8 \uc874\uc7ac\ud558\uba74 \uc5c5\ub370\uc774\ud2b8\uac00 \uc774\ub8e8\uc5b4\uc9c0\uace0, \uc874\uc7ac\ud558\uc9c0 \uc54a\uc73c\uba74 \uc0bd\uc785\uc774 \uc774\ub8e8\uc5b4\uc9d1\ub2c8\ub2e4. \ub2e4\uc74c\uc740 SQL++\ub97c \uc0ac\uc6a9\ud558\ub294 \uc5c5\uc11c\ud2b8 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc758 \ubaa8\uc2b5\uc785\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"decode-attributes:false lang:default decode:true\">[HttpPost]\r\n[Route(\"api\/editWithSql\")]\r\npublic async Task&lt;IActionResult&gt; CreateOrEditWithSql(WishlistItem item)\r\n{\r\n\u00a0 \u00a0 var bucket = await _bucketProvider.GetBucketAsync(\"demo\");\r\n\u00a0 \u00a0 var cluster = bucket.Cluster;\r\n\r\n\u00a0 \u00a0 var id = item.Id ?? Guid.NewGuid();\r\n\r\n\u00a0 \u00a0 var result = await cluster.QueryAsync&lt;WishlistItem&gt;(\r\n\u00a0 \u00a0 \u00a0 \u00a0 @\"UPSERT INTO demo._default.wishlist (KEY, VALUE)\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 VALUES ($id, { \"\"name\"\" : $name });\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 options =&gt; options\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 .Parameter(\"id\", id)\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 .Parameter(\"name\", item.Name)\r\n\u00a0 \u00a0 );\r\n\r\n\u00a0 \u00a0 return Ok(result);\r\n}<\/pre>\n<p><span style=\"font-weight: 400;\">\uc774 \ucf54\ub4dc\uc5d0 \ub300\ud574 \ub450 \uac00\uc9c0 \uc911\uc694\ud55c \uc810\uc744 \uc9da\uace0 \ub118\uc5b4\uac00\uc57c \ud569\ub2c8\ub2e4:<\/span><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">\uc0dd\uc131 \ubc0f \uc5c5\ub370\uc774\ud2b8\ub97c \ubaa8\ub450 \ucc98\ub9ac\ud569\ub2c8\ub2e4. \ub9cc\uc57d <\/span><em><span style=\"font-weight: 400;\">\ud56d\ubaa9<\/span><\/em><span style=\"font-weight: 400;\"> \uc758 ID\uac00 null\uc774\uba74 \uc774 \ucf54\ub4dc\ub294 \uc0c8 \uc704\uc2dc\ub9ac\uc2a4\ud2b8 \ud56d\ubaa9\uc774 \uc0dd\uc131\ub418\uace0 \uc788\ub2e4\uace0 \uac00\uc815\ud569\ub2c8\ub2e4.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">\ub9e4\uac1c\ubcc0\uc218\ud654: \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c\uc640 \ub9c8\ucc2c\uac00\uc9c0\ub85c SQL++\ub294 \ub2e4\uc74c\uc5d0 \ucde8\uc57d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <\/span><a href=\"https:\/\/owasp.org\/www-community\/attacks\/SQL_Injection\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">SQL \uc8fc\uc785<\/span><\/a><span style=\"font-weight: 400;\">\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c \ub9e4\uac1c\ubcc0\uc218\ud654\ub97c \uc801\uadf9 \uad8c\uc7a5\ud569\ub2c8\ub2e4. SQL++ \uad6c\ubb38\uc740 <\/span><em><span style=\"font-weight: 400;\">$<\/span><\/em><span style=\"font-weight: 400;\"> \ub97c \uc0ac\uc6a9\ud558\uc5ec \uba85\uba85\ub41c \ub9e4\uac1c\ubcc0\uc218\ub97c \ub098\ud0c0\ub0c5\ub2c8\ub2e4(\uc608 <\/span><em><span style=\"font-weight: 400;\">$id<\/span><\/em><span style=\"font-weight: 400;\"> \uadf8\ub9ac\uace0 <\/span><em><span style=\"font-weight: 400;\">$name<\/span><\/em><span style=\"font-weight: 400;\">).<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">\uc774 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub294 \uc791\ub3d9\ud569\ub2c8\ub2e4. \ud558\uc9c0\ub9cc <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/asp-net-core-crud-nosql-part-3\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">\ud30c\ud2b8 3<\/span><\/a><span style=\"font-weight: 400;\">\ub97c \uc0ac\uc6a9\ud558\uba74 Couchbase\uc640 \uc0c1\ud638 \uc791\uc6a9\ud558\uae30 \uc704\ud574 SQL++\ub97c \uc0ac\uc6a9\ud560 \ud544\uc694\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \uc0ac\uc2e4 \ud0a4-\uac12\uc744 \uc0ac\uc6a9\ud560 \ub54c\uc640 SQL++\ub97c \uc0ac\uc6a9\ud560 \ub54c\ub97c \uacb0\uc815\ud560 \ub54c\ub3c4 \ub9e4\uc6b0 \uc720\uc0ac\ud55c \uae30\uc900\uc774 \uc801\uc6a9\ub429\ub2c8\ub2e4:<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><strong>\uc0ac\uc6a9 \uc0ac\ub840<\/strong><\/td>\n<td><strong>\ud0a4 \uac12?<\/strong><\/td>\n<td><strong>\uc65c \ub610\ub294 \uc65c \uc548 \ub420\uae4c\uc694?<\/strong><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">\ud0a4 \"73892\"\ub85c \uc0c8 \uc0ac\uc6a9\uc790 \ub9cc\ub4e4\uae30<\/span><\/td>\n<td><span style=\"font-weight: 400;\">\uc608<\/span><\/td>\n<td><span style=\"font-weight: 400;\">\uc9c1\uc811 \uc561\uc138\uc2a4<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">\ud0a4 \"73892\"\ub85c \uc0ac\uc6a9\uc790 \uc218\uc815\ud558\uae30<\/span><\/td>\n<td><span style=\"font-weight: 400;\">\uc608<\/span><\/td>\n<td><span style=\"font-weight: 400;\">\uc9c1\uc811 \uc561\uc138\uc2a4<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">\ud0a4 \"73892\"\ub85c \uc0ac\uc6a9\uc790\uc758 \uc774\uba54\uc77c \uc8fc\uc18c\ub9cc \uc218\uc815\ud569\ub2c8\ub2e4.<\/span><\/td>\n<td><span style=\"font-weight: 400;\">\uc608<\/span><\/td>\n<td><span style=\"font-weight: 400;\">\uc0ac\uc6a9\uc790 \ubb38\uc11c\uac00 \ud06c\ub354\ub77c\ub3c4 Couchbase\ub294 \ud0a4 \uae30\ubc18 <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/current\/guides\/updating-data.html#updating-a-sub-document\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">\ud558\uc704 \ubb38\uc11c API<\/span><\/a><span style=\"font-weight: 400;\">\ub97c \ud074\ub9ad\ud574 \ubb38\uc11c\uc758 \uc77c\ubd80\ub97c \uc218\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">\ud0a4 \"73892\", \"47212\", \"90491\"\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc0ac\uc6a9\uc790 \uadf8\ub8f9 \uc218\uc815\ud558\uae30<\/span><\/td>\n<td><span style=\"font-weight: 400;\">\uc608<\/span><\/td>\n<td><span style=\"font-weight: 400;\">\uc774 \uacbd\uc6b0 \uc5ec\ub7ec \ud0a4-\uac12 \uc5f0\uc0b0\uc774 \ud544\uc694\ud560 \uc218 \uc788\uc9c0\ub9cc \uc5ec\uc804\ud788 <em>SQL <\/em><\/span><em><span style=\"font-weight: 400;\">\uc120\ud0dd ... \uc5b4\ub514\uc5d0\uc11c ...<\/span><\/em><span style=\"font-weight: 400;\"> \ucffc\ub9ac.<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">\"Ohio\" \ub300\uc2e0 \"OH\"\ub97c \uc0ac\uc6a9\ud558\ub3c4\ub85d \ubaa8\ub4e0 \uc8fc\uc18c\ub97c \uc218\uc815\ud569\ub2c8\ub2e4.<\/span><\/td>\n<td><span style=\"font-weight: 400;\">\uc544\ub2c8\uc694<\/span><\/td>\n<td><span style=\"font-weight: 400;\">\uc0ac\uc6a9\uc790\uc758 \uc0c1\ud0dc\ub294 \ud0a4\uac00 \uc544\ub2cc '\ubcf4\uc870' \uc18d\uc131\uc77c \uac00\ub2a5\uc131\uc774 \ub192\uc2b5\ub2c8\ub2e4(\uc5ec\ub7ec \uc0ac\uc6a9\uc790\uac00 \uc624\ud558\uc774\uc624\uc5d0 \uc788\uc744 \uc218 \uc788\uc74c). \uc774\ub294 SQL++\uc758 \uc88b\uc740 \uc0ac\uc6a9 \uc0ac\ub840\uc785\ub2c8\ub2e4. <\/span><span style=\"font-weight: 400;\">\uc5c5\ub370\uc774\ud2b8<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">\uc774 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub294 \ud558\ub098\uc758 \uc704\uc2dc\ub9ac\uc2a4\ud2b8 \ud56d\ubaa9\ub9cc \ucd94\uac00\ud558\uac70\ub098 \ubcc0\uacbd\ud558\uba74 \ub418\ubbc0\ub85c \ub300\uc2e0 \ud0a4-\uac12 API\ub97c \uc0ac\uc6a9\ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<h2><b>CreateOrEdit CRUD \uc5d4\ub4dc\ud3ec\uc778\ud2b8 \uc791\uc131<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">\ucf54\ub529\uc744 \uc2dc\uc791\ud558\uae30 \uc804\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc740 \uc0ac\ud56d\uc744 \uace0\ub824\ud558\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4. <em>\uc0dd\uc131 \ub610\ub294 \ud3b8\uc9d1<\/em> \ub294 \ub2e8\uc77c \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc5ec\uc57c \ud558\uba70, \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74 <em>\ub9cc\ub4e4\uae30<\/em> \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc640 <em>\ud3b8\uc9d1<\/em> \uc5d4\ub4dc\ud3ec\uc778\ud2b8. \uc774 \ub9e4\uc6b0 \uac04\ub2e8\ud55c \uc704\uc2dc\ub9ac\uc2a4\ud2b8 \uc571\uc758 \uacbd\uc6b0 \uc720\ud6a8\uc131 \uac80\uc0ac, \uc778\uc99d \ub610\ub294 \uae30\ud0c0 \uc2dc\uc2a4\ud15c \uc804\ubc18\uc758 \ud06c\ub85c\uc2a4 \ucee4\ud305 \ubb38\uc81c\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \ud504\ub85c\ub355\uc158 \uc2dc\uc2a4\ud15c\uc5d0\uc11c\ub294 \ub370\uc774\ud130 '\ucd94\uac00'\uc640 \ub370\uc774\ud130 '\uc5c5\ub370\uc774\ud2b8'\uac00 \uc11c\ub85c \ub2e4\ub978 \ube44\uc988\ub2c8\uc2a4 \uaddc\uce59\uc744 \ub530\ub974\uace0 \uc11c\ub85c \ub2e4\ub978 \uad8c\ud55c\uc774 \ud544\uc694\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uacbd\uc6b0 \uc791\uc5c5\uc744 \ub450 \uac1c\uc758 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub85c \ub098\ub20c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\uc9c0\uae08\uc740 '\uc5c5\uc11c\ud2b8'\ub97c \uc0ac\uc6a9\ud558\ub294 \ub2e8\uc77c \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ubd80\ud130 \uc2dc\uc791\ud558\uaca0\uc2b5\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"decode-attributes:false lang:default decode:true\">[HttpPost]\r\n[Route(\"api\/edit\")]\r\npublic async Task&lt;IActionResult&gt; CreateOrEdit(WishlistItem item)\r\n{\r\n\u00a0 \u00a0 var bucket = await _bucketProvider.GetBucketAsync(\"demo\");\r\n\u00a0 \u00a0 var collection = await bucket.CollectionAsync(\"wishlist\");\r\n\r\n\u00a0 \u00a0 var id = item.Id ?? Guid.NewGuid();\r\n\r\n\u00a0 \u00a0 await collection.UpsertAsync(id.ToString(), new\r\n\u00a0 \u00a0 {\r\n\u00a0 \u00a0 \u00a0 \u00a0 Name = item.Name\r\n\u00a0 \u00a0 });\r\n\r\n\u00a0 \u00a0 return Ok(new { success = true});\r\n}<\/pre>\n<p><span style=\"font-weight: 400;\">SQL++ \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc640 \ub9c8\ucc2c\uac00\uc9c0\ub85c \uc774 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub294 \ub2e4\uc74c\uc744 \ud655\uc778\ud569\ub2c8\ub2e4. <\/span><em><span style=\"font-weight: 400;\">Id<\/span><\/em><span style=\"font-weight: 400;\"> \ub97c \uc0ac\uc6a9\ud558\uc5ec '\ub9cc\ub4e4\uae30'\uc778\uc9c0 '\uc5c5\ub370\uc774\ud2b8'\uc778\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\uadf8\ub9ac\uace0 <\/span><em><span style=\"font-weight: 400;\">UpsertAsync<\/span><\/em><span style=\"font-weight: 400;\"> \ud568\uc218\ub3c4 \ub9c8\ucc2c\uac00\uc9c0\uc785\ub2c8\ub2e4:<\/span><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">\ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc0c8 \ubb38\uc11c\ub97c \ub9cc\ub4ed\ub2c8\ub2e4. <\/span><em><span style=\"font-weight: 400;\">id.ToString()<\/span><\/em><span style=\"font-weight: 400;\"> \ub97c \ud0a4\ub85c<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">\ud0a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \uae30\uc874 \ubb38\uc11c\ub97c \ubcc0\uacbd\ud569\ub2c8\ub2e4. <\/span><em><span style=\"font-weight: 400;\">id.ToString()<\/span><\/em><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">\ub450 \uacbd\uc6b0 \ubaa8\ub450 \uc774 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc758 \uc2e4\ud589\uc774 \uc644\ub8cc\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 JSON \ubb38\uc11c\uac00 \uc0dd\uc131\ub429\ub2c8\ub2e4. <\/span><em><span style=\"font-weight: 400;\">{ \"name\" = \"\uc704\uc2dc\ub9ac\uc2a4\ud2b8 \ud56d\ubaa9 \uc774\ub984\"}<\/span><\/em><span style=\"font-weight: 400;\"> \ub97c \ud0a4\ub85c \uc9c0\uc815\ud558\uace0 GUID\ub97c \ud0a4\ub85c \uc9c0\uc815\ud569\ub2c8\ub2e4(\uc5c4\ubc00\ud788 \ub9d0\ud558\uba74 Couchbase\uc758 \ubaa8\ub4e0 \ud0a4\ub294 \ubb38\uc790\uc5f4\uc774\uc9c0\ub9cc \uc6b0\ub9ac\ub294 GUID \ubb38\uc790\uc5f4\uc774\ub77c\ub294 \uac83\uc744 \uc54c\uace0 \uc788\uc2b5\ub2c8\ub2e4).<\/span><\/p>\n<p><strong>\ucc38\uace0:\u00a0<\/strong><span style=\"font-weight: 400;\">\ub450 API\uc758 \ubbf8\ubb18\ud55c \ucc28\uc774\uc810 \uc911 \ud558\ub098\ub294 <\/span><em><span style=\"font-weight: 400;\">UPSERT<\/span><\/em><span style=\"font-weight: 400;\"> \ubb38\uc740 \ud558\ub098\uc758 \ud544\ub4dc(<\/span><em><span style=\"font-weight: 400;\">\uc774\ub984<\/span><\/em><span style=\"font-weight: 400;\">), \ud0a4-\uac12 \ubc29\uc2dd\uc740 <\/span><em><span style=\"font-weight: 400;\">UpsertAsync<\/span><\/em><span style=\"font-weight: 400;\"> \ub294 \uc804\uccb4 \ubb38\uc11c\ub97c \ubcc0\uacbd\ud569\ub2c8\ub2e4( <\/span><em><span style=\"font-weight: 400;\">\uc774\ub984<\/span><\/em><span style=\"font-weight: 400;\"> )\ub85c \ubcc0\uacbd\ud569\ub2c8\ub2e4.<\/span><\/p>\n<h2><b style=\"color: #343e47; font-family: Lato, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 50px;\">ASP.NET CRUD \uc0ac\uc6a9<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Visual Studio\uc5d0\uc11c CTRL+F5\ub85c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc2e4\ud589\ud558\uba74 OpenAPI\/Swagger UI\uc5d0 \uba87 \uac00\uc9c0 \uc0c8\ub85c\uc6b4 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uac00 \ud45c\uc2dc\ub420 \uac83\uc785\ub2c8\ub2e4:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-13501\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/06\/swagger-ui-endpoints.png\" alt=\"ASP.NET endpoints showing in Swagger UI\" width=\"787\" height=\"515\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/06\/swagger-ui-endpoints.png 787w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/06\/swagger-ui-endpoints-300x196.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/06\/swagger-ui-endpoints-768x503.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/06\/swagger-ui-endpoints-20x13.png 20w\" sizes=\"auto, (max-width: 787px) 100vw, 787px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">API \uc18c\ube44\uc790\uc758 \uad00\uc810\uc5d0\uc11c \ubcf4\uba74 <\/span><em><span style=\"font-weight: 400;\">\/api\/\ud3b8\uc9d1<\/span><\/em><span style=\"font-weight: 400;\"> \uadf8\ub9ac\uace0 <\/span><em><span style=\"font-weight: 400;\">\/api\/editWithSql<\/span><\/em><span style=\"font-weight: 400;\"> \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub294 \ub3d9\uc77c\ud558\uac8c \uc791\ub3d9\ud569\ub2c8\ub2e4. ID\ub97c \ube44\uc6cc\ub454 \ucc44\ub85c \ud55c \ubc88 \uc2dc\ub3c4\ud558\uc5ec \uc0c8 \ud56d\ubaa9\uc744 \ub9cc\ub4e0 \ub2e4\uc74c \uc54c\ub824\uc9c4 ID\ub85c \ub2e4\uc2dc \uc2dc\ub3c4\ud569\ub2c8\ub2e4( <\/span><span style=\"font-weight: 400;\"><em>\/api\/getall<\/em><\/span><span style=\"font-weight: 400;\">\u00a0)\uc5d0 \uc811\uc18d\ud558\uc5ec \uc5b4\ub5a4 \uc77c\uc774 \uc77c\uc5b4\ub098\uace0 \uc5b4\ub5a4 \ubcc0\ud654\uac00 \uc788\ub294\uc9c0 \uad00\ucc30\ud558\uc138\uc694.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\uc608\ub97c \ub4e4\uc5b4, ID\ub97c \ube44\uc6cc \ub450\uc5b4 \"\ub514\uc9c0\ud138 \uc0ac\uc9c4 \ud504\ub808\uc784\"\uc774\ub77c\ub294 \uc0c8 \ud56d\ubaa9\uc744 \ucd94\uac00\ud588\uc2b5\ub2c8\ub2e4(\ub0b4 .NET \ucf54\ub4dc\uc5d0\uc11c \uc0dd\uc131\ub41c \"<em>1c3de2e7-70ea-4ee2-803b-425bbf6251cb<\/em>\"), ID\uac00 \"<em>2dab198b-1836-4409-9bdf-17275a2b2462<\/em>\"\ub97c \"\uc2a4\uce74\uc774\ub77c\uc778 \uce60\ub9ac 2XL \ud2f0\uc154\uce20\"\ub77c\ub294 \uc774\ub984\uc73c\ub85c \ubcc0\uacbd\ud569\ub2c8\ub2e4. \ub2e4\uc74c\uc740 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc544\uce74\ud3a0\ub77c UI\uc5d0 \ud45c\uc2dc\ub418\ub294 \uacb0\uacfc\uc785\ub2c8\ub2e4:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-13502\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/06\/couchbase-capella-ui-asp.net-project.png\" alt=\"Couchbase Capella UI showing ASP.NET project documents\" width=\"872\" height=\"463\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/06\/couchbase-capella-ui-asp.net-project.png 872w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/06\/couchbase-capella-ui-asp.net-project-300x159.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/06\/couchbase-capella-ui-asp.net-project-768x408.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/06\/couchbase-capella-ui-asp.net-project-818x434.png 818w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/06\/couchbase-capella-ui-asp.net-project-20x11.png 20w\" sizes=\"auto, (max-width: 872px) 100vw, 872px\" \/><\/p>\n<h2><b>\ub2e4\uc74c \ub2e8\uacc4\ub294 \ubb34\uc5c7\uc778\uac00\uc694?<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">ASP.NET Core \ud504\ub85c\uc81d\ud2b8\ub294 Couchbase Capella\uc5d0 \uc5f0\uacb0\ub418\uc5b4 \uc788\uc73c\uba70, \uc774\uc81c \ud0a4-\uac12(\uad8c\uc7a5) \ub610\ub294 SQL++(\uc774 \ud2b9\uc815 \uc0c1\ud669\uc5d0\ub294 \uad8c\uc7a5\ub418\uc9c0 \uc54a\uc74c)\ub85c \ub370\uc774\ud130\ub97c \uc0dd\uc131\/\uc5c5\ub370\uc774\ud2b8(\"\uc5c5\uc11c\ud2b8\")\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\ub2e4\uc74c \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 \"\uc0ad\uc81c\"\uc758 \"D\"\ub85c CRUD\ub97c \ub9c8\ubb34\ub9ac\ud558\uaca0\uc2b5\ub2c8\ub2e4.\"<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\uadf8\ub3d9\uc548\uc740 \uadf8\ub807\uac8c \ud558\uc154\uc57c \ud569\ub2c8\ub2e4:<\/span><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/cloud.couchbase.com\/sign-up\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">\uc544\uce74\ud3a0\ub77c \ubb34\ub8cc \uccb4\ud5d8 \uc2e0\uccad\ud558\uae30<\/span><\/a><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">\ub2e4\uc74c \ub0b4\uc6a9\uc744 \ud655\uc778\ud558\uc138\uc694. <\/span><a href=\"https:\/\/cloud.couchbase.com\/sign-up\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">.NET\uc6a9 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ud50c\ub808\uc774\uadf8\ub77c\uc6b4\ub4dc<\/span><\/a><span style=\"font-weight: 400;\"> \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \ubc14\ub85c \uc2e4\ud589\ud560 \uc218 \uc788\ub294 \uc608\uc81c\uc785\ub2c8\ub2e4.<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>ASP.NET CRUD apps include interaction with data that consists of create, read, update, and delete. In part 1, we setup a basic ASP.NET Core project. In part 2, we added the first read endpoint, using a SQL++ query against wishlist [&hellip;]<\/p>","protected":false},"author":71,"featured_media":12603,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,10126,10127,2225,1816,2201],"tags":[2821],"ppma_author":[8937],"class_list":["post-13499","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-asp-dotnet","category-c-sharp","category-cloud","category-couchbase-server","category-tools-sdks","tag-dbaas"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>ASP.NET Core CRUD with NoSQL: Part 4 - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"In this post we look at the U in CRUD that stands for UPDATE, and we build an ASP.NET Core CURD endpoint that uses UPSERT in a SQL++ query.\" \/>\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\/asp-net-core-crud-nosql-part-4\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ASP.NET Core CRUD with NoSQL: Part 4\" \/>\n<meta property=\"og:description\" content=\"In this post we look at the U in CRUD that stands for UPDATE, and we build an ASP.NET Core CURD endpoint that uses UPSERT in a SQL++ query.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/asp-net-core-crud-nosql-part-4\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-06-28T21:33:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T04:51:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/hannah-wei-aso6SYJZGps-unsplash-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1707\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\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=\"5\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"ASP.NET Core CRUD with NoSQL: Part 4\",\"datePublished\":\"2022-06-28T21:33:16+00:00\",\"dateModified\":\"2025-06-14T04:51:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/\"},\"wordCount\":870,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/hannah-wei-aso6SYJZGps-unsplash-scaled.jpg\",\"keywords\":[\"dbaas\"],\"articleSection\":[\".NET\",\"ASP.NET\",\"C#\",\"Couchbase Capella\",\"Couchbase Server\",\"Tools &amp; SDKs\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/\",\"name\":\"ASP.NET Core CRUD with NoSQL: Part 4 - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/hannah-wei-aso6SYJZGps-unsplash-scaled.jpg\",\"datePublished\":\"2022-06-28T21:33:16+00:00\",\"dateModified\":\"2025-06-14T04:51:46+00:00\",\"description\":\"In this post we look at the U in CRUD that stands for UPDATE, and we build an ASP.NET Core CURD endpoint that uses UPSERT in a SQL++ query.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/hannah-wei-aso6SYJZGps-unsplash-scaled.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/hannah-wei-aso6SYJZGps-unsplash-scaled.jpg\",\"width\":2560,\"height\":1707,\"caption\":\"Couchbase ASP.NET Core tutorial\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ASP.NET Core CRUD with NoSQL: Part 4\"}]},{\"@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":"ASP.NET Core CRUD with NoSQL: Part 4 - The Couchbase Blog","description":"In this post we look at the U in CRUD that stands for UPDATE, and we build an ASP.NET Core CURD endpoint that uses UPSERT in a SQL++ query.","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\/asp-net-core-crud-nosql-part-4\/","og_locale":"ko_KR","og_type":"article","og_title":"ASP.NET Core CRUD with NoSQL: Part 4","og_description":"In this post we look at the U in CRUD that stands for UPDATE, and we build an ASP.NET Core CURD endpoint that uses UPSERT in a SQL++ query.","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/asp-net-core-crud-nosql-part-4\/","og_site_name":"The Couchbase Blog","article_published_time":"2022-06-28T21:33:16+00:00","article_modified_time":"2025-06-14T04:51:46+00:00","og_image":[{"width":2560,"height":1707,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/hannah-wei-aso6SYJZGps-unsplash-scaled.jpg","type":"image\/jpeg"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"5\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"ASP.NET Core CRUD with NoSQL: Part 4","datePublished":"2022-06-28T21:33:16+00:00","dateModified":"2025-06-14T04:51:46+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/"},"wordCount":870,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/hannah-wei-aso6SYJZGps-unsplash-scaled.jpg","keywords":["dbaas"],"articleSection":[".NET","ASP.NET","C#","Couchbase Capella","Couchbase Server","Tools &amp; SDKs"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/","url":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/","name":"ASP.NET Core CRUD with NoSQL: Part 4 - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/hannah-wei-aso6SYJZGps-unsplash-scaled.jpg","datePublished":"2022-06-28T21:33:16+00:00","dateModified":"2025-06-14T04:51:46+00:00","description":"In this post we look at the U in CRUD that stands for UPDATE, and we build an ASP.NET Core CURD endpoint that uses UPSERT in a SQL++ query.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/hannah-wei-aso6SYJZGps-unsplash-scaled.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/hannah-wei-aso6SYJZGps-unsplash-scaled.jpg","width":2560,"height":1707,"caption":"Couchbase ASP.NET Core tutorial"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-nosql-part-4\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"ASP.NET Core CRUD with NoSQL: Part 4"}]},{"@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","first_name":"Matthew","last_name":"Groves","user_url":"https:\/\/crosscuttingconcerns.com","author_category":"","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\/13499","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=13499"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/13499\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/12603"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=13499"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=13499"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=13499"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=13499"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}