{"id":4005,"date":"2017-09-08T11:51:32","date_gmt":"2017-09-08T18:51:32","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=4005"},"modified":"2025-06-13T19:40:26","modified_gmt":"2025-06-14T02:40:26","slug":"dependency-injection-aspnet-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/dependency-injection-aspnet-couchbase\/","title":{"rendered":"ASP.NET Core \ubc0f Couchbase\ub97c \uc0ac\uc6a9\ud55c \uc885\uc18d\uc131 \uc8fc\uc785"},"content":{"rendered":"<div class=\"paragraph\">\n<p>\uc758\uc874\uc131 \uc8fc\uc785\uc740 \ucf54\ub529\uc744 \ub354 \uc27d\uac8c \ub9cc\ub4e4\uc5b4\uc8fc\ub294 \ub514\uc790\uc778 \ud328\ud134\uc785\ub2c8\ub2e4. \ubcf5\uc7a1\ud55c \uc885\uc18d\uc131\uc774 \uc788\ub294 \uac1d\uccb4\ub97c \uc778\uc2a4\ud134\uc2a4\ud654\ud574\uc57c \ud558\ub294 \ubc88\uac70\ub85c\uc6c0\uc744 \ub35c\uc5b4\uc8fc\uace0 \ud14c\uc2a4\ud2b8\ub97c \ub354 \uc27d\uac8c \uc791\uc131\ud560 \uc218 \uc788\uac8c \ud574\uc90d\ub2c8\ub2e4. \uc885\uc18d\uc131 \uc8fc\uc785\uc740 <a href=\"https:\/\/github.com\/couchbaselabs\/Couchbase.Extensions\/blob\/master\/docs\/dependency-injection.md\">Couchbase.Extensions.DependencyInjection \ub77c\uc774\ube0c\ub7ec\ub9ac(GitHub)<\/a>\ub97c \uc0ac\uc6a9\ud558\uba74 ASP.NET Core \uc885\uc18d\uc131 \uc8fc\uc785 \ud504\ub808\uc784\uc6cc\ud06c \ub0b4\uc5d0\uc11c Couchbase \ud074\ub7ec\uc2a4\ud130 \ubc0f \ubc84\ud0b7\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc9c0\ub09c \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0\uc11c <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/distributed-caching-aspnet-couchbase\/\">ASP.NET\uc744 \uc0ac\uc6a9\ud55c \ubd84\uc0b0 \uce90\uc2f1<\/a>\uc5d0\uc11c \uc758\uc874\uc131 \uc8fc\uc785 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc5b8\uae09\ud588\uc2b5\ub2c8\ub2e4. \uc774 \uae00\uc5d0\uc11c \uc758\uc874\uc131 \uc8fc\uc785\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc81c\uac00 \ub9cc\ub4e0 \ucf54\ub4dc \uc0d8\ud50c\uc740 \ub2e4\uc74c \ub9c1\ud06c\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/078AspNetCoreDependencyInjection\/src\/CouchbaseDIExample\">GitHub<\/a>.<\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_basic_setup_of_couchbase\">Couchbase\uc758 \uae30\ubcf8 \uc124\uc815<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\uba3c\uc800 Couchbase Server \ud074\ub7ec\uc2a4\ud130\uac00 \uc2e4\ud589 \uc911\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. \uac00\ub2a5\ud569\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\uc124\uce58\ud558\uae30 <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.0\/install\/install-intro.html\">\uc628\ud504\ub808\ubbf8\uc2a4<\/a><\/li>\n<li>\ucee8\ud14c\uc774\ub108\uc5d0\uc11c \uc2e4\ud589 <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/getting-started\/do-a-quick-install.html\">\ub3c4\ucee4 \uc0ac\uc6a9<\/a><\/li>\n<li>\ub2e4\uc74c\uacfc \uac19\uc740 \ud074\ub77c\uc6b0\ub4dc \uc11c\ube44\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc138\uc694. <a href=\"https:\/\/azuremarketplace.microsoft.com\/en-us\/marketplace\/apps\/couchbase.couchbase-enterprise\">Azure<\/a><\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub2e4\uc74c\uc73c\ub85c \ub2e4\uc74c\uc744 \uc218\ud589\ud574\uc57c \ud569\ub2c8\ub2e4. <a href=\"https:\/\/docs.couchbase.com\/server\/current\/manage\/manage-buckets\/create-bucket.html\">\ubc84\ud0b7 \ub9cc\ub4e4\uae30<\/a> \ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \uc774 \ubc84\ud0b7\uc740 Couchbase\uc640 \ud568\uaed8 \uc81c\uacf5\ub418\ub294 \"\uc5ec\ud589\uc6a9 \uc0d8\ud50c\" \ubc84\ud0b7\uc774\uac70\ub098 \uc9c1\uc811 \ub9cc\ub4e0 \ubc84\ud0b7\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>Couchbase Server 5.0\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0, \uc0ac\uc6a9\uc790\ub3c4 \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4. \uc774 \uc0ac\uc6a9\uc790\uc5d0\uac8c \ud074\ub7ec\uc2a4\ud130 \uad00\ub9ac\uc790 \uad8c\ud55c\uc744 \ubd80\uc5ec\ud558\uace0 \ubc84\ud0b7\uacfc \uac19\uc740 \uc774\ub984\uc744 \uc9c0\uc815\ud558\uc138\uc694(\uc27d\uac8c \ub530\ub77c\ud560 \uc218 \uc788\ub3c4\ub85d \ud558\uae30 \uc704\ud574).<\/em><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_dependency_injection_with_couchbase_extensions\">Couchbase.Extensions\ub97c \uc0ac\uc6a9\ud55c \uc885\uc18d\uc131 \uc8fc\uc785<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\uadf8\ub9ac\uace0 <a href=\"https:\/\/github.com\/couchbaselabs\/Couchbase.Extensions\">Couchbase.Extensions(GitHub)<\/a> \ud504\ub85c\uc81d\ud2b8\ub294 Couchbase Server \ubc0f ASP.NET Core \uc791\uc5c5\uc744 \ub354 \uac04\ub2e8\ud558\uac8c \ub9cc\ub4dc\ub294 \uac83\uc744 \ubaa9\ud45c\ub85c \ud569\ub2c8\ub2e4. \uc885\uc18d\uc131 \uc8fc\uc785\uc740 \uc774\ub7ec\ud55c \ud655\uc7a5 \uae30\ub2a5 \uc911 \ud558\ub098\uc5d0 \ubd88\uacfc\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>NuGet\uc744 \uc0ac\uc6a9\ud558\uc5ec ASP.NET Core \ud504\ub85c\uc81d\ud2b8\uc5d0 \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\ud328\ud0a4\uc9c0 \uad00\ub9ac\uc790\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4: <code>Install-Package Couchbase.Extensions.DependencyInjection -Version 1.0.2<\/code><\/li>\n<li>NuGet UI \uc0ac\uc6a9<\/li>\n<li>.NET \uba85\ub839\uc904\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4: <code>\ub2f7\ub137 Couchbase.Extensions.DependencyInjection \ud328\ud0a4\uc9c0 \ucd94\uac00 --\ubc84\uc804 1.0.2<\/code><\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p><em>(\uc791\uc131 \uc2dc\uc810\uc758 \ucd5c\uc2e0 \ubc84\uc804\uc740 1.0.2 \ubc84\uc804\uc785\ub2c8\ub2e4).<\/em><\/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\/09\/07801-nuget-couchbase-extension-dependency-injection.png\" alt=\"Couchbase extension for dependency injection on NuGet\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub2e4\uc74c\uc73c\ub85c, \ub2e4\uc74c \uc0ac\ud56d\uc744 \ubcc0\uacbd\ud574\uc57c \ud569\ub2c8\ub2e4. <code>\uc2dc\uc791<\/code> \ud074\ub798\uc2a4\uc758 <code>Startup.cs<\/code>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uce90\uc2f1\uc5d0 \uad00\ud55c \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0\uc11c \uad6c\uc131\uc744 \ud558\ub4dc\ucf54\ub529\ud588\uc2b5\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">services.AddCouchbase(client =&gt;)\r\n{\r\n    client.Servers = \uc0c8 List { \uc0c8 Uri(\"https:\/\/localhost:8091\")};\r\n    client.UseSsl = false;\r\n});<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub370\ubaa8\uc640 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0\ub294 \uad1c\ucc2e\uc9c0\ub9cc \ud504\ub85c\ub355\uc158 \ud504\ub85c\uc81d\ud2b8\uc5d0\ub294 \uad6c\uc131 \ud30c\uc77c\uc744 \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc744 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">services.AddCouchbase(Configuration.GetSection(\"Couchbase\"));<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\uae30\ubcf8\uac12\uc744 \uc0ac\uc6a9\ud55c\ub2e4\uace0 \uac00\uc815\ud560 \ub54c <code>appsettings.json<\/code>\ub97c \ud074\ub9ad\ud558\uace0 \ud574\ub2f9 \ud30c\uc77c\uc744 \uc5c5\ub370\uc774\ud2b8\ud558\uc5ec Couchbase \uc139\uc158\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">\"Couchbase\" : {\r\n  \"\uc11c\ubc84\": [\r\n    \"https:\/\/localhost:8091\"\r\n  ],\r\n  \"UseSsl\": false\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\" \uc139\uc158\uc744 \ub9cc\ub4e4\uba74 \uc885\uc18d\uc131 \uc8fc\uc785 \ubaa8\ub4c8\uc774 \uc571\uc124\uc815.json \ud14d\uc2a4\ud2b8 \ud30c\uc77c\uc5d0\uc11c \ubc14\ub85c \uc77d\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_constructor_injection\">\uc0dd\uc131\uc790 \uc8fc\uc785<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\uc758\uc874\uc131 \uc8fc\uc785\uc774 \uc124\uc815\ub418\uba74 \ud074\ub798\uc2a4\uc5d0 \uc720\uc6a9\ud55c \uac1d\uccb4\ub97c \uc8fc\uc785\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucee8\ud2b8\ub864\ub7ec, \uc11c\ube44\uc2a4 \ub610\ub294 \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac\uc5d0 \uac1d\uccb4\ub97c \uc8fc\uc785\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub2e4\uc74c\uc740 \ub2e4\uc74c\uc5d0 \uc8fc\uc785\ud558\ub294 \uc608\uc81c\uc785\ub2c8\ub2e4. <code>\ud648\ucee8\ud2b8\ub864\ub7ec<\/code>:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">\uacf5\uc6a9 \ud074\ub798\uc2a4 HomeController : \ucee8\ud2b8\ub864\ub7ec\r\n{\r\n    \ube44\uacf5\uac1c \uc77d\uae30 \uc804\uc6a9 IBucket _\ubc84\ud0b7;\r\n\r\n    public HomeController(IBucketProvider bucketProvider)\r\n    {\r\n        _bucket = bucketProvider.GetBucket(\"travel-sample\", \"password\");\r\n    }\r\n\r\n    \/\/ ... snip ...\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub2e4\uc74c\uc73c\ub85c, \uac04\ub2e8\ud55c <code>Get<\/code> \uc791\uc5c5\uc744 \"travel-sample\"\uc758 \uc798 \uc54c\ub824\uc9c4 \ubb38\uc11c\uc5d0\uc11c \uc218\ud589\ud569\ub2c8\ub2e4. \uc774 \ud1a0\ud070\uc744 \uc0ac\uc6a9\ud558\uba74 Couchbase .NET SDK\uc758 \uc885\uc18d\uc131 \uc8fc\uc785\uc774 \uc791\ub3d9\ud558\ub294 \ubaa8\uc2b5\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc0dd\uc131\ub41c \ubb38\uc11c\ub97c \ubcc0\uacbd\ud558\uaca0\uc2b5\ub2c8\ub2e4. <code>\uc815\ubcf4<\/code> \uc561\uc158 \uba54\uc11c\ub4dc\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uc774 \ubc29\ubc95\uc5d0\uc11c\ub294 \uacbd\ub85c \ubb38\uc11c\ub97c \uac80\uc0c9\ud558\uc5ec \uc7a5\ube44 \ubc88\ud638\ub97c \uae30\ub85d\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public IActionResult About()\r\n{\r\n    \/\/ \ucf5c\ub7fc\ubc84\uc2a4\uc5d0\uc11c \uc2dc\uce74\uace0(\uc720\ub098\uc774\ud2f0\ub4dc)\ub85c \uac00\ub294 \uacbd\ub85c \ubb38\uc11c \uac00\uc838\uc624\uae30\r\n    var route = _bucket.Get(\"route_56027\").Value;\r\n\r\n    \/\/ \uacbd\ub85c\uc758 \uc7a5\ube44 \ubc88\ud638 \ud45c\uc2dc\r\n    ViewData[\"Message\"] = \"CMH to ORD - \" + route.equipment;\r\n\r\n    View() \ubc18\ud658\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\uadf8 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\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\/09\/07802-travel-sample-result.png\" alt=\"Travel sample output of a single route\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc131\uacf5! \uc885\uc18d\uc131 \uc8fc\uc785\uc774 \uc131\uacf5\ud588\uace0 \uc774\uc81c Couchbase \ubc84\ud0b7\uc744 \uc0ac\uc6a9\ud560 \uc900\ube44\uac00 \ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>'\uc5ec\ud589\uc6a9 \uc0d8\ud50c'\uc744 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uacbd\uc6b0\uc5d0\ub294 \uc790\uc2e0\uc758 \ubc84\ud0b7\uc5d0 \uc788\ub294 \ud0a4\ub97c \uc0ac\uc6a9\ud558\uc138\uc694.<\/em><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_named_buckets\">\uc774\ub984 \uc9c0\uc815\ub41c \ubc84\ud0b7<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\ub9e4\ubc88 \uc774\ub984\uc744 \uc9c0\uc815\ud560 \ud544\uc694 \uc5c6\uc774 \ud558\ub098\uc758 \ubc84\ud0b7\uc5d0 \uc885\uc18d\uc131 \uc8fc\uc785\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uba3c\uc800 \ub2e4\uc74c\uc744 \uad6c\ud604\ud558\ub294 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0dd\uc131\ud558\uc5ec \uc2dc\uc791\ud558\uc2ed\uc2dc\uc624. <code>INamedBucketProvider<\/code>. \ube44\uc6cc \ub461\ub2c8\ub2e4. \ub2e4\uc74c\uc740 \uc608\uc2dc\uc785\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">\uacf5\uc6a9 \uc778\ud130\ud398\uc774\uc2a4 ITravelSampleBucketProvider : INamedBucketProvider\r\n{\r\n    \/\/ \uc5ec\uae30\uc5d0\ub294 \uc544\ubb34\uac83\ub3c4 \ub4e4\uc5b4\uac00\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4!\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\uadf8\ub7f0 \ub2e4\uc74c Startup.cs\uc5d0\uc11c \ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc774 \uc778\ud130\ud398\uc774\uc2a4\ub97c \ubc84\ud0b7\uc5d0 \ub9e4\ud551\ud569\ub2c8\ub2e4. <code>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\ubc84\ud0b7 \ucd94\uac00<\/code>:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">\uc11c\ube44\uc2a4\r\n    .AddCouchbase(Configuration.GetSection(\"Couchbase\"))\r\n    .AddCouchbase\ubc84\ud0b7(\"travel-sample\", \"password\");<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc774\uc81c <code>ITravel\uc0d8\ud50c\ubc84\ud0b7\uc81c\uacf5\uc790<\/code> \uac00 \uc77c\ubc18\uc801\uc778 \uacf5\uae09\uc790 \ub300\uc2e0 \uc8fc\uc785\ub429\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public HomeController(ITravelSampleBucketProvider travelBucketProvider)\r\n{\r\n    _\ubc84\ud0b7 = travelBucketProvider.GetBucket();\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_more_complex_dependency_injection\">\ub354 \ubcf5\uc7a1\ud55c \uc885\uc18d\uc131 \uc8fc\uc785<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\uc9c0\uae08\uae4c\uc9c0\ub294 \ucee8\ud2b8\ub864\ub7ec\uc5d0\ub9cc \uc758\uc874\uc131 \uc8fc\uc785\uc744 \uc0ac\uc6a9\ud588\uc2b5\ub2c8\ub2e4. \uc885\uc18d\uc131 \uc8fc\uc785\uc740 \ub354 \ubcf5\uc7a1\ud558\uace0 \uc2ec\uce35\uc801\uc778 \uac1d\uccb4 \uadf8\ub798\ud504\uc5d0\uc11c \ud6a8\uacfc\ub97c \ubc1c\ud718\ud558\uae30 \uc2dc\uc791\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc608\ub97c \ub4e4\uc5b4 Couchbase \ubc84\ud0b7\uc744 \uc0ac\uc6a9\ud558\uc9c0\ub9cc \uc774\uba54\uc77c \uc11c\ube44\uc2a4\ub3c4 \uc0ac\uc6a9\ud558\ub294 \uc11c\ube44\uc2a4 \ud074\ub798\uc2a4\ub97c \uc0c1\uc0c1\ud574 \ubcf4\uc138\uc694.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">\uacf5\uc6a9 \ud074\ub798\uc2a4 ComplexService : IComplexService\r\n{\r\n    \ube44\uacf5\uac1c \uc77d\uae30 \uc804\uc6a9 IBucket _\ubc84\ud0b7;\r\n    \ube44\uacf5\uac1c \uc77d\uae30 \uc804\uc6a9 IEmailService _email;\r\n\r\n    public ComplexService(ITravelSampleBucketProvider bucketProvider, IEmailService emailService)\r\n    {\r\n        _bucket = bucketProvider.GetBucket();\r\n        _email = emailService;\r\n    }\r\n\r\n    public void ApproveApplication(string emailAddress)\r\n    {\r\n        _bucket.Upsert(emailAddress, new {emailAddress, approved = true});\r\n        _email.SendEmail(emailAddress, \"Approved\", \"\uc2e0\uccad\uc774 \uc2b9\uc778\ub418\uc5c8\uc2b5\ub2c8\ub2e4!\");\r\n    }\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub2e4\uc74c\uc73c\ub85c \ucee8\ud2b8\ub864\ub7ec\uc5d0\uc11c \uc774 \uc11c\ube44\uc2a4\ub97c \uc0ac\uc6a9\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4(\uc77c\uba85 \uc885\uc18d\uc131\uc73c\ub85c \ub9cc\ub4e4\uae30). \ud558\uc9c0\ub9cc \ucee8\ud2b8\ub864\ub7ec\uac00 \ubc84\ud0b7\uc774\ub098 \uc774\uba54\uc77c \uc11c\ube44\uc2a4\ub97c \uc9c1\uc811 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294\ub2e4\ub294 \uc810\uc5d0 \uc720\uc758\ud558\uc138\uc694.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public \ud074\ub798\uc2a4 ApproveController : \ucee8\ud2b8\ub864\ub7ec\r\n{\r\n    \ube44\uacf5\uac1c \uc77d\uae30 \uc804\uc6a9 IComplexService _svc;\r\n\r\n    public ApproveController(IComplexService svc)\r\n    {\r\n        _svc = svc;\r\n    }\r\n\r\n    public IActionResult Index()\r\n    {\r\n        var fakeEmailAddress = Faker.Internet.Email();\r\n        _svc.ApproveApplication(fakeEmailAddress);\r\n        ViewData[\"Message\"] = \"Approved '\" + fakeEmailAddress + \"'\";\r\n        View()\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4;\r\n    }\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub0b4\uac00 \uc778\uc2a4\ud134\uc2a4\ud654\ud55c\ub2e4\uba74 <code>\ubcf5\uc7a1\ud55c \uc11c\ube44\uc2a4<\/code> \ub97c \uc218\ub3d9\uc73c\ub85c \uc778\uc2a4\ud134\uc2a4\ud654\ud558\ub824\uba74 \uc801\uc5b4\ub3c4 \ub450 \uac1c\uc758 \ub2e4\ub978 \uac1d\uccb4\ub97c \uc778\uc2a4\ud134\uc2a4\ud654\ud574\uc57c \ud569\ub2c8\ub2e4. \ub2e4\uc74c\uacfc \uac19\uc774 \ubcf4\uc77c \uac83\uc785\ub2c8\ub2e4: <code>\uc0c8\ub85c\uc6b4 ComplexService(\uc0c8\ub85c\uc6b4 \ubc84\ud0b7\uc81c\uacf5\uc790(), \uc0c8\ub85c\uc6b4 MyEmail\uc11c\ube44\uc2a4()<\/code>. \ucd94\uc801\ud574\uc57c \ud560 \uc885\uc18d\uc131\uc774 \ub9ce\uc544\uc11c \uc885\uc18d\uc131\uc774 \ubcc0\uacbd\ub418\uba74 \uc218\ub3d9\uc73c\ub85c \uc720\uc9c0 \uad00\ub9ac\ud574\uc57c \ud558\ub294 \uc77c\uc774 \ub9ce\uc544\uc694.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub300\uc2e0 ASP.NET Core\uc5d0\uc11c \uc885\uc18d\uc131 \uc8fc\uc785\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc774 \ubaa8\ub4e0 \uc791\uc5c5\uc744 \uc218\ud589\ud558\ub3c4\ub85d \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc <code>\uc2dc\uc791<\/code>:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">services.AddTransient();\r\nservices.AddTransient();<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc774\uc81c ASP.NET Core\ub294 \uc778\uc2a4\ud134\uc2a4\ud654 \ubc29\ubc95\uc744 \uc54c\uace0 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><code>ITravel\uc0d8\ud50c\ubc84\ud0b7\uc81c\uacf5\uc790<\/code>Couchbase.Extensions.DependencyInjection \ub355\ubd84\uc785\ub2c8\ub2e4.<\/li>\n<li><code>IEmailService<\/code> - \ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud558\ub77c\uace0 \ud588\uc2b5\ub2c8\ub2e4. <code>\ub0b4 \uc774\uba54\uc77c \uc11c\ube44\uc2a4<\/code><\/li>\n<li><code>IComplexService<\/code> - \ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud558\ub77c\uace0 \ud588\uc2b5\ub2c8\ub2e4. <code>\ubcf5\uc7a1\ud55c \uc11c\ube44\uc2a4<\/code><\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c, \uc5b8\uc81c <code>ApproveController<\/code> \uac00 \uc778\uc2a4\ud134\uc2a4\ud654\ub418\uba74 ASP.NET Core\uac00 \uc774\ub97c \uc218\ud589\ud558\ub294 \ubc29\ubc95\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\uba74 <code>\ubcf5\uc7a1\ud55c \uc11c\ube44\uc2a4<\/code> \uc778\uc2a4\ud134\uc2a4\ud654\ud558\uc5ec <code>\ub0b4 \uc774\uba54\uc77c \uc11c\ube44\uc2a4<\/code> \uadf8\ub9ac\uace0 <code>\ubcf5\uc7a1\ud55c \uc11c\ube44\uc2a4<\/code>. \uc8fc\uc785\ub429\ub2c8\ub2e4. <code>\ubcf5\uc7a1\ud55c \uc11c\ube44\uc2a4<\/code> \ub97c `ApproveController'\uc758 \uc0dd\uc131\uc790\uc5d0 \uc790\ub3d9\uc73c\ub85c \ucd94\uac00\ud569\ub2c8\ub2e4. \ucd5c\uc885 \uacb0\uacfc\uc785\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\/09\/07803-complex-service-in-action.png\" alt=\"Complex service in action using dependency injection\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc804\uccb4 \uc608\uc81c\ub97c \ud655\uc778\ud558\ub824\uba74 <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/078AspNetCoreDependencyInjection\/src\/CouchbaseDIExample\">\uc774 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uacfc \ud568\uaed8 \uc81c\uacf5\ub418\ub294 \uc18c\uc2a4 \ucf54\ub4dc\uac00 \uae43\ud5c8\ube0c\uc5d0 \uc788\uc2b5\ub2c8\ub2e4.<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_cleaning_up\">\uc815\ub9ac<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\uc2a4\uc2a4\ub85c \uc815\ub9ac\ud558\ub294 \uac83\uc744 \uc78a\uc9c0 \ub9c8\uc138\uc694. ASP.NET Core \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \uc911\uc9c0\ub418\uba74 Couchbase .NET SDK\uac00 \uc0ac\uc6a9 \uc911\uc778 \ubaa8\ub4e0 \ub9ac\uc18c\uc2a4\ub97c \ud574\uc81c\ud558\uc138\uc694. \ub9ac\uc18c\uc2a4\ub97c <code>\uad6c\uc131<\/code> \uba54\uc11c\ub4dc\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc740 \uc720\ud615\uc758 \ub9e4\uac1c\ubcc0\uc218\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. <code>\uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc218\uba85<\/code>:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime applicationLifetime)<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\uadf8 \uc548\uc5d0\uc11c <code>\uad6c\uc131<\/code> \uba54\uc11c\ub4dc\ub97c \uc124\uc815\ud558\uace0 <code>\uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8 \uc911\uc9c0<\/code> \uc774\ubca4\ud2b8:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">applicationLifetime.ApplicationStopped.Register(() =&gt;()\r\n{\r\n    app.ApplicationServices.GetRequiredService().Close();\r\n});<\/code><\/pre>\n<\/div>\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>\uc758\uc874\uc131 \uc8fc\uc785\uc740 \ud48d\ubd80\ud55c \uc8fc\uc81c\uc785\ub2c8\ub2e4. \uc885\uc18d\uc131 \uc8fc\uc785\uacfc \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0 \ub300\ud55c \uc774\uc810\uc5d0 \uad00\ud55c \ucc45\uc774 \uc5ec\ub7ec \uad8c \ucd9c\uac04\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc740 \ud45c\uba74\uc801\uc778 \ubd80\ubd84\ub9cc \ub2e4\ub8e8\uace0 \uc788\uc73c\uba70 \ud14c\uc2a4\ud2b8 \uac00\ub2a5\uc131 \uc774\uc810\uc5d0 \ub300\ud574\uc11c\ub294 \ub2e4\ub8e8\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Couchbase.Extensions.DependencyInjection\uc744 \uc0ac\uc6a9\ud558\uba74 Couchbase\ub97c ASP.NET Core\uc5d0 \ub354 \uc27d\uac8c \uc8fc\uc785\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uad81\uae08\ud55c \uc810\uc774 \uc788\uac70\ub098 \uc758\uacac\uc774 \uc788\uc73c\uc2dc\uba74 <a href=\"https:\/\/github.com\/couchbaselabs\/Couchbase.Extensions\/blob\/master\/docs\/dependency-injection.md\">GitHub \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac<\/a> \ub610\ub294 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/forums\/c\/net-sdk\/\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 .NET SDK \ud3ec\ub7fc<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uad81\uae08\ud55c \uc810\uc774 \uc788\uc73c\uba74 \uc544\ub798\uc5d0 \ub313\uae00\uc744 \ub0a8\uae30\uac70\ub098 \ub2e4\uc74c\uc5d0\uc11c \uc800\ub97c \ucc3e\uc544\uc8fc\uc138\uc694. <a href=\"https:\/\/twitter.com\/mgroves\">\ud2b8\uc704\ud130 @mgroves<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Dependency Injection is a design pattern that makes coding easier. It saves you the hassle of instantiating objects with complex dependencies, and it makes it easier for you to write tests. With the Couchbase.Extensions.DependencyInjection library (GitHub), you can use Couchbase [&hellip;]<\/p>","protected":false},"author":71,"featured_media":4006,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,1814,10126,1815,1816],"tags":[2052],"ppma_author":[8937],"class_list":["post-4005","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-application-design","category-asp-dotnet","category-best-practices-and-tutorials","category-couchbase-server","tag-extensions"],"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>Dependency Injection Framework with ASP.NET Core + Couchbase<\/title>\n<meta name=\"description\" content=\"In this Couchbase post, the dependency injection framework will be explored in-depth. Feel free to follow along with the code samples available on GitHub.\" \/>\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\/dependency-injection-aspnet-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dependency Injection with ASP.NET Core and Couchbase\" \/>\n<meta property=\"og:description\" content=\"In this Couchbase post, the dependency injection framework will be explored in-depth. Feel free to follow along with the code samples available on GitHub.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/dependency-injection-aspnet-couchbase\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-09-08T18:51:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T02:40:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/078-hero-injection.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"532\" \/>\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\/dependency-injection-aspnet-couchbase\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"Dependency Injection with ASP.NET Core and Couchbase\",\"datePublished\":\"2017-09-08T18:51:32+00:00\",\"dateModified\":\"2025-06-14T02:40:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/\"},\"wordCount\":849,\"commentCount\":12,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/078-hero-injection.jpg\",\"keywords\":[\"extensions\"],\"articleSection\":[\".NET\",\"Application Design\",\"ASP.NET\",\"Best Practices and Tutorials\",\"Couchbase Server\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/\",\"name\":\"Dependency Injection Framework with ASP.NET Core + Couchbase\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/078-hero-injection.jpg\",\"datePublished\":\"2017-09-08T18:51:32+00:00\",\"dateModified\":\"2025-06-14T02:40:26+00:00\",\"description\":\"In this Couchbase post, the dependency injection framework will be explored in-depth. Feel free to follow along with the code samples available on GitHub.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/078-hero-injection.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/078-hero-injection.jpg\",\"width\":800,\"height\":532,\"caption\":\"Dependency injection\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dependency Injection with ASP.NET Core and 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":"Dependency Injection Framework with ASP.NET Core + Couchbase","description":"\uc774 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 \uc758\uc874\uc131 \uc8fc\uc785 \ud504\ub808\uc784\uc6cc\ud06c\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc0b4\ud3b4\ubd05\ub2c8\ub2e4. GitHub\uc5d0\uc11c \uc81c\uacf5\ub418\ub294 \ucf54\ub4dc \uc0d8\ud50c\uacfc \ud568\uaed8 \uc790\uc720\ub86d\uac8c \ub530\ub77c \ud574\ubcf4\uc138\uc694.","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\/dependency-injection-aspnet-couchbase\/","og_locale":"ko_KR","og_type":"article","og_title":"Dependency Injection with ASP.NET Core and Couchbase","og_description":"In this Couchbase post, the dependency injection framework will be explored in-depth. Feel free to follow along with the code samples available on GitHub.","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/dependency-injection-aspnet-couchbase\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-09-08T18:51:32+00:00","article_modified_time":"2025-06-14T02:40:26+00:00","og_image":[{"width":800,"height":532,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/078-hero-injection.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\/dependency-injection-aspnet-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"Dependency Injection with ASP.NET Core and Couchbase","datePublished":"2017-09-08T18:51:32+00:00","dateModified":"2025-06-14T02:40:26+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/"},"wordCount":849,"commentCount":12,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/078-hero-injection.jpg","keywords":["extensions"],"articleSection":[".NET","Application Design","ASP.NET","Best Practices and Tutorials","Couchbase Server"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/","name":"Dependency Injection Framework with ASP.NET Core + Couchbase","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/078-hero-injection.jpg","datePublished":"2017-09-08T18:51:32+00:00","dateModified":"2025-06-14T02:40:26+00:00","description":"\uc774 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 \uc758\uc874\uc131 \uc8fc\uc785 \ud504\ub808\uc784\uc6cc\ud06c\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc0b4\ud3b4\ubd05\ub2c8\ub2e4. GitHub\uc5d0\uc11c \uc81c\uacf5\ub418\ub294 \ucf54\ub4dc \uc0d8\ud50c\uacfc \ud568\uaed8 \uc790\uc720\ub86d\uac8c \ub530\ub77c \ud574\ubcf4\uc138\uc694.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/078-hero-injection.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/078-hero-injection.jpg","width":800,"height":532,"caption":"Dependency injection"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/dependency-injection-aspnet-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Dependency Injection with ASP.NET Core and 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\/4005","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=4005"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/4005\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/4006"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=4005"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=4005"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=4005"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=4005"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}