{"id":3655,"date":"2017-05-31T13:31:31","date_gmt":"2017-05-31T20:31:31","guid":{"rendered":"http:\/\/www.couchbase.com\/blog\/?p=3655"},"modified":"2025-06-13T19:29:01","modified_gmt":"2025-06-14T02:29:01","slug":"authentication-authorization-rbac-net","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/authentication-authorization-rbac-net\/","title":{"rendered":".NET\uc5d0\uc11c RBAC\uc744 \uc0ac\uc6a9\ud55c \uc778\uc99d \ubc0f \uad8c\ud55c \ubd80\uc5ec"},"content":{"rendered":"<div class=\"paragraph\">\n<p>\uc778\uc99d \ubc0f \uad8c\ud55c \ubd80\uc5ec\uac00 Couchbase Server 5.0\uc5d0\uc11c \ud06c\uac8c \uac1c\uc120\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uac1c\ubc1c\uc790 \ud504\ub9ac\ubdf0\uc5d0\uc11c \uc0c8\ub85c\uc6b4 RBAC \uae30\ub2a5\uc5d0 \ub300\ud574 \uc774\ubbf8 \ube14\ub85c\uadf8\uc5d0 \uc18c\uac1c\ud55c \ubc14 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/authentication-authorization-rbac\/\">RBAC\ub97c \uc0ac\uc6a9\ud55c \uc778\uc99d \ubc0f \uad8c\ud55c \ubd80\uc5ec<\/a> - \uc18c\uac1c \/ 1\ubd80<\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/authentication-authorization-rbac-part-2\/\">RBAC\ub97c \uc0ac\uc6a9\ud55c \uc778\uc99d \ubc0f \uad8c\ud55c \ubd80\uc5ec(2\ubd80)<\/a> - \uc0ac\uc6a9\uc790 \uad00\ub9ac<\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/new-sdk-authentication\/\">\uac1c\uc120\ub41c SDK \uc778\uc99d \ubc29\ubc95 - Couchbase 5.0<\/a> - \ud30c\uc774\uc36c, \uc790\ubc14, PHP, .NET\uc744 \uc18c\uac1c\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc774\uc81c Couchbase Server 5.0 \ubca0\ud0c0\uac00 \ucd9c\uc2dc\ub418\uc5c8\uc73c\ubbc0\ub85c \uc774\ub7ec\ud55c \uc0c8\ub85c\uc6b4 \uae30\ub2a5\uacfc \ud568\uaed8 Couchbase .NET SDK\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud55c \ubcf4\ub2e4 \uc2ec\uce35\uc801\uc778 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc744 \uc791\uc131\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>\uc774 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0 \uc0ac\uc6a9\ub41c \uc804\uccb4 \ucf54\ub4dc \uc0d8\ud50c\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/067RBACandSDK\/src\/rbacsdk\">\uae43\ud5c8\ube0c\uc5d0\uc11c \uc0ac\uc6a9 \uac00\ub2a5<\/a>.<\/em><\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_create_a_bucket\">\ubc84\ud0b7 \ub9cc\ub4e4\uae30<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\uc774\uc804 \uae00\uc5d0\uc11c \uc5b8\uae09\ud588\ub4ef\uc774 \ube44\ubc00\ubc88\ud638\uac00 \uc788\ub294 \ubc84\ud0b7\uc758 \uc2dc\ub300\ub294 \uc9c0\ub0ac\uc2b5\ub2c8\ub2e4. \ubbf8\ub798\ub294 \ud2b9\uc815 \ubc84\ud0b7\uc5d0 \ub300\ud55c \ud2b9\uc815 \uad8c\ud55c\uc744 \uac00\uc9c4 \uc0ac\uc6a9\uc790, \uc989 \uc0ac\uc6a9\uc790\ub4e4\uc758 \ubaab\uc785\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ubc84\ud0b7\uc744 \ub9cc\ub4dc\ub294 \uac83\ubd80\ud130 \uc2dc\uc791\ud558\uaca0\uc2b5\ub2c8\ub2e4. Couchbase UI\uc5d0\uc11c Couchbase\ub97c \uc124\uce58\ud560 \ub54c \uc0dd\uc131\ud55c \uad00\ub9ac\uc790\ub85c \ub85c\uadf8\uc778\ud569\ub2c8\ub2e4. \"\ubc84\ud0b7\"\uc73c\ub85c \uc774\ub3d9\ud558\uc5ec \"\ubc84\ud0b7 \ucd94\uac00\"(\uc624\ub978\ucabd \uc0c1\ub2e8)\ub97c \ud074\ub9ad\ud569\ub2c8\ub2e4. \"\ub370\uc774\ud130 \ubc84\ud0b7 \ucd94\uac00\" \ub300\ud654 \uc0c1\uc790\uac00 \ud45c\uc2dc\ub429\ub2c8\ub2e4. \"\uace0\uae09 \ubc84\ud0b7 \uc124\uc815\"\uc5d0\ub3c4 \ub354 \uc774\uc0c1 \"\ube44\ubc00\ubc88\ud638\" \ud544\ub4dc\uac00 \uc5c6\ub2e4\ub294 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/06701-add-new-bucket.png\" alt=\"Add new bucket - no authentication options anymore\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ubc84\ud0b7\uc5d0 \uc774\ub984\uacfc \uc57d\uac04\uc758 \uba54\ubaa8\ub9ac\ub97c \uc9c0\uc815\ud558\uace0 '\ubc84\ud0b7 \ucd94\uac00'\ub97c \ud074\ub9ad\ud569\ub2c8\ub2e4. \uc774\uc81c \ubc84\ud0b7\uc774 \uc0dd\uacbc\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc UI\uc758 \uad00\ub9ac\uc790 \uc678\uc5d0\ub294 \uc544\uc9c1 \uc544\ubb34\ub3c4 \uc774 \ubc84\ud0b7\uc5d0 \uc561\uc138\uc2a4\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_create_a_user\">\uc0ac\uc6a9\uc790 \ub9cc\ub4e4\uae30<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\uc774 \ubc84\ud0b7\uc5d0 \uc561\uc138\uc2a4\ud558\ub824\uba74 \uc0ac\uc6a9\uc790\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4. Couchbase 5.0\uc5d0\uc11c '\uc0ac\uc6a9\uc790'\ub294 \uc644\uc804\ud788 \uc0c8\ub85c\uc6b4 \uae30\ub2a5\uc73c\ub85c, Couchbase Server\uc5d0 \ub354 \ud48d\ubd80\ud55c \uc778\uc99d \ubc0f \uad8c\ud55c \ubd80\uc5ec \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uad00\ub9ac\uc790\ub85c \ub85c\uadf8\uc778\ud55c \uc0c1\ud0dc\uc5d0\uc11c '\ubcf4\uc548'\uc73c\ub85c \uc774\ub3d9\ud558\uc5ec \uc0ac\uc6a9\uc790 \ubaa9\ub85d\uc744 \ud655\uc778\ud569\ub2c8\ub2e4. '\uc0ac\uc6a9\uc790 \ucd94\uac00'(\uc624\ub978\ucabd \uc0c1\ub2e8)\ub97c \ud074\ub9ad\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/06702-add-new-user-for-authentication.png\" alt=\"Adding a new user for authentication and authorization\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc6d0\ud558\ub294 \uc774\ub984\uacfc \ube44\ubc00\ubc88\ud638\ub85c \uc0ac\uc6a9\uc790\ub97c \ub9cc\ub4ed\ub2c8\ub2e4. \uc0ac\uc6a9\uc790\uc5d0\uac8c \uc5b4\ub5a4 \uc5ed\ud560\uc744 \ubd80\uc5ec\ud560\uc9c0, \uc5b4\ub5a4 \ubc84\ud0b7\uc5d0 \ub300\ud574 \uc5b4\ub5a4 \uc5ed\ud560\uc744 \ubd80\uc5ec\ud560\uc9c0(\ud574\ub2f9\ub418\ub294 \uacbd\uc6b0) \uc120\ud0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uc0ac\uc6a9\uc790\uc5d0\uac8c \ubc29\uae08 \ub9cc\ub4e0 \ubc84\ud0b7(\uc608: \"mybucket\")\uc5d0 \ub300\ud574 \ub370\uc774\ud130 \uc791\uc131\uc790 \ubc0f \ub370\uc774\ud130 \ub9ac\ub354 \uc5ed\ud560\uc744 \ubd80\uc5ec\ud558\ub418, \ucffc\ub9ac \uc5ed\ud560\uc740 \ubd80\uc5ec\ud558\uc9c0 \uc54a\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/06703-add-data-roles.png\" alt=\"Adding authorization for data read and data write\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc0ac\uc6a9\uc790\uac00 \ucd94\uac00\ub418\uba74 \uc5ed\ud560 \uc704\ub85c \ub9c8\uc6b0\uc2a4\ub97c \uac00\uc838\uac00\uba74 \ud574\ub2f9 \uc5ed\ud560\uc758 \uc758\ubbf8\uc5d0 \ub300\ud55c \uc124\uba85\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/06704-tool-tip-authorization.gif\" alt=\"Authorization tool tip\" \/><\/span><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_authentication_and_authorization_with_the_couchbase_net_sdk\">Couchbase .NET SDK\ub97c \uc0ac\uc6a9\ud55c \uc778\uc99d \ubc0f \uad8c\ud55c \ubd80\uc5ec<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\uc774\uc81c \ubc84\ud0b7\uacfc \uc0ac\uc6a9\uc790\uac00 \uc0dd\uacbc\uc73c\ub2c8 .NET SDK\uc5d0\uc11c \uc774\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc744 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uba3c\uc800 <code>\ud074\ub7ec\uc2a4\ud130<\/code> \uac1d\uccb4\uc785\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">var cluster = new Cluster(new ClientConfiguration\r\n{\r\n    Servers = new List&lt;Uri&gt; { new Uri(\"https:\/\/localhost:8091\") }\r\n});<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\ud074\ub7ec\uc2a4\ud130\uac00 \uc788\uc9c0\ub9cc \ud504\ub85c\uadf8\ub7a8\uc774 \uc544\uc9c1 \uc778\uc99d\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \ud074\ub7ec\uc2a4\ud130\uc5d0 <code>\ube44\ubc00\ubc88\ud638 \uc778\uc99d\uae30<\/code> \uac1c\uccb4\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc790\uaca9 \uc99d\uba85\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4. \uadf8\ub7f0 \ub2e4\uc74c \ud574\ub2f9 \uac1c\uccb4\ub97c \ud074\ub7ec\uc2a4\ud130\uc758 <code>\uc778\uc99d<\/code> \uba54\uc11c\ub4dc\ub97c \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4. \uc544\ub798 \uc608\uc81c\uc5d0\uc11c\ub294 \uc798\ubabb\ub41c \uc790\uaca9 \uc99d\uba85\uc744 \uc0ac\uc6a9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">var authenticator = new PasswordAuthenticator(\"myuser\", \"wrongpassword\");\r\ncluster.Authenticate(authenticator);<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc774\uc81c \ub2e4\uc74c\uacfc \uac19\uc740 \uc791\uc5c5\uc744 \uc218\ud589\ud558\ub824\uace0 \ud558\uba74 <code>OpenBucket<\/code> \uac00 \ud074\ub7ec\uc2a4\ud130\uc5d0 \uc788\uc73c\uba74 \uc608\uc678\uac00 \ubc1c\uc0dd\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">try\r\n{\r\n    var bucket = cluster.OpenBucket(\"mybucket\");\r\n}\r\ncatch (Exception ex)\r\n{\r\n    Console.WriteLine(\"Error getting bucket.\");\r\n    Console.WriteLine(ex.Message);\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/06705-authentication-error.png\" alt=\"Error in authentication\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc774\uc81c \uc62c\ubc14\ub978 \uc790\uaca9 \uc99d\uba85\uc744 \uc0ac\uc6a9\ud558\uc5ec \ub2e4\uc2dc \uc2dc\ub3c4\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc778\uc99d\uc774 \uc791\ub3d9\ud569\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \ub2e4\uc74c\uc5d0\ub294 \uc778\uc99d\uc5d0 \ub300\ud574 \uc774\uc57c\uae30\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc774 \uc0ac\uc6a9\uc790\uc5d0\uac8c \ub370\uc774\ud130 \uc791\uc131\uc790 \ubc0f \ub370\uc774\ud130 \ub9ac\ub354 \uc5ed\ud560(mybucket\uc6a9)\ub9cc \ubd80\uc5ec\ud588\uc74c\uc744 \uae30\uc5b5\ud558\uc138\uc694. \ub530\ub77c\uc11c \uc9c0\uae08 \uc778\uc99d\ud558\uace0 \ubb38\uc11c\ub97c \uc0bd\uc785\ud558\uba74 \uc791\ub3d9\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">var cluster = new Cluster(new ClientConfiguration\r\n{\r\n    Servers = new List&lt;Uri&gt; { new Uri(\"https:\/\/localhost:8091\") }\r\n});\r\nvar authenticator = new PasswordAuthenticator(\"myuser\", \"password\");\r\ncluster.Authenticate(authenticator);\r\nvar bucket = cluster.OpenBucket(\"mybucket\");\r\n\r\n\/\/ insert a document, this should be allowed\r\nvar result = bucket.Insert(Guid.NewGuid().ToString(), new {foo = \"bar\"});\r\nConsole.WriteLine(\"Insert was successful: \" + result.Success);<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/06706-console-output-authorization.png\" alt=\"Console output when authentication and authorization are valid\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ud558\uc9c0\ub9cc \uc608\ub97c \ub4e4\uc5b4, \ub0b4\uac00 \uc2e4\ud589\ud558\ub824\uace0 \ud558\uba74 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/products\/n1ql\/\">N1QL(JSON\uc6a9 SQL) \ucffc\ub9ac<\/a>\ub97c \uc785\ub825\ud558\uba74 \uc2e4\ud328\ud569\ub2c8\ub2e4. \uc774\ub294 \ud574\ub2f9 \uc0ac\uc6a9\uc790\uc5d0\uac8c \ucffc\ub9ac\ub97c \uc2e4\ud589\ud560 \uad8c\ud55c\uc774 \uc5c6\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">var queryResult = bucket.Query&lt;int&gt;(\"SELECT COUNT(1) FROM `\" + bucket.Name + \"`\");\r\nConsole.WriteLine(\"Query was successful: \" + queryResult.Success);\r\nqueryResult.Errors.ForEach(e =&gt; Console.WriteLine(\"Error: \" + e.Message));<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc800\ub294 \uadf8\ub0e5 \uac04\ub2e8\ud55c <code>COUNT(1)<\/code> \uc9d1\uacc4 \ucffc\ub9ac\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4. \ud574\ub2f9 \uc0ac\uc6a9\uc790\ub294 \uad8c\ud55c\uc774 \uc5c6\uc73c\ubbc0\ub85c \ub2e4\uc74c\uacfc \uac19\uc740 \ub0b4\uc6a9\uc774 \ud45c\uc2dc\ub429\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/06707-authorization-query.png\" alt=\"No authorization for running a query\" \/><\/span><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_one_more_thing\">\ud55c \uac00\uc9c0 \ub354<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Couchbase Server 4.x\uc5d0\uc11c Couchbase Server 5.0\uc73c\ub85c \uc5c5\uadf8\ub808\uc774\ub4dc\ud560 \ub54c \uc774\uac83\uc774 \ubbf8\uce60 \uc601\ud5a5\uc774 \uac71\uc815\ub418\uc2e0\ub2e4\uba74 \uc5ec\uae30\uc5d0 \ud301\uc774 \uc788\uc2b5\ub2c8\ub2e4. \ubc84\ud0b7\uacfc \uc774\ub984\uc774 \uac19\uc740 \uc0ac\uc6a9\uc790(\uc608: \"foo\"\ub77c\ub294 \ubc84\ud0b7\uacfc \"foo\"\ub77c\ub294 \uc0ac\uc6a9\uc790)\ub97c \ub9cc\ub4dc\ub294 \uacbd\uc6b0, \ubc84\ud0b7 \ube44\ubc00\ubc88\ud638\ub97c \uc5ec\uc804\ud788 \uc694\uad6c\ud558\ub294 \uc774\uc804 Couchbase .NET API\ub294 \uc774\uc804\uacfc \ub3d9\uc77c\ud558\uac8c \uc791\ub3d9\ud569\ub2c8\ub2e4. \uc9c0\uae08\uc740 \ud574\ub2f9 \uc0ac\uc6a9\uc790\uc5d0\uac8c \"\ud074\ub7ec\uc2a4\ud130 \uad00\ub9ac\uc790\" \uc5ed\ud560\uc744 \ubd80\uc5ec\ud558\uae30\ub9cc \ud558\uba74 \ub429\ub2c8\ub2e4. \uc774\ub294 \uc5f0\ub300\ub97c \ud1b5\ud55c \uc5ed\ud560 \uc811\uadfc \ubc29\uc2dd\uc744 \uc0ac\uc6a9\ud558\ub3c4\ub85d \uc2dc\uc2a4\ud15c\uc744 \uc7ac\uc124\uacc4\ud560 \ub54c\uae4c\uc9c0 \uc784\uc2dc\ub85c \ud574\uacb0\ud560 \uc218 \uc788\ub294 \uc88b\uc740 \ubc29\ubc95\uc785\ub2c8\ub2e4.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_summary\">\uc694\uc57d<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Couchbase Server 5.0\uc774 \ubca0\ud0c0 \ubc84\uc804\uc73c\ub85c \ucd9c\uc2dc\ub418\uc5c8\uc2b5\ub2c8\ub2e4! \uc774\ub7ec\ud55c \uc5ed\ud560 \uae30\ubc18 \uc778\uc99d(RBAC) \uae30\ub2a5 \ub355\ubd84\uc5d0 Couchbase\ub294 \ubb38\uc11c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ubcf4\uc548\uc758 \uc120\ub450\uc8fc\uc790\uac00 \ub418\uc5c8\uace0, \uac1c\uc778\uc801\uc73c\ub85c\ub3c4 Couchbase\uac00 \uc774\ub7ec\ud55c \ubc29\ud5a5\uc73c\ub85c \ub098\uc544\uac00\uace0 \uc788\ub2e4\ub294 \uc0ac\uc2e4\uc774 \ub9e4\uc6b0 \uae30\uc058\uac8c \uc0dd\uac01\ud569\ub2c8\ub2e4. \ubcf4\uc548\uc740 \uc911\uc694\ud558\uc9c0\ub9cc \uac1c\ubc1c\uc790\ub4e4\uc774 \uac04\uacfc\ud558\ub294 \uacbd\uc6b0\uac00 \ub108\ubb34 \ub9ce\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uad81\uae08\ud55c \uc810\uc774 \uc788\uc73c\uc2dc\uba74 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/forums\/\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ud3ec\ub7fc\uc5d0\uc11c \uc9c8\ubb38\ud558\uc138\uc694.<\/a>\ub97c \ud074\ub9ad\ud558\uace0 \uc544\ub798\uc5d0 \ub313\uae00\uc744 \ub0a8\uae30\uac70\ub098 <a href=\"https:\/\/twitter.com\/mgroves\">\ud2b8\uc704\ud130 @mgroves\uc5d0\uc11c \ud551\ud558\uae30<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Authentication and authorization are vastly improved in Couchbase Server 5.0. We\u2019ve been blogging about the new RBAC features in the developer preview for a while. Authentication and Authorization with RBAC &#8211; introduction \/ part 1 Authentication and Authorization with RBAC [&hellip;]<\/p>\n","protected":false},"author":71,"featured_media":3004,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,1816,1813],"tags":[1455,1456,1903],"ppma_author":[8937],"class_list":["post-3655","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-couchbase-server","category-security","tag-authentication","tag-authorization","tag-rbac"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Authentication and Authorization with RBAC in .NET - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Examples of using the Couchbase .NET SDK with the new authentication and authorization features of Couchbase Server 5.0\" \/>\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\/authentication-authorization-rbac-net\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Authentication and Authorization with RBAC in .NET\" \/>\n<meta property=\"og:description\" content=\"Examples of using the Couchbase .NET SDK with the new authentication and authorization features of Couchbase Server 5.0\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/authentication-authorization-rbac-net\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-05-31T20:31:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T02:29:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/059-Hero-Key-Locks-Security-Authentication-Authorization-e1657658890360.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1125\" \/>\n\t<meta property=\"og:image:height\" content=\"750\" \/>\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\\\/authentication-authorization-rbac-net\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/authentication-authorization-rbac-net\\\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"Authentication and Authorization with RBAC in .NET\",\"datePublished\":\"2017-05-31T20:31:31+00:00\",\"dateModified\":\"2025-06-14T02:29:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/authentication-authorization-rbac-net\\\/\"},\"wordCount\":694,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/authentication-authorization-rbac-net\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2017\\\/03\\\/059-Hero-Key-Locks-Security-Authentication-Authorization-e1657658890360.jpeg\",\"keywords\":[\"authentication\",\"authorization\",\"RBAC\"],\"articleSection\":[\".NET\",\"Couchbase Server\",\"Security\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/authentication-authorization-rbac-net\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/authentication-authorization-rbac-net\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/authentication-authorization-rbac-net\\\/\",\"name\":\"Authentication and Authorization with RBAC in .NET - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/authentication-authorization-rbac-net\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/authentication-authorization-rbac-net\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2017\\\/03\\\/059-Hero-Key-Locks-Security-Authentication-Authorization-e1657658890360.jpeg\",\"datePublished\":\"2017-05-31T20:31:31+00:00\",\"dateModified\":\"2025-06-14T02:29:01+00:00\",\"description\":\"Examples of using the Couchbase .NET SDK with the new authentication and authorization features of Couchbase Server 5.0\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/authentication-authorization-rbac-net\\\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/authentication-authorization-rbac-net\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/authentication-authorization-rbac-net\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2017\\\/03\\\/059-Hero-Key-Locks-Security-Authentication-Authorization-e1657658890360.jpeg\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2017\\\/03\\\/059-Hero-Key-Locks-Security-Authentication-Authorization-e1657658890360.jpeg\",\"width\":1125,\"height\":750,\"caption\":\"NoSQL has built-in security with Couchbase\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/authentication-authorization-rbac-net\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Authentication and Authorization with RBAC in .NET\"}]},{\"@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:\\\/\\\/secure.gravatar.com\\\/avatar\\\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=gba51e6aacc53995c323a634e4502ef54\",\"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":"Authentication and Authorization with RBAC in .NET - The Couchbase Blog","description":"Couchbase Server 5.0\uc758 \uc0c8\ub85c\uc6b4 \uc778\uc99d \ubc0f \uad8c\ud55c \ubd80\uc5ec \uae30\ub2a5\uacfc \ud568\uaed8 Couchbase .NET SDK \uc0ac\uc6a9 \uc608\uc2dc","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\/authentication-authorization-rbac-net\/","og_locale":"ko_KR","og_type":"article","og_title":"Authentication and Authorization with RBAC in .NET","og_description":"Examples of using the Couchbase .NET SDK with the new authentication and authorization features of Couchbase Server 5.0","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/authentication-authorization-rbac-net\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-05-31T20:31:31+00:00","article_modified_time":"2025-06-14T02:29:01+00:00","og_image":[{"width":1125,"height":750,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/059-Hero-Key-Locks-Security-Authentication-Authorization-e1657658890360.jpeg","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\/authentication-authorization-rbac-net\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-net\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"Authentication and Authorization with RBAC in .NET","datePublished":"2017-05-31T20:31:31+00:00","dateModified":"2025-06-14T02:29:01+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-net\/"},"wordCount":694,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-net\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/059-Hero-Key-Locks-Security-Authentication-Authorization-e1657658890360.jpeg","keywords":["authentication","authorization","RBAC"],"articleSection":[".NET","Couchbase Server","Security"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-net\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-net\/","url":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-net\/","name":"Authentication and Authorization with RBAC in .NET - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-net\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-net\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/059-Hero-Key-Locks-Security-Authentication-Authorization-e1657658890360.jpeg","datePublished":"2017-05-31T20:31:31+00:00","dateModified":"2025-06-14T02:29:01+00:00","description":"Couchbase Server 5.0\uc758 \uc0c8\ub85c\uc6b4 \uc778\uc99d \ubc0f \uad8c\ud55c \ubd80\uc5ec \uae30\ub2a5\uacfc \ud568\uaed8 Couchbase .NET SDK \uc0ac\uc6a9 \uc608\uc2dc","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-net\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-net\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-net\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/059-Hero-Key-Locks-Security-Authentication-Authorization-e1657658890360.jpeg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/059-Hero-Key-Locks-Security-Authentication-Authorization-e1657658890360.jpeg","width":1125,"height":750,"caption":"NoSQL has built-in security with Couchbase"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-net\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Authentication and Authorization with RBAC in .NET"}]},{"@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:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=gba51e6aacc53995c323a634e4502ef54","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\/"}]}},"acf":[],"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","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/3655","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=3655"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/3655\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/3004"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=3655"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=3655"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=3655"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=3655"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}