{"id":2039,"date":"2015-12-16T19:37:00","date_gmt":"2015-12-16T19:37:00","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2039"},"modified":"2024-09-12T01:12:09","modified_gmt":"2024-09-12T08:12:09","slug":"couchbase-spring-cache","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/couchbase-spring-cache\/","title":{"rendered":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\ub85c \uc2a4\ud504\ub9c1 \uce90\uc2dc \ubc31\uc5c5\ud558\uae30"},"content":{"rendered":"<p><!-- Backing Spring Cache with Couchbase --><\/p>\n<p>\uc774 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 \ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud558\uc5ec \ub370\uc774\ud130\ub97c \uc27d\uac8c \uce90\uc2dc\ud558\ub294 \ubc29\ubc95\uc744 \uc54c\uc544\ubcf4\uc138\uc694. <code>\uc2a4\ud504\ub9c1 \uce90\uc2dc<\/code> \uadf8\ub9ac\uace0 <code>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4<\/code> \ub97c \uc9c0\uc6d0 \uc2a4\ud1a0\uc5b4 \uad00\ub9ac\uc790\ub85c \uc9c0\uc815\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p><strong>\ubaa9\ucc28<\/strong><br \/>\n<!-- TOC depth:6 withLinks:1 updateOnSave:1 orderedList:0 --><\/p>\n<ul>\n<li><a href=\"#a-word-of-introduction\">\uc18c\uac1c \ud55c\ub9c8\ub514<\/a><\/li>\n<li><a href=\"#the-cache-abstraction\">\uadf8\ub9ac\uace0 <code>\uce90\uc2dc<\/code> \ucd94\uc0c1\ud654<\/a><\/li>\n<li><a href=\"#the-couchbase-implementation\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uad6c\ud604<\/a><\/li>\n<li><a href=\"#getting-couchbase-spring-cache-and-putting-it-to-work\">\uc5bb\uae30 <code>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4-\uc2a4\ud504\ub9c1 \uce90\uc2dc<\/code> \ud65c\uc6a9\ud558\uae30<\/a>\n<ul>\n<li><a href=\"#downloading-and-building-the-couchbase-spring-cache-project\">\ub2e4\uc6b4\ub85c\ub4dc \ubc0f \ube4c\ub4dc <code>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4-\uc2a4\ud504\ub9c1 \uce90\uc2dc<\/code> \ud504\ub85c\uc81d\ud2b8<\/a><\/li>\n<li><a href=\"#starting-a-tutorial-project\">\ud29c\ud1a0\ub9ac\uc5bc \ud504\ub85c\uc81d\ud2b8 \uc2dc\uc791\ud558\uae30<\/a><\/li>\n<li><a href=\"#add-book-management-entity-and-repository\">\ub3c4\uc11c \uad00\ub9ac \uc5d4\ud130\ud2f0 \ubc0f \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac \ucd94\uac00\ud558\uae30<\/a><\/li>\n<li><a href=\"#the-main-spring-boot-application\">\uba54\uc778 <code>\uc2a4\ud504\ub9c1 \ubd80\ud305<\/code> \uc560\ud50c\ub9ac\ucf00\uc774\uc158<\/a><\/li>\n<li><a href=\"#adding-caching-capabilities\">\uce90\uc2f1 \uae30\ub2a5 \ucd94\uac00<\/a><\/li>\n<li><a href=\"#activate-caching-in-simplebookrepository\">\uc5d0\uc11c \uce90\uc2f1 \ud65c\uc131\ud654 <code>\uac04\ub2e8\ud55c \ucc45 \uc800\uc7a5\uc18c<\/code><\/a><\/li>\n<li><a href=\"#seeing-the-data-in-couchbase\">Couchbase\uc5d0\uc11c \ub370\uc774\ud130 \ubcf4\uae30<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#conclusion\">\uacb0\ub860<\/a><br \/>\n<!-- \/TOC --><\/li>\n<\/ul>\n<h2 id=\"a-word-of-introduction\">\uc18c\uac1c \ud55c\ub9c8\ub514<\/h2>\n<p>\ub2e4\uc74c\uacfc \uad00\ub828\ub41c \ub9ce\uc740 \uc791\uc5c5\uc774 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. <code>\ubd04<\/code> \uc694\uc998! \uc800\ud76c\ub294 \ucd5c\uadfc <code><a href=\"https:\/\/docs.couchbase.com\/sdk-extensions\/spring-data-couchbase.html\">Spring \ub370\uc774\ud130 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4<\/a><\/code> \ucee4\ub125\ud130\ub97c \uc0ac\uc6a9\ud558\uc5ec 2.x \uc138\ub300\uc758 Java SDK\ub85c \uc5c5\uadf8\ub808\uc774\ub4dc\ud558\uc5ec <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/spring-data-couchbase-2.0-preview\/\" target=\"_blank\" rel=\"noopener noreferrer\">\ub2e4\uc591\ud55c \uc0c8\ub85c\uc6b4 \uae30\ub2a5 \ubc0f \uac1c\uc120 \uc0ac\ud56d<\/a> (\uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \ucd94\ud6c4 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4)...<\/p>\n<p>\uadf8 \uacfc\uc815\uc5d0\uc11c \ud504\ub85c\uc81d\ud2b8\uc5d0 \ub2e4\uc74c\uacfc \uc9c1\uc811\uc801\uc73c\ub85c \uad00\ub828\uc774 \uc5c6\ub294 \uba87 \uac00\uc9c0 \ud074\ub798\uc2a4\uac00 \uc788\ub2e4\ub294 \uc0ac\uc2e4\uc744 \uc54c\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4. <code>\uc2a4\ud504\ub9c1 \ub370\uc774\ud130<\/code> \ub530\ub77c\uc11c \uacf5\uc2dd\uc801\uc778 '\ub9b4\ub9ac\uc2a4 \ud2b8\ub808\uc778' \ub9b4\ub9ac\uc2a4 \uc8fc\uae30\ub97c \uc900\uc218\ud560 \ud544\uc694\uac00 \uc5c6\uc5c8\uc2b5\ub2c8\ub2e4: <strong>\uc758 <code>\uce90\uc2dc<\/code> \ud328\ud0a4\uc9c0<\/strong>.<\/p>\n<p>\uadf8\ub798\uc11c \uc6b0\ub9ac\ub294 \uc0c8\ub85c\uc6b4 \uac04\ub2e8\ud55c Spring Boot \uce90\uc2dc \uc608\uc81c \ud504\ub85c\uc81d\ud2b8\ub97c \uc2dc\uc791\ud588\uc2b5\ub2c8\ub2e4. <strong>\uc758 <code>2.x<\/code> \uc138\ub300\uc758 <code>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc2a4\ud504\ub9c1 \uce90\uc2dc<\/code> \uad6c\ud604<\/strong> \uae43\ud5c8\ube0c(<a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-spring-cache\" target=\"_blank\" rel=\"noopener noreferrer\"><code>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub7a9\/\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc2a4\ud504\ub9c1 \uce90\uc2dc<\/code><\/a>).<\/p>\n<p>\uc774\ub97c \ud65c\uc6a9\ud558\uc5ec Spring \ud504\ub85c\uc81d\ud2b8\uc5d0 Couchbase \uc9c0\uc6d0 \uce90\uc2f1\uc744 \uc27d\uac8c \ub3c4\uc785\ud558\ub294 \ubc29\ubc95\uc744 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4!<\/p>\n<h2 id=\"the-cache-abstraction\">\uadf8\ub9ac\uace0 <code>\uce90\uc2dc<\/code> \ucd94\uc0c1\ud654<\/h2>\n<p>Spring \ud504\ub808\uc784\uc6cc\ud06c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uacbd\ub7c9 \ucd94\uc0c1\ud654\uc640 \ud568\uaed8 \uc81c\uacf5\ub429\ub2c8\ub2e4. <code>\uce90\uc2dc<\/code> \uac1c\ubc1c\uc790\uac00 \ud074\ub798\uc2a4\uc758 \uba54\uc11c\ub4dc\uc5d0 \uc8fc\uc11d\uc744 \ub2ec\uc544 \uc790\ub3d9\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4(\uc608\ub97c \ub4e4\uc5b4 <code>\ub9ac\ud3ec\uc9c0\ud1a0\ub9ac<\/code> \uace0\uc815\uad00\ub150).<\/p>\n<p>Spring\uc758 \ubd80\ud305 \uce90\uc2f1 \uba54\ucee4\ub2c8\uc998\uc744 \uc0ac\uc6a9\ud558\ub824\uba74 \uba54\uc11c\ub4dc\uc5d0 \uba87 \uac00\uc9c0 \uce90\uc2dc \uad00\ub828 \uc5b4\ub178\ud14c\uc774\uc158\uc744 \ucd94\uac00\ud558\uae30\ub9cc \ud558\uba74 \ub429\ub2c8\ub2e4:<\/p>\n<ul>\n<li><code>\uce90\uc2dc \uac00\ub2a5<\/code> \ub97c \uc0ac\uc6a9\ud558\uba74 \ud2b9\uc815 \uc785\ub825 \ub9e4\uac1c\ubcc0\uc218 \uc9d1\ud569\uc744 \uac00\uc9c4 \uc8fc\uc11d\uc774 \ub2ec\ub9b0 \uba54\uc11c\ub4dc\uc758 \uccab \ubc88\uc9f8 \ud638\ucd9c\uc774 \uc2e4\ud589\ub418\uc9c0\ub9cc \uacb0\uacfc\ub294 \uce90\uc2dc\ub418\uace0 \ud6c4\uc18d \ud638\ucd9c(\ub3d9\uc77c\ud55c \uc9d1\ud569\uc744 \uac00\uc9c4)\uc740 \uce90\uc2dc\uc5d0\uc11c \ud22c\uba85\ud558\uac8c \uc81c\uacf5\ub429\ub2c8\ub2e4.<\/li>\n<li><code>\uce90\uc2dc\ud48b<\/code> \ub294 \ud56d\uc0c1 \uba54\uc11c\ub4dc\ub97c \ud638\ucd9c\ud558\uace0 \uadf8 \uacb0\uacfc\ub97c \uce90\uc2dc\ud569\ub2c8\ub2e4( <code>\uce90\uc2dc \uac00\ub2a5<\/code> \ud638\ucd9c \ud750\ub984\uc744 \ucd5c\uc801\ud654\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4).<\/li>\n<li><code>\uce90\uc2dc\uc774\ube45\ud2b8<\/code> \ub294 \uc8fc\uc11d\uc774 \ub2ec\ub9b0 \uba54\uc11c\ub4dc\uc758 \ub9e4\uac1c\ubcc0\uc218\uc5d0\uc11c \uce90\uc2dc \ud0a4\ub97c \uacc4\uc0b0\ud558\uace0 \uba54\uc11c\ub4dc\uac00 \uc2e4\ud589\ub420 \ub54c \uce90\uc2dc\uc5d0\uc11c \uc81c\uac70\ud569\ub2c8\ub2e4(\uc608: \uc774 \uba54\uc11c\ub4dc\ub97c \ud638\ucd9c\ud558\uba74 \ud56d\ubaa9\uc774 \ubd80\uc2e4\ud574\uc9c0\uae30 \ub54c\ubb38).<\/li>\n<li><code>@\uce90\uc2f1<\/code> \ub97c \uc0ac\uc6a9\ud558\uba74 \uc774\uc804 \uc5b4\ub178\ud14c\uc774\uc158\uc758 \ub3d9\uc791\uc744 \ud558\ub098\uc758 \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c \uc7ac\uadf8\ub8f9\ud654\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<li><code>\uce90\uc2dc \uad6c\uc131<\/code> \ub97c \uc0ac\uc6a9\ud558\uba74 \uc804\uccb4 \ud074\ub798\uc2a4\uc5d0 \uacf5\ud1b5 \uce90\uc2dc \ub9e4\uac1c\ubcc0\uc218\ub97c \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ul>\n<h2 id=\"the-couchbase-implementation\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uad6c\ud604<\/h2>\n<p>\ucd94\uc0c1\uc801\uc778 \uba54\ucee4\ub2c8\uc998\uc740 \ud504\ub808\uc784\uc6cc\ud06c\uc5d0\uc11c \uc81c\uacf5\ud558\uc9c0\ub9cc \uc2e4\uc81c \ub4b7\ubc1b\uce68\ud558\ub294 \uad6c\ud604\uc740 \uc120\ud0dd\ud574\uc57c \ud569\ub2c8\ub2e4. Spring\uc5d0\ub294 \uba87 \uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4(\uba54\ubaa8\ub9ac\uc5d0\uc11c <code>\uc9c0\ub3c4<\/code>, <code>EhCache<\/code>, <code>Gemfire<\/code>...), \uc0ac\uc6a9\uc790 \uc815\uc758 \uc815\uc758\ub3c4 \uac00\ub2a5\ud569\ub2c8\ub2e4, <strong>\ub97c \uad6c\ud604\ud558\ub294 \uac83\ub9cc\uc73c\ub85c <code>\uce90\uc2dc<\/code> \ubc0f <code>CacheManager<\/code> \ub97c \uc0ac\uc6a9\ud558\uc5ec Spring \ucee8\ud14d\uc2a4\ud2b8\uc5d0\uc11c \ud45c\uc2dc\ub418\ub3c4\ub85d \ud569\ub2c8\ub2e4.<\/strong>.<\/p>\n<p>\uc774\uac83\uc774 \ubc14\ub85c <code>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4-\uc2a4\ud504\ub9c1 \uce90\uc2dc<\/code>.<\/p>\n<p>\uac01 \uce90\uc2dc\uc5d0\ub294 \uc774\ub984\uc774 \uc788\uace0, \uce90\uc2dc\uc758 \uac01 \uac12\uc5d0\ub294 \uce90\uc2dc \ud0a4\uac00 \uc788\uc2b5\ub2c8\ub2e4. Couchbase \uad6c\ud604\uc740 \uc774\ub97c \ubc18\uc601\ud558\ub294 \ubb38\uc11c \ud0a4\ub85c \ubcc0\ud658\ud569\ub2c8\ub2e4.<\/p>\n<ul>\n<li>\uc774\uac83\uc740 <code>\uce90\uc2dc<\/code> \uad00\ub828 \ubb38\uc11c(\uae30\ubcf8\uc801\uc73c\ub85c \uc811\ub450\uc0ac \"<code>\uce90\uc2dc:<\/code>&#8220;)<\/li>\n<li>\ud2b9\uc815 <code>\uce90\uc2dc<\/code> ( <code>CACHE_NAME<\/code> \ub97c \uc704\uc758 \uc811\ub450\uc0ac\ub85c \ucd94\uac00)<\/li>\n<li>\uc544\ub798\uc5d0 \ud2b9\uc815 \uce90\uc2dc \uac12\uc744 \uc800\uc7a5\ud569\ub2c8\ub2e4. <code>CACHE_KEY<\/code> (\uadf8\ub798\uc11c \uc804\uccb4\uc801\uc73c\ub85c \"<strong><code>\uce90\uc2dc:\uce90\uc2dc_\uc774\ub984:\uce90\uc2dc_\ud0a4<\/code><\/strong>&#8220;).<\/li>\n<\/ul>\n<p>\ud604\uc7ac \uac12\uc740 \ub2e4\uc74c\uacfc \uac19\uc544\uc57c \ud569\ub2c8\ub2e4. <code>\uc9c1\ub82c\ud654 \uac00\ub2a5<\/code> \ub85c \uc800\uc7a5\ub418\uba70 <code>\uc9c1\ub82c\ud654 \uac00\ub2a5 \ubb38\uc11c<\/code> \uc5d0\uc11c <code>2.x<\/code> \uadf8\ub7ec\ub098 \ud5a5\ud6c4 \ub300\uccb4 \ud2b8\ub79c\uc2a4\ucf54\ub529\uc774 \uc81c\uacf5\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <code>JSON<\/code>\/<code>JsonDocument<\/code>&#8230;<\/p>\n<h2 id=\"getting-couchbase-spring-cache-and-putting-it-to-work\">\uc5bb\uae30 <code>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4-\uc2a4\ud504\ub9c1 \uce90\uc2dc<\/code> \ud65c\uc6a9\ud558\uae30<\/h2>\n<p>\ucc38\uace0:<\/p>\n<blockquote><p>\uc774 \uae00\uc744 \uc4f0\ub294 \uc2dc\uc810\uc5d0\uc11c \uc774 \ud504\ub85c\uc81d\ud2b8\ub294 \ud604\uc7ac <code>1.0-\uc2a4\ub0c5\uc0f7<\/code> \ubc84\uc804\uc5d0\uc11c\ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc73c\ubbc0\ub85c <code>Maven Central<\/code> \ub97c \uc544\uc9c1 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc218\ub3d9\uc73c\ub85c \ud56d\uc544\ub9ac\ub97c \ube4c\ub4dc\ud558\uace0 \ub85c\uceec Maven \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac\uc5d0 \ucd94\uac00\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p><\/blockquote>\n<h2 id=\"downloading-and-building-the-couchbase-spring-cache-project\">\ub2e4\uc6b4\ub85c\ub4dc \ubc0f \ube4c\ub4dc <code>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4-\uc2a4\ud504\ub9c1 \uce90\uc2dc<\/code> \ud504\ub85c\uc81d\ud2b8<\/h2>\n<p>\uba3c\uc800 \uae43\ud5c8\ube0c\uc5d0\uc11c \ud504\ub85c\uc81d\ud2b8\ub97c \ubcf5\uc81c\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"bash\"><code>git clone https:\/\/github.com\/couchbaselabs\/couchbase-spring-cache.git\r\ncd couchbase-spring-cache<\/code><\/pre>\n<p>\uadf8\ub7f0 \ub2e4\uc74c Maven\uc744 \uc0ac\uc6a9\ud558\uc5ec \ub85c\uceec\uc5d0 \ube4c\ub4dc\ud558\uace0 \uc124\uce58\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"bash\"><code>MVN \uc0c8\ub85c \uc124\uce58<\/code><\/pre>\n<p>\ube4c\ub4dc\ub41c \ubc84\uc804\uacfc \uc124\uce58 \uc704\uce58\ub97c \ub098\ud0c0\ub0b4\ub294 \uc131\uacf5 \uba54\uc2dc\uc9c0\uac00 \ud45c\uc2dc\ub429\ub2c8\ub2e4:<\/p>\n<pre>[INFO] \/path\/to\/couchbase-spring-cache\/target\/couchbase-spring-cache- \uc124\uce58\ud558\uae30<span style=\"background-color: yellow\">1.0-SNAPSHOT.jar<\/span>\r\n\r\n\uc5d0 <span style=\"background-color: orange\">\/\uacbd\ub85c\/to\/.m2\/\uc800\uc7a5\uc18c\/<\/span><span style=\"background-color: lightgrey\">com\/couchbase\/client\/couchbase-spring-cache\/1.0-SNAPSHOT\/couchbase-spring-cache-1.0-SNAPSHOT.jar<\/span>\r\n\r\n[INFO] \/path\/to\/couchbase-spring-cache\/pom.xml \uc124\uce58\ud558\uae30\r\n\r\n\uacbd\ub85c\/\uc5d0\/.m2\/\ub9ac\ud3ec\uc9c0\ud1a0\ub9ac\/\ucef4\/couchbase\/\ud074\ub77c\uc774\uc5b8\ud2b8\/couchbase-spring-cache\/1.0-SNAPSHOT\/couchbase-spring-cache-1.0-SNAPSHOT.pom\r\n\r\n[INFO] ------------------------------------------------------------------------\r\n\r\n[\uc815\ubcf4] \ube4c\ub4dc \uc131\uacf5\r\n\r\n[INFO] ------------------------------------------------------------------------\r\n\r\n<\/pre>\n<h2 id=\"starting-a-tutorial-project\">\ud29c\ud1a0\ub9ac\uc5bc \ud504\ub85c\uc81d\ud2b8 \uc2dc\uc791\ud558\uae30<\/h2>\n<p>Maven\uc744 \uc0ac\uc6a9\ud558\uc5ec Spring Cache \uc608\uc81c \ud504\ub85c\uc81d\ud2b8\ub97c \ube4c\ub4dc\ud558\uace0 <code>\uc2a4\ud504\ub9c1 \ubd80\ud305<\/code> \ub97c \uae30\ubcf8\uc73c\ub85c \ud569\ub2c8\ub2e4.<br \/>\n\uba3c\uc800 \uc6d0\ud558\ub294 \ub8e8\ud2b8 \ub514\ub809\ud130\ub9ac\uc5d0 \ud504\ub85c\uc81d\ud2b8\uc758 \ub514\ub809\ud130\ub9ac \uad6c\uc870\ub97c \ub2e4\uc74c\uacfc \uac19\uc774 \uc0dd\uc131\ud569\ub2c8\ub2e4(\uc5ec\uae30\uc11c\ub294 <code>cbcache<\/code> \uc5ec\uae30\ub97c \ud074\ub9ad\ud558\uc138\uc694):<\/p>\n<pre><code> cbcache\r\n    \u2514\u2500\u2500 src\r\n        \u2514\u2500\u2500 main\r\n            \u2514\u2500\u2500 java\r\n                \u2514\u2500\u2500 com\r\n                    \u2514\u2500\u2500 couchbase\r\n                        \u2514\u2500\u2500 demo<\/code><\/pre>\n<p>\uc608\ub97c \ub4e4\uc5b4 \ub2e4\uc74c \uba85\ub839\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"bash\"><code>mkdir -p cbcache\/src\/main\/java\/com\/couchbase\/demo\/\r\ncd cbcache<\/code><\/pre>\n<p>\uadf8\ub7f0 \ub2e4\uc74c cbcache \ub8e8\ud2b8\uc5d0\uc11c POM\uc744 \uc2dc\uc791\ud558\uc2ed\uc2dc\uc624. <code>pom.xml<\/code> \ub97c \ub2e4\uc74c\uacfc \uac19\uc740 \ub0b4\uc6a9\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"xml\"><code><!--?xml version=\"1.0\" encoding=\"UTF-8\"?-->\r\n\r\n    4.0.0\r\n\r\n    com.couchbase.demo\r\n    cbcache\r\n    0.1.0\r\n\r\n    \r\n        org.springframework.boot\r\n        spring-boot-starter-parent\r\n        1.3.0.RELEASE\r\n    \r\n\r\n    \r\n        1.8\r\n    \r\n\r\n    \r\n        \r\n            org.springframework.boot\r\n            spring-boot-starter\r\n        \r\n        \r\n            org.springframework\r\n            spring-context\r\n        \r\n        <!--the couchbase cache artifact we built earlier-->\r\n        \r\n            com.couchbase.client\r\n            couchbase-spring-cache\r\n            1.0-SNAPSHOT\r\n        \r\n    \r\n\r\n    \r\n        \r\n            \r\n                org.springframework.boot\r\n                spring-boot-maven-plugin\r\n            \r\n        \r\n    \r\n\r\n<\/code><\/pre>\n<h2 id=\"add-book-management-entity-and-repository\">\ub3c4\uc11c \uad00\ub9ac \uc5d4\ud130\ud2f0 \ubc0f \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac \ucd94\uac00\ud558\uae30<\/h2>\n<p>\uc608\ub97c \ub4e4\uc5b4 <code>\uc608\uc57d<\/code> \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac(\"<a href=\"https:\/\/spring.io\/guides\/gs\/caching\/\">\uc2dc\uc791\ud558\uae30 - Spring\uc73c\ub85c \ub370\uc774\ud130 \uce90\uc2f1\ud558\uae30<\/a>\" Spring.io\uc758 \uacf5\uc2dd \uac00\uc774\ub4dc).<\/p>\n<p>\uc0dd\uc131\ud558\uae30 <code>\uc608\uc57d<\/code> \uc5d4\ud2f0\ud2f0 \ud074\ub798\uc2a4\uc758 <code>src\/main\/java\/com\/couchbase\/demo\/Book.java<\/code>:<\/p>\n<pre class=\"java\"><code>import java.io.Serializable;\r\n\r\npublic class Book implements Serializable {\r\n\r\n    private static final long serialVersionUID = -7674163614777124381L;\r\n\r\n    private String isbn;\r\n    private String title;\r\n\r\n    public Book(String isbn, String title) {\r\n        this.isbn = isbn;\r\n        this.title = title;\r\n    }\r\n\r\n    public String getIsbn() {\r\n        return isbn;\r\n    }\r\n\r\n    public void setIsbn(String isbn) {\r\n        this.isbn = isbn;\r\n    }\r\n\r\n    public String getTitle() {\r\n        return title;\r\n    }\r\n\r\n    public void setTitle(String title) {\r\n        this.title = title;\r\n    }\r\n\r\n    @Override\r\n    public String toString() {\r\n        return \"Book{\" + \"isbn='\" + isbn + ''' + \", title='\" + title + ''' + '}';\r\n    }\r\n}<\/code><\/pre>\n<blockquote><p>\ucc38\uace0 <code>\uc608\uc57d<\/code> \ud074\ub798\uc2a4\ub294 <code>\uc9c1\ub82c\ud654 \uac00\ub2a5<\/code>\ub294 \ud604\uc7ac\ub85c\uc11c\ub294 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc2a4\ud1a0\ub9ac\uc9c0\uc5d0 \uc911\uc694\ud569\ub2c8\ub2e4.<\/p><\/blockquote>\n<p>\uac04\ub2e8\ud55c \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac \uc778\ud130\ud398\uc774\uc2a4\uc640 \uc9c0\uc5f0\uc744 \uc2dc\ubbac\ub808\uc774\uc158\ud558\ub294 \uc21c\uc9c4\ud55c \uad6c\ud604\uc744 \ub9cc\ub4ed\ub2c8\ub2e4:<\/p>\n<p>in <code>src\/main\/java\/com\/couchbase\/demo\/BookRepository.java<\/code>:<\/p>\n<pre class=\"java\"><code>com.couchbase.demo;\r\n\r\n\uacf5\uc6a9 \uc778\ud130\ud398\uc774\uc2a4 BookRepository {\r\n\r\n    Book getByIsbn(String isbn);\r\n\r\n}<\/code><\/pre>\n<p>in <code>src\/main\/java\/com\/couchbase\/demo\/SimpleBookRepository.java<\/code>:<\/p>\n<pre class=\"java\"><code>package com.couchbase.demo;\r\n\r\nimport org.slf4j.Logger;\r\nimport org.slf4j.LoggerFactory;\r\n\r\nimport org.springframework.stereotype.Component;\r\n\r\n@Component\r\npublic class SimpleBookRepository implements BookRepository {\r\n\r\n    private static final Logger log = LoggerFactory.getLogger(SimpleBookRepository.class);\r\n\r\n    @Override\r\n    public Book getByIsbn(String isbn) {\r\n        simulateSlowService();\r\n        Book result = new Book(isbn, \"Some book\");\r\n        log.info(\"Actual fetch of \" + isbn);\r\n        return result;\r\n    }\r\n\r\n    \/\/ Don't do this at home\r\n    private void simulateSlowService() {\r\n        try {\r\n            long time = 5000L;\r\n            Thread.sleep(time);\r\n        } catch (InterruptedException e) {\r\n            throw new IllegalStateException(e);\r\n        }\r\n    }\r\n\r\n}<\/code><\/pre>\n<h2 id=\"the-main-spring-boot-application\">\uba54\uc778 <code>\uc2a4\ud504\ub9c1 \ubd80\ud305<\/code> \uc560\ud50c\ub9ac\ucf00\uc774\uc158<\/h2>\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c, \ub2e4\uc74c\uc5d0\uc11c \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac\ub97c \uc0ac\uc6a9\ud558\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ub9cc\ub4ed\ub2c8\ub2e4. <code>src\/main\/java\/com\/couchbase\/demo\/Application.java<\/code>:<\/p>\n<pre class=\"java\"><code>package com.couchbase.demo;\r\n\r\nimport org.slf4j.Logger;\r\nimport org.slf4j.LoggerFactory;\r\n\r\nimport org.springframework.beans.factory.annotation.Autowired;\r\nimport org.springframework.boot.CommandLineRunner;\r\nimport org.springframework.boot.SpringApplication;\r\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\r\nimport org.springframework.stereotype.Component;\r\n\r\n@SpringBootApplication\r\npublic class Application {\r\n\r\n    private static final Logger log = LoggerFactory.getLogger(Application.class);\r\n\r\n    @Component\r\n    static class Runner implements CommandLineRunner {\r\n        @Autowired\r\n        private BookRepository bookRepository;\r\n\r\n        @Override\r\n        public void run(String... args) throws Exception {\r\n            long start;\r\n            log.info(\".... Fetching books\");\r\n            fetchAndLog(\"isbn-1234\");\r\n            fetchAndLog(\"isbn-1234\");\r\n            fetchAndLog(\"isbn-1234\");\r\n            fetchAndLog(\"isbn-8888\");\r\n            fetchAndLog(\"isbn-8888\");\r\n        }\r\n\r\n        private void fetchAndLog(String isbn) {\r\n            long start = System.currentTimeMillis();\r\n            Book book = bookRepository.getByIsbn(isbn);\r\n            long time = System.currentTimeMillis() - start;\r\n            log.info(isbn + \" --&gt; \" + book + \" in \" + time + \"ms\");\r\n        }\r\n    }\r\n\r\n    public static void main(String[] args) {\r\n        SpringApplication.run(Application.class, args);\r\n    }\r\n}<\/code><\/pre>\n<p>\uc2e4\ud589\ud558\ub294 \uacbd\uc6b0 <code>\uc560\ud50c\ub9ac\ucf00\uc774\uc158<\/code>'s <code>\uba54\uc778<\/code> \uba54\uc11c\ub4dc\ub97c \ud638\ucd9c\ud558\ub294 \uacbd\uc6b0 (\ub610\ub294 \"<code>MVN \uc2a4\ud504\ub9c1 \ubd80\ud305:\uc2e4\ud589<\/code>\"\ub97c \uba85\ub839\uc904\uc5d0\uc11c \uc2e4\ud589\ud558\uba74 \ubaa8\ub4e0 \ud638\ucd9c\uc774 \uc2e4\uc81c\ub85c \uc0c1\ub2f9\ud788 \ub290\ub9ac\ub2e4\ub294 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"txt\"><code>[...] .... Fetching books\r\n[...] Actual fetch of isbn-1234\r\n[...] isbn-1234 --&gt; Book{isbn='isbn-1234', title='Some book'} in 5001ms\r\n[...] Actual fetch of isbn-1234\r\n[...] isbn-1234 --&gt; Book{isbn='isbn-1234', title='Some book'} in 5004ms\r\n[...] Actual fetch of isbn-1234\r\n[...] isbn-1234 --&gt; Book{isbn='isbn-1234', title='Some book'} in 5004ms\r\n[...] Actual fetch of isbn-8888\r\n[...] isbn-8888 --&gt; Book{isbn='isbn-8888', title='Some book'} in 5003ms\r\n[...] Actual fetch of isbn-8888\r\n[...] isbn-8888 --&gt; Book{isbn='isbn-8888', title='Some book'} in 5003ms<\/code><\/pre>\n<h2 id=\"adding-caching-capabilities\">\uc2a4\ud504\ub9c1 \ubd80\ud2b8 \uce90\uc2f1 \uae30\ub2a5 \ucd94\uac00<\/h2>\n<p>\uce90\uc2f1\uc744 \ud65c\uc131\ud654\ud558\ub824\uba74 \uba87 \uac00\uc9c0 \ub2e8\uacc4\ub97c \uc218\ud589\ud574\uc57c \ud569\ub2c8\ub2e4. \uba3c\uc800 Spring\uc5d0 <code>CacheManager<\/code> <code>@Bean<\/code>&#8230;<\/p>\n<p>\uc6b0\ub9ac\ub294 <code>CouchbaseCacheManager<\/code> (\ubb3c\ub860)\uc5d0 \uc5f0\uacb0\ud574\uc57c \ud569\ub2c8\ub2e4. <code>\ud074\ub7ec\uc2a4\ud130<\/code> \ub97c \uc0ac\uc6a9\ud558\uc5ec <code>\ubc84\ud0b7<\/code> \ucc38\uc870(\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uac00 \uce90\uc2dc \ubb38\uc11c\ub97c \uc800\uc7a5\ud560 \uc800\uc7a5\uc18c)\ub97c \uc124\uc815\ud569\ub2c8\ub2e4.<br \/>\n\ub530\ub77c\uc11c <code>CouchbaseCacheManager<\/code> \uc0ac\uc774\uc758 \ub9e4\ud551\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. <code>\uce90\uc2dc<\/code> \uc774\ub984\uacfc \ud574\ub2f9 <code>\ubc84\ud0b7<\/code> \ub85c \uc804\ub2ec\ub418\uc5b4 <code>\ub9f5<\/code>.<\/p>\n<p>In <code>src\/main\/java\/com\/couchbase\/demo\/Application.java<\/code>\uc5d0 \ub2e4\uc74c \ube48 \uc120\uc5b8\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"java\"><code>  public static final String BOOK_CACHE = \"books\";\r\n\r\n  @Bean(destroyMethod = \"disconnect\")\r\n  public Cluster cluster() {\r\n      \/\/this connects to a Couchbase instance running on localhost\r\n      return CouchbaseCluster.create();\r\n  }\r\n\r\n  @Bean(destroyMethod = \"close\")\r\n  public Bucket bucket() {\r\n      \/\/this will be the bucket where every cache-related data will be stored\r\n      \/\/note that the bucket \"default\" must exist\r\n      return cluster().openBucket(\"default\", \"\");\r\n  }\r\n\r\n  @Bean\r\n  public CacheManager cacheManager() {\r\n      Map&lt;String, Bucket&gt; mapping = new HashMap&lt;String, Bucket&gt;();\r\n      \/\/we'll make this cache manager recognize a single cache named \"books\"\r\n      mapping.put(BOOK_CACHE, bucket());\r\n      return new CouchbaseCacheManager(mapping);\r\n  }<\/code><\/pre>\n<p>\uadf8\ub7f0 \ub2e4\uc74c \uce90\uc2dc \uad00\ub828 \uc5b4\ub178\ud14c\uc774\uc158 \ubc0f \uad00\ub828 \ud504\ub85d\uc2dc \uac80\uc0c9\uc744 \ud65c\uc131\ud654\ud558\ub824\uba74 <code>@EnableCaching<\/code> \uc8fc\uc11d\uc758 <code>\uc560\ud50c\ub9ac\ucf00\uc774\uc158<\/code> \ud074\ub798\uc2a4.<\/p>\n<h2 id=\"activate-caching-in-simplebookrepository\">\uc5d0\uc11c \uce90\uc2f1 \ud65c\uc131\ud654 <code>\uac04\ub2e8\ud55c \ucc45 \uc800\uc7a5\uc18c<\/code><\/h2>\n<p>\uc2e4\uc81c \uce90\uc2f1\uc744 \ud65c\uc131\ud654\ud558\ub294 \ubc29\ubc95\uc744 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. <code>\uac04\ub2e8\ud55c \ucc45 \uc800\uc7a5\uc18c<\/code> \ub97c \ud074\ub9ad\ud558\uace0 \uadf8 \ud6c4 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \uc5b4\ub5bb\uac8c \uc791\ub3d9\ud558\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4.<\/p>\n<p>\ub9cc\ub4e4\ub824\uba74 <code>getByIsbn<\/code> \uccab \ubc88\uc9f8 \ud638\ucd9c \uc2dc \uc790\ub3d9\uc73c\ub85c \uce90\uc2dc\uc5d0 \uc800\uc7a5\ud558\uace0 \uc774\ud6c4 \ud638\ucd9c\uc5d0 \uce90\uc2dc\uc758 \ub370\uc774\ud130\ub97c \uc81c\uacf5\ud558\ub824\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc8fc\uc11d\uc744 \ub2ec\uae30\ub9cc \ud558\uba74 \ub429\ub2c8\ub2e4:<\/p>\n<pre class=\"java\"><code>    @Override\r\n    @Cacheable(Application.BOOK_CACHE) \/\/using the name of the cache we declared earlier\r\n    public Book getByIsbn(String isbn) {\r\n        simulateSlowService();\r\n        Book result = new Book(isbn, \"Some book\");\r\n        log.info(\"Actual fetch of \" + isbn);\r\n        return result;\r\n    }<\/code><\/pre>\n<p>\uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ub2e4\uc2dc \uc2e4\ud589\ud558\uc5ec \uc774\uc81c \uc5b4\ub5bb\uac8c \uc791\ub3d9\ud558\ub294\uc9c0 \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"txt\"><code>[...] .... Fetching books\r\n[...] Actual fetch of isbn-1234\r\n[...] isbn-1234 --&gt; Book{isbn='isbn-1234', title='Some book'} in 5022ms\r\n[...] isbn-1234 --&gt; Book{isbn='isbn-1234', title='Some book'} in 3ms\r\n[...] isbn-1234 --&gt; Book{isbn='isbn-1234', title='Some book'} in 1ms\r\n[...] Actual fetch of isbn-8888\r\n[...] isbn-8888 --&gt; Book{isbn='isbn-8888', title='Some book'} in 5007ms\r\n[...] isbn-8888 --&gt; Book{isbn='isbn-8888', title='Some book'} in 1ms<\/code><\/pre>\n<p>\uc640\uc6b0! \uccab \ubc88\uc9f8 \ud638\ucd9c \uc774\ud6c4\uc758 \ud638\ucd9c\uc5d0 \ud6e8\uc52c \ub354 \uc88b\uc73c\uba70 \uc2e4\uc81c\ub85c \uce90\uc2dc \ub41c \uac83\ucc98\ub7fc \ubcf4\uc785\ub2c8\ub2e4 :-)<\/p>\n<h2 id=\"seeing-the-data-in-couchbase\">Couchbase\uc5d0\uc11c \ub370\uc774\ud130 \ubcf4\uae30<\/h2>\n<p>\uc6f9\ucf58\uc194\uc744 \uac04\ub2e8\ud788 \uc0b4\ud3b4\ubcf4\uace0 \uc774\ub7ec\ud55c \ub6f0\uc5b4\ub09c \ud0c0\uc774\ubc0d\uc774 Couchbase \ub355\ubd84\uc778\uc9c0 \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4:<\/p>\n<ul>\n<li>\ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \uc0c8 \ud0ed\uc744 \uc5f4\uace0 \ub2e4\uc74c \uc704\uce58\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4. <a href=\"https:\/\/localhost:8091\"><code>https:\/\/localhost:8091<\/code><\/a>.<\/li>\n<li>\uc6f9 \ucf58\uc194\uc5d0 \uc5f0\uacb0\ud569\ub2c8\ub2e4.<\/li>\n<li>\ub85c \uc774\ub3d9\ud558\uc5ec <code>\ub370\uc774\ud130 \ubc84\ud0b7<\/code> \ud0ed\uc744 \ud074\ub9ad\ud558\uace0 <code>\ubb38\uc11c<\/code> \ubc84\ud2bc\uc744 \ud074\ub9ad\ud569\ub2c8\ub2e4(\"\uae30\ubcf8\uac12\").<\/li>\n<\/ul>\n<p>\uc774 \ud654\uba74\uc5d0 \ud45c\uc2dc\ub418\ub294 \ub0b4\uc6a9(<a href=\"https:\/\/localhost:8091\/index.html#sec=documents&amp;viewsBucket=default\">\ube60\ub978 \ub9c1\ud06c<\/a> \uac8c\uc73c\ub978 \ubd84\ub4e4\uc744 \uc704\ud574)\ub3c4 \uc774\uc640 \ube44\uc2b7\ud560 \uac83\uc785\ub2c8\ub2e4:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-10261 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2015\/12\/cacheddocs.png\" alt=\"Spring Cache documents in Couchbase console\" width=\"789\" height=\"545\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/cacheddocs.png 789w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/cacheddocs-300x207.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/cacheddocs-768x530.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/cacheddocs-20x14.png 20w\" sizes=\"auto, (max-width: 789px) 100vw, 789px\" \/><\/p>\n<p>\ub450 \ucc45\uc774 \ubaa8\ub450 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc5d0 \uce90\uc2dc\ub41c \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. <strong><code>\uce90\uc2dc:\uce90\uc2dc_\uc774\ub984:\uce90\uc2dc_\ud0a4<\/code><\/strong> \ud328\ud134\uc744 \ubb38\uc11c ID\uc5d0 \uc801\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<h2 id=\"conclusion\">\uacb0\ub860<\/h2>\n<p>\uc774\uc81c Couchbase\ub97c \uc0ac\uc6a9\ud558\uc5ec \uac04\ud3b8\ud558\uac8c \uce90\uc2f1\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4!<\/p>\n<p>\uadf8 \uc678\uc5d0\ub3c4 <code>\uc2a4\ud504\ub9c1 \uce90\uc2dc<\/code> \uac00 \uc218\ud589\ud560 \uc218 \uc788\ub294 \uc791\uc5c5(\uc608: \uce90\uc2dc \ud0a4 \uc0dd\uc131 \ubc29\ubc95 \uc120\ud0dd, \uc870\uac74\ubd80 \uce90\uc2f1, \uce90\uc2dc \ud1f4\uac70 \ub4f1)\uacfc <code>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4-\uc2a4\ud504\ub9c1 \uce90\uc2dc<\/code> (\uc608: \uce90\uc2dc \uc9c0\uc6b0\uae30\uc758 \uacbd\uc6b0 \uad00\ub828 \ubb38\uc11c\ub9cc \uc81c\uac70\ud558\ub294 \ubcf4\uae30\ub97c \uc0ac\uc6a9\ud558\uac70\ub098, \ubc84\ud0b7\uc774 \ub2e8\uc77c \uce90\uc2dc \uc804\uc6a9\uc778 \uacbd\uc6b0 <code>\ud50c\ub7ec\uc2dc<\/code> \uba54\ucee4\ub2c8\uc998...).<\/p>\n<p>\uc774 \uc18c\uac1c \ud29c\ud1a0\ub9ac\uc5bc\uc744 \ud1b5\ud574 \ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud558\uc5ec \uac04\ud3b8\ud55c \uce90\uc2f1\uc5d0 \ub300\ud55c \uc695\uad6c\ub97c \ubd88\ub7ec \uc77c\uc73c\ucf30\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4. <code>\uc2a4\ud504\ub9c1 \uce90\uc2dc<\/code> \uadf8\ub9ac\uace0 <code>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4<\/code>!<\/p>\n<p>\ub2e4\uc74c \ub2e8\uacc4\ub294 \uc544\ub9c8\ub3c4 \ub300\uccb4 \uc800\uc7a5 \ud615\uc2dd(\uc608: JSON)\uc744 \ub3c4\uc785\ud558\uace0 \uc544\ud2f0\ud329\ud2b8\ub97c Maven Central \ub610\ub294 \uc720\uc0ac\ud55c \uacf5\uac1c\uc801\uc73c\ub85c \uc561\uc138\uc2a4 \uac00\ub2a5\ud55c Maven \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uac83\uc785\ub2c8\ub2e4(<a href=\"https:\/\/bintray.com\">\ube48\ud2b8\ub808\uc774<\/a> \ub204\uad6c?)...<\/p>\n<p>\uac00\uae4c\uc6b4 \uc2dc\uc77c \ub0b4\uc5d0 \ubd04 \uad00\ub828 \uc18c\uc2dd\uc744 \uae30\ub300\ud574 \uc8fc\uc138\uc694!<\/p>\n<p>\uadf8\ub3d9\uc548 \uc990\uac70\uc6b4 \ucf54\ub529 \ub418\uc138\uc694 :)<\/p>","protected":false},"excerpt":{"rendered":"<p>In this blog post, we&#8217;ll discover how to cache data easily using Spring Cache and Couchbase as a backing store manager. Table of Contents A Word Of Introduction The Cache Abstraction The Couchbase Implementation Getting couchbase-spring-cache and Putting it to [&hellip;]<\/p>","protected":false},"author":48,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1818],"tags":[1511,1424,1465],"ppma_author":[9022],"class_list":["post-2039","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-cache","tag-spring","tag-spring-data"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Cache Data with Spring Cache and Couchbase as Backing Store<\/title>\n<meta name=\"description\" content=\"Find out how to cache data by utilizing Spring Cache and Couchbase as a backing store. Easy caching using Couchbase is now at your fingertips!\" \/>\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\/couchbase-spring-cache\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Backing Spring Cache With Couchbase\" \/>\n<meta property=\"og:description\" content=\"Find out how to cache data by utilizing Spring Cache and Couchbase as a backing store. Easy caching using Couchbase is now at your fingertips!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/couchbase-spring-cache\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-12-16T19:37:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-12T08:12:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2015\/12\/cacheddocs.png\" \/>\n<meta name=\"author\" content=\"Simon Basle, Software Engineer, Pivotal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Simon Basle, Software Engineer, Pivotal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/\"},\"author\":{\"name\":\"Simon Basle, Software Engineer, Pivotal\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/a4086d75b59570cc2e5ff66d98c5d1a1\"},\"headline\":\"Backing Spring Cache With Couchbase\",\"datePublished\":\"2015-12-16T19:37:00+00:00\",\"dateModified\":\"2024-09-12T08:12:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/\"},\"wordCount\":1117,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"Cache\",\"spring\",\"spring-data\"],\"articleSection\":[\"Java\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/\",\"name\":\"Cache Data with Spring Cache and Couchbase as Backing Store\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-12-16T19:37:00+00:00\",\"dateModified\":\"2024-09-12T08:12:09+00:00\",\"description\":\"Find out how to cache data by utilizing Spring Cache and Couchbase as a backing store. Easy caching using Couchbase is now at your fingertips!\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/#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\/couchbase-spring-cache\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Backing Spring Cache With Couchbase\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/a4086d75b59570cc2e5ff66d98c5d1a1\",\"name\":\"Simon Basle, Software Engineer, Pivotal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b2bcd169f85f21cee7b8a0e0c9e7854\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3c3aec94782fea5f0a199368c15e836198faf05c1591e0ae0b91178a59457781?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3c3aec94782fea5f0a199368c15e836198faf05c1591e0ae0b91178a59457781?s=96&d=mm&r=g\",\"caption\":\"Simon Basle, Software Engineer, Pivotal\"},\"description\":\"Simon Basl_ is a Paris-based Software Engineer working in the Spring team at Pivotal. Previously, he worked in the Couchbase Java SDK team. His interests span software design aspects (OOP, design patterns, software architecture), rich clients, what lies beyond code (continuous integration, (D)VCS, best practices), and reactive programming. He is also an editor for the French version of InfoQ.com.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/simon-basle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Cache Data with Spring Cache and Couchbase as Backing Store","description":"Find out how to cache data by utilizing Spring Cache and Couchbase as a backing store. Easy caching using Couchbase is now at your fingertips!","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\/couchbase-spring-cache\/","og_locale":"ko_KR","og_type":"article","og_title":"Backing Spring Cache With Couchbase","og_description":"Find out how to cache data by utilizing Spring Cache and Couchbase as a backing store. Easy caching using Couchbase is now at your fingertips!","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/couchbase-spring-cache\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-12-16T19:37:00+00:00","article_modified_time":"2024-09-12T08:12:09+00:00","og_image":[{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2015\/12\/cacheddocs.png","type":"","width":"","height":""}],"author":"Simon Basle, Software Engineer, Pivotal","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Simon Basle, Software Engineer, Pivotal","Est. reading time":"5\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/"},"author":{"name":"Simon Basle, Software Engineer, Pivotal","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/a4086d75b59570cc2e5ff66d98c5d1a1"},"headline":"Backing Spring Cache With Couchbase","datePublished":"2015-12-16T19:37:00+00:00","dateModified":"2024-09-12T08:12:09+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/"},"wordCount":1117,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["Cache","spring","spring-data"],"articleSection":["Java"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/","url":"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/","name":"Cache Data with Spring Cache and Couchbase as Backing Store","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-12-16T19:37:00+00:00","dateModified":"2024-09-12T08:12:09+00:00","description":"Find out how to cache data by utilizing Spring Cache and Couchbase as a backing store. Easy caching using Couchbase is now at your fingertips!","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/#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\/couchbase-spring-cache\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Backing Spring Cache With Couchbase"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","description":"NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4, Couchbase","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/a4086d75b59570cc2e5ff66d98c5d1a1","name":"Simon Basle, \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc5d4\uc9c0\ub2c8\uc5b4, \ud53c\ubcf4\ud0c8","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b2bcd169f85f21cee7b8a0e0c9e7854","url":"https:\/\/secure.gravatar.com\/avatar\/3c3aec94782fea5f0a199368c15e836198faf05c1591e0ae0b91178a59457781?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3c3aec94782fea5f0a199368c15e836198faf05c1591e0ae0b91178a59457781?s=96&d=mm&r=g","caption":"Simon Basle, Software Engineer, Pivotal"},"description":"Simon Basl_\uc740 \ud30c\ub9ac\uc5d0 \uac70\uc8fc\ud558\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc5d4\uc9c0\ub2c8\uc5b4\ub85c \ud53c\ubcf4\ud0c8\uc758 Spring \ud300\uc5d0\uc11c \uadfc\ubb34\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uc804\uc5d0\ub294 Couchbase Java SDK \ud300\uc5d0\uc11c \uadfc\ubb34\ud588\uc2b5\ub2c8\ub2e4. \uadf8\uc758 \uad00\uc2ec \ubd84\uc57c\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc124\uacc4 \uce21\uba74(OOP, \ub514\uc790\uc778 \ud328\ud134, \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc544\ud0a4\ud14d\ucc98), \ub9ac\uce58 \ud074\ub77c\uc774\uc5b8\ud2b8, \ucf54\ub4dc \ub108\uba38\uc758 \uac83(\uc9c0\uc18d\uc801 \ud1b5\ud569, (D)VCS, \ubaa8\ubc94 \uc0ac\ub840), \ubc18\uc751\ud615 \ud504\ub85c\uadf8\ub798\ubc0d \ub4f1 \ub2e4\uc591\ud569\ub2c8\ub2e4. \ub610\ud55c \ud504\ub791\uc2a4\uc5b4 \ubc84\uc804\uc758 InfoQ.com\uc758 \ud3b8\uc9d1\uc790\uc774\uae30\ub3c4 \ud569\ub2c8\ub2e4.","url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/simon-basle\/"}]}},"authors":[{"term_id":9022,"user_id":48,"is_guest":0,"slug":"simon-basle","display_name":"Simon Basle, Software Engineer, Pivotal","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/3c3aec94782fea5f0a199368c15e836198faf05c1591e0ae0b91178a59457781?s=96&d=mm&r=g","first_name":"Simon","last_name":"Basle","user_url":"","author_category":"","description":"Simon Basl_\uc740 \ud30c\ub9ac\uc5d0 \uac70\uc8fc\ud558\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc5d4\uc9c0\ub2c8\uc5b4\ub85c \ud53c\ubcf4\ud0c8\uc758 Spring \ud300\uc5d0\uc11c \uadfc\ubb34\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uc804\uc5d0\ub294 Couchbase Java SDK \ud300\uc5d0\uc11c \uadfc\ubb34\ud588\uc2b5\ub2c8\ub2e4. \uadf8\uc758 \uad00\uc2ec \ubd84\uc57c\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc124\uacc4 \uce21\uba74(OOP, \ub514\uc790\uc778 \ud328\ud134, \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc544\ud0a4\ud14d\ucc98), \ub9ac\uce58 \ud074\ub77c\uc774\uc5b8\ud2b8, \ucf54\ub4dc \ub108\uba38\uc758 \uac83(\uc9c0\uc18d\uc801 \ud1b5\ud569, (D)VCS, \ubaa8\ubc94 \uc0ac\ub840), \ubc18\uc751\ud615 \ud504\ub85c\uadf8\ub798\ubc0d \ub4f1 \ub2e4\uc591\ud569\ub2c8\ub2e4. \ub610\ud55c \ud504\ub791\uc2a4\uc5b4 \ubc84\uc804\uc758 InfoQ.com\uc758 \ud3b8\uc9d1\uc790\uc774\uae30\ub3c4 \ud569\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/2039","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\/48"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=2039"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/2039\/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=2039"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=2039"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=2039"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=2039"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}