{"id":2000,"date":"2015-10-27T20:51:14","date_gmt":"2015-10-27T20:51:14","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2000"},"modified":"2025-06-13T23:54:01","modified_gmt":"2025-06-14T06:54:01","slug":"linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/","title":{"rendered":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 LINQ \uc81c\uacf5\uc790 GA: LINQ, N1QL \ubc0f Couchbase, \uc624 \ub9c8\uc774!"},"content":{"rendered":"<p>\uc624\ub298 Couchbase\ub294 Couchbase Server\uc6a9 \uacf5\uc2dd LINQ \uc81c\uacf5\uc790\uc640 JSON \ubb38\uc11c\uc6a9 \ud56b \ucffc\ub9ac \uc5b8\uc5b4\uc778 N1QL\uc758 GA \ub9b4\ub9ac\uc2a4\ub97c \ubc1c\ud45c\ud558\uac8c \ub418\uc5b4 \uae30\uc069\ub2c8\ub2e4! \uc774 \uacf5\uae09\uc790\uc758 \ubaa9\ud45c\ub294 \uc7a5\ud669\ud558\uace0 \ubcf5\uc7a1\ud560 \uc218 \uc788\ub294 \uc5d4\ud2f0\ud2f0\ud504\ub808\uc784\uc6cc\ud06c\ub098 NHibernate\ubcf4\ub2e4 Linq2SQL\uc5d0 \ub354 \uac00\uae4c\uc6b4 \uac04\ub2e8\ud558\uace0 \uc0ac\uc6a9\ud558\uae30 \uc26c\uc6b4 ORM\/ODM\uc744 \uc81c\uacf5\ud558\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>\ub2e8\uc21c\ud568\uc774 \ubaa9\ud45c\uc774\uae34 \ud558\uc9c0\ub9cc, N1QL\uc758 \ubaa8\ub4e0 \uba4b\uc9c4 \uae30\ub2a5\uc5d0 \ub300\ud55c \ud655\uc7a5\ub41c \uc9c0\uc6d0\uc744 \uc81c\uacf5\ud558\ub294 \uc644\uc804\ud55c \uae30\ub2a5\uc758 Linq \uad6c\ud604\uc778 Linq2Couchbase\uc758 \ud798\uc744 \uacfc\uc18c\ud3c9\uac00\ud558\uc9c0 \ub9c8\uc138\uc694!<\/p>\n<p>\uc774 \uae00\uc5d0\uc11c\ub294 Linq2Couchbase \uc2dc\uc791\ud558\uae30\uc758 \uae30\ubcf8 \uc0ac\ud56d, API\uc758 \uc8fc\uc694 \uc694\uc18c, ASP.NET \ubc0f Owin\/Katana\uc640\uc758 \ud1b5\ud569\uc5d0 \ub300\ud574 \uc0b4\ud3b4\ubd05\ub2c8\ub2e4. \uc774\ud6c4 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 Linq2Couchbase\uc758 \uad6c\uccb4\uc801\uc778 \uc0ac\ud56d\uacfc \uc138\ubd80 \uc0ac\ud56d\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4!<\/p>\n<h2 id=\"the-architecture\">\uc544\ud0a4\ud14d\ucc98<\/h2>\n<p>\uacf5\uae09\uc790\ub294 \ucffc\ub9ac \uad6c\ubb38 \ubd84\uc11d \ubc0f \ucffc\ub9ac \uc0dd\uc131\uc744 \ucc98\ub9ac\ud558\uace0 SDK\ub294 \uacb0\uacfc\uc758 \uc694\uccad \ubc0f \ub9e4\ud551\uc744 \ucc98\ub9ac\ud558\ubbc0\ub85c \uacf5\uae09\uc790\ub294 SDK \uc704\uc5d0 \uc788\ub294 \ub610 \ub2e4\ub978 \uacc4\uce35\uc5d0 \ubd88\uacfc\ud569\ub2c8\ub2e4. \uacf5\uae09\uc790\ub294 \ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. <a href=\"https:\/\/relinq.codeplex.com\/\">Re-linq<\/a> \ub97c \ub0b4\ubd80\uc801\uc73c\ub85c \uc0ac\uc6a9\ud558\uc5ec Linq \ucffc\ub9ac\uc5d0\uc11c \ucd94\uc0c1 \uad6c\ubb38 \ud2b8\ub9ac(AST)\ub97c \uc0dd\uc131\ud55c \ub2e4\uc74c, \uc774 \ud2b8\ub9ac\ub97c \uc0ac\uc6a9\ud558\uc5ec N1QL \ubb38\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4. Re-linq\ub294 NHibernate\uc640 EntityFramework\uc5d0\uc11c \ubaa8\ub450 \uc0ac\uc6a9\ub418\ubbc0\ub85c \uc548\uc2ec\ud558\uace0 \uc0ac\uc6a9\ud558\uc138\uc694!<\/p>\n<h2 id=\"getting-started\">\uc2dc\uc791\ud558\uae30<\/h2>\n<p>\uc18c\uc2a4\ub294 \ub2e4\uc74c\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/github.com\/couchbaselabs\/Linq2Couchbase\">Github<\/a> \uc5d0\uc11c \ud328\ud0a4\uc9c0\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/www.nuget.org\/packages\/Linq2Couchbase\/1.0.2\">NuGet<\/a>NuGet \ud328\ud0a4\uc9c0 \uad00\ub9ac\uc790\ub97c \uc0ac\uc6a9\ud558\uc5ec Linq2Couchbase\ub97c \uc124\uce58\ud558\ub294 \uacbd\uc6b0 Couchbase.NET SDK\ub97c \ud3ec\ud568\ud55c \ubaa8\ub4e0 \uc885\uc18d\uc131\uc774 \uc790\ub3d9\uc73c\ub85c \ucc98\ub9ac\ub429\ub2c8\ub2e4.<\/p>\n<p>NuGet \ud328\ud0a4\uc9c0 \uad00\ub9ac\uc790\ub97c \uc0ac\uc6a9\ud558\uc5ec Linq2Couchbase\ub97c \uc124\uce58\ud558\ub824\uba74(\uc774\ubbf8 Visual Studio \ud504\ub85c\uc81d\ud2b8\ub97c \ub9cc\ub4e4\uc5c8\ub2e4\ub294 \uac00\uc815 \ud558\uc5d0) \"Nuget \ud328\ud0a4\uc9c0 \uad00\ub9ac\"\ub97c \ub9c8\uc6b0\uc2a4 \uc624\ub978\ucabd \ubc84\ud2bc\uc73c\ub85c \ud074\ub9ad\ud558\uace0 Linq2Couchbase\ub97c \uac80\uc0c9\ud558\uac70\ub098 \ud328\ud0a4\uc9c0 \uad00\ub9ac\uc790 \uba85\ub839\uc904\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud328\ud0a4\uc9c0 \uad00\ub9ac\uc790\ub97c \uc5f4\uba74 \ub429\ub2c8\ub2e4:<\/p>\n<pre><code>PM&gt; Install-Package Linq2Couchbase \r\n<\/code><\/pre>\n<p>\uc774 \uc791\uc5c5\uc744 \uc644\ub8cc\ud558\uba74 \ud504\ub85c\uc81d\ud2b8\uc5d0 \ud544\uc694\ud55c \ubaa8\ub4e0 \uc885\uc18d\uc131\uc774 \uc0dd\uae41\ub2c8\ub2e4. \ub2e4\uc74c\uc73c\ub85c \ub85c\uceec \ub610\ub294 \uac00\uc0c1 \uba38\uc2e0\uc744 \ud1b5\ud574 Couchbase Server\ub97c \uc124\uce58\ud574\uc57c \ud569\ub2c8\ub2e4. Couchbase Server\uc758 \ub2e4\uc6b4\ub85c\ub4dc \ub9c1\ud06c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/nosql-databases\/downloads\/\">\uc5ec\uae30<\/a>. \uac00\uc0c1 \uba38\uc2e0\uc758 \uacbd\uc6b0 <a href=\"https:\/\/github.com\/couchbaselabs\/vagrants\">\ubc29\ub791\uc790<\/a> \ub97c \uc0ac\uc6a9\ud558\uc5ec Couchbase \uc11c\ubc84 \ud074\ub7ec\uc2a4\ud130\ub97c \uc124\uce58\ud569\ub2c8\ub2e4. Couchbase 4.0\uc744 \uc124\uce58\ud574\uc57c \ud569\ub2c8\ub2e4! Vagrants\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 \ud074\ub7ec\uc2a4\ud130\ub97c \ud504\ub85c\ube44\uc800\ub2dd\ud558\uc138\uc694:<\/p>\n<pre><code>peep@ELJEFE-PC ~\/repos\/vagrants\/4.0.0\/debian7 (master)\r\n$ vagrant up\r\n<\/code><\/pre>\n<p>Couchbase \uc11c\ubc84 \ub610\ub294 \ud074\ub7ec\uc2a4\ud130\uac00 \uc788\uc73c\uba74 \uc11c\ubc84 \ub610\ub294 \ud074\ub7ec\uc2a4\ud130\ub97c \uc124\uc815\ud558\uace0 <strong><em>\uc801\uc5b4\ub3c4 \ud558\ub098\uc758 \ub178\ub4dc\ub294 \uc778\ub371\uc2a4 \ub178\ub4dc\uc774\uace0 \ud558\ub098\uc758 \ub178\ub4dc\ub294 \ucffc\ub9ac \ub178\ub4dc\uc778\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4.<\/em><\/strong>. \"\uc11c\ubc84 \uc124\uc815\"\uc758 \uccab \ubc88\uc9f8 \ub2e8\uacc4 \ub610\ub294 \ud074\ub7ec\uc2a4\ud130\uc5d0 \uc11c\ubc84\ub97c \ucd94\uac00\ud560 \ub54c \uc774 \uc791\uc5c5\uc744 \uc218\ud589\ud569\ub2c8\ub2e4. \ub610\ud55c \uc124\uc815 \uc911\uc5d0 \ub610\ub294 \ud074\ub7ec\uc2a4\ud130 \ub610\ub294 \uc778\uc2a4\ud134\uc2a4\ub97c \uc124\uc815\ud55c \ud6c4 \uc124\uc815&gt;\uc0d8\ud50c \ud0ed\uc5d0\uc11c \"\ub9e5\uc8fc \uc0d8\ud50c\" \ub370\uc774\ud130 \uc138\ud2b8\ub97c \ud074\ub7ec\uc2a4\ud130\uc5d0 \ucd94\uac00\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc774\uc81c Couchbase \uc778\uc2a4\ud134\uc2a4 \ub610\ub294 \ud074\ub7ec\uc2a4\ud130\uac00 \uc124\uc815\ub418\uc5c8\uc73c\ubbc0\ub85c, \"beer-sample\" \ubc84\ud0b7\uc5d0 \uae30\ubcf8 \uc778\ub371\uc2a4\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4. \uc774\ub807\uac8c \ud558\ub824\uba74 \ub2e4\uc74c \uc911 \ud558\ub098\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4. <code>C:\ud504\ub85c\uadf8\ub7a8 \ud30c\uc77c\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc11c\ubc84\ube48 \ub610\ub294 \ubc29\ub791\uc790\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0<\/code> (\ub610\ub294 Linux) <code>\/\uc635\uce20\/\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\/bin<\/code>\ub97c \uc785\ub825\ud569\ub2c8\ub2e4. \uadf8\ub7f0 \ub2e4\uc74c cbq \ub610\ub294 .\/cbq(Linux\uc758 \uacbd\uc6b0)\ub97c \uc785\ub825\ud558\uc5ec CIL \ucffc\ub9ac\ub97c \uc2dc\uc791\ud55c \ub2e4\uc74c:<\/p>\n<pre><code>CREATE PRIMARY INDEX ON `beer-sample` USING GSI;\r\n<\/code><\/pre>\n<p>\uc774\ub807\uac8c \ud558\uba74 \ub9e5\uc8fc \uc0d8\ud50c \ubc84\ud0b7\uc5d0 \uae30\ubcf8 \uc778\ub371\uc2a4\uac00 \uc0dd\uc131\ub429\ub2c8\ub2e4. \ub9e5\uc8fc \uc0d8\ud50c\uc5d0\uc11c \"-\"\ub97c \uc774\uc2a4\ucf00\uc774\ud504\ud558\ub294 \ub370 \ud544\uc694\ud55c \ubc31\ud2f1 \"`\"\uc5d0 \uc8fc\ubaa9\ud558\uc138\uc694. \uc774\uc81c \ucf54\ub4dc\ub97c \uc791\uc131\ud560 \uc900\ube44\uac00 \ub418\uc5c8\uc2b5\ub2c8\ub2e4!<\/p>\n<h2 id=\"creating-the-bucketcontext\">\ubc84\ud0b7 \ucee8\ud14d\uc2a4\ud2b8 \uc0dd\uc131<\/h2>\n<p>\ubc84\ud0b7 \uc791\uc5c5\uc744 \uc704\ud55c \uc8fc\uc694 \uac1d\uccb4\ub294 BucketContext\uc785\ub2c8\ub2e4. \ubc84\ud0b7 \ucee8\ud14d\uc2a4\ud2b8\ub294 Linq2Sql\uc758 \ub370\uc774\ud130 \ucee8\ud14d\uc2a4\ud2b8\uc640 \uc5d4\ud2f0\ud2f0 \ud504\ub808\uc784\uc6cc\ud06c\uc758 Db \ucee8\ud14d\uc2a4\ud2b8\uc640 \uc720\uc0ac\ud569\ub2c8\ub2e4. \uc774 \uac1d\uccb4\uc758 \uc8fc\uc694 \ubaa9\uc801\uc740 \ucffc\ub9ac\ub97c \uc791\uc131\ud558\uace0 \uc774\ub97c Couchbase \uc11c\ubc84\uc5d0 \uc81c\ucd9c\ud558\uae30 \uc704\ud55c \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc81c\uacf5\ud558\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>\ubc84\ud0b7 \ucee8\ud14d\uc2a4\ud2b8\ub97c \ub3c5\ub9bd\ud615 \uac1d\uccb4\ub85c \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uace0, \uc774 \uac1d\uccb4\uc5d0\uc11c \ud30c\uc0dd\ud558\uc5ec \ubc84\ud0b7 \ubc0f \ub3c4\uba54\uc778 \ubaa8\ub378\uc758 \uc720\ud615\uc5d0 \uc18d\uc131\uc744 \ub9e4\ud551\ud558\ub294 \uac15\ub825\ud55c \uc720\ud615 \uac1d\uccb4\ub97c \ub9cc\ub4e4 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uc608\uc5d0\uc11c\ub294 \ud6c4\uc790\ub97c \uc0ac\uc6a9\ud558\uaca0\uc2b5\ub2c8\ub2e4:<\/p>\n<pre><code>\/\/\/ \r\n\r\n\/\/\/ A concrete DbContext for the beer-sample example bucket.\r\n\/\/\/ <\/code><\/pre>\n<p>public class BeerSample : BucketContext { public BeerSample() : this(ClusterHelper.GetBucket(\"beer-sample\")) { } public BeerSample(IBucket bucket) : base(bucket) { DocumentFilterManager.SetFilter(new BreweryFilter()); } public IQueryable Beers { get { return Query(); } } public IQueryable Breweries { get { return Query(); } } }<\/p>\n<p>\ub9e5\uc8fc \uc0d8\ud50c \ubc84\ud0b7(\ubc84\ud0b7\uc740 RDBMS \uc2dc\uc2a4\ud15c\uc758 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 \uc720\uc0ac\ud569\ub2c8\ub2e4)\uc5d0\ub294 '\uc591\uc870\uc7a5'\uacfc '\ub9e5\uc8fc'\ub85c '\uc720\ud615\ud654'\ub41c \ubb38\uc11c\uac00 \ud3ec\ud568\ub418\uc5b4 \uc788\uc73c\uba70, \uc774 \ube44\uacf5\uc2dd \uc720\ud615 \uc2dc\uc2a4\ud15c\uc744 \uc0ac\uc6a9\ud558\uba74 \ubc84\ud0b7\uc744 \ucffc\ub9ac\ud558\uace0 \uc220\uc5b4(\uc608: WHERE type=\"beer\")\ub97c \ud1b5\ud574 \uc591\uc870\uc7a5 \ubb38\uc11c \ub610\ub294 \ub9e5\uc8fc \ubb38\uc11c\ub97c \ubc18\ud658\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc704 \ucf54\ub4dc\uc5d0\uc11c\ub294 IQueryable\uc744 \ubc18\ud658\ud558\ub294 \uba85\uc2dc\uc801 \uc18d\uc131\uc744 \uc815\uc758\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<h2 id=\"an-example-query\">\ucffc\ub9ac \uc608\uc2dc<\/h2>\n<p>Linq2Couchbase\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc740 Linq2SQL \ub610\ub294 EF\uc640 \uac70\uc758 \ub3d9\uc77c\ud558\ub2e4\ub294 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre><code>var db = new BeerSample();\r\n\r\nvar query = from beer in db.Beers\r\n            join brewery in db.Breweries\r\n            on beer.BreweryId equals N1QlFunctions.Key(brewery)\r\n            select new { beer.Name, beer.Abv, BreweryName = brewery.Name };\r\n\r\nforeach (var beer in query)\r\n{\r\n    Console.WriteLine(beer.Name);\r\n}    \r\n<\/code><\/pre>\n<p>BucketContext \ucc38\uc870\uac00 \uc788\uc73c\uba74 \ub2e4\ub978 Linq \uacf5\uae09\uc790\ucc98\ub7fc \ucffc\ub9ac\ud558\uae30\ub9cc \ud558\uba74 \ub429\ub2c8\ub2e4. \ubaa8\ub4e0 Linq \ud0a4\uc6cc\ub4dc\ub294 \ubb3c\ub860 ON KEYS, NEST \ubc0f UNNEST\uc640 \uac19\uc740 N1QL \uad6c\uc870\ub3c4 \uc9c0\uc6d0\ub429\ub2c8\ub2e4! \ub2e4\uc74c \ud3ec\uc2a4\ud2b8\uc5d0\uc11c \uc774 \ubaa8\ub4e0 \uac83\uc744 \ud6e8\uc52c \ub354 \uc790\uc138\ud788 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4!<\/p>\n<h2 id=\"the-document-model\">\ubb38\uc11c \ubaa8\ub378<\/h2>\n<p>\uc704\uc758 BeerSample \ucee8\ud14d\uc2a4\ud2b8\uc5d0\uc11c Beer \ubc0f Brewery \uac1d\uccb4\ub294 Linq \ud22c\uc601\uc758 \ub300\uc0c1\uc774 \ub418\uba70, \ubc84\ud0b7(beer-sample)\uc758 \ub3d9\ub4f1\ud55c JSON \ubb38\uc11c\uc5d0 \ub300\uc751\ud558\uac70\ub098 \ub9e4\ud551\ub429\ub2c8\ub2e4. \ub2e4\uc74c\uc740 \uac01\uac01\uc5d0 \ub300\ud55c \ubaa9\ub85d\uc785\ub2c8\ub2e4(\uc774\uac83\uc740 \ubd80\ubd84\uc801\uc778 \ubaa9\ub85d\uc774\uba70, \uc804\uccb4 \ud074\ub798\uc2a4\ub294 \ub2e4\uc74c\uc5d0\uc11c \ucc3e\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/github.com\/couchbaselabs\/Linq2Couchbase\/tree\/master\/Src\/Couchbase.Linq.IntegrationTests\/Documents\">\uc5ec\uae30<\/a>):<\/p>\n<pre><code>[Filters.DocumentTypeFilter(\"beer\")]\r\npublic class BeerFiltered\r\n{\r\n    [JsonProperty(\"name\")]\r\n    public string Name { get; set; }\r\n\r\n    [JsonProperty(\"abv\")]\r\n    public decimal Abv { get; set; }\r\n\r\n    ...\r\n\r\n    [JsonProperty(\"category\")]\r\n    public string Category { get; set; }\r\n\r\n    [JsonProperty(\"updated\")]\r\n    public DateTime Updated { get; set; }\r\n}\r\n<\/code><\/pre>\n<p>\ubb3c\ub860 \uc774\uac83\uc740 \"\ub9e5\uc8fc\" \ubb38\uc11c\uc5d0 \ub9e4\ud551\ub429\ub2c8\ub2e4. DocumentTypeFilter \uc18d\uc131\uc5d0 \uc8fc\ubaa9\ud558\uc138\uc694. \uc774\ub807\uac8c \ud558\uba74 \ud574\ub2f9 \ubb38\uc11c\ub97c \ub300\uc0c1\uc73c\ub85c \ud558\ub294 \ubaa8\ub4e0 \ucffc\ub9ac\uc5d0 \"\ub9e5\uc8fc\" \uc720\ud615\uc744 \uae30\uc900\uc73c\ub85c \ud544\ud130\ub9c1\ud558\ub294 \uc220\uc5b4 \ub610\ub294 WHERE \uc808\uc774 \"\uc790\ub3d9 \ub9c8\ubc95\ucc98\ub7fc\" \ucd94\uac00\ub429\ub2c8\ub2e4. \uac01 \ucffc\ub9ac\uc5d0 \uc220\uc5b4\ub97c \uc218\ub3d9\uc73c\ub85c \ucd94\uac00\ud558\uc9c0 \uc54a\ub294 \ud55c, DocumentTypeFilter \uc18d\uc131\uc740 \ud544\ud130\ub97c \uc801\uc6a9\ud558\ub294 \ub450 \uac00\uc9c0 \ubc29\ubc95 \uc911 \ud558\ub098\uc785\ub2c8\ub2e4.<\/p>\n<pre><code>public class Brewery\r\n{\r\n    [JsonProperty(\"name\")]\r\n    public string Name { get; set; }\r\n\r\n    [JsonProperty(\"city\")]\r\n    public string City { get; set; }\r\n\r\n    ...\r\n\r\n    [JsonProperty(\"geo\")]\r\n    public Geo Geo { get; set; }\r\n\r\n    [JsonProperty(\"beers\")]\r\n    public List Beers { get; set; }\r\n}\r\n<\/code><\/pre>\n<p>\uc774\uac83\uc740 \"\uc591\uc870\uc7a5\" \ubb38\uc11c\uac00 \ub9e4\ud551\ub420 \uac1d\uccb4\uc785\ub2c8\ub2e4. \uba85\uc2dc\uc801\uc73c\ub85c \uc815\uc758\ub41c DocumentTypeFilter \uc18d\uc131\uc774 \uc5c6\ub2e4\ub294 \uc810\uc5d0 \uc720\uc758\ud558\uc138\uc694. \uc774\ub294 BeerSample \ucee8\ud14d\uc2a4\ud2b8\uc758 \uc0dd\uc131\uc790\uac00 DocumentFilterManager\uc5d0 \ud544\ud130\ub97c \ucd94\uac00\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4. \uc774\uac83\uc740 \uc21c\uc804\ud788 \ub3d9\uc77c\ud55c \ubb38\uc81c\uc5d0 \ub300\ud55c \ub2e4\ub978 \uc811\uadfc \ubc29\uc2dd\uc774\uba70, \ucffc\ub9ac\uc5d0 \uc220\uc5b4\ub97c \ucd94\uac00\ud558\uc5ec \uc720\ud615\ubcc4\ub85c \ud544\ud130\ub9c1\ud558\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<h2 id=\"integrating-with-asp-net-or-owin-katana\">ASP.NET \ub610\ub294 Owin\/Katana\uc640 \ud1b5\ud569<\/h2>\n<p>ASP.NET \ub610\ub294 Katana\/OWin \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c Couchbase .NET SDK\ub97c \uc0ac\uc6a9\ud558\ub294 \ud328\ud134\uc740 \ub9e4\uc6b0 \ub69c\ub837\ud569\ub2c8\ub2e4. BucketContext\ub294 Couchbase .NET SDK\ub97c \uc0ac\uc6a9\ud558\ubbc0\ub85c \uc774 \ud328\ud134\uc744 \ub530\ub77c\uc57c SDK \ub0b4\uc758 \uac1d\uccb4 \uce90\uc2f1\uacfc \uacf5\uc720 TCP \uc5f0\uacb0\uc744 \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\ud589\ud788\ub3c4 \uc774 \ud328\ud134\uc740 \ub9e4\uc6b0 \uac04\ub2e8\ud569\ub2c8\ub2e4:<\/p>\n<h3 id=\"using-global-asax-in-asp-net\">ASP.NET\uc5d0\uc11c Global.asax \uc0ac\uc6a9<\/h3>\n<p>Global.asax\ub97c \uc0ac\uc6a9\ud558\ub294 ASP.NET \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c\ub294 Application_Start \ubc0f Application_End \uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec\ub97c \ud65c\uc6a9\ud558\uc5ec BucketContext\uac00 \uc885\uc18d\ud558\ub294 \ud074\ub7ec\uc2a4\ud130 \ubc0f \ubc84\ud0b7 \uac1c\uccb4\ub97c \uc0dd\uc131 \ubc0f \uc18c\uba78\ud569\ub2c8\ub2e4.<\/p>\n<pre><code>public class MvcApplication : System.Web.HttpApplication\r\n{\r\n    protected async void Application_Start()\r\n    {\r\n        AreaRegistration.RegisterAllAreas();\r\n        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);\r\n        RouteConfig.RegisterRoutes(RouteTable.Routes);\r\n        BundleConfig.RegisterBundles(BundleTable.Bundles);\r\n\r\n        var config = new ClientConfiguration\r\n        {\r\n            Servers = new List\r\n            {\r\n                new Uri(\"https:\/\/192.168.77.101:8091\/\")\r\n            }\r\n        };\r\n\r\n        ClusterHelper.Initialize(config);\r\n        var bucket = ClusterHelper.GetBucket(\"default\");\r\n    }\r\n\r\n    protected void Application_End()\r\n    {\r\n        ClusterHelper.Close();\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>\uc5ec\uae30\uc11c\ub294 \uad6c\uc131\uc744 \uc0dd\uc131\ud55c \ub2e4\uc74c(App.Config\uc5d0\uc11c\ub3c4 \uad6c\uc131\uc744 \uc0dd\uc131\ud560 \uc218 \uc788\uc74c) ClusterHelper \uac1d\uccb4\ub97c \ucd08\uae30\ud654\ud569\ub2c8\ub2e4. \ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \uc885\ub8cc\ub418\uba74 Application_End \ud578\ub4e4\ub7ec\uc5d0\uc11c \uc218\uba85\uc774 \uae34 \ud074\ub7ec\uc2a4\ud130 \ubc0f \ubc84\ud0b7 \uac1d\uccb4\ub97c \uc18c\uba78\uc2dc\ud0b5\ub2c8\ub2e4. \uc774\uac83\uc740 \uc815\uc0c1\uc801\uc73c\ub85c \uc885\ub8cc\ub418\uba70 OS \uc218\uc900 \uad6c\uc131\uc740 \uc801\uc2dc\uc5d0 \ub2e4\uc2dc OS\ub85c \ubc18\ud658\ub429\ub2c8\ub2e4.<\/p>\n<h3 id=\"using-setup-cs-in-owin-katana\">Owin\/Katana\uc5d0\uc11c Setup.cs \uc0ac\uc6a9<\/h3>\n<p>Owin\/Katana \ud638\uc2a4\ud305 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c\ub3c4 \ube44\uc2b7\ud55c \ud328\ud134\uc744 \ub530\ub974\uc9c0\ub9cc \ub2e4\ub978 \uba54\uc11c\ub4dc\uc778 Setup.cs \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud560 \ubfd0\uc785\ub2c8\ub2e4.<\/p>\n<pre><code>public partial class Startup\r\n{\r\n    public void Configuration(IAppBuilder app)\r\n    {\r\n        ConfigureAuth(app);\r\n\r\n        \/\/initialize the ClusterHelper\r\n        ClusterHelper.Initialize(new ClientConfiguration\r\n        {\r\n            Servers = new List\r\n            {\r\n                new Uri(\"https:\/\/localhost:8091\/\")\r\n            }\r\n        });\r\n\r\n        \/\/Register a callback that will dispose of the ClusterHelper on app shutdown\r\n        var properties = new AppProperties(app.Properties);\r\n        var token = properties.OnAppDisposing;\r\n        if (token != CancellationToken.None)\r\n        {\r\n            token.Register(() =&gt;\r\n            {\r\n                ClusterHelper.Close();\r\n            });\r\n        }\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>\uc5ec\uae30\uc11c\ub294 \uad6c\uc131 \uba54\uc11c\ub4dc\uac00 \uc2dc\uc791 \uc2dc \uc2e4\ud589\ub420 \ub54c \ud074\ub7ec\uc2a4\ud130 \ud5ec\ud37c\ub97c \uc0dd\uc131\ud558\uace0 \ucd08\uae30\ud654\ud55c \ub2e4\uc74c, \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \uc885\ub8cc\ub420 \ub54c \uc2e4\ud589\ub420 \ub378\ub9ac\uac8c\uc774\ud2b8\ub97c \ub4f1\ub85d\ud558\uc5ec \ud074\ub7ec\uc2a4\ud130 \ud5ec\ud37c\ub97c \ub2eb\uace0 \ub9ac\uc18c\uc2a4\ub97c \ud655\ubcf4\ud569\ub2c8\ub2e4.<\/p>\n<h3 id=\"injecting-into-your-controllers\">\ucee8\ud2b8\ub864\ub7ec\uc5d0 \uc8fc\uc785\ud558\uae30<\/h3>\n<p>\ubc84\ud0b7 \ucee8\ud14d\uc2a4\ud2b8 \uc790\uccb4\ub294 \uc791\uc5c5 \ub2e8\uc704 \ud328\ud134\uc758 \ud2b9\uc131\uc744 \ucde8\ud569\ub2c8\ub2e4. \uac01 \uc694\uccad\uc5d0 \ub300\ud574 \ud558\ub098\uc529 \uc0dd\uc131\ud560 \uc218 \uc788\uc73c\uba70, \ud074\ub7ec\uc2a4\ud130 \ud5ec\ud37c\uac00 \ucc38\uc870\ub97c \uad00\ub9ac\ud558\ubbc0\ub85c(\uc704\uc758 \uc870\uc5b8\uc744 \ub530\ub978\ub2e4\uace0 \uac00\uc815\ud560 \ub54c) \uc694\uccad\uc774 \ub05d\ub098\uba74 \uc778\uc2a4\ud134\uc2a4\uac00 \uac04\ub2e8\ud788 GC'\ub429\ub2c8\ub2e4.<\/p>\n<p>\uc774 \uc791\uc5c5\uc744 \uc218\ud589\ud558\ub294 \uac00\uc7a5 \uac04\ub2e8\ud55c \ubc29\ubc95\uc740 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/dependency-injection-aspnet-couchbase\/\">\uc885\uc18d\uc131 \uc8fc\uc785<\/a> (\ud328\ud134)\uc744 \uc0ac\uc6a9\ud558\uc5ec \ucee8\ud2b8\ub864\ub7ec\uac00 \uc0dd\uc131\ub420 \ub54c \uc778\uc2a4\ud134\uc2a4\ub97c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre><code>public class HomeController : Controller\r\n{\r\n    private BeerSample _context;\r\n\r\n    public HomeController()\r\n        : this(new BeerSample(ClusterHelper.GetBucket(\"beer-sample\")))\r\n    {\r\n    }\r\n\r\n    public HomeController(BeerSample context)\r\n    {\r\n        _context = context;\r\n    }\r\n\r\n    ...\r\n}\r\n<\/code><\/pre>\n<p>\uc774\uc81c \uc561\uc158 \uba54\uc11c\ub4dc \ub0b4\uc5d0\uc11c \ubc84\ud0b7 \ucee8\ud14d\uc2a4\ud2b8\ub97c \uc0ac\uc6a9\ud558\uae30\ub9cc \ud558\uba74 \ub429\ub2c8\ub2e4:<\/p>\n<pre><code>public ActionResult Index()\r\n{\r\n    var query = (from beer in db.Beers\r\n        join brewery in db.Breweries\r\n        on beer.BreweryId equals N1QlFunctions.Key(brewery)\r\n        select new { \r\n            beer.Name, \r\n            beer.Abv, \r\n            BreweryName = brewery.Name \r\n        }).Take(10);\r\n\r\n    return View(query.ToList());\r\n}\r\n<\/code><\/pre>\n<p>\ub2e4\uc2dc \ud55c\ubc88 \ub9d0\ud558\uc9c0\ub9cc, \ucee8\ud14d\uc2a4\ud2b8\ub294 \uc218\uba85\uc774 \uc9e7\uc740 \uacbd\ub7c9 \uac1d\uccb4\uc774\ubbc0\ub85c \uc694\uccad\uc73c\ub85c \ubc94\uc704\ub97c \uc9c0\uc815\ud558\uace0 \ud574\ub2f9 \uc694\uccad \ub0b4\uc5d0\uc11c \ud638\ucd9c\ub418\ub294 \ubaa8\ub4e0 \ucee8\ud2b8\ub864\ub7ec\uc5d0 \uc7ac\uc0ac\uc6a9\ud558\uc5ec \uc0bd\uc785\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2 id=\"what-s-coming-up-\">\uc55e\uc73c\ub85c\uc758 \uacc4\ud68d\uc740 \ubb34\uc5c7\uc778\uac00\uc694?<\/h2>\n<p>\ub9e4\uc6b0 \ube60\ub974\uac8c \ub2e4\uc74c \uc8fc\uc694 \uae30\ub2a5\uc740 \ud504\ub85d\uc2dc\ub97c \uc0ac\uc6a9\ud55c \ubcc0\uacbd \ucd94\uc801 \uae30\ub2a5\uc774 \ub420 \uac83\uc785\ub2c8\ub2e4. \ub610\ud55c \ubc84\uadf8 \uc218\uc815, \uc131\ub2a5 \ud5a5\uc0c1 \ubc0f \uae30\ud0c0 \uae30\ub2a5\uc744 \ud1b5\ud574 Linq2Couchbase\ub97c \uc644\uc804\ud55c \uae30\ub2a5\uc744 \uac16\ucd98 \uacbd\ub7c9 ODM\/ORM\uc73c\ub85c \ub9cc\ub4e4 \uc218 \uc788\uc744 \uac83\uc73c\ub85c \uae30\ub300\ud558\uc138\uc694!<\/p>\n<p>\uc6d0\ud558\ub294 \uae30\ub2a5\uc774\ub098 \ubc84\uadf8 \uc218\uc815\uc774 \uc788\uac70\ub098 \uae30\uc5ec\ud558\uace0 \uc2f6\uc740 \ub0b4\uc6a9\uc774 \uc788\ub2e4\uba74 \uc88b\uc740 \ud53c\ub4dc\ubc31\uc774\ub4e0 \ub098\uc05c \ud53c\ub4dc\ubc31\uc774\ub4e0 \ubaa8\ub450 \ud658\uc601\ud569\ub2c8\ub2e4.<\/p>\n<ul>\n<li>Jira\ub294 <a href=\"https:\/\/issues.couchbase.com\/projects\/LINQ\">\uc5ec\uae30<\/a>.<\/li>\n<li>Githb \ud504\ub85c\uc81d\ud2b8\ub294 <a href=\"https:\/\/github.com\/couchbaselabs\/Linq2Couchbase\/\">\uc5ec\uae30<\/a>.<\/li>\n<\/ul>\n<p>Linq2Couchbase\ub294 \ucee4\ubba4\ub2c8\ud2f0\uac00 \uc8fc\ub3c4\ud558\ub294 \uc624\ud508 \uc18c\uc2a4 \ud504\ub85c\uc81d\ud2b8\uc774\ubbc0\ub85c \ud55c\ubc88 \uc0b4\ud3b4\ubcf4\uace0 \uae30\uc5ec\ud558\uace0 \uc2f6\uc73c\uc2dc\ub2e4\uba74 \uaf2d \ucc38\uc5ec\ud574 \uc8fc\uc138\uc694!<\/p>\n<h2 id=\"special-thanks\">\ud2b9\ubcc4 \uac10\uc0ac<\/h2>\n<p>\ud504\ub85c\uc81d\ud2b8\uc5d0 \uae30\uc5ec\ud574\uc8fc\uc2e0 \ubaa8\ub4e0 \ubd84\ub4e4\uaed8 \ud2b9\ubcc4\ud788 \uac10\uc0ac\ub4dc\ub9bd\ub2c8\ub2e4(\uacb0\uad6d \uc624\ud508\uc18c\uc2a4\uc785\ub2c8\ub2e4!). \ud2b9\ud788 \ub2e4\uc74c \ubd84\ub4e4\uaed8 \uac10\uc0ac\ub4dc\ub9bd\ub2c8\ub2e4. <a href=\"https:\/\/github.com\/brantburnett\">\ube0c\ub79c\ud2b8 \ubc84\ub137<\/a> \uc758 <a href=\"https:\/\/centeredgesoftware.com\/\">Centeredge \uc18c\ud504\ud2b8\uc6e8\uc5b4<\/a> \ud504\ub85c\uc81d\ud2b8\uc640 NuGet\uc758 \ubb38\uc11c\ud654\uc5d0 \ud06c\uac8c \uae30\uc5ec\ud55c \ubd84\ub4e4!<\/p>","protected":false},"excerpt":{"rendered":"<p>Today Couchbase is happy to announce the GA release of the official LINQ provider for Couchbase Server and the hot query language for JSON documents, N1QL! The goal of the provider is to provide a simple, easy to use ORM\/ODM [&hellip;]<\/p>","protected":false},"author":21,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,1812],"tags":[1468,1469],"ppma_author":[8970],"class_list":["post-2000","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-n1ql-query","tag-linq","tag-linq2couchbase"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.0 (Yoast SEO v26.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Couchbase LINQ Provider GA: LINQ, N1QL and Couchbase<\/title>\n<meta name=\"description\" content=\"Learn the basics of getting started with Linq2Couchbase, the major actors in the API, and integration with ASP.NET and Owin\/Katana.\" \/>\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\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Couchbase LINQ Provider GA: LINQ, N1QL and Couchbase, oh mai!\" \/>\n<meta property=\"og:description\" content=\"Learn the basics of getting started with Linq2Couchbase, the major actors in the API, and integration with ASP.NET and Owin\/Katana.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-10-27T20:51:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T06:54:01+00:00\" \/>\n<meta name=\"author\" content=\"Jeff Morris, Senior Software Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@jeffrysmorris\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeff Morris, Senior Software Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/\"},\"author\":{\"name\":\"Jeff Morris, Senior Software Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341\"},\"headline\":\"Couchbase LINQ Provider GA: LINQ, N1QL and Couchbase, oh mai!\",\"datePublished\":\"2015-10-27T20:51:14+00:00\",\"dateModified\":\"2025-06-14T06:54:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/\"},\"wordCount\":1422,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"Linq\",\"linq2couchbase\"],\"articleSection\":[\".NET\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/\",\"name\":\"Couchbase LINQ Provider GA: LINQ, N1QL and Couchbase\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-10-27T20:51:14+00:00\",\"dateModified\":\"2025-06-14T06:54:01+00:00\",\"description\":\"Learn the basics of getting started with Linq2Couchbase, the major actors in the API, and integration with ASP.NET and Owin\/Katana.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Couchbase LINQ Provider GA: LINQ, N1QL and Couchbase, oh mai!\"}]},{\"@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\/b678bdd9f7b21a33d43ea965865a3341\",\"name\":\"Jeff Morris, Senior Software Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/73188ee2831025d81740e12e1ed80812\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g\",\"caption\":\"Jeff Morris, Senior Software Engineer, Couchbase\"},\"description\":\"Jeff Morris is a Senior Software Engineer at Couchbase. Prior to joining Couchbase, Jeff spent six years at Source Interlink as an Enterprise Web Architect. Jeff is responsible for the development of Couchbase SDKs and how to integrate with N1QL (query language).\",\"sameAs\":[\"https:\/\/x.com\/jeffrysmorris\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/jeff-morris\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Couchbase LINQ Provider GA: LINQ, N1QL and Couchbase","description":"Linq2Couchbase \uc2dc\uc791\ud558\uae30\uc758 \uae30\ubcf8 \uc0ac\ud56d, API\uc758 \uc8fc\uc694 \uc694\uc18c, ASP.NET \ubc0f Owin\/Katana\uc640\uc758 \ud1b5\ud569\uc5d0 \ub300\ud574 \uc54c\uc544\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\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/","og_locale":"ko_KR","og_type":"article","og_title":"Couchbase LINQ Provider GA: LINQ, N1QL and Couchbase, oh mai!","og_description":"Learn the basics of getting started with Linq2Couchbase, the major actors in the API, and integration with ASP.NET and Owin\/Katana.","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-10-27T20:51:14+00:00","article_modified_time":"2025-06-14T06:54:01+00:00","author":"Jeff Morris, Senior Software Engineer, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@jeffrysmorris","twitter_misc":{"Written by":"Jeff Morris, Senior Software Engineer, Couchbase","Est. reading time":"7\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/"},"author":{"name":"Jeff Morris, Senior Software Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341"},"headline":"Couchbase LINQ Provider GA: LINQ, N1QL and Couchbase, oh mai!","datePublished":"2015-10-27T20:51:14+00:00","dateModified":"2025-06-14T06:54:01+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/"},"wordCount":1422,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["Linq","linq2couchbase"],"articleSection":[".NET","SQL++ \/ N1QL Query"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/","url":"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/","name":"Couchbase LINQ Provider GA: LINQ, N1QL and Couchbase","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-10-27T20:51:14+00:00","dateModified":"2025-06-14T06:54:01+00:00","description":"Linq2Couchbase \uc2dc\uc791\ud558\uae30\uc758 \uae30\ubcf8 \uc0ac\ud56d, API\uc758 \uc8fc\uc694 \uc694\uc18c, ASP.NET \ubc0f Owin\/Katana\uc640\uc758 \ud1b5\ud569\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uc138\uc694.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/linq-n1ql-and-couchbase-oh-mai-linq2couchbase-ga\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Couchbase LINQ Provider GA: LINQ, N1QL and Couchbase, oh mai!"}]},{"@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\/b678bdd9f7b21a33d43ea965865a3341","name":"Jeff Morris, \uc218\uc11d \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc5d4\uc9c0\ub2c8\uc5b4, Couchbase","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/73188ee2831025d81740e12e1ed80812","url":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g","caption":"Jeff Morris, Senior Software Engineer, Couchbase"},"description":"Jeff Morris\ub294 Couchbase\uc758 \uc218\uc11d \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc5d4\uc9c0\ub2c8\uc5b4\uc785\ub2c8\ub2e4. Couchbase\uc5d0 \uc785\uc0ac\ud558\uae30 \uc804\uc5d0\ub294 6\ub144 \ub3d9\uc548 Source Interlink\uc5d0\uc11c \uc5d4\ud130\ud504\ub77c\uc774\uc988 \uc6f9 \uc544\ud0a4\ud14d\ud2b8\ub85c \uadfc\ubb34\ud588\uc2b5\ub2c8\ub2e4. Jeff\ub294 Couchbase SDK \uac1c\ubc1c\uacfc N1QL(\ucffc\ub9ac \uc5b8\uc5b4)\uacfc \ud1b5\ud569\ud558\ub294 \ubc29\ubc95\uc744 \ub2f4\ub2f9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.","sameAs":["https:\/\/x.com\/jeffrysmorris"],"url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/jeff-morris\/"}]}},"authors":[{"term_id":8970,"user_id":21,"is_guest":0,"slug":"jeff-morris","display_name":"Jeff Morris, Senior Software Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g","author_category":"","last_name":"Jeff Morris, Senior Software Engineer, Couchbase","first_name":"Jeff","job_title":"","user_url":"","description":"Jeff Morris\ub294 Couchbase\uc758 \uc218\uc11d \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc5d4\uc9c0\ub2c8\uc5b4\uc785\ub2c8\ub2e4. Couchbase\uc5d0 \uc785\uc0ac\ud558\uae30 \uc804\uc5d0\ub294 6\ub144 \ub3d9\uc548 Source Interlink\uc5d0\uc11c \uc5d4\ud130\ud504\ub77c\uc774\uc988 \uc6f9 \uc544\ud0a4\ud14d\ud2b8\ub85c \uadfc\ubb34\ud588\uc2b5\ub2c8\ub2e4. Jeff\ub294 Couchbase SDK \uac1c\ubc1c\uacfc N1QL(\ucffc\ub9ac \uc5b8\uc5b4)\uacfc \ud1b5\ud569\ud558\ub294 \ubc29\ubc95\uc744 \ub2f4\ub2f9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/2000","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\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=2000"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/2000\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=2000"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=2000"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=2000"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=2000"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}