{"id":17313,"date":"2025-07-16T10:17:31","date_gmt":"2025-07-16T17:17:31","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=17313"},"modified":"2025-07-25T12:06:01","modified_gmt":"2025-07-25T19:06:01","slug":"ef-core-couchbase-integrations","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/ef-core-couchbase-integrations\/","title":{"rendered":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc640 \uc5f0\ub3d9\ub418\ub294 3\uac00\uc9c0 EF \ud575\uc2ec \ud1b5\ud569 \uae30\ub2a5"},"content":{"rendered":"<p>Couchbase\uc758 \uc0c8\ub85c\uc6b4 <a href=\"https:\/\/docs.couchbase.com\/efcore-provider\/current\/overview.html\" target=\"_blank\" rel=\"noopener\">EF \ucf54\uc5b4 \uacf5\uae09\uc790<\/a> \ub294 \uae30\uc874\uc5d0 \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \ubb36\uc5ec \uc788\ub358 \uac15\ub825\ud55c .NET \ud1b5\ud569\uc758 \ubb38\uc744 \uc5f4\uc5b4\uc90d\ub2c8\ub2e4. \uc774 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 Identity, GraphQL \ubc0f OData\uac00 \ubaa8\ub450 Couchbase\uc5d0\uc11c \uc5b4\ub5bb\uac8c \uc791\ub3d9\ud558\ub294\uc9c0 \uc124\uba85\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc774 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc548\ub0b4\ud574 \ub4dc\ub9ac\uaca0\uc2b5\ub2c8\ub2e4. <b>\uc138 \uac00\uc9c0 \uace0\uae09 EF Core \ud1b5\ud569<\/b> Couchbase\ub85c \uc131\uacf5\uc801\uc73c\ub85c \ud14c\uc2a4\ud2b8\ud588\uc2b5\ub2c8\ub2e4:<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>ASP.NET \ud575\uc2ec \uc544\uc774\ub374\ud2f0\ud2f0<\/b><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>GraphQL(\ud56b \ucd08\ucf5c\ub9bf\uc744 \ud1b5\ud55c)<\/b><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>OData<\/b><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p><strong>\ucc38\uace0:\u00a0<\/strong>\uc774\ub7ec\ud55c \ud1b5\ud569 \uae30\ub2a5\uc740 \uc81c\ud55c\ub41c \ud14c\uc2a4\ud2b8\ub97c \uae30\ubc18\uc73c\ub85c \ud558\uba70 \uc544\uc9c1 \uacf5\uc2dd\uc801\uc73c\ub85c \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ub9c8\uc77c\ub9ac\uc9c0\ub294 \ub2e4\ub97c \uc218 \uc788\uc9c0\ub9cc \uc9c0\uae08\uae4c\uc9c0\ub294 \ub9ce\uc740 \uac00\ub2a5\uc131\uc744 \ubcf4\uc5ec\uc8fc\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2 style=\"font-weight: 400;\">ASP.NET \ud575\uc2ec \uc544\uc774\ub374\ud2f0\ud2f0<\/h2>\n<p><em><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.AspNetCore.Identity.EntityFrameworkCore\" target=\"_blank\" rel=\"noopener\">Microsoft.AspNetCore.Identity.EntityFrameworkCore<\/a><\/em> \ub294 ASP.NET \uc571\uc744 \uc704\ud55c \ud50c\ub7ec\uadf8 \uc564 \ud50c\ub808\uc774 \uc778\uc99d \ubc0f \uc0ac\uc6a9\uc790 \uad00\ub9ac \uc2dc\uc2a4\ud15c\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n<p>Couchbase\uc758 EF Core \uc81c\uacf5\uc5c5\uccb4\uac00 \uc798 \uc791\ub3d9\ud569\ub2c8\ub2e4. \ud55c \uac00\uc9c0 \uc8fc\uc758\ud574\uc57c \ud560 \uc810\uc740 <strong>\uc801\uc808\ud55c \uceec\ub809\uc158\uc774 \uba3c\uc800 \uc874\uc7ac\ud569\ub2c8\ub2e4.<\/strong> (\uc608: AspNetUsers, AspNetRoles \ub4f1).<\/p>\n<p><strong>\ucc38\uace0:\u00a0<\/strong>\ub2e4\uc74c \uceec\ub809\uc158\uc744 \ubbf8\ub9ac \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4: AspNetUsers, AspNetRoles, AspNetUserRoles, AspNetUserClaims, AspNetUserLogins, AspNetUserTokens, AspNetRoleClaims.<\/p>\n<h3 style=\"font-weight: 200;\">EF \uc124\uc815 \uc608\uc2dc<\/h3>\n<pre class=\"nums:false lang:default decode:true\">public \ud074\ub798\uc2a4 AppDbContext : IdentityDbContext\r\n{\r\n    public AppDbContext(DbContextOptions options) : base(options) { }\r\n\r\n    \ubcf4\ud638\ub41c \uc624\ubc84\ub77c\uc774\ub4dc void OnModelCreating(\ubaa8\ub378 \ube4c\ub354 \ube4c\ub354)\r\n    {\r\n        base.OnModelCreating(builder);\r\n\r\n        builder.Entity().ToCouchbaseCollection(this, \"AspNetUsers\");\r\n        builder.Entity().ToCouchbaseCollection(this, \"AspNetRoles\");\r\n        builder.Entity&lt;IdentityUserRole&gt;().ToCouchbaseCollection(this, \"AspNetUserRoles\");\r\n        builder.Entity&lt;IdentityUserClaim&gt;().ToCouchbaseCollection(this, \"AspNetUserClaims\");\r\n        builder.Entity&lt;IdentityUserLogin&gt;().ToCouchbaseCollection(this, \"AspNetUserLogins\");\r\n        builder.Entity&lt;IdentityUserToken&gt;().ToCouchbaseCollection(this, \"AspNetUserTokens\");\r\n        builder.Entity&lt;IdentityRoleClaim&gt;().ToCouchbaseCollection(this, \"AspNetRoleClaims\");\r\n    }\r\n}\r\n\r\npublic class ApplicationUser : IdentityUser { }<\/pre>\n<h3 style=\"font-weight: 200;\">MVC \uc778\uc99d \uc608\uc81c<\/h3>\n<p>\ub2e4\uc74c\uc740 \ub4f1\ub85d, \ub85c\uadf8\uc778, \ub85c\uadf8\uc544\uc6c3 \ubc0f \uc0ac\uc6a9\uc790 \uc9c0\uc815 \uc5ed\ud560\uc774 \uc788\ub294 ASP.NET Core MVC \ucee8\ud2b8\ub864\ub7ec\uc785\ub2c8\ub2e4:<\/p>\n<pre class=\"nums:false lang:default decode:true\">\uacf5\uc6a9 \ud074\ub798\uc2a4 AuthController : \ucee8\ud2b8\ub864\ub7ec\r\n{\r\n    private \uc77d\uae30 \uc804\uc6a9 \uc0ac\uc6a9\uc790 \uad00\ub9ac\uc790  _\uc0ac\uc6a9\uc790 \uad00\ub9ac\uc790;\r\n    private readonly SignInManager _signInManager;\r\n    private readonly RoleManager _roleManager;\r\n\r\n    public AuthController(UserManager userManager, SignInManager signInManager, RoleManager roleManager)\r\n    {\r\n        _\uc0ac\uc6a9\uc790 \uad00\ub9ac\uc790 = \uc0ac\uc6a9\uc790 \uad00\ub9ac\uc790;\r\n        _signInManager = signInManager;\r\n        _roleManager = roleManager;\r\n    }\r\n\r\n    public IActionResult Register() =&gt; View();\r\n\r\n    [HttpPost]\r\n    public async Task Register(RegisterModel model)\r\n    {\r\n        if (!ModelState.IsValid) return View(model);\r\n\r\n        var user = new ApplicationUser { \uc0ac\uc6a9\uc790 \uc774\ub984 = \ubaa8\ub378.\uc774\uba54\uc77c, \uc774\uba54\uc77c = \ubaa8\ub378.\uc774\uba54\uc77c };\r\n        var result = await _userManager.CreateAsync(user, model.Password);\r\n        if (result.Succeeded)\r\n        {\r\n            var roleName = \"CustomRole\";\r\n            if (!await _roleManager.RoleExistsAsync(roleName))\r\n                await _roleManager.CreateAsync(new IdentityRole(roleName));\r\n\r\n            await _userManager.AddToRoleAsync(user, roleName);\r\n            await _signInManager.SignInAsync(user, isPersistent: false);\r\n            return RedirectToAction(\"Index\", \"Home\");\r\n        }\r\n\r\n        foreach (var error in result.Errors) ModelState.AddModelError(\"\", error.Description);\r\n        \ubc18\ud658 \ubdf0(\ubaa8\ub378);\r\n    }\r\n\r\n    public IActionResult Login() =&gt; View();\r\n\r\n    [HttpPost]\r\n    public async Task Login(LoginModel model)\r\n    {\r\n        if (!ModelState.IsValid) return View(model);\r\n\r\n        var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, false, false);\r\n        if (result.Succeeded)\r\n            RedirectToAction(\"Index\", \"Home\")\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4;\r\n\r\n        ModelState.AddModelError(\"\", \"\uc798\ubabb\ub41c \ub85c\uadf8\uc778 \uc2dc\ub3c4\uc785\ub2c8\ub2e4.\");\r\n        \ubc18\ud658 View(model);\r\n    }\r\n\r\n    public async Task Logout()\r\n    {\r\n        await _signInManager.SignOutAsync();\r\n        return RedirectToAction(\"Index\", \"Home\");\r\n    }\r\n}<\/pre>\n<p>\ub370\uc774\ud130\ub294 \ud45c\uc900 ID \uad6c\uc870\ub97c \ub530\ub974\uba70, Couchbase \ubb38\uc11c\uc5d0 \uc800\uc7a5\ub429\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 <em>AspNetUser<\/em> \uceec\ub809\uc158:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-17314\" style=\"border: 1px solid Gainsboro;\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/image1-1.png\" alt=\"A document in AspNetUser collection\" width=\"464\" height=\"338\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/image1-1.png 464w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/image1-1-300x219.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/image1-1-16x12.png 16w\" sizes=\"auto, (max-width: 464px) 100vw, 464px\" \/><\/p>\n<hr \/>\n<h2 style=\"font-weight: 400;\">\ud56b \ucd08\ucf5c\ub9bf\uc744 \uc0ac\uc6a9\ud55c \uadf8\ub798\ud504QL<\/h2>\n<p><a href=\"https:\/\/chillicream.com\/docs\/hotchocolate\/v15\" target=\"_blank\" rel=\"noopener\">\ud56b \ucd08\ucf5c\ub9bf<\/a> \ub294 \ub110\ub9ac \uc0ac\uc6a9\ub418\ub294 .NET\uc6a9 GraphQL \uc11c\ubc84\uc785\ub2c8\ub2e4. \uc774 \uc11c\ubc84\ub294 \uacf5\uae09\uc790\uc758 LINQ \uae30\ub2a5(Couchbase\uac00 \uc81c\uacf5\ud558\ub294 \uae30\ub2a5)\uc744 \ud65c\uc6a9\ud558\uc5ec EF Core\uc640 \ud1b5\ud569\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc989, GraphQL \ucffc\ub9ac\uac00 LINQ\ub85c \ubcc0\ud658\ub41c \ub2e4\uc74c Couchbase SQL++\ub85c \ubcc0\ud658\ub429\ub2c8\ub2e4.<\/p>\n<h3 style=\"font-weight: 200;\">\uc124\uc815<\/h3>\n<pre class=\"nums:false lang:default decode:true\">\uacf5\uc6a9 \ud074\ub798\uc2a4 \uc704\uc82f \ucffc\ub9ac\r\n{\r\n    [UseFiltering]\r\n    [UseSorting]\r\n    public IQueryable GetWidgets([Service] WidgetDbContext dbContext)\r\n        =&gt; dbContext.Widgets;\r\n}\r\n\r\n\/\/ Program.cs:\r\n\r\n\ube4c\ub354.\uc11c\ube44\uc2a4\r\n    .AddGraphQLServer()\r\n    .AddQueryType()\r\n    .AddFiltering()\r\n    .AddSorting()\r\n    .AddProjections();\r\n\r\napp.MapGraphQL();<\/pre>\n<h3 style=\"font-weight: 200;\">\uc0ac\uc6a9 \uc608<\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\ub2e4\uc74c\uc73c\ub85c \uc774\ub3d9 <em>\/graphql<\/em> \uc744 \ud074\ub9ad\ud569\ub2c8\ub2e4(\uc6f9 \uc778\ud130\ud398\uc774\uc2a4\uac00 \ub098\ud0c0\ub0a9\ub2c8\ub2e4).<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-17315\" style=\"border: 1px solid Gainsboro;\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/image3-1.png\" alt=\"\" width=\"945\" height=\"756\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/image3-1.png 945w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/image3-1-300x240.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/image3-1-768x614.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/image3-1-15x12.png 15w\" sizes=\"auto, (max-width: 945px) 100vw, 945px\" \/><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\ub2e4\uc74c\uacfc \uac19\uc740 \ucffc\ub9ac\ub97c \uc2dc\ub3c4\ud574 \ubcf4\uc138\uc694:<\/li>\n<\/ul>\n<pre class=\"nums:false lang:default decode:true\">\ucffc\ub9ac {\r\n  widgets(where: { name: { contains: \"foo\" } }, order: { createdDt: DESC }) {\r\n    id\r\n    name\r\n    price\r\n    numInStock\r\n    createdDt\r\n  }\r\n}\r\n<\/pre>\n<p>\ub2e4\uc74c\uacfc \uac19\uc740 \uacb0\uacfc\uac00 \ubc18\ud658\ub429\ub2c8\ub2e4:<\/p>\n<pre class=\"nums:false lang:default decode:true\">{\r\n  \"\ub370\uc774\ud130\": {\r\n    \"\uc704\uc82f\": [\r\n      {\r\n        \"id\": \"b5c494fe-135f-4f01-bf12-6e4ad1eee829\",\r\n        \"name\": \"\ud478\ubc14\",\r\n        \"price\": 1.99,\r\n        \"numInStock\": 50,\r\n        \"createdDt\": \"2025-06-18T18:11:19.149Z\"\r\n      }\r\n    ]\r\n  }\r\n}<\/pre>\n<h3 style=\"font-weight: 200;\">\ud301<\/h3>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">GraphQL \ucffc\ub9ac\ub294 GSI \uc778\ub371\uc2a4\uc640 \uc77c\uce58\ud574\uc57c \ud569\ub2c8\ub2e4(\ub0b4\ubd80\uc801\uc73c\ub85c\ub294 SQL++ \ucffc\ub9ac\uc77c \ubfd0\uc785\ub2c8\ub2e4).<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/covering-indexes.html\" target=\"_blank\" rel=\"noopener\">\ud45c\uc9c0 \uc778\ub371\uc2a4<\/a> \ubc0f \uae30\ud0c0 SQL++ \uc778\ub371\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc131\ub2a5\uc744 \uac1c\uc120\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<hr \/>\n<h2 style=\"font-weight: 400;\">OData<\/h2>\n<p><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.AspNetCore.OData\" target=\"_blank\" rel=\"noopener\">Microsoft.AspNetCore.OData<\/a> \ub294 EF Core \ub370\uc774\ud130\ub97c OData \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub85c \ub178\ucd9c\ud558\ubbc0\ub85c Excel, Power BI, Tableau\uc640 \uac19\uc740 \ub3c4\uad6c\ub97c Couchbase\uc5d0 \uc27d\uac8c \uc5f0\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3 style=\"font-weight: 200;\">\ud504\ub85c\uadf8\ub7a8.cs \uc0d8\ud50c<\/h3>\n<pre class=\"nums:false lang:default decode:true\">\ube4c\ub354.\uc11c\ube44\uc2a4.\ucd94\uac00 \ucee8\ud2b8\ub864\ub7ec \uc704\ub4dc \ubdf0()\r\n  .AddOData(opt =&gt;\r\n  {\r\n    var odataBuilder = new ODataConventionModelBuilder();\r\n    odataBuilder.EntitySet(\"\uc704\uc82f\");\r\n\r\n    opt.AddRouteComponents(\"odata\", odataBuilder.GetEdmModel())\r\n      .Filter()\r\n      .OrderBy()\r\n      .Select()\r\n      .Expand()\r\n      .Count()\r\n      .SetMaxTop(100);\r\n  });<\/pre>\n<h3 style=\"font-weight: 200;\">\ucee8\ud2b8\ub864\ub7ec<\/h3>\n<pre class=\"nums:false lang:default decode:true\">[HttpGet(\"\/\ub370\uc774\ud130\/\uc704\uc82f\")]]\r\n[EnableQuery]\r\npublic IQueryable GetOData() =&gt; _context.Widgets;<\/pre>\n<h3 style=\"font-weight: 200;\">OData \ucffc\ub9ac \uc608\uc81c<\/h3>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">https:\/\/localhost:7037\/odata\/Widgets?$filter=price gt 1&amp;$orderby=name<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">https:\/\/localhost:7037\/odata\/Widgets?$select=name,price&amp;$top=10<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-17316\" style=\"border: 1px solid Gainsboro;\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/image2-1.png\" alt=\"\" width=\"593\" height=\"572\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/image2-1.png 593w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/image2-1-300x289.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/image2-1-12x12.png 12w\" sizes=\"auto, (max-width: 593px) 100vw, 593px\" \/><\/p>\n<p><strong>\ucc38\uace0:<\/strong> EF Core LINQ \ucffc\ub9ac\ub97c SQL++\ub85c \ubcc0\ud658\ud560 \uc218 \uc788\ub294\uc9c0, \ud544\ud130\ub9c1\/\uc18c\ud305\ub41c \ud544\ub4dc\uac00 Couchbase\uc5d0\uc11c \uc778\ub371\uc2f1\ub418\ub294\uc9c0 \ud655\uc778\ud558\uc138\uc694.<\/p>\n<h2 style=\"font-weight: 400;\">\ub9c8\ubb34\ub9ac<\/h2>\n<p>\uc774\ub7ec\ud55c \ubaa8\ub4e0 \ud1b5\ud569\uc740 EF Core\uc5d0 \uc758\ud574 \uc9c0\uc6d0\ub418\uba70, \uc774\uc81c Couchbase \uc9c0\uc6d0\uc744 \ud1b5\ud574 \ucf54\ub4dc\uc5d0\uc11c \uc774\ub97c \ucd5c\ub300\ud55c \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc548\uc804\ud55c \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uad6c\ucd95\ud558\ub4e0, GraphQL API\ub97c \uad6c\ucd95\ud558\ub4e0, BI \ub3c4\uad6c\uc640 \ud1b5\ud569\ud558\ub4e0, EF Core\uc640 Couchbase\uc758 \uc870\ud569\uc744 \ud1b5\ud574 \ubaa8\ub4e0 \uac83\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4.<\/p>\n<p>\ub354 \uc790\uc138\ud788 \uc54c\uace0 \uc2f6\uc73c\uc2e0\uac00\uc694? \ub2e4\uc74c\uc5d0 \uc5b4\ub5a4 \ud1b5\ud569 \uae30\ub2a5\uc744 \uc0b4\ud3b4\ubcf4\uace0 \uc2f6\uc740\uc9c0 \uc54c\ub824\uc8fc\uc138\uc694!<\/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\/couchbase-on-discord\/\" target=\"_blank\" rel=\"noopener\">\ubd88\ud654<\/a><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/forums\/c\/net-sdk\/\" target=\"_blank\" rel=\"noopener\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 .NET \ud3ec\ub7fc<\/a><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/docs.couchbase.com\/efcore-provider\/current\/overview.html\" target=\"_blank\" rel=\"noopener\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 EF \ucf54\uc5b4 \ubb38\uc11c<\/a><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/www.youtube.com\/watch?v=KNIMjTHtxRs\" target=\"_blank\" rel=\"noopener\">\uc774 \uac8c\uc2dc\ubb3c\uc5d0\uc11c \ub2e4\ub8e8\ub294 EF Core \ud1b5\ud569\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\ub824\uba74 \uc774 \uc9e7\uc740 \ub3d9\uc601\uc0c1\uc744 \ud655\uc778\ud558\uc138\uc694.<\/a><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/www.youtube.com\/watch?v=0UDFJvMg5Wc\" target=\"_blank\" rel=\"noopener\">\ub610\ud55c Couchbase EF Core \uacf5\uae09\uc790\uc640 \uadf8 \uae30\ub2a5\uc744 \uc18c\uac1c\ud558\ub294 .NET \ucee4\ubba4\ub2c8\ud2f0 \uc2a4\ud0e0\ub4dc\uc5c5\uc744 \uc2dc\uccad\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><iframe loading=\"lazy\" title=\"NET \ub370\uc774\ud130 \ucee4\ubba4\ub2c8\ud2f0 \uc2a4\ud0e0\ub4dc\uc5c5 - \uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc5d0\ub294 EF \ucf54\uc5b4 \uacf5\uae09\uc790\uac00 \uc788\uc2b5\ub2c8\ub2e4.\" width=\"900\" height=\"506\" src=\"https:\/\/www.youtube.com\/embed\/0UDFJvMg5Wc?feature=oembed&#038;enablejsapi=1&#038;origin=https:\/\/www.couchbase.com\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>","protected":false},"excerpt":{"rendered":"<p>Couchbase\u2019s new EF Core provider opens the door to some powerful .NET integrations: even ones traditionally tied to relational databases. This post walks through how Identity, GraphQL, and OData all work with Couchbase. In this post, I\u2019ll walk through three [&hellip;]<\/p>","protected":false},"author":71,"featured_media":17317,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,10126,2242],"tags":[1806,2210,1468],"ppma_author":[8937],"class_list":["post-17313","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-asp-dotnet","category-connectors","tag-entity-framework","tag-graphql","tag-linq"],"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>3 EF Core Integrations That Work with Couchbase - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Whether you\u2019re building secure web applications, GraphQL APIs or integrating with BI tools, The EF Core and Couchbase combo makes it possible\" \/>\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\/ef-core-couchbase-integrations\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"3 EF Core Integrations That Work with Couchbase\" \/>\n<meta property=\"og:description\" content=\"Whether you\u2019re building secure web applications, GraphQL APIs or integrating with BI tools, The EF Core and Couchbase combo makes it possible\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/ef-core-couchbase-integrations\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-07-16T17:17:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-25T19:06:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/blog-ef-core-integrations.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=\"3\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"3 EF Core Integrations That Work with Couchbase\",\"datePublished\":\"2025-07-16T17:17:31+00:00\",\"dateModified\":\"2025-07-25T19:06:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/\"},\"wordCount\":493,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/blog-ef-core-integrations.png\",\"keywords\":[\"Entity Framework\",\"graphql\",\"Linq\"],\"articleSection\":[\".NET\",\"ASP.NET\",\"Connectors\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/\",\"name\":\"3 EF Core Integrations That Work with Couchbase - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/blog-ef-core-integrations.png\",\"datePublished\":\"2025-07-16T17:17:31+00:00\",\"dateModified\":\"2025-07-25T19:06:01+00:00\",\"description\":\"Whether you\u2019re building secure web applications, GraphQL APIs or integrating with BI tools, The EF Core and Couchbase combo makes it possible\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/blog-ef-core-integrations.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/blog-ef-core-integrations.png\",\"width\":2400,\"height\":1256},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"3 EF Core Integrations That Work with Couchbase\"}]},{\"@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":"3 EF Core Integrations That Work with Couchbase - The Couchbase Blog","description":"\uc548\uc804\ud55c \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158, GraphQL API\ub97c \uad6c\ucd95\ud558\ub4e0, BI \ub3c4\uad6c\uc640 \ud1b5\ud569\ud558\ub4e0, EF Core\uc640 Couchbase\uc758 \uc870\ud569\uc744 \ud1b5\ud574 \ub2e4\uc74c\uc744 \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.","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\/ef-core-couchbase-integrations\/","og_locale":"ko_KR","og_type":"article","og_title":"3 EF Core Integrations That Work with Couchbase","og_description":"Whether you\u2019re building secure web applications, GraphQL APIs or integrating with BI tools, The EF Core and Couchbase combo makes it possible","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/ef-core-couchbase-integrations\/","og_site_name":"The Couchbase Blog","article_published_time":"2025-07-16T17:17:31+00:00","article_modified_time":"2025-07-25T19:06:01+00:00","og_image":[{"width":2400,"height":1256,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/blog-ef-core-integrations.png","type":"image\/png"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"3\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"3 EF Core Integrations That Work with Couchbase","datePublished":"2025-07-16T17:17:31+00:00","dateModified":"2025-07-25T19:06:01+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/"},"wordCount":493,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/blog-ef-core-integrations.png","keywords":["Entity Framework","graphql","Linq"],"articleSection":[".NET","ASP.NET","Connectors"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/","url":"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/","name":"3 EF Core Integrations That Work with Couchbase - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/blog-ef-core-integrations.png","datePublished":"2025-07-16T17:17:31+00:00","dateModified":"2025-07-25T19:06:01+00:00","description":"\uc548\uc804\ud55c \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158, GraphQL API\ub97c \uad6c\ucd95\ud558\ub4e0, BI \ub3c4\uad6c\uc640 \ud1b5\ud569\ud558\ub4e0, EF Core\uc640 Couchbase\uc758 \uc870\ud569\uc744 \ud1b5\ud574 \ub2e4\uc74c\uc744 \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/blog-ef-core-integrations.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/07\/blog-ef-core-integrations.png","width":2400,"height":1256},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"3 EF Core Integrations That Work with Couchbase"}]},{"@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\/17313","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=17313"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/17313\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/17317"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=17313"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=17313"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=17313"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=17313"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}