{"id":1896,"date":"2015-03-03T17:05:20","date_gmt":"2015-03-03T17:05:20","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1896"},"modified":"2023-09-07T10:12:32","modified_gmt":"2023-09-07T17:12:32","slug":"advanced-spring-data-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/advanced-spring-data-couchbase\/","title":{"rendered":"\uace0\uae09 \uc2a4\ud504\ub9c1 \ub370\uc774\ud130 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4"},"content":{"rendered":"<p>\uc5d0\uc11c\u00a0<a href=\"\/blog\/ko\/intro-spring-data-couchbase\/\">\uc774\uc804<\/a>\u00a0<a href=\"\/blog\/ko\/storing-timestamped-metrics-in-couchbase-with-spring\/\">\ub450<\/a>\u00a0\uc2dc\uc791\ud558\uae30 \uc704\ud574 \uc0b4\ud3b4\ubcf8 \uac8c\uc2dc\ubb3c <a href=\"https:\/\/docs.couchbase.com\/sdk-extensions\/spring-data-couchbase.html\">Spring \ub370\uc774\ud130 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4<\/a>. \uc774\uc81c \uc870\uae08 \ub354 \uc815\uad50\ud574\uc9c8 \ucc28\ub840\uc785\ub2c8\ub2e4(\uc815\uad50\ud558\uac70\ub098 \uace0\uae09\uc2a4\ub7fd\ub2e4\ub294 \uac83\uc774 \ub354 \ubcf5\uc7a1\ud558\ub2e4\ub294 \ub73b\uc774 \uc544\ub2d8\uc744 \uba85\uc2ec\ud558\uc138\uc694). \uce90\uc2f1, \ubb38\uc11c \uc720\ud6a8\uc131 \uac80\uc0ac, REST API\ub97c \ud1b5\ud55c \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac \ub178\ucd9c\uacfc \uac19\uc740 \uba87 \uac00\uc9c0 \ud6cc\ub96d\ud55c \uae30\ub2a5\uc744 \uc0b4\ud3b4\ubd05\uc2dc\ub2e4.<\/p>\n<h2 id=\"caching\">\uce90\uc2f1<\/h2>\n<p>Spring \ucf54\uc5b4 \ubaa8\ub4c8\uc740 \ub9e4\uc6b0 \uba4b\uc9c4\u00a0<a href=\"https:\/\/docs.spring.io\/spring\/docs\/current\/spring-framework-reference\/html\/cache.html\">\uce90\uc2dc \ucd94\uc0c1\ud654<\/a>\u00a0JSR-107(JCache)\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. \uc608\uc2dc\ub97c \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uba54\uc11c\ub4dc\uc758 \uacb0\uacfc\uac00 \uce90\uc2dc\ub418\ub3c4\ub85d \ud558\ub824\uba74 \ub2e4\uc74c \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc0ac\uc6a9\ud558\uba74 \ub429\ub2c8\ub2e4:<\/p>\n<pre><code>@Cacheable(value = \u201cmyCache\u201d, key = \u201c\u2018cache:\u2019+#param\u201d)\r\npublic Object useALotOfCPUCycles(String param){\r\n\u00a0\u2026.\r\n\u2028}\r\n<\/code><\/pre>\n<p>\uc5ec\uae30\uc11c 'myCache'\ub294 \uc81c\uac00 \uad6c\uc131\ud55c \uae30\uc874 \uce90\uc2dc \uc778\uc2a4\ud134\uc2a4\uc758 \uc774\ub984\uc785\ub2c8\ub2e4. \ubb38\uc11c\uc758 \ud0a4\ub294 \ud0a4 \uc815\uaddc\uc2dd \"'cache:'+#param\"\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud655\uc778\ub418\uba70, \uc5ec\uae30\uc11c #param\uc740 'param'\uc774\ub77c\ub294 \uba54\uc11c\ub4dc \ub9e4\uac1c\ubcc0\uc218\uc785\ub2c8\ub2e4. \uc774\ub807\uac8c \ud558\uba74 \ub3d9\uc77c\ud55c \ub9e4\uac1c\ubcc0\uc218\uc5d0 \ub300\ud574 \uba54\uc11c\ub4dc\uac00 \ud55c \ubc88\ub9cc \uc2e4\ud589\ub429\ub2c8\ub2e4. \ub098\uc911\uc5d0 \uba54\uc11c\ub4dc\uac00 \ud638\ucd9c\ub418\uba74 \uce90\uc2dc\uc5d0\uc11c \uacb0\uacfc\ub97c \uac00\uc838\uc635\ub2c8\ub2e4. \uc989, \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc801\uc808\ud558\uac8c \uad6c\uc131\ud55c \uacbd\uc6b0 Couchbase\uc5d0\uc11c \uacb0\uacfc\ub97c \uac00\uc838\uc635\ub2c8\ub2e4. \uce90\uc2dc \uc778\uc2a4\ud134\uc2a4\ub97c \uc815\uc758\ud558\ub824\uba74 \uad6c\uc131\uc5d0 \ub2e4\uc74c\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4:<\/p>\n<pre><code>\u2028@Bean\r\n\u2028CouchbaseCacheManager cacheManager(CouchbaseClient couchbaseClient) throws Exception {\r\n\u2028\u00a0\u00a0\u00a0 HashMap&lt;String, CouchbaseClient&gt; instances = new HashMap&lt;&gt;();\r\n\u2028\u00a0\u00a0\u00a0 instances.put(\u201cmyCache\u201d, couchbaseClient);\r\n\u2028\u00a0\u00a0\u00a0 return new CouchbaseCacheManager(instances);\u2028\r\n}\r\n<\/code><\/pre>\n<p>\ubc0f\u00a0<strong>@EnableCaching<\/strong>\u00a0\uc5b4\ub178\ud14c\uc774\uc158\uc744 \ucd94\uac00\ud558\uc138\uc694.<\/p>\n<p>\uc774\ubbf8 Spring\uc758 \uce90\uc2f1 \uc2dc\uc2a4\ud15c\uc744 \uc0ac\uc6a9 \uc911\uc774\ub77c\uba74 \ud604\uc7ac \uc0ac\uc6a9 \uc911\uc778 \uc800\uc7a5\uc18c\ub97c Couchbase\ub85c \uad50\uccb4\ud558\ub294 \uac83\uc740 \uc815\ub9d0 \uc27d\uc2b5\ub2c8\ub2e4. \uc0ac\uc6a9 \uc911\uc778 cacheManager\uac00 CouchbaseCacheManager \uad6c\ud604\uc778\uc9c0 \ud655\uc778\ud558\uae30\ub9cc \ud558\uba74 \ub429\ub2c8\ub2e4.<\/p>\n<h2 id=\"documentvalidation\">\ubb38\uc11c \uc720\ud6a8\uc131 \uac80\uc0ac<\/h2>\n<p>\ud544\ub4dc \uc720\ud6a8\uc131 \uac80\uc0ac\ub294 \ube44\uc988\ub2c8\uc2a4 \uac1d\uccb4\ub97c \ub2e4\ub8f0 \ub54c \ud754\ud788 \ud558\ub294 \uc791\uc5c5\uc785\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 \uc9c0\uc815\ub41c \ud544\ub4dc\ub97c Couchbase\uc5d0 \uc800\uc7a5\ud558\uae30 \uc804\uc5d0 null\uc774 \uc544\ub2cc\uc9c0 \ud655\uc778\ud558\uac70\ub098 \ud544\ub4dc\uac00 140\uc790\ub97c \ub118\uc9c0 \uc54a\ub294\uc9c0 \ud655\uc778\ud558\ub294 \uac83\uc774 \uadf8 \uc608\uc785\ub2c8\ub2e4. \uc88b\uc740 \uc18c\uc2dd\uc740 \uc774 \uc791\uc5c5\uc774 \uc2e4\uc81c\ub85c \ub9e4\uc6b0 \uc27d\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4. \ucd5c\ub300 \uc808\uc804 \ubaa8\ub4dc \uc720\ud6a8\uc131 \uac80\uc0ac\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uac00\uc7a5 \uba3c\uc800 \ud574\uc57c \ud560 \uc77c\uc740 \ud544\uc694\ud55c \uc885\uc18d\uc131\uc744 pom\uc5d0 \ucd94\uac00\ud558\ub294 \uac83\uc785\ub2c8\ub2e4:<\/p>\n<pre><code>\r\n\u00a0 \u00a0 org.hibernate\r\n\u00a0 \u00a0 hibernate-validator\r\n\r\n<\/code><\/pre>\n<p>\ub2e4\uc74c \ub2e8\uacc4\ub294 \uc800\uc7a5\ud560 \uac1d\uccb4\uac00 \uc720\ud6a8\uc131 \uac80\uc0ac \uc694\uad6c \uc0ac\ud56d\uc744 \ucda9\uc871\ud558\uc9c0 \uc54a\uc744 \ub54c ConstraintViolationException\uc744 \ub358\uc9c0\ub294 ValidationListener \ube48\uc744 \ucd94\uac00\ud558\ub294 \uac83\uc785\ub2c8\ub2e4:<\/p>\n<pre><code>@Bean\r\n\u2028LocalValidatorFactoryBean validator() {\r\n\u2028\u00a0\u00a0\u00a0 return new LocalValidatorFactoryBean();\u2028\r\n}<\/code><\/pre>\n<p><code>@Bean ValidatingCouchbaseEventListener validationEventListener() { return new ValidatingCouchbaseEventListener(validator()); }<\/code><\/p>\n<p>\uc774\uc81c \ud544\uc218 \uad6c\uc131\uc774 \uc644\ub8cc\ub418\uc5c8\uc73c\ubbc0\ub85c \ub2e4\uc74c\uacfc \uac19\uc774 POJO \uac1d\uccb4\uc5d0 Hibernate \uc720\ud6a8\uc131 \uac80\uc0ac \uc5b4\ub178\ud14c\uc774\uc158\uc744 \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre><code>@Field @NotNull\r\nprivate String thisFieldShouldNotBeNull;\r\n<\/code><\/pre>\n<p>\uc774\uc81c \ub0b4 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \uc774 \ud504\ub85c\ud37c\ud2f0\uac00 null\ub85c \uc124\uc815\ub41c \uac1d\uccb4\ub97c \uc800\uc7a5\ud558\ub824\uace0 \ud560 \ub54c\ub9c8\ub2e4 ConstraintViolationException\uc774 \ubc1c\uc0dd\ud569\ub2c8\ub2e4.<\/p>\n<p>\ubb3c\ub860 @NotNull \uc678\uc5d0\ub3c4 \ub2e4\uc591\ud55c \uc5b4\ub178\ud14c\uc774\uc158\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uc8fc\uc11d\uc740\u00a0<a href=\"https:\/\/docs.spring.io\/spring\/docs\/current\/spring-framework-reference\/html\/validation.html\">\uc2a4\ud504\ub9c1 \ubb38\uc11c<\/a>.<\/p>\n<h2 id=\"exposetherepositorywitharestapi\">REST API\ub85c \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac \ub178\ucd9c\ud558\uae30<\/h2>\n<p>\uc774\ub807\uac8c \uc9e7\uc740 \uc2dc\uac04 \ub0b4\uc5d0 \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uac83\ub3c4 \uc88b\uc9c0\ub9cc, \ub354 \uc88b\uc740 \uc810\uc740 \uc885\uc18d\uc131\uc744 \ucd94\uac00\ud558\ub294 \uac83\ub9cc\uc73c\ub85c REST API \ub4a4\uc5d0 \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac\ub97c \ub178\ucd9c\ud560 \uc218 \uc788\ub2e4\ub294 \uc0ac\uc2e4\uc785\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574\uc11c\ub294 spring-data-rest-webmvc\ub97c \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4. \uadf8\ub798\uc11c \uc800\ub294 \uc774\ub807\uac8c \uc885\uc18d\uc131\uc5d0 \ucd94\uac00\ud569\ub2c8\ub2e4:<\/p>\n<pre><code>\r\n\u00a0 \u00a0 org.springframework.data\r\n\u00a0 \u00a0 spring-data-rest-webmvc\r\n\r\n<\/code><\/pre>\n<p>\uadf8\ub9ac\uace0 \uc9dc\uc794(\uc800\ub294 \ud504\ub791\uc2a4 \ucd9c\uc2e0\uc774\uae30 \ub54c\ubb38\uc5d0 \uc9dc\uc794\uc744 \uc4f8 \uc790\uaca9\uc774 \uc788\ub2e4\uace0 \uc0dd\uac01\ud569\ub2c8\ub2e4). \uc774 \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac\uc5d0 \uc788\ub294 \ubaa8\ub4e0 \uac1c\uccb4\uac00 \ub178\ucd9c\ub429\ub2c8\ub2e4.\u00a0<a href=\"https:\/\/projects.spring.io\/spring-hateoas\/\">HATEOAS<\/a>\u00a0\uc2a4\ud0c0\uc77c:<\/p>\n<pre><code>caolila:~ ldoguin$ curl -v https:\/\/localhost:8080\/twitterUpdates\r\n{\r\n\u00a0\u201c_embedded\u201d : {\r\n\u00a0\u00a0\u00a0 \u201ctwitterUpdates\u201d : [ {\r\n\u00a0\u00a0\u00a0\u00a0 \u201ccreatedAt\u201d : 1421929099417,\r\n\u00a0\u00a0\u00a0\u00a0 \u201ctype\u201d : \u201ctwitterUpdate\u201d,\r\n\u00a0\u00a0\u00a0\u00a0 \u201caccount\u201d : \u201cCouchbase\u201d,\r\n\u00a0\u00a0\u00a0\u00a0 \u201cfollowers\u201d : 90323,\r\n\u00a0\u00a0\u00a0\u00a0 \u201cfavorites\u201d : 619,\r\n\u00a0\u00a0\u00a0\u00a0 \u201cfriends\u201d : 541,\r\n\u00a0\u00a0\u00a0\u00a0 \u201cstatuses\u201d : 6155,\r\n\u00a0\u00a0\u00a0\u00a0 \u201c_links\u201d : {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201cself\u201d : {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201chref\u201d : \u201chttps:\/\/localhost:8080\/twitterUpdates\/tw-couchbase\u20131421929099417\u201d\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 }, {\r\n\u00a0\u00a0\u00a0\u00a0 \u201ccreatedAt\u201d : 1422314903175,\r\n\u00a0\u00a0\u00a0\u00a0 \u201ctype\u201d : \u201ctwitterUpdate\u201d,\r\n\u00a0\u00a0\u00a0\u00a0 \u201caccount\u201d : \u201cCouchbase\u201d,\r\n\u00a0\u00a0\u00a0\u00a0 \u201cfollowers\u201d : 90285,\r\n\u00a0\u00a0\u00a0\u00a0 \u201cfavorites\u201d : 619,\r\n\u00a0\u00a0\u00a0\u00a0 \u201cfriends\u201d : 542,\r\n\u00a0\u00a0\u00a0\u00a0 \u201cstatuses\u201d : 6207,\r\n\u00a0\u00a0\u00a0\u00a0 \u201c_links\u201d : {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201cself\u201d : {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u201chref\u201d : \u201chttps:\/\/localhost:8080\/twitterUpdates\/tw-Couchbase\u20131422314903175\u201d\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 } ]\r\n\u00a0}\r\n<\/code><\/pre>\n<p>JSON \ubb38\uc11c\uc5d0\uc11c \uc77c\ubd80 \uc18d\uc131\uc744 \ubcf4\ub824\uba74 \uc800\ucc98\ub7fc \uac8c\ud130\ub97c \ucd94\uac00\ud558\ub294 \uac83\uc744 \uc78a\uc9c0 \ub9c8\uc138\uc694...<\/p>\n<p>\uc5ec\uae30\uae4c\uc9c0 \uc2a4\ud504\ub9c1 \ub370\uc774\ud130 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc5d0 \ub300\ud55c \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud2b8 \uc2dc\ub9ac\uc988\uc785\ub2c8\ub2e4. \ub313\uae00\uc744 \ub2ec\uc544 \uacf5\uc720\ud574 \uc8fc\uc2dc\uace0, \ub354 \ub9ce\uc740 Spring \ubc0f Couchbase \ub9ac\uc18c\uc2a4\ub97c \uc6d0\ud558\uc2dc\ub294\uc9c0, \uc0ac\uc6a9 \uc911\uc774\uac70\ub098 \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc740\uc9c0 \uc54c\ub824\uc8fc\uc138\uc694.<\/p>","protected":false},"excerpt":{"rendered":"<p>In the\u00a0previous\u00a0two\u00a0posts we looked at getting started with Spring Data Couchbase. Now it\u2019s time to get a little more sophisticated (keeping in mind that sophisticated or advanced does not mean more complicated). Let\u2019s look at some of the great stuff [&hellip;]<\/p>","protected":false},"author":49,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[1424],"ppma_author":[9023],"class_list":["post-1896","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-spring"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.5 (Yoast SEO v26.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Advanced Spring Data Couchbase - The Couchbase Blog<\/title>\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\/advanced-spring-data-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Advanced Spring Data Couchbase\" \/>\n<meta property=\"og:description\" content=\"In the\u00a0previous\u00a0two\u00a0posts we looked at getting started with Spring Data Couchbase. Now it\u2019s time to get a little more sophisticated (keeping in mind that sophisticated or advanced does not mean more complicated). Let\u2019s look at some of the great stuff [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/advanced-spring-data-couchbase\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-03-03T17:05:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-07T17:12:32+00:00\" \/>\n<meta name=\"author\" content=\"Laurent Doguin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ldoguin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"unstructured.io\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/\"},\"author\":{\"name\":\"Laurent Doguin\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e\"},\"headline\":\"Advanced Spring Data Couchbase\",\"datePublished\":\"2015-03-03T17:05:20+00:00\",\"dateModified\":\"2023-09-07T17:12:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/\"},\"wordCount\":528,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"spring\"],\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/\",\"name\":\"Advanced Spring Data Couchbase - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-03-03T17:05:20+00:00\",\"dateModified\":\"2023-09-07T17:12:32+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/#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\/advanced-spring-data-couchbase\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Advanced Spring Data Couchbase\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e\",\"name\":\"Laurent Doguin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/12929ce99397769f362b7a90d6b85071\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g\",\"caption\":\"Laurent Doguin\"},\"description\":\"Laurent is a nerdy metal head who lives in Paris. He mostly writes code in Java and structured text in AsciiDoc, and often talks about data, reactive programming and other buzzwordy stuff. He is also a former Developer Advocate for Clever Cloud and Nuxeo where he devoted his time and expertise to helping those communities grow bigger and stronger. He now runs Developer Relations at Couchbase.\",\"sameAs\":[\"https:\/\/x.com\/ldoguin\"],\"honorificPrefix\":\"Mr\",\"birthDate\":\"1985-06-07\",\"gender\":\"male\",\"award\":[\"Devoxx Champion\",\"Couchbase Legend\"],\"knowsAbout\":[\"Java\"],\"knowsLanguage\":[\"English\",\"French\"],\"jobTitle\":\"Director Developer Relation & Strategy\",\"worksFor\":\"Couchbase\",\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/laurent-doguin\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Advanced Spring Data Couchbase - The Couchbase Blog","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\/advanced-spring-data-couchbase\/","og_locale":"ko_KR","og_type":"article","og_title":"Advanced Spring Data Couchbase","og_description":"In the\u00a0previous\u00a0two\u00a0posts we looked at getting started with Spring Data Couchbase. Now it\u2019s time to get a little more sophisticated (keeping in mind that sophisticated or advanced does not mean more complicated). Let\u2019s look at some of the great stuff [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/advanced-spring-data-couchbase\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-03-03T17:05:20+00:00","article_modified_time":"2023-09-07T17:12:32+00:00","author":"Laurent Doguin","twitter_card":"summary_large_image","twitter_creator":"@ldoguin","twitter_misc":{"Written by":"unstructured.io","Est. reading time":"3\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/"},"author":{"name":"Laurent Doguin","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e"},"headline":"Advanced Spring Data Couchbase","datePublished":"2015-03-03T17:05:20+00:00","dateModified":"2023-09-07T17:12:32+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/"},"wordCount":528,"commentCount":1,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["spring"],"articleSection":["Uncategorized"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/","name":"Advanced Spring Data Couchbase - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-03-03T17:05:20+00:00","dateModified":"2023-09-07T17:12:32+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/advanced-spring-data-couchbase\/#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\/advanced-spring-data-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Advanced Spring Data Couchbase"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","description":"NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4, Couchbase","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e","name":"\ub85c\ub791 \ub3c4\uadc4","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/12929ce99397769f362b7a90d6b85071","url":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","caption":"Laurent Doguin"},"description":"Laurent\ub294 \ud30c\ub9ac\uc5d0 \uc0ac\ub294 \uad34\uc9dc \uae08\uc18d\uacf5\ud559\ub3c4\uc785\ub2c8\ub2e4. \uc8fc\ub85c Java\ub85c \ucf54\ub4dc\ub97c \uc791\uc131\ud558\uace0 AsciiDoc\uc73c\ub85c \uad6c\uc870\ud654\ub41c \ud14d\uc2a4\ud2b8\ub97c \uc791\uc131\ud558\uba70 \ub370\uc774\ud130, \ub9ac\uc561\ud2f0\ube0c \ud504\ub85c\uadf8\ub798\ubc0d \ubc0f \uae30\ud0c0 \uc720\ud589\uc5b4\uc5d0 \ub300\ud574 \uc790\uc8fc \uc774\uc57c\uae30\ud569\ub2c8\ub2e4. \ub610\ud55c Clever Cloud\uc640 Nuxeo\uc758 \uac1c\ubc1c\uc790 \uc639\ud638\uc790\ub85c \ud65c\ub3d9\ud558\uba70 \ud574\ub2f9 \ucee4\ubba4\ub2c8\ud2f0\uac00 \ub354 \ud06c\uace0 \uac15\ub825\ud558\uac8c \uc131\uc7a5\ud560 \uc218 \uc788\ub3c4\ub85d \uc790\uc2e0\uc758 \uc2dc\uac04\uacfc \uc804\ubb38\uc131\uc744 \ubc14\ucce4\uc2b5\ub2c8\ub2e4. \ud604\uc7ac Couchbase\uc5d0\uc11c \uac1c\ubc1c\uc790 \uad00\uacc4\ub97c \uc6b4\uc601\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.","sameAs":["https:\/\/x.com\/ldoguin"],"honorificPrefix":"Mr","birthDate":"1985-06-07","gender":"male","award":["Devoxx Champion","Couchbase Legend"],"knowsAbout":["Java"],"knowsLanguage":["English","French"],"jobTitle":"Director Developer Relation & Strategy","worksFor":"Couchbase","url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/laurent-doguin\/"}]}},"authors":[{"term_id":9023,"user_id":49,"is_guest":0,"slug":"laurent-doguin","display_name":"Laurent Doguin","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","author_category":"","last_name":"Doguin","first_name":"Laurent","job_title":"","user_url":"","description":"Laurent\ub294 \ud30c\ub9ac\uc5d0 \uc0ac\ub294 \uad34\uc9dc \uae08\uc18d\uacf5\ud559\ub3c4\uc785\ub2c8\ub2e4. \uc8fc\ub85c Java\ub85c \ucf54\ub4dc\ub97c \uc791\uc131\ud558\uace0 AsciiDoc\uc73c\ub85c \uad6c\uc870\ud654\ub41c \ud14d\uc2a4\ud2b8\ub97c \uc791\uc131\ud558\uba70 \ub370\uc774\ud130, \ub9ac\uc561\ud2f0\ube0c \ud504\ub85c\uadf8\ub798\ubc0d \ubc0f \uae30\ud0c0 \uc720\ud589\uc5b4\uc5d0 \ub300\ud574 \uc790\uc8fc \uc774\uc57c\uae30\ud569\ub2c8\ub2e4. \ub610\ud55c Clever Cloud\uc640 Nuxeo\uc758 \uac1c\ubc1c\uc790 \uc639\ud638\uc790\ub85c \ud65c\ub3d9\ud558\uba70 \ud574\ub2f9 \ucee4\ubba4\ub2c8\ud2f0\uac00 \ub354 \ud06c\uace0 \uac15\ub825\ud558\uac8c \uc131\uc7a5\ud560 \uc218 \uc788\ub3c4\ub85d \uc790\uc2e0\uc758 \uc2dc\uac04\uacfc \uc804\ubb38\uc131\uc744 \ubc14\ucce4\uc2b5\ub2c8\ub2e4. \ud604\uc7ac Couchbase\uc5d0\uc11c \uac1c\ubc1c\uc790 \uad00\uacc4\ub97c \uc6b4\uc601\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/1896","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\/49"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=1896"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/1896\/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=1896"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=1896"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=1896"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=1896"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}