{"id":4870,"date":"2018-03-23T10:26:01","date_gmt":"2018-03-23T17:26:01","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=4870"},"modified":"2025-06-13T22:45:10","modified_gmt":"2025-06-14T05:45:10","slug":"geospatial-aspnet-aurelia-google-maps","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/geospatial-aspnet-aurelia-google-maps\/","title":{"rendered":"ASP.NET Core, Aurelia, Google \uc9c0\ub3c4\ub97c \uc0ac\uc6a9\ud55c \uc9c0\ub9ac\uc801 \uacf5\uac04 \uac80\uc0c9"},"content":{"rendered":"<div class=\"paragraph\">\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/geospatial-basics-spatial-databases-and-nosql-examples\/\">\uc9c0\ub9ac\uacf5\uac04<\/a> \uac80\uc0c9\uc740 \uc774\uc81c Couchbase Server 5.5\uc5d0\uc11c \uc644\uc804\ud788 \uc9c0\uc6d0\ub429\ub2c8\ub2e4. \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/couchbase-server-5-5-beta\/\">Couchbase Server 5.5 \ubc1c\ud45c<\/a>\ubc0f <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/downloads\/?family=server&amp;product=couchbase-server-developer&amp;edition=enterprise\">\uac1c\ubc1c\uc790 \ube4c\ub4dc \ub2e4\uc6b4\ub85c\ub4dc<\/a> \uc9c0\uae08 \ubb34\ub8cc\ub85c \uc774\uc6a9\ud558\uc138\uc694.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc774 \uae00\uc5d0\uc11c\ub294 \uac80\uc0c9\uc744 \uc218\ud589\ud558\ub294 \uc6f9 \uae30\ubc18 UI\ub97c \ub9cc\ub4e4\uc5b4 Couchbase \uc804\uccb4 \ud14d\uc2a4\ud2b8 \uac80\uc0c9\uc758 \uc9c0\ub9ac\uc801 \uacf5\uac04 \uae30\ub2a5\uc744 \uc2dc\uc5f0\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc800\ub294 \uc9c0\ub9ac\uacf5\uac04 \uac80\uc0c9\uc744 \ub5a0\uc62c\ub9b4 \ub54c\ub9c8\ub2e4 \ud2b9\uc815 \uc9c0\uc5ed\uc758 \ub808\uc2a4\ud1a0\ub791\uc744 \ucc3e\ub294 \ub370 \ud0c1\uc6d4\ud55c Yelp\ub97c \ub5a0\uc62c\ub9ac\uace4 \ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uadf8\ub798\uc11c \uc800\ub294 \uc57d\uac04\uc758 \uc7ac\ubbf8\ub97c \ub290\uaef4\uc11c \ud638\ud154 \uc804\uc6a9\uc73c\ub85c \uc544\uc8fc \uae30\ubcf8\uc801\uc778 \ubc84\uc804\uc758 Yelp\ub97c \ub9cc\ub4e4\uc5b4 \ubcf4\ub824\uace0 \ud569\ub2c8\ub2e4. \ub610\ud55c \ub2e4\uc74c\uc744 \uc77d\uc5b4\ubcf4\uc138\uc694. <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/geospatial-basics-spatial-databases-and-nosql-examples\/\">\uc9c0\ub9ac\uacf5\uac04 \ub370\uc774\ud130\ub780 \ubb34\uc5c7\uc778\uac00\uc694?<\/a> \ucc98\uc74c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>\ub530\ub77c\ud558\uace0 \uc2f6\ub2e4\uba74 <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/104GeospatialFTS5dot5\/src\">\uc804\uccb4 \uc18c\uc2a4 \ucf54\ub4dc\ub294 \uae43\ud5c8\ube0c\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/a>.<\/em><\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_getting_set_up\">\uc124\uc815\ud558\uae30<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\ucf54\ub4dc \uc791\uc131\uc744 \uc2dc\uc791\ud558\uae30 \uc804\uc5d0 \uc0c8 \ud504\ub85c\uc81d\ud2b8\ub97c \ub9cc\ub4e4\uae30 \uc704\ud574 \ucde8\ud55c \ub2e8\uacc4\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"olist arabic\">\n<ol class=\"arabic\">\n<li>\uba85\ub839\uc904\uc5d0\uc11c: <code>\ub2f7\ub137 \ub274 \uc544\uc6b0\ub810\ub9ac\uc544<\/code>. \uc5ec\uae30\uc5d0\ub294 \ub2e4\uc74c\uc774 \uc788\ub2e4\uace0 \uac00\uc815\ud569\ub2c8\ub2e4. <a href=\"https:\/\/dotnet.github.io\/\">.NET Core<\/a> \uc124\uce58\ub418\uc5c8\uc2b5\ub2c8\ub2e4. <strong>\uc9c0\uc624\uc2a4\ud398\uc774\uc2a4 \uac80\uc0c9\uc740 .NET \uc804\uc6a9 \uae30\ub2a5\uc774 \uc544\ub2c8\ubbc0\ub85c <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/products\/developer-sdk\/\">\uae30\ud0c0 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 SDK<\/a> Node.js, Java \ub4f1\uc785\ub2c8\ub2e4.<\/strong> \ub610\ud55c \ub2e4\uc74c\uacfc \uac19\uc774 \uc124\uce58\ud588\ub2e4\uace0 \uac00\uc815\ud569\ub2c8\ub2e4. <a href=\"https:\/\/www.hanselman.com\/blog\/dotnetNewAngularAndDotnetNewReact.aspx\">Aurelia\uc6a9 SPA \ud15c\ud50c\ub9bf<\/a>. \uc6d0\ud55c\ub2e4\uba74 \uc575\uade4\ub7ec\ub098 \ub9ac\uc561\ud2b8\ub97c \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc9c0\ub9cc, \uc800\ub294 \uc815\ub9d0\ub85c <a href=\"https:\/\/aurelia.io\/\">Aurelia<\/a>\ud55c \ubc88 \uc2dc\ub3c4\ud574 \ubcf4\uc2dc\ub294 \uac83\ub3c4 \uc88b\uc744 \uac83 \uac19\uc2b5\ub2c8\ub2e4.<\/li>\n<li>\uc704\uc758 \uba85\ub839\uc740 ASP.NET Core \ud504\ub85c\uc81d\ud2b8\uc758 \uc178\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4. \uc774 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 Razor\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uaca0\uc2b5\ub2c8\ub2e4. REST API \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc758 \ubc31\uc5d4\ub4dc\ub85c ASP.NET\uc744 \uc0ac\uc6a9\ud560 \ubfd0\uc785\ub2c8\ub2e4.<\/li>\n<li><code>npm \uc124\uce58 aurelia-google-maps<\/code>. \uc774 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud560 \ud544\uc694\ub294 \uc5c6\uc9c0\ub9cc <a href=\"https:\/\/github.com\/Vheissu\/aurelia-google-maps\">aurelia-google-maps \ud50c\ub7ec\uadf8\uc778<\/a> \ub97c \uc0ac\uc6a9\ud558\uba74 \uc571\uc5d0\uc11c Google \uc9c0\ub3c4\uc640 \uc27d\uac8c \uc0c1\ud638 \uc791\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<li>Visual Studio 2017\uc5d0\uc11c \uc774 \ud504\ub85c\uc81d\ud2b8\ub97c \uc5f4\uc5c8\uc2b5\ub2c8\ub2e4. \uc800\ub294 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/dependency-injection-aspnet-couchbase\/\">Couchbase.Extensions.DependencyInjection<\/a> \ub97c \uc0ac\uc6a9\ud558\uc138\uc694. \uc774 \ud655\uc7a5 \ud504\ub85c\uadf8\ub7a8\uc744 \uc0ac\uc6a9\ud560 \ud544\uc694\ub294 \uc5c6\uc9c0\ub9cc \ub354 \uc27d\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<li>Couchbase Server 5.5\ub97c \uc124\uce58\ud588\uc2b5\ub2c8\ub2e4, <strong>\ud3ec\ud568<\/strong> <strong>\uc804\uccb4 \ud14d\uc2a4\ud2b8 \uac80\uc0c9 \uc11c\ube44\uc2a4<\/strong>. \ub098\ub294 <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.5\/settings\/install-sample-buckets.html\">\uc5ec\ud589\uc6a9 \uc0d8\ud50c \ubc84\ud0b7<\/a>. I <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.5\/security\/security-rbac-for-admins-and-apps.html\">\uc0ac\uc6a9\uc790 \uc0dd\uc131<\/a> \ud574\ub2f9 \ubc84\ud0b7\uc5d0 \ub300\ud55c \uc804\uccb4 \uc561\uc138\uc2a4 \uad8c\ud55c\uc774 \uc788\ub294 \"\ub9e4\ud2b8\"\ub85c \uc124\uc815\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_create_a_geospatial_index\">\uc9c0\ub9ac\uacf5\uac04 \uc778\ub371\uc2a4 \ub9cc\ub4e4\uae30<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>ASP.NET \ubc31\uc5d4\ub4dc\ub97c \uad6c\ucd95\ud558\uae30 \uc804\uc5d0 Couchbase Server\uc5d0\uc11c \uc9c0\ub9ac\uacf5\uac04 \uc778\ub371\uc2a4\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4. \ub85c\uadf8\uc778\ud55c \ud6c4 \uba54\ub274\uc5d0\uc11c \"\uac80\uc0c9\"\uc744 \ud074\ub9ad\ud569\ub2c8\ub2e4(\"\uc6cc\ud06c\ubca4\uce58\" \uc544\ub798\uc5d0 \uc788\uc74c). \"\uc0c9\uc778 \ucd94\uac00\"\ub97c \ud074\ub9ad\ud558\uc5ec \uc2dc\uc791\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/03\/10401-create-geospatial-query-index.gif\" alt=\"Create Geospatial index\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc778\ub371\uc2a4 \uc774\ub984\uc744 \"mygeoindex\"\ub85c \uc9c0\uc815\ud588\uc2b5\ub2c8\ub2e4. \uc0c9\uc778\ud560 \ubc84\ud0b7\uc73c\ub85c travel-sample\uc744 \uc120\ud0dd\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\"\uc720\ud615 \ub9e4\ud551\"\uc5d0\uc11c \uae30\ubcf8\uac12\uc744 \uc120\ud0dd \ucde8\uc18c\ud569\ub2c8\ub2e4. \uc720\ud615 \uc774\ub984\uc774 \"hotel\"\uc778 \uc0c8 \uc720\ud615 \ub9e4\ud551\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4. \"travel-sample\"\uc758 \ubaa8\ub4e0 \ud638\ud154 \ubb38\uc11c\uc5d0\ub294 \"hotel\" \uac12\uc774 \uc788\ub294 \uc720\ud615\uc774 \uc788\uc2b5\ub2c8\ub2e4. \"\uc9c0\uc815\ub41c \ud544\ub4dc\ub9cc \uc0c9\uc778\" \uc0c1\uc790\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub450 \uac1c\uc758 \ud558\uc704 \ud544\ub4dc\ub97c \ucd94\uac00\ud558\uaca0\uc2b5\ub2c8\ub2e4. \ud558\ub098\ub294 \ud638\ud154 \ubb38\uc11c \ub0b4\uc758 \uc9c0\ub9ac\uc801 \uacf5\uac04 \uc88c\ud45c\ub97c \ud3ec\ud568\ud558\ub294 \"geo\"\uc785\ub2c8\ub2e4. \uc720\ud615\uc73c\ub85c \"\uc9c0\uc624\ud3ec\uc778\ud2b8\"\ub97c \uc120\ud0dd\ud574\uc57c \ud569\ub2c8\ub2e4. \ub2e4\ub978 \ud558\ub098\ub294 \ud638\ud154 \uc774\ub984\uc774 \ub420 \"name\"\uc785\ub2c8\ub2e4. \uac01\uac01\uc744 \"\uc800\uc7a5\"\ud558\uae30\ub85c \uc120\ud0dd\ud558\uba74 \uc0c9\uc778 \ud06c\uae30\uac00 \ucee4\uc9c0\uc9c0\ub9cc \uc0c9\uc778\uc5d0 \uc815\ubcf4\ub97c \uc800\uc7a5\ud558\uba74 2\ucc28 \uc870\ud68c\ub97c \ud53c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>\uc911\uc694 \ucc38\uace0: \ubc84\uadf8(<a href=\"https:\/\/issues.couchbase.com\/browse\/NCBC-1651\">NCBC-1651<\/a>)\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc9c0\uc624\ud3ec\uc778\ud2b8 \ud544\ub4dc\uc5d0\uc11c \uc77d\uc73c\ub824\uace0 \ud558\uba74 \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\ub294 \ubb38\uc81c\uac00 \ud604\uc7ac \ub9b4\ub9ac\uc988\uc758 .NET SDK\uc5d0\uc11c \ubc1c\uc0dd\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ucf54\ub4dc \uc0d8\ud50c\uc5d0\uc11c \ud574\uacb0 \ubc29\ubc95\uc744 \ub9cc\ub4e4\uc5c8\uc2b5\ub2c8\ub2e4: \uc2e4\uc81c\ub85c \uac80\uc0c9 \uc0c9\uc778\uc5d0\uc11c \uc9c0\uc5ed \ubc0f \uc774\ub984 \ud544\ub4dc\ub97c \uac00\uc838\uc624\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ub300\uc2e0 \uac80\uc0c9\uc5d0\uc11c \ubc18\ud658\ub41c \ubb38\uc11c \ud0a4\ub97c \uc0ac\uc6a9\ud558\uc5ec 2\ucc28 '\uac00\uc838\uc624\uae30' \ud638\ucd9c\uc744 \ud558\uace0 \uc804\uccb4 \ubb38\uc11c\ub97c \uac00\uc838\uc635\ub2c8\ub2e4. \uc774 \ubc29\ubc95\uc740 \uc0c9\uc778 \ud06c\uae30\ub97c \uc904\uc774\ub824\ub294 \uacbd\uc6b0 \uace0\ub824\ud560 \uc218 \uc788\ub294 \uae30\ubc95\uc774\ub77c\ub294 \uc810\uc744 \uae30\uc5b5\ud558\uc138\uc694. \uc774 \ubc84\uadf8\ub294 \uc774\ubbf8 \uc218\uc815\ub418\uc5c8\uc73c\uba70 \ud5a5\ud6c4 \ub9b4\ub9ac\uc2a4\uc5d0 \ud3ec\ud568\ub420 \uc608\uc815\uc785\ub2c8\ub2e4. \ucd5c\ucca8\ub2e8\uc5d0 \uc788\ub2e4\ub294 \uac83\uc758 \uc704\ud5d8\uc131\uc774 \ubc14\ub85c \uc774\ub7f0 \uac83\uc785\ub2c8\ub2e4!<\/strong><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc5ec\uae30\uae4c\uc9c0\uc785\ub2c8\ub2e4. \"\uc0c9\uc778 \uc0dd\uc131\"\uc744 \ud074\ub9ad\ud569\ub2c8\ub2e4. \ub2e4\uc74c \ud654\uba74\uc5d0\uc11c 100%\uac00 \ub420 \ub54c\uae4c\uc9c0 \"\uc778\ub371\uc2f1 \uc9c4\ud589\ub960\"\uc744 \uc9c0\ucf1c\ubd05\ub2c8\ub2e4(\uae30\ubcf8\uac12\uc744 \uc120\ud0dd \ucde8\uc18c\ud55c \uac83\uc744 \uae30\uc5b5\ud558\uace0 \uc788\ub2e4\uba74 \uadf8\ub9ac \uc624\ub798 \uac78\ub9ac\uc9c0 \uc54a\uc744 \uac83\uc785\ub2c8\ub2e4).<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_asp_net_core_rest_endpoints\">ASP.NET \ud575\uc2ec REST \uc5d4\ub4dc\ud3ec\uc778\ud2b8<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\ub2e4\uc74c\uc73c\ub85c ASP.NET\uc73c\ub85c \ub118\uc5b4\uac00 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \ub450 \uac1c\uc758 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub97c \ub9cc\ub4e4\uaca0\uc2b5\ub2c8\ub2e4. \ud55c \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub294 <strong>\ubc14\uc6b4\ub529 \ubc15\uc2a4<\/strong> \uac80\uc0c9 \ubc29\ubc95\uacfc \ub2e4\ub978 \ud558\ub098\ub294 <strong>\uac70\ub9ac<\/strong> \uac80\uc0c9 \ubc29\ubc95.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>\ucffc\ub9ac\ub97c \uc2e4\ud589\ud558\ub824\uba74 Couchbase \ubc84\ud0b7 \uac1d\uccb4\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \ucffc\ub9ac\ub97c \uc2e4\ud589\ud558\ub824\uba74 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/dependency-injection-aspnet-couchbase\/\">\uc758\uc874\uc131 \uc8fc\uc785\uc5d0 \ub300\ud55c \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc758 \uc608\uc81c<\/a> \ub97c \ucc38\uc870\ud558\uac70\ub098 \uc774 \uc791\uc5c5\uc744 \ud574\ubcf8 \uc801\uc774 \uc5c6\ub2e4\uba74 Github\uc5d0\uc11c \uc18c\uc2a4 \ucf54\ub4dc\ub97c \ud655\uc778\ud558\uc138\uc694.<\/em><\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_bounded_box\">\ubc14\uc6b4\ub529 \ubc15\uc2a4<\/h3>\n<div class=\"paragraph\">\n<p>'\uacbd\uacc4 \uc0c1\uc790' \uac80\uc0c9\uc740 \uc9c0\ub3c4\uc5d0\uc11c \uc0c1\uc790\ub97c \uc815\uc758\ud558\uace0 \uadf8 \uc0c1\uc790 \uc548\uc5d0 \uc788\ub294 \uad00\uc2ec \uc9c0\uc810\uc744 \uac80\uc0c9\ud558\ub294 \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4. \uc0c1\uc790\ub97c \uc815\uc758\ud558\ub824\uba74 \uc624\ub978\ucabd \uc0c1\ub2e8 \ubaa8\uc11c\ub9ac \uc88c\ud45c\uc640 \uc67c\ucabd \ud558\ub2e8 \ubaa8\uc11c\ub9ac \uc88c\ud45c, \ub450 \uc810\ub9cc \uc788\uc73c\uba74 \ub429\ub2c8\ub2e4. (\uc88c\ud45c\ub294 \uc704\ub3c4\uc640 \uacbd\ub3c4\uc785\ub2c8\ub2e4.)<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public class BoxSearch\r\n{\r\n    public double LatitudeTopLeft { get; set; }\r\n    public double LongitudeTopLeft { get; set; }\r\n    public double LatitudeBottomRight { get; set; }\r\n    public double LongitudeBottomRight { get; set; }\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\uacbd\uacc4 \uc0c1\uc790 \uc9c0\ub9ac\uacf5\uac04 \ucffc\ub9ac\ub97c \ub9cc\ub4e4\ub824\uba74 <code>\uc9c0\uc624\ubc14\uc6b4\ub529 \ubc15\uc2a4 \ucffc\ub9ac<\/code> \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc704\uc758 POST \uba54\uc11c\ub4dc \ub0b4\ubd80\uc5d0\uc11c \uc774 \uc791\uc5c5\uc744 \uc218\ud589\ud558\uaca0\uc2b5\ub2c8\ub2e4. <code>BoxSearch<\/code> \ud074\ub798\uc2a4\ub97c \ub9e4\uac1c\ubcc0\uc218\ub85c \uc9c0\uc815\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">        [Route(\"api\/Box\")]\r\n        [HttpPost]\r\n        public IActionResult Box([FromBody] BoxSearch box)\r\n        {\r\n            var query = new GeoBoundingBoxQuery();\r\n            query.TopLeft(box.LongitudeTopLeft, box.LatitudeTopLeft);\r\n            query.BottomRight(box.LongitudeBottomRight, box.LatitudeBottomRight);\r\n            var searchParams = new SearchParams()\r\n                \/\/ .Fields(\"geo\", \"name\") \/\/ omitting because of bug NCBC-1651\r\n                .Limit(10)\r\n                .Timeout(TimeSpan.FromMilliseconds(10000));\r\n            var searchQuery = new SearchQuery\r\n            {\r\n                Query = query,\r\n                Index = \"mygeoindex\",\r\n                SearchParams = searchParams\r\n            };\r\n            var results = _bucket.Query(searchQuery);\r\n\r\n\/\/ ... snip ...<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc774 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc5d0\uc11c \ubc18\ud658\ud574\uc57c \ud558\ub294 \uac83\uc740 \uac01 \ud638\ud154\uc758 \uc88c\ud45c\uc640 \ud638\ud154 \uc774\ub984 \ubc0f \uc704\uce58 \ub4f1 \uacb0\uacfc \ubaa9\ub85d\ubfd0\uc785\ub2c8\ub2e4. \uc800\ub294 <code>\uc9c0\uc624\uc11c\uce58 \uacb0\uacfc<\/code> \ud074\ub798\uc2a4\uc785\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public class GeoSearchResult\r\n{\r\n    public double Latitude { get; set; }\r\n    public double Longitude { get; set; }\r\n    public InfoWindow InfoWindow { get; set; }\r\n}\r\n\r\npublic class InfoWindow\r\n{\r\n    public string Content { get; set; }\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p><em>\uc774 \ud074\ub798\uc2a4\ub294 \ub098\uc911\uc5d0 \uc0ac\uc6a9\ud560 Google \uc9c0\ub3c4 \ud50c\ub7ec\uadf8\uc778\uacfc \uc77c\uce58\ud558\ub3c4\ub85d \uad6c\uc131\ud588\uc2b5\ub2c8\ub2e4.<\/em><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc774 \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc5d0\uc11c \uba87 \uac00\uc9c0 \uacb0\uacfc\ub97c \ubc18\ud658\ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">\/\/ ... snip ...\r\n\r\n            var list = new List&lt;geosearchresult&gt;();\r\n            foreach (var hit in results.Hits)\r\n            {\r\n                \/\/ *** this part shouldn&#039;t be necessary\r\n                \/\/ the geo and name should come with the search results\r\n                \/\/ but there&#039;s an SDK bug NCBC-1651\r\n                var doc = _bucket.Get&lt;dynamic&gt;(hit.Id).Value;\r\n                \/\/ ****************\r\n                list.Add(new GeoSearchResult\r\n                {\r\n                    Latitude = doc.geo.lat,\r\n                    Longitude = doc.geo.lon,\r\n                    InfoWindow = new InfoWindow\r\n                    {\r\n                        Content = doc.name + &quot;&lt;br \/&gt;&quot; +\r\n                            doc.city + &quot;, &quot; +\r\n                            doc.state + &quot; &quot; +\r\n                            doc.country\r\n                    }\r\n                });\r\n            }\r\n            return Ok(list);\r\n        }<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_distance_search\">\uac70\ub9ac \uac80\uc0c9<\/h3>\n<div class=\"paragraph\">\n<p>'\uac70\ub9ac' \uac80\uc0c9\uc740 \uc9c0\ub9ac\uacf5\uac04 \ucffc\ub9ac\ub97c \uc218\ud589\ud558\ub294 \ub610 \ub2e4\ub978 \ubc29\ubc95\uc785\ub2c8\ub2e4. \uc774\ubc88\uc5d0\ub294 \uc0c1\uc790 \ub300\uc2e0 \uc6d0\uacfc \uac19\uc740 \ud615\ud0dc\uc785\ub2c8\ub2e4. \ub2e8\uc77c \uc88c\ud45c\uc640 \uac70\ub9ac\ub97c \uc785\ub825\ud558\uba74 \ub429\ub2c8\ub2e4. \uac70\ub9ac\ub294 \ud574\ub2f9 \uc9c0\uc810\uc5d0\uc11c\uc758 \ubc18\uacbd\uc774 \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 class PointSearch\r\n{\r\n    public double Latitude { get; set; }\r\n    public double Longitude { get; set; }\r\n    public int Distance { get; set; }\r\n    \/\/ miles is being assumed as the unit\r\n    public string DistanceWithUnits =&gt; Distance + \"mi\";\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\uae30\ubcf8\uac12\uc740 \ub9c8\uc77c\ub85c \uc124\uc815\ub418\uc5b4 \uc788\uc9c0\ub9cc, \ud0ac\ub85c\ubbf8\ud130\ub97c \ub300\uc2e0 \uc0ac\uc6a9\ud558\uac70\ub098 UI\uc5d0 \uc635\uc158\uc744 \ud45c\uc2dc\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub294 \ubc14\uc6b4\ub529 \ubc15\uc2a4 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc640 \ub9e4\uc6b0 \uc720\uc0ac\ud558\uc9c0\ub9cc, \ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud55c\ub2e4\ub294 \uc810\uc744 \uc81c\uc678\ud558\uba74 <code>\uc9c0\ub9ac\uc801 \uac70\ub9ac \ucffc\ub9ac<\/code>.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">[Route(&quot;api\/Point&quot;)]\r\n[HttpPost]\r\npublic IActionResult Point([FromBody] PointSearch point)\r\n{\r\n    var query = new GeoDistanceQuery();\r\n    query.Latitude(point.Latitude);\r\n    query.Longitude(point.Longitude);\r\n    query.Distance(point.DistanceWithUnits);\r\n    var searchParams = new SearchParams()\r\n        \/\/ .Fields(&quot;geo&quot;, &quot;name&quot;) \/\/ omitting because of bug NCBC-1651\r\n        .Limit(10)\r\n        .Timeout(TimeSpan.FromMilliseconds(10000));\r\n    var searchQuery = new SearchQuery\r\n    {\r\n        Query = query,\r\n        Index = &quot;mygeoindex&quot;,\r\n        SearchParams = searchParams\r\n    };\r\n    var results = _bucket.Query(searchQuery);\r\n\r\n    var list = new List&lt;geosearchresult&gt;();\r\n    foreach (var hit in results.Hits)\r\n    {\r\n        \/\/ *** this part shouldn&#039;t be necessary\r\n        \/\/ the geo and name should come with the search results\r\n        \/\/ but there&#039;s an SDK bug NCBC-1651\r\n        var doc = _bucket.Get&lt;dynamic&gt;(hit.Id).Value;\r\n        \/\/ ****************\r\n        list.Add(new GeoSearchResult\r\n        {\r\n            Latitude = doc.geo.lat,\r\n            Longitude = doc.geo.lon,\r\n            InfoWindow = new InfoWindow\r\n            {\r\n                Content = doc.name + &quot;&lt;br \/&gt;&quot; +\r\n                          doc.city + &quot;, &quot; +\r\n                          doc.state + &quot; &quot; +\r\n                          doc.country\r\n            }\r\n        });\r\n    }\r\n    return Ok(list);\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc774 \uc2dc\uc810\uc5d0\uc11c \uc6d0\ud558\ub294 \uacbd\uc6b0 Postman \ub610\ub294 Fiddler\ub85c \uc774\ub7ec\ud55c \uc5d4\ub4dc\ud3ec\uc778\ud2b8 \ud14c\uc2a4\ud2b8\ub97c \uc2dc\uc791\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc774\ub97c \uc9c0\ub3c4\uc5d0\uc11c \ud655\uc778\ud558\uba74 \ud6e8\uc52c \ub354 \uc88b\uc744 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_auerlia_and_google_maps\">\uc544\uc6b0\ub810\ub9ac\uc544 \ubc0f Google \uc9c0\ub3c4<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Aurelia\uc5d0\uc11c\ub294 \ub450 \uac00\uc9c0 \uad6c\uc131 \uc694\uc18c, \uc989 geosearchbox\uc640 geosearchpoint\ub97c \ub9cc\ub4e4\uc5c8\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\/2018\/03\/10402-aurelia-components.png\" alt=\"Auerlia components\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uac01 \uc9c0\ub3c4\uc5d0\ub294 \uc0ac\uc6a9\uc790\uac00 \uc0c1\ud638 \uc791\uc6a9\ud560 \uc218 \uc788\ub294 Google \uc9c0\ub3c4 \uad6c\uc131 \uc694\uc18c\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uc9c0\ub3c4\ub294 '\uc5ec\ud589 \uc0d8\ud50c'\uc5d0 \uc788\ub294 \ub9ce\uc740 \ud638\ud154\uc774 \uc788\ub294 \uc0cc\ud504\ub780\uc2dc\uc2a4\ucf54\ub97c \uc911\uc2ec\uc73c\ub85c \ud45c\uc2dc\ub420 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_bounded_box_search_component\">\ubc14\uc6b4\ub529 \ubc15\uc2a4 \uac80\uc0c9 \uad6c\uc131 \uc694\uc18c<\/h3>\n<div class=\"paragraph\">\n<p>\uadf8\ub9ac\uace0 <code>google-map`<\/code> \ucef4\ud3ec\ub10c\ud2b8\uc5d0\ub294 \uc0ac\uc6a9\uc790\uac00 \uc9c0\ub3c4\ub97c \ud074\ub9ad\ud560 \ub54c\ub9c8\ub2e4 \uc2e4\ud589\ub418\ub294 map-click.delegate\uac00 \uc788\uc2b5\ub2c8\ub2e4. geosearchbox.html\uc5d0\uc11c:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">&lt;google-map\r\n    if.bind=\"markers\"\r\n    map-click.delegate=\"clickMap($event)\"\r\n    latitude=\"37.780986253433895\"\r\n    longitude=\"-122.45291600632277\"\r\n    zoom=\"12\"\r\n    markers.bind=\"markers\"&gt;\r\n&lt;\/google-map&gt;<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p><code>\ub9c8\ucee4<\/code> \ub294 \ub2e8\uc21c\ud788 \uc9c0\ub3c4\uc5d0 \ud45c\uc2dc\ub418\uc5b4\uc57c \ud558\ub294 \uac80\uc0c9 \uacb0\uacfc\uc758 \uc88c\ud45c\ub97c \ud3ec\ud568\ud558\ub294 \ubc30\uc5f4\uc785\ub2c8\ub2e4. \ucc98\uc74c\uc5d0\ub294 \ube44\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc0ac\uc6a9\uc790\uac00 \uc9c0\ub3c4\ub97c \ucc98\uc74c \ud074\ub9ad\ud558\uba74 \uc591\uc2dd\uc758 \uccab \ubc88\uc9f8 \uc88c\ud45c(\uc67c\ucabd \uc0c1\ub2e8)\uac00 \uc124\uc815\ub429\ub2c8\ub2e4. geosearchbox.ts\uc5d0\uc11c<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">public clickMap(event : any) {\r\n    var latLng = event.detail.latLng,\r\n        lat = latLng.lat(),\r\n        lng = latLng.lng();\r\n\r\n    \/\/ only update top left if it hasn't been set yet\r\n    \/\/ or if bottom right is already set\r\n    if (!this.longitudeTopLeft || this.longitudeBottomRight) {\r\n        this.longitudeTopLeft = lng;\r\n        this.latitudeTopLeft = lat;\r\n        this.longitudeBottomRight = null;\r\n        this.latitudeBottomRight = null;\r\n    } else {\r\n        this.longitudeBottomRight = lng;\r\n        this.latitudeBottomRight = lat;\r\n    }\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\uadf8\ub7f0 \ub2e4\uc74c \uc9c0\ub3c4\uc5d0\uc11c \ub2e4\ub978 \uc9c0\uc810\uc744 \ud074\ub9ad\ud569\ub2c8\ub2e4. \uadf8\ub7ec\uba74 \ub450 \ubc88\uc9f8 \uc88c\ud45c(\uc624\ub978\ucabd \ud558\ub2e8)\uac00 \uc124\uc815\ub429\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc81c \uad6c\ud604\uc740 \ub9e4\uc6b0 \uae30\ucd08\uc801\uc778 \uc218\uc900\uc785\ub2c8\ub2e4. \uba4b\uc9c4 \uadf8\ub798\ud53d\ub3c4 \uc5c6\uace0 \ub450 \ubc88\uc9f8 \uc88c\ud45c\uac00 \uccab \ubc88\uc9f8 \uc88c\ud45c\uc758 \uc624\ub978\ucabd \ud558\ub2e8\uc5d0 \uc788\ub2e4\ub294 \uac80\uc99d\ub3c4 \uc5c6\uc2b5\ub2c8\ub2e4. \uc591\uc2dd\uc758 \ud544\ub4dc\ub294 \ub2e8\uc21c\ud788 \uc704\ub3c4\uc640 \uacbd\ub3c4\ub85c \ucc44\uc6cc\uc9d1\ub2c8\ub2e4. geosearchbox.html\uc5d0\uc11c<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">&lt;p&gt;\r\n    Bounding box search:\r\n    &lt;br \/&gt;\r\n    Latitude (top left):\r\n        &lt;input type=&quot;text&quot; value=&quot;${ latitudeTopLeft }&quot; \/&gt;\r\n    Longitude (top left):\r\n        &lt;input type=&quot;text&quot; value=&quot;${ longitudeTopLeft }&quot; \/&gt;\r\n    &lt;br \/&gt;\r\n    Latitude (bottom right):\r\n        &lt;input type=&quot;text&quot; value=&quot;${ latitudeBottomRight }&quot; \/&gt;\r\n    Longitude (bottom right):\r\n        &lt;input type=&quot;text&quot; value=&quot;${ longitudeBottomRight }&quot; \/&gt;\r\n    &lt;br \/&gt;\r\n    &lt;input\r\n        if.bind=&quot;latitudeTopLeft &amp;&amp; latitudeBottomRight&quot;\r\n        click.trigger=&quot;searchClick()&quot;\r\n        type=&quot;button&quot;\r\n        name=&quot;search&quot;\r\n        value=&quot;\uac80\uc0c9&quot; \/&gt;\r\n&lt;\/p&gt;<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub450 \uc88c\ud45c\ub97c \uc120\ud0dd\ud558\uba74 \uac80\uc0c9 \ubc84\ud2bc\uc774 \ub098\ud0c0\ub0a9\ub2c8\ub2e4. \uc774\ub97c \ud074\ub9ad\ud558\uba74 \uc55e\uc11c \ub9cc\ub4e0 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc5d0 \uc774 \uc88c\ud45c\ub97c \uac8c\uc2dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <code>searchClick()<\/code> \uba54\uc11c\ub4dc\uc5d0\uc11c \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">public searchClick() {\r\n    let boxSearch = {\r\n        latitudeTopLeft: this.latitudeTopLeft,\r\n        longitudeTopLeft: this.longitudeTopLeft,\r\n        latitudeBottomRight: this.latitudeBottomRight,\r\n        longitudeBottomRight: this.longitudeBottomRight\r\n    };\r\n\r\n    console.log(\"POSTing to api\/Box: \" + JSON.stringify(boxSearch));\r\n\r\n    this.http.fetch('api\/Box', { method: \"POST\", body: json(boxSearch) })\r\n        .then(result =&gt; result.json() as Promise&lt;any[]&gt;)\r\n        .then(data =&gt; {\r\n            this.markers = data;\r\n        });\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Aurelia, Google Maps, ASP.NET Core, Couchbase\uac00 \ubaa8\ub450 \ud568\uaed8 \uc791\ub3d9\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcf4\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\/2018\/03\/10403-geospatial-bounding-box.gif\" alt=\"Geospatial bounding box\" \/><\/span><\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_distance_search_2\">\uac70\ub9ac \uac80\uc0c9<\/h3>\n<div class=\"paragraph\">\n<p>'\uac70\ub9ac' \uc9c0\ub9ac\uacf5\uac04 \ucffc\ub9ac\ub97c \uad6c\ud604\ud558\ub294 \ubc29\ubc95\uc740 \uacbd\uacc4 \uc0c1\uc790 UI\uc640 \uc720\uc0ac\ud569\ub2c8\ub2e4. \uc774\ubc88\uc5d0\ub294 \uc9c0\ub3c4\uc5d0\uc11c \ub2e8\uc77c \uc9c0\uc810\ub9cc \ud074\ub9ad\ud558\uba74 \ub429\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uac70\ub9ac(\ub9c8\uc77c \ub2e8\uc704)\ub97c \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uadf8\ub9ac\uace0 <code>\uad6c\uae00 \uc9c0\ub3c4<\/code> \ucef4\ud3ec\ub10c\ud2b8\ub294 \ub3d9\uc77c\ud558\uac8c \ubcf4\uc785\ub2c8\ub2e4. \ucef4\ud3ec\ub10c\ud2b8\uc758 <code>\ud074\ub9ad\ub9f5<\/code> \ud568\uc218\ub294 \ub2e4\ub985\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">public clickMap(event: any) {\r\n    var latLng = event.detail.latLng,\r\n        lat = latLng.lat(),\r\n        lng = latLng.lng();\r\n\r\n    this.longitude = lng;\r\n    this.latitude = lat;\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\uac70\ub9ac(\ub9c8\uc77c \ub2e8\uc704)\ub97c \uc9c0\uc815\ud55c \ub2e4\uc74c '\uac80\uc0c9'\uc744 \ud074\ub9ad\ud558\uc5ec \uc55e\uc11c \uc791\uc131\ud55c \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc5d0 POST \uc694\uccad\uc744 \ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">geosearchbox.html:\r\n\r\n    &lt;p&gt;\r\n        Distance search:\r\n        &lt;br \/&gt;\r\n        Latitude: &lt;input type=&quot;text&quot; value=&quot;${ latitude }&quot; \/&gt;\r\n        Longitude: &lt;input type=&quot;text&quot; value=&quot;${ longitude }&quot; \/&gt;\r\n        &lt;br \/&gt;\r\n        Distance (miles): &lt;input type=&quot;text&quot; value=&quot;${ distance }&quot; \/&gt;\r\n        &lt;br \/&gt;\r\n        &lt;input if.bind=&quot;latitude&quot; click.trigger=&quot;searchClick()&quot; type=&quot;button&quot; name=&quot;search&quot; value=&quot;\uac80\uc0c9&quot; \/&gt;\r\n    &lt;\/p&gt;\r\n\r\ngeosearchbox.ts:\r\n\r\n    public searchClick() {\r\n        let pointSearch = {\r\n            latitude: this.latitude,\r\n            longitude: this.longitude,\r\n            distance: this.distance\r\n        };\r\n\r\n        console.log(&quot;POSTing to api\/Point: &quot; + JSON.stringify(pointSearch));\r\n\r\n        this.http.fetch(&#039;api\/Point&#039;, { method: &quot;POST&quot;, body: json(pointSearch) })\r\n            .then(result =&gt; result.json() as Promise&lt;any[]&gt;)\r\n            .then(data =&gt; {\r\n                this.markers = data;\r\n            });\r\n    }\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc544\ub798\ub294 \ub3d9\uc791 \uc911\uc778 \uac80\uc0c9\uc758 \ud074\ub9bd\uc785\ub2c8\ub2e4. \uc88c\ud45c\ub97c \uc774\ub3d9\ud558\uba74\uc11c \uacb0\uacfc\uac00 \uc5b4\ub5bb\uac8c \ub2ec\ub77c\uc9c0\ub294\uc9c0 \ud655\uc778\ud558\uc138\uc694.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/03\/10404-geospatial-distance.gif\" alt=\"Geospatial distance point search query\" \/><\/span><\/p>\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>Couchbase\uc758 \ub0b4\uc7a5\ud615 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/geospatial-basics-spatial-databases-and-nosql-examples\/\">\uc9c0\ub9ac\uacf5\uac04 \uc778\ub371\uc2f1<\/a> \uac80\uc0c9 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uba74 \ubaa8\ub4e0 \uacc4\uc0b0\uacfc \uac80\uc0c9\uc774 Couchbase \ub370\uc774\ud130 \ud50c\ub7ab\ud3fc\uc5d0 \uc704\uc784\ub429\ub2c8\ub2e4. \ub530\ub77c\uc11c \uc5ec\ub7ec\ubd84\uc740 (\uc5b4\uca0c\ub4e0 \uc800\ubcf4\ub2e4 \ub354 \ub098\uc740) \uba4b\uc9c4 UI\uc640 \uacac\uace0\ud55c \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uc744 \uad6c\ucd95\ud558\ub294 \ub370 \uc9d1\uc911\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub2e4\uc74c\uc744 \uc218\ud589\ud574\uc57c \ud569\ub2c8\ub2e4. <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.5\/fts\/fts-geospatial-queries.html\">\ubb38\uc11c \ud655\uc778<\/a> \ub97c \ucc38\uc870\ud558\uc5ec Couchbase\uc758 \uc9c0\ub9ac\uacf5\uac04 \uae30\ub2a5\uc5d0 \ub300\ud55c \uc804\uccb4 \uac1c\uc694\ub97c \ud655\uc778\ud558\uc138\uc694. \uc774 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc744 \uc77d\uace0 \ub2e4\uc74c\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uc138\uc694. <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/geospatial-basics-spatial-databases-and-nosql-examples\/\">\uacf5\uac04 \ub370\uc774\ud130\ubca0\uc774\uc2a4<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub3c4\uc6c0\uc774 \ud544\uc694\ud558\uac70\ub098 \uad81\uae08\ud55c \uc810\uc774 \uc788\uc73c\uba74 \ub2e4\uc74c\uc744 \ud655\uc778\ud558\uc138\uc694. <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/forums\/c\/couchbase-server\/\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc11c\ubc84 \ud3ec\ub7fc<\/a>\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc73c\uba70, Couchbase .NET SDK\uc5d0 \ub300\ud574 \uad81\uae08\ud55c \uc810\uc774 \uc788\ub294 \uacbd\uc6b0 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/forums\/c\/net-sdk\/\">.NET SDK \ud3ec\ub7fc<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc800\uc640 \uc5f0\ub77d\ud558\uace0 \uc2f6\uc73c\uc2dc\uba74 \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>Geospatial search is now fully supported in Couchbase Server 5.5. Check out the Couchbase Server 5.5 announcement, and download the developer build for free right now. In this post, I\u2019m going to demonstrate the geospatial capabilities of Couchbase Full Text [&hellip;]<\/p>","protected":false},"author":71,"featured_media":10791,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,10126,10127,1816,2165,8683,9327],"tags":[2182,1803,1543,1718],"ppma_author":[8937],"class_list":["post-4870","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-asp-dotnet","category-c-sharp","category-couchbase-server","category-full-text-search","category-geospatial","category-javascript","tag-devbuild","tag-google-maps","tag-javascript","tag-typescript"],"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>Geospatial Search With ASP.NET Core, Aurelia, Google Maps<\/title>\n<meta name=\"description\" content=\"Geospatial search is fully supported in Couchbase Server 5.5. This post demonstrates geospatial search capabilities with a web-based UI.\" \/>\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\/geospatial-aspnet-aurelia-google-maps\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Geospatial Search With ASP.NET Core, Aurelia, Google Maps\" \/>\n<meta property=\"og:description\" content=\"Geospatial search is fully supported in Couchbase Server 5.5. This post demonstrates geospatial search capabilities with a web-based UI.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/geospatial-aspnet-aurelia-google-maps\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-03-23T17:26:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T05:45:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/104-hero-map-geospatial_RESIZED.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1300\" \/>\n\t<meta property=\"og:image:height\" content=\"642\" \/>\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=\"10\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"Geospatial Search With ASP.NET Core, Aurelia, Google Maps\",\"datePublished\":\"2018-03-23T17:26:01+00:00\",\"dateModified\":\"2025-06-14T05:45:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/\"},\"wordCount\":1397,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/104-hero-map-geospatial_RESIZED.jpg\",\"keywords\":[\"devbuild\",\"Google Maps\",\"javascript\",\"TypeScript\"],\"articleSection\":[\".NET\",\"ASP.NET\",\"C#\",\"Couchbase Server\",\"Full-Text Search\",\"Geospatial\",\"JavaScript\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/\",\"name\":\"Geospatial Search With ASP.NET Core, Aurelia, Google Maps\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/104-hero-map-geospatial_RESIZED.jpg\",\"datePublished\":\"2018-03-23T17:26:01+00:00\",\"dateModified\":\"2025-06-14T05:45:10+00:00\",\"description\":\"Geospatial search is fully supported in Couchbase Server 5.5. This post demonstrates geospatial search capabilities with a web-based UI.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/104-hero-map-geospatial_RESIZED.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/104-hero-map-geospatial_RESIZED.jpg\",\"width\":1300,\"height\":642,\"caption\":\"A compass laid atop a map with a red X marking a proposed destination\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Geospatial Search With ASP.NET Core, Aurelia, Google Maps\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\/\/crosscuttingconcerns.com\",\"https:\/\/x.com\/mgroves\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"ASP.NET Core, Aurelia, Google \uc9c0\ub3c4\ub97c \uc0ac\uc6a9\ud55c \uc9c0\ub9ac\uc801 \uacf5\uac04 \uac80\uc0c9","description":"\uc704\uce58 \uae30\ubc18 \uc815\ubcf4 \uac80\uc0c9\uc740 Couchbase Server 5.5\uc5d0\uc11c \uc644\ubcbd\ud558\uac8c \uc9c0\uc6d0\ub429\ub2c8\ub2e4. \uc774 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 \uc6f9 \uae30\ubc18 UI\ub97c \uc0ac\uc6a9\ud55c \uc704\uce58 \uae30\ubc18 \uc815\ubcf4 \uac80\uc0c9 \uae30\ub2a5\uc744 \ubcf4\uc5ec\uc90d\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\/geospatial-aspnet-aurelia-google-maps\/","og_locale":"ko_KR","og_type":"article","og_title":"Geospatial Search With ASP.NET Core, Aurelia, Google Maps","og_description":"Geospatial search is fully supported in Couchbase Server 5.5. This post demonstrates geospatial search capabilities with a web-based UI.","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/geospatial-aspnet-aurelia-google-maps\/","og_site_name":"The Couchbase Blog","article_published_time":"2018-03-23T17:26:01+00:00","article_modified_time":"2025-06-14T05:45:10+00:00","og_image":[{"width":1300,"height":642,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/104-hero-map-geospatial_RESIZED.jpg","type":"image\/jpeg"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"10\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"Geospatial Search With ASP.NET Core, Aurelia, Google Maps","datePublished":"2018-03-23T17:26:01+00:00","dateModified":"2025-06-14T05:45:10+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/"},"wordCount":1397,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/104-hero-map-geospatial_RESIZED.jpg","keywords":["devbuild","Google Maps","javascript","TypeScript"],"articleSection":[".NET","ASP.NET","C#","Couchbase Server","Full-Text Search","Geospatial","JavaScript"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/","url":"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/","name":"ASP.NET Core, Aurelia, Google \uc9c0\ub3c4\ub97c \uc0ac\uc6a9\ud55c \uc9c0\ub9ac\uc801 \uacf5\uac04 \uac80\uc0c9","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/104-hero-map-geospatial_RESIZED.jpg","datePublished":"2018-03-23T17:26:01+00:00","dateModified":"2025-06-14T05:45:10+00:00","description":"\uc704\uce58 \uae30\ubc18 \uc815\ubcf4 \uac80\uc0c9\uc740 Couchbase Server 5.5\uc5d0\uc11c \uc644\ubcbd\ud558\uac8c \uc9c0\uc6d0\ub429\ub2c8\ub2e4. \uc774 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 \uc6f9 \uae30\ubc18 UI\ub97c \uc0ac\uc6a9\ud55c \uc704\uce58 \uae30\ubc18 \uc815\ubcf4 \uac80\uc0c9 \uae30\ub2a5\uc744 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/104-hero-map-geospatial_RESIZED.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/104-hero-map-geospatial_RESIZED.jpg","width":1300,"height":642,"caption":"A compass laid atop a map with a red X marking a proposed destination"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/geospatial-aspnet-aurelia-google-maps\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Geospatial Search With ASP.NET Core, Aurelia, Google Maps"}]},{"@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\/4870","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=4870"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/4870\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/10791"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=4870"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=4870"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=4870"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=4870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}