{"id":7085,"date":"2019-06-18T08:03:34","date_gmt":"2019-06-18T15:03:34","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=7085"},"modified":"2023-05-19T04:35:50","modified_gmt":"2023-05-19T11:35:50","slug":"couchbase-scala-sdk","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/couchbase-scala-sdk\/","title":{"rendered":"Couchbase Scala SDK \uc18c\uac1c"},"content":{"rendered":"<p>\uc774\uc81c Couchbase\uc5d0\uc11c Scala SDK\ub97c \uc9c0\uc6d0\ud558\uac8c \ub418\uc5b4 \ub9e4\uc6b0 \uae30\uc058\uac8c \uc0dd\uac01\ud558\uba70, \ub124\uc774\ud2f0\ube0c Scala\ub85c \ubb38\uc11c \uac00\uc838\uc624\uae30 \ubc0f \uac00\uc838\uc624\uae30, N1QL \ucffc\ub9ac \uc2e4\ud589, \ubd84\uc11d \ubc0f \uc804\uccb4 \ud14d\uc2a4\ud2b8 \uac80\uc0c9 \uc870\ud68c\ub97c \ubaa8\ub450 \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774 \ube14\ub85c\uadf8\uc5d0\uc11c\ub294 Scala SDK\uc758 \uc8fc\uc694 \uae30\ub2a5\uacfc \ub514\uc790\uc778 \uc6d0\uce59\uc5d0 \ub300\ud574 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.  \ub610\ub294 \ubc14\ub85c \uc2dc\uc791\ud558\uace0 \uc2f6\uc73c\uc2dc\ub2e4\uba74 <a href=\"https:\/\/docs.couchbase.com\/scala-sdk\/1.0\/start-using-sdk.html\">\uc5ec\uae30\uc5d0\uc11c \uc2dc\uc791\ud558\uae30 \uac00\uc774\ub4dc<\/a>.  Scala SDK\ub294 \uc9c0\uae08 \ubc14\ub85c \uc0ac\uc804 \ub9b4\ub9ac\uc2a4 \uc54c\ud30c \ud615\ud0dc\ub85c \ub2e4\uc6b4\ub85c\ub4dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Scala SDK\ub294 \uc0c8\ub85c\uc6b4 Java SDK 3.x\uc640 \ub3d9\uc77c\ud55c \uace0\uc131\ub2a5\uc758 \uc548\uc815\uc801\uc778 \ub0b4\ubd80 \ucf54\uc5b4\ub97c \uc0ac\uc6a9\ud558\ubbc0\ub85c \uc0c8\ub85c\uc6b4 \ubc84\uc804\uc774\uc9c0\ub9cc \uc815\uc2dd \ubc84\uc804\uc774 \ucd9c\uc2dc\ub418\uba74 \ud504\ub85c\ub355\uc158\uc5d0 \ubc14\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c \uc548\uc2ec\ud574\ub3c4 \ub429\ub2c8\ub2e4.<\/p>\n<h3><b>\uae30\ub2a5\uc801 \uc624\ub958 \ucc98\ub9ac - \uc608\uc678\ub294 \uc5c6\uc2b5\ub2c8\ub2e4!<\/b><\/h3>\n<p>Scala SDK\ub294 \uae30\ub2a5\uc801\uc778 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc81c\uacf5\ud558\uba70, \ub300\ubd80\ubd84\uc758 \uc5f0\uc0b0\uc740 Scala Try\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.  \uc774\ub294 \uc608\uc0c1 \uac12\uc744 \ud3ec\ud568\ud558\ub294 \uc131\uacf5\uc774\uac70\ub098 Throwable\uc744 \ud3ec\ud568\ud558\ub294 \uc2e4\ud328\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucc98\uc74c\uc5d0\ub294 \ub2e4\uc18c \uc7a5\ud669\ud574 \ubcf4\uc774\uace0 \ud56d\uc0c1 \uc624\ub958\ub97c \ucc98\ub9ac\ud558\uae30 \uc704\ud574 \uc57d\uac04\uc758 \ud504\ub85c\uadf8\ub798\ubc0d \uaddc\uc728\uc774 \ud544\uc694\ud574 \ubcf4\uc774\uc9c0\ub9cc, \uc774\ub7ec\ud55c \ud615\ud0dc\uc758 \uc624\ub958 \ucc98\ub9ac\ub294 \uae08\ubc29 \uc775\uc219\ud574\uc9c0\uba70 SDK\uc5d0\uc11c \uc784\uc758\uc758 \uc608\uc678\uac00 \ubc1c\uc0dd\ud558\uc9c0 \uc54a\ub294\ub2e4\ub294 \uac83\uc744 \uc54c\uace0 \uc548\uc804\ud558\uac8c \uac1c\ubc1c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c\uc740 \ubb38\uc11c\ub97c \uc0bd\uc785\ud558\ub294 \uac04\ub2e8\ud55c \ub370\ubaa8\uc785\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:scala decode:true\">val json = JsonObject(\"status\" -&gt; \"awesome!\")\r\n\r\nval result: Try[MutationResult] = collection.insert(\"document-key\", json)<\/pre>\n<p>\uadf8\ub7f0 \ub2e4\uc74c \uc2dc\ub3c4 \uacb0\uacfc\uc5d0\uc11c \ud328\ud134\uc744 \uc77c\uce58\uc2dc\ud0b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:scala decode:true\">result match {\r\n \u00a0\u00a0\u00a0 case Success(mr) =&gt; println(\"Upsert was successful\")\r\n \u00a0\u00a0\u00a0 case Failure(err: KeyAlreadyExistsException) =&gt; println(\"document-key already exists\") \r\n \u00a0\u00a0\u00a0 case Failure(err) =&gt; println(\"Error: \" + err)\r\n}<\/pre>\n<p>(\ubb3c\ub860 \ud504\ub85c\ub355\uc158 \uc571\uc740 \ub2e8\uc21c\ud788 println\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \uc544\ub2c8\ub77c \uc624\ub958\ub97c \uc81c\ub300\ub85c \ucc98\ub9ac\ud560 \uac83\uc785\ub2c8\ub2e4!).<\/p>\n<p>\uc608\uc678\ub97c \ub358\uc9c0\ub294 Java SDK\uc640 \ube44\uc2b7\ud55c \uac83\uc744 \uc6d0\ud55c\ub2e4\uba74 \ubaa8\ub4e0 \uc2dc\ub3c4\uc5d0\uc11c .get()\uc744 \ud638\ucd9c\ud558\uc5ec \uc2e4\ud328\ud558\uba74 \ub358\uc9c0\ub294 \uac83\uc73c\ub85c \uc27d\uac8c \uc2dc\ubbac\ub808\uc774\uc158\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:scala decode:true\">val result: MutationResult = collection.insert(\"document-key\", json).get()<\/pre>\n<p>flatMap\uc744 \ud1b5\ud574 \uc5ec\ub7ec \uac1c\uc758 Try\ub97c \uacb0\ud569\ud558\ub294 \uac83\uc740 \uc27d\uc2b5\ub2c8\ub2e4.  \uc5ec\uae30\uc11c\ub294 \ubb38\uc11c\ub97c \uc5c5\uc11c\ud2b8\ud55c \ub2e4\uc74c \uac00\uc838\uc624\uace0, \uae30\ubcf8 \uc81c\uacf5 JSON \ub77c\uc774\ube0c\ub7ec\ub9ac\uc778 JsonObjectSafe\ub85c \ubcc0\ud658\ub41c \ucf58\ud150\uce20\ub97c \uac80\uc0c9\ud558\uace0(\ub098\uc911\uc5d0 \uc790\uc138\ud788 \uc124\uba85), \ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc774\ub85c\ubd80\ud130 'status'\ub77c\ub294 \ud544\ub4dc\ub97c \uac00\uc838\uc635\ub2c8\ub2e4.  \uc774 \ubaa8\ub4e0 \uac83\uc774 \uc644\uc804\ud788 \uae30\ub2a5\uc801\uc778 \uc2a4\ud0c0\uc77c\ub85c \uc774\ub8e8\uc5b4\uc9c0\ubbc0\ub85c, \uc608\ub97c \ub4e4\uc5b4 \uc5c5\uc11c\ud2b8\uac00 \uc131\uacf5\ud55c \uacbd\uc6b0\uc5d0\ub9cc get \uc791\uc5c5\uc774 \uc2dc\ub3c4\ub429\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:scala decode:true\">val result: Try[String] = collection.upsert(\"document-key\", json)\r\n    .flatMap(_ =&gt; collection.get(\"document-key\"))\r\n    .flatMap(_.contentAs[JsonObjectSafe])\r\n    .flatMap(_.str(\"status\"))\r\n\r\nresult match {\r\n    case Success(status) =&gt; println(s\"Couchbase is $status\")\r\n    case Failure(err) =&gt;\u00a0\u00a0\u00a0 println(\"Error: \" + err)\r\n}<\/pre>\n<p>(\uac04\uacb0\uc131\uc744 \uc704\ud574 \uc544\ub798 \uc608\uc81c\uc5d0\uc11c\ub294 \ub300\ubd80\ubd84 \uacb0\uacfc \ud655\uc778\uc744 \uc0dd\ub7b5\ud569\ub2c8\ub2e4.  \ud558\uc9c0\ub9cc \ud504\ub85c\ub355\uc158 \uc571\uc740 \ub2f9\uc5f0\ud788 ABC\ub97c \ub530\ub77c\uc57c \ud558\uba70 \ud56d\uc0c1 \ud655\uc778\ud574\uc57c \ud569\ub2c8\ub2e4.)<\/p>\n<h3><b>\ubbf8\ub798 \uc804\ub9dd<\/b><\/h3>\n<p>SDK\ub294 \uae30\ubcf8\uc801\uc73c\ub85c Couchbase Server 6.5\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc0c8\ub86d\uace0 \ub354 \uac15\ub825\ud55c \ub0b4\uad6c\uc131\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:scala decode:true\">val result = collection.upsert(\u201cdocId\u201d, json, durability = Durability.Majority)<\/pre>\n<p>\uadf8\ub9ac\uace0 \ubc84\ud0b7 \uc548\uc5d0 \ubb38\uc11c\ub97c \uc815\ub9ac\ud558\ub294 \uc0c8\ub85c\uc6b4 \ubc29\ubc95\uc778 \uceec\ub809\uc158\uc744 \uc9c0\uc6d0\ud558\uba70, \uc774\ub294 \ud5a5\ud6c4 \ucd9c\uc2dc\ub420 Couchbase Server\uc758 \ucd08\uc11d\uc774 \ub420 \uae30\ub2a5\uc785\ub2c8\ub2e4(\uace7 \ud504\ub9ac\ubdf0\uac00 \uc81c\uacf5\ub420 \uc608\uc815).  \uace7 \uc7a5\ub09c\uac10 \uceec\ub809\uc158\uc744 \ub9cc\ub4e4 \uc218 \uc788\ub294 \uae30\ub2a5\uc774 \ucd94\uac00\ub420 \uc608\uc815\uc774\uc9c0\ub9cc \uc9c0\uae08\uc740 \uae30\ubcf8 \uceec\ub809\uc158\uc744 \uc5ec\ub294 \uac83\uc73c\ub85c \ucda9\ubd84\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:scala decode:true\">val cluster = Cluster.connect(\"cluster-ip\", \"username\", \"password\")\r\nval collection = cluster.bucket(\"bucket-name\").defaultCollection<\/pre>\n<p>\uc774 \ub85c\uc9c1\uc740 \uc9c0\uc6d0\ub418\ub294 \ubaa8\ub4e0 Couchbase Server \ubc84\uc804(5.x \uc774\uc0c1)\uc5d0\uc11c \uc791\ub3d9\ud569\ub2c8\ub2e4.<\/p>\n<p>\ub610\ud55c \ubcf5\uc7a1\ud55c \ubd84\uc0b0 \uc2dc\uc2a4\ud15c \ucd94\uc801\uc744 \uc704\ud55c \uc0ac\uc2e4\uc0c1\uc758 \ud45c\uc900\uc774 \ub418\uace0 \uc788\ub294 \ud50c\ub7ab\ud3fc\uc778 OpenTracing(\ud604\uc7ac OpenTelemetry)\uc5d0 \ub300\ud55c \uc9c0\uc6d0\ub3c4 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:scala decode:true\">val result = collection.upsert(\u201cdocId\u201d, json, parentSpan = Some(mySpan))<\/pre>\n<h3><b>\uac04\ub2e8\ud55c API<\/b><\/h3>\n<p>SDK\ub294 \uc624\ubc84\ub85c\ub4dc \ub300\uc2e0 \ub124\uc784\ub4dc \ubc0f \uae30\ubcf8 \ub9e4\uac1c\ubcc0\uc218\ub97c \ud65c\uc6a9\ud558\ubbc0\ub85c \ucf54\ub4dc\ub97c \ucd5c\ub300\ud55c \uac04\ub2e8\ud558\uac8c \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:scala decode:true\">val result = collection.upsert(\u201cdocId\u201d, json)<\/pre>\n<p>\ub610\ub294 \uc0ac\uc6a9\uc790 \uc9c0\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:scala decode:true\">val result = collection.upsert(\u201cdocId\u201d, json, durability = Durability.Majority, expiration = 60.minutes, parentSpan = Some(mySpan))<\/pre>\n<p>\ud544\uc694\ud55c \ub300\ub85c \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3><b>\ube44\ub3d9\uae30\uc2dd<\/b><\/h3>\n<p>Java SDK\uc640 \ub9c8\ucc2c\uac00\uc9c0\ub85c \uc138 \uac00\uc9c0 API\uac00 \uc81c\uacf5\ub418\ubbc0\ub85c \ud544\uc694\ud55c \ubc29\uc2dd\uc73c\ub85c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc720\uc5f0\ud558\uac8c \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uccab \ubc88\uc9f8\ub294 \uc704\uc758 \uc608\uc81c\uc5d0\uc11c \ubcf4\uc558\ub358 \uac04\ub2e8\ud55c \ucc28\ub2e8 \ub3d9\uae30\uc2dd API\uc785\ub2c8\ub2e4.  \uc774 \ubc29\ubc95\uc740 \uae30\ubcf8\uac12\uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \uc88b\uc9c0\ub9cc, \ubb3c\ub860 \ud544\uc694\ud55c \uacbd\uc6b0 \uc2a4\ub808\ub529\uc744 \uba85\uc2dc\uc801\uc73c\ub85c \uad00\ub9ac\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>\ub450 \ubc88\uc9f8\ub294 \ud504\ub85c\uc81d\ud2b8 \ub9ac\uc561\ud130\uc758 \ud45c\uc900 \ub9ac\uc561\ud2f0\ube0c \uc720\ud615(\ubaa8\ub178 \ubc0f \ud50c\ub7ed\uc2a4)\uc744 \uc0ac\uc6a9\ud558\ub294 \ub9ac\uc561\ud2f0\ube0c \ud504\ub85c\uadf8\ub798\ubc0d\uc744 \uc911\uc2ec\uc73c\ub85c \uad6c\ucd95\ub41c \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>\ubc18\uc751\ud615 \ubc29\uc2dd\uc73c\ub85c \uc5c5\uc11c\ud2b8\ud558\ub294 \uc608\uc2dc\uc785\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:scala decode:true\">val mono: Mono[MutationResult] = collection.reactive.upsert(\"document-key\", json)\r\n    .doOnError(err =&gt; println(s\"Error during upsert: ${err}\"))\r\n    .doOnNext(mutationResult =&gt; println(\"Success\"))<\/pre>\n<p>\ubc18\uc751\ud615 \ud504\ub85c\uadf8\ub798\ubc0d\uc744 \uc0ac\uc6a9\ud558\uba74 \ubaa8\ub178\ub97c \uad6c\ub3c5\ud560 \ub54c\uae4c\uc9c0 \uc544\ubb34 \uc77c\ub3c4 \uc77c\uc5b4\ub098\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.  \ud14c\uc2a4\ud2b8 \ubaa9\uc801\uc73c\ub85c \uc774 \uc791\uc5c5\uc744 \uc218\ud589\ud558\ub294 \uac00\uc7a5 \uac04\ub2e8\ud55c \ubc29\ubc95\uc740 \ube14\ub85d()\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\uc774\uc9c0\ub9cc, \uc2e4\uc81c \uc571\uc5d0\uc11c\ub294 \uc88b\uc9c0 \uc54a\uc740 \ubc29\ubc95\uc785\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:scala decode:true\">val result: MutationResult = mono.block()<\/pre>\n<p>\ubc18\uc751\ud615 \ud504\ub85c\uadf8\ub798\ubc0d\uc740 \ubcf5\uc7a1\ud558\uace0 \uc2ec\uc624\ud55c \uc8fc\uc81c\uc774\ubbc0\ub85c \uc5ec\uae30\uc11c \uc790\uc138\ud788 \uc124\uba85\ud560 \uc218\ub294 \uc5c6\uc9c0\ub9cc, \uc219\ub2ec\ud558\uba74 \ud2b9\ud788 \uc2e4\uc81c \ubd84\uc0b0 \uc2dc\uc2a4\ud15c\uc758 \ubcf5\uc7a1\uc131\uc744 \ucc98\ub9ac\ud558\ub294 \ub370 \uac15\ub825\ud55c \ub3c4\uad6c\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.  \ud2b9\ud788 \ubc18\uc751\ud615 API\ub294 N1QL, FTS \ubc0f \ubd84\uc11d \ucffc\ub9ac\uc5d0 \ub300\ud55c \uc5ed\uc555\ub825\uc744 \uc81c\uacf5\ud558\ubbc0\ub85c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \ub370\uc774\ud130\ub97c \ub530\ub77c\uc7a1\ub294 \ub370 \uc5b4\ub824\uc6c0\uc744 \uacaa\uace0 \uc788\ub294 \uacbd\uc6b0 \uc790\ub3d9\uc73c\ub85c \ud589\uc758 \uc18c\ube44 \uc18d\ub3c4\ub97c \ub2a6\ucd94\uace0 \uba54\ubaa8\ub9ac \ubd80\uc871 \uc624\ub958\ub97c \ubc29\uc9c0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.  \uad81\uae08\ud558\uc2e0 \ubd84\ub4e4\uc740 <a href=\"https:\/\/projectreactor.io\/docs\">\ud504\ub85c\uc81d\ud2b8 \ub9ac\uc561\ud130 \ubb38\uc11c<\/a> \ub97c \ud074\ub9ad\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uc138\uc694.<\/p>\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c, \ubc18\uc751\ud615 \ud504\ub85c\uadf8\ub798\ubc0d\uc758 \uc2a4\ub808\ub4dc \uad00\ub9ac\uc640 \uad6c\uc131\uc131\uc744 \uc57d\uac04 \uc81c\uacf5\ud558\uc9c0\ub9cc \ub9ce\uc740 Scala \uac1c\ubc1c\uc790\uc5d0\uac8c \ub354 \uc775\uc219\ud55c \ud615\ud0dc\ub85c \uc81c\uacf5\ub418\ub294 Scala Futures\ub97c \uc911\uc2ec\uc73c\ub85c \uad6c\ucd95\ub41c \ube44\ub3d9\uae30 API\uac00 \uc788\uc2b5\ub2c8\ub2e4.  \uac04\ub2e8\ud55c \uc5c5\uc11c\ud2b8 \uc608\uc2dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">val result: Future[MutationResult] = collection.async.upsert(\"document-key\", json)\r\n\r\nresult onComplete {\r\n    case Success(_) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 =&gt; println(\"Successfully upserted\")\r\n    case Failure(exception) =&gt; println(\"Error: \" + exception)\r\n}<\/pre>\n<h3><b>JSON \uc720\uc5f0\uc131<\/b><\/h3>\n<p>\ud575\uc2ec \ubaa9\ud45c\ub294 \ud2b9\uc815 JSON \uad6c\ud604\uc5d0 \uac07\ud788\uc9c0 \uc54a\ub3c4\ub85d \ud558\ub294 \uac83\uc774\uc5c8\uc73c\uba70, Scala SDK\ub294 \uae30\ubcf8\uc801\uc73c\ub85c Circe, \u00b5Pickle\/\u00b5Json, Json4s \ubc0f Jawn\uc744 \ube44\ub86f\ud55c \uc5ec\ub7ec \uc778\uae30 \uc788\ub294 Scala JSON \ub77c\uc774\ube0c\ub7ec\ub9ac\uc640 \uc798 \uc791\ub3d9\ud569\ub2c8\ub2e4.  \uac01 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud55c \uc2a4\ub2c8\ud3ab\uc740 \ub2e4\uc74c\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/docs.couchbase.com\/scala-sdk\/1.0\/howtos\/json.html\">JSON \ubb38\uc11c<\/a>\ud558\uc9c0\ub9cc \ud638\uae30\uc2ec\uc744 \ubd88\ub7ec\uc77c\uc73c\ud0a4\uae30 \uc704\ud574 Circe\uac00 \uc2e4\uc81c\ub85c \uc791\ub3d9\ud558\ub294 \ubaa8\uc2b5\uc744 \ubcf4\uc5ec\ub4dc\ub9ac\uaca0\uc2b5\ub2c8\ub2e4. Circe \uc720\ud615\uc774 SDK\ub85c \uc9c1\uc811 \uc804\uc1a1\ub418\uace0 \ubc18\ud658\ub418\ub294 \ubc29\uc2dd\uc5d0 \uc8fc\ubaa9\ud558\uc138\uc694:<\/p>\n<pre class=\"lang:scala decode:true\">import io.circe.generic.auto._\r\nimport io.circe.syntax._\r\n\r\nval user = User(\u201cJohn Smith\u201d, 29)\r\nval json: io.circe.Json = user.asJson\r\n\r\nval result: Try[io.circe.Json] = collection.insert(\"id\", json)\r\n    .flatMap(_ =&gt; collection.get(\"id\"))\r\n     .flatMap(doc =&gt; doc.contentAs[io.circe.Json])\r\n\r\nresult match {\r\n    case Success(content: io.circe.Json) =&gt;\r\n        \/\/ Handle Circe Json here\r\n    case Failure(err) =&gt;\u00a0\u00a0\u00a0 println(\"Error: \" + err)\r\n}<\/pre>\n<h4>\uae30\ubcf8 \uc81c\uacf5 JSON<\/h4>\n<p>'\ubc30\ud130\ub9ac \ud3ec\ud568' \uc811\uadfc \ubc29\uc2dd\uc744 \ucde8\ud558\ub294 \uacbd\uc6b0 SDK\uc5d0 \ud3ec\ud568\ub41c \uac04\ub2e8\ud55c JSON \ub77c\uc774\ube0c\ub7ec\ub9ac\uc778 JsonObject\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.  \uc8fc\uc694 \ubaa9\ud45c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4:<\/p>\n<ul>\n<li>\ud3b8\uc758\uc131. \ubaa8\ub4e0 \uc0ac\ub78c\uc774 \uc2dc\uc791\ud558\uae30 \uc804\uc5d0 \uc5ec\ub7ec JSON \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ud3c9\uac00\ud558\uace0 \uc2f6\uc5b4\ud558\ub294 \uac83\uc740 \uc544\ub2d9\ub2c8\ub2e4. JsonObject\ub294 \uad1c\ucc2e\uc740 \uae30\ubcf8 \uc120\ud0dd\uc785\ub2c8\ub2e4.<\/li>\n<li>\uc18d\ub3c4. \ub0b4\ubd80 \ubca4\uce58\ub9c8\ud0b9(<a href=\"https:\/\/github.com\/couchbase\/couchbase-jvm-clients\/tree\/master\/benchmarks\">\ucd9c\ucc98<\/a> \ub97c \uc9c1\uc811 \uc2e4\ud589\ud558\uace0 \uc2f6\uc744 \uacbd\uc6b0)\uc5d0 \ub530\ub974\uba74 JsonObject\ub294 \uc77c\ubd80 \uc911\uc694\ud55c \uc791\uc5c5\uc5d0\uc11c \uac00\uc7a5 \uac00\uae4c\uc6b4 Scala JSON \ub77c\uc774\ube0c\ub7ec\ub9ac\ubcf4\ub2e4 \ucd5c\ub300 20\ubc30 \ub354 \ube60\ub97c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub294 \ub300\ubd80\ubd84 \ub2e8\uc21c\ud558\uc9c0\ub9cc \ub9e4\uc6b0 \ube60\ub974\uace0 \uac00\ubcc0\uc801\uc778 JVM \ub370\uc774\ud130 \uad6c\uc870\ub97c \uae30\ubc18\uc73c\ub85c \uad6c\ucd95\ub418\uc5b4 \uc788\uae30 \ub54c\ubb38\uc5d0 \uac00\ub2a5\ud569\ub2c8\ub2e4.<\/li>\n<li>\uc720\uc5f0\uc131.  \uae30\ubcf8 JsonObject \uc778\ud130\ud398\uc774\uc2a4\ub294 \uc608\uc678\ub97c \ub358\uc9d1\ub2c8\ub2e4(SDK\uc5d0\uc11c \uc720\uc77c\ud558\uac8c \uc608\uc678\ub97c \ub358\uc9c0\ub294 \uacf3).  \ub610\ub294 \uae30\ub2a5\uc801\uc778 Try \uae30\ubc18 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc81c\uacf5\ud558\ub294 JsonObjectSafe\ub85c \uc27d\uac8c \ubcc0\ud658\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<li>\uc0ac\uc6a9 \ud3b8\uc758\uc131 \ubc0f \ubcc0\uacbd \uac00\ub2a5\uc131. \uc6b0\ub9ac\ub294 \ub2e4\uc74c \uc0ac\ud56d\uc5d0 \ub3d9\uc758\ud569\ub2c8\ub2e4.<a href=\"https:\/\/www.lihaoyi.com\/post\/uJsonfastflexibleandintuitiveJSONforScala.html\"> \u00b5Json\uc758 \uc800\uc790<\/a> \ubd88\ubcc0\uc131\uc774 \uc77c\ubc18\uc801\uc73c\ub85c \ubc14\ub78c\uc9c1\ud558\uc9c0\ub9cc, JSON\uc758 \ud2b9\uc815 \uacbd\uc6b0\uc5d0\ub294 \ud56d\uc0c1 \ucd5c\uc120\uc758 \uc120\ud0dd\uc740 \uc544\ub2d9\ub2c8\ub2e4. \uae4a\uac8c \uc911\ucca9\ub41c JSON\uc744 \ucc98\ub9ac\ud558\ub824\uba74 \uc131\ub2a5 \uc800\ud558\uac00 \ubc1c\uc0dd\ud560 \uac00\ub2a5\uc131\uc740 \ub9d0\ud560 \uac83\ub3c4 \uc5c6\uace0, \uc77d\uace0 \uc0ac\uc6a9\ud558\uae30\uac00 \uc27d\uc9c0 \uc54a\uc740 \ub80c\uc988\uc640 \uac19\uc740 \uae30\ub2a5\uc801 \ub3c4\uad6c\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \ub610\ud55c JSON\uc740 \ub300\ubd80\ubd84 \uc81c\ud55c\ub41c \ubc94\uc704(\uc608: \ubb38\uc11c \uac00\uc838\uc624\uae30 \ubc0f \uc218\uc815)\uc5d0\uc11c \uc9e7\uac8c \ucc98\ub9ac\ub418\ub294 \uacbd\uc6b0\uac00 \ub9ce\uae30 \ub54c\ubb38\uc5d0 \ubd88\ubcc0\uc131\uc758 \uc548\uc804\uc131\uc774 \uc8fc\ub294 \uc774\uc810\uc744 \uac70\uc758 \ub204\ub9ac\uc9c0 \ubabb\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c JsonObject\ub294 \uac04\ub2e8\ud55c \ubcc0\uacbd \uac00\ub2a5\ud55c API\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n<p>\uc790\uc138\ud788 \uc54c\uc544\ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/docs.couchbase.com\/scala-sdk\/1.0\/howtos\/json.html#jsonobject-and-jsonarray\">JsonObject \ubb38\uc11c\ub294 \uc5ec\uae30<\/a>.  \ubb3c\ub860 \ubd88\ubcc0 \ub370\uc774\ud130, \ub300\uc218 \ub370\uc774\ud130 \uc720\ud615, \ub80c\uc988, \ucee4\uc11c \ubc0f \uae30\ud0c0 \uae30\ub2a5\uc744 \uac16\ucd98 \ubcf4\ub2e4 '\uc77c\ubc18\uc801\uc778 Scala' JSON \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud558\uace0 \uc2f6\ub2e4\uba74 \ub2e4\ub978 \uc9c0\uc6d0 \ub77c\uc774\ube0c\ub7ec\ub9ac \uc911 \ud558\ub098\uac00 \ub354 \ub098\uc740 \uc120\ud0dd\uc774 \ub420 \uc218 \uc788\uc73c\uba70, \uc120\ud0dd\uc740 \uc0ac\uc6a9\uc790\uc758 \ubaab\uc774\uba70 \ub3d9\uc77c\ud55c \uc571\uc5d0\uc11c \uc5ec\ub7ec JSON \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc27d\uac8c \ud63c\ud569\ud558\uace0 \uc77c\uce58\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h4><b>\uc9c1\uc811 \uc0ac\ub840 \uc218\uc5c5 \uc9c0\uc6d0<\/b><\/h4>\n<p>Scala SDK\ub294 JSON\uc744 \ud6cc\ub96d\ud558\uac8c \uc9c0\uc6d0\ud558\uc9c0\ub9cc, \ub54c\ub85c\ub294 Scala \ucf00\uc774\uc2a4 \ud074\ub798\uc2a4\ub85c \uc9c1\uc811 \uc791\uc5c5\ud558\ub294 \uac83\uc774 \ub354 \uc27d\uace0 \ubc14\ub78c\uc9c1\ud560 \ub54c\uac00 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ucf00\uc774\uc2a4 \ud074\ub798\uc2a4\uc5d0 \uc774 \uc791\uc740 \ubcf4\uc77c\ub7ec\ud50c\ub808\uc774\ud2b8\ub9cc \ucd94\uac00\ud558\uba74 SDK\uac00 \uc790\ub3d9\uc73c\ub85c \uc9c1\ub82c\ud654 \ub85c\uc9c1\uc744 \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:scala decode:true\">case class User(name: String, age: Int)\r\n\r\nobject User {\r\n    implicit val codec: Codec[User] = Codecs.codec[User]\r\n}<\/pre>\n<p>\uadf8\ub7f0 \ub2e4\uc74c \ud574\ub2f9 \ucf00\uc774\uc2a4 \ud074\ub798\uc2a4\ub97c SDK\ub85c \uc9c1\uc811 \uc804\uc1a1\ud558\uace0 \ub2e4\uc2dc \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">val r: Try[User] = collection.insert(\u201cdocId\u201d, User(\u201cJohn Smith\u201d, 29))\r\n    .flatMap(_ =&gt; collection.get(\u201cdocId\u201d)\r\n    .flatMap(doc =&gt; doc.contentAs[User])<\/pre>\n<p>\ub0b4\ubd80\uc801\uc73c\ub85c \uc774 \ub370\uc774\ud130\ub294 \uc0ac\uc6a9\uc790\uac00 \uc608\uc0c1\ud558\ub294 JSON\uc73c\ub85c \ubcc0\ud658\ub418\uc5b4 Couchbase Server\uc5d0 \uc800\uc7a5\ub429\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">{\"name\":\"John Smith\",\"age\":29}<\/pre>\n<p>\uc774\uac83\uc740 \ucd94\uac00 \uc9c1\ub82c\ud654 \uba54\ud0c0\ub370\uc774\ud130 \ub4f1\uc774 \uc5c6\ub294 \uc77c\ubc18 JSON\uc774\ubbc0\ub85c \ucf00\uc774\uc2a4 \ud074\ub798\uc2a4\ub85c \uc790\uc720\ub86d\uac8c \uc791\uc131\ud558\uc5ec JSON \ub77c\uc774\ube0c\ub7ec\ub9ac \ub610\ub294 \ub2e4\ub978 SDK\uc5d0\uc11c \uc77d\uac70\ub098 \uadf8 \ubc18\ub300\ub85c\ub3c4 \uc77d\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c \ub0b4\uc6a9\uc744 \ud655\uc778\ud558\uc138\uc694. <a href=\"https:\/\/docs.couchbase.com\/scala-sdk\/1.0\/howtos\/json.html#case-classes\">\ucf00\uc774\uc2a4 \ud074\ub798\uc2a4 \uc0ac\uc6a9\uc5d0 \ub300\ud55c \ubb38\uc11c<\/a> \ub97c \ud074\ub9ad\ud558\uc138\uc694.<\/p>\n<h3><b>\uac04\ud3b8\ud55c \ucffc\ub9ac<\/b><\/h3>\n<p>Couchbase \ubd84\uc11d, N1QL \ubc0f \uc804\uccb4 \ud14d\uc2a4\ud2b8 \uac80\uc0c9\uc744 \ucd5c\ub300\ud55c \uc27d\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ub9cc\ub4e4\uc5c8\uc2b5\ub2c8\ub2e4.  \ub2e4\uc74c\uc740 \ud589\uc774 JsonObject\ub85c \ubcc0\ud658\ub418\ub294 N1QL \ucffc\ub9ac\uc758 \uc608\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:default decode:true\">cluster.query(\"\"\"select * from `travel-sample` limit 10;\"\"\")\r\n    .flatMap(_.allRowsAs[JsonObject]) match {\r\n\r\n    case Success(rows: Seq[JsonObject]) =&gt;\r\n        rows.foreach(row =&gt; println(row))\r\n    case Failure(err) =&gt;\r\n        println(s\"Error: $err\")\r\n}<\/pre>\n<p>\ubb3c\ub860 \uc774\ub7ec\ud55c \uacb0\uacfc\ub97c \uc704\uc5d0\uc11c \uc9c0\uc6d0\ub418\ub294 JSON \uc720\ud615 \uc911 \ud558\ub098\ub85c \uac00\uc838\uc624\uac70\ub098 Scala \ucf00\uc774\uc2a4 \ud074\ub798\uc2a4\ub85c \uc9c1\uc811 \uac00\uc838\uc62c \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub610\ud55c \uc704\uc5d0\uc11c \uc5b8\uae09\ud588\ub4ef\uc774 \ubc18\uc751\ud615 API\ub97c \uc0ac\uc6a9\ud558\uba74 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \uad00\ub9ac \uac00\ub2a5\ud55c \uc18d\ub3c4\ub85c \ud589\uc744 \uc18c\ube44\ud558\uace0 \ub9e4\uc6b0 \ud070 \ucffc\ub9ac\uc5d0\uc11c \uba54\ubaa8\ub9ac \ubd80\uc871 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud558\uc9c0 \uc54a\ub3c4\ub85d \uc790\ub3d9 \ubc31\ud504\ub808\uc154\ub97c \ubb34\ub8cc\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>&nbsp;<\/p>\n<p>Couchbase Scala SDK\ub97c \uc2dc\uc791\ud558\uace0 \uc2f6\uc73c\uc2dc\ub2e4\uba74, \ub2e4\uc74c \ub0b4\uc6a9\uc744 \ud655\uc778\ud574\ubcf4\uc138\uc694. <a href=\"https:\/\/docs.couchbase.com\/scala-sdk\/1.0\/start-using-sdk.html\">\ube60\ub978 \uc2dc\uc791 \uac00\uc774\ub4dc<\/a>.  \uc544\uc9c1 \ucd08\uae30 \uc54c\ud30c \ubc84\uc804\uc774\uc9c0\ub9cc \uc9c0\uae08 \ubc14\ub85c \uc0ac\uc6a9 \uac00\ub2a5\ud569\ub2c8\ub2e4.  GA\uc5d0 \uac00\uae30 \uc804\uc5d0 \uba87 \uac00\uc9c0 \ud68d\uae30\uc801\uc778 \ubcc0\uacbd \uc0ac\ud56d\uc774 \uc788\uc744 \uc218 \uc788\uc9c0\ub9cc, \ubc18\ub300\ub85c \uc0dd\uac01\ud558\uba74 \uc9c0\uae08\uc774 \ubc14\ub85c \uc0ac\uc6a9\ud574 \ubcf4\uace0 \uc544\ub798\uc5d0 \ub313\uae00\uc744 \ub0a8\uae30\uac70\ub098 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/forums\/\">\ud3ec\ub7fc<\/a>, <a href=\"https:\/\/twitter.com\/couchbase\">\ud2b8\uc704\ud130<\/a> \ub610\ub294 <a href=\"https:\/\/gitter.im\/couchbase\/discuss?source=orgpage\">gitter<\/a>.  \uc815\ud574\uc9c4 \uac83\uc740 \uc5c6\uc73c\uba70, \uba87 \uac00\uc9c0 \uc0ac\ud56d\uc744 \ubcc0\uacbd\ud558\uc5ec \ucd5c\uace0\uc758 SDK\ub85c \ub9cc\ub4e4 \uc218 \uc788\ub294 \uae30\ud68c\ub97c \ud658\uc601\ud569\ub2c8\ub2e4.<\/p>","protected":false},"excerpt":{"rendered":"<p>I\u2019m very happy to report that Couchbase now has a supported Scala SDK, allowing you to get and fetch documents, run N1QL queries, perform analytics and full text search lookups &#8211; all with native Scala. In this blog I\u2019m going [&hellip;]<\/p>","protected":false},"author":40102,"featured_media":7088,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[2201],"tags":[],"ppma_author":[9084],"class_list":["post-7085","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tools-sdks"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.4 (Yoast SEO v26.4) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Introducing the Couchbase Scala SDK - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"The Scala SDK is available to download, in a pre-release alpha form. Learn more about the key features and design principles of the Scala SDK.\" \/>\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-scala-sdk\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introducing the Couchbase Scala SDK\" \/>\n<meta property=\"og:description\" content=\"The Scala SDK is available to download, in a pre-release alpha form. Learn more about the key features and design principles of the Scala SDK.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/couchbase-scala-sdk\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-06-18T15:03:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-19T11:35:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/06\/scala_and_couchbase.png\" \/>\n\t<meta property=\"og:image:width\" content=\"666\" \/>\n\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Graham Pople, Senior Software Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Graham Pople, Senior Software Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8\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-scala-sdk\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/\"},\"author\":{\"name\":\"Graham Pople, Senior Software Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/40b3fd994e3f33a8068e54e36577eb8e\"},\"headline\":\"Introducing the Couchbase Scala SDK\",\"datePublished\":\"2019-06-18T15:03:34+00:00\",\"dateModified\":\"2023-05-19T11:35:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/\"},\"wordCount\":1417,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/scala_and_couchbase.png\",\"articleSection\":[\"Tools &amp; SDKs\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/\",\"name\":\"Introducing the Couchbase Scala SDK - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/scala_and_couchbase.png\",\"datePublished\":\"2019-06-18T15:03:34+00:00\",\"dateModified\":\"2023-05-19T11:35:50+00:00\",\"description\":\"The Scala SDK is available to download, in a pre-release alpha form. Learn more about the key features and design principles of the Scala SDK.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/scala_and_couchbase.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/scala_and_couchbase.png\",\"width\":666,\"height\":350},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introducing the Couchbase Scala SDK\"}]},{\"@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\/40b3fd994e3f33a8068e54e36577eb8e\",\"name\":\"Graham Pople, Senior Software Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/d0840b7ec045a43a30d21b57fa29318b\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4084d00daa868b9b163191a655774c94b21629bbeecd00916470d9d9878462a7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4084d00daa868b9b163191a655774c94b21629bbeecd00916470d9d9878462a7?s=96&d=mm&r=g\",\"caption\":\"Graham Pople, Senior Software Engineer, Couchbase\"},\"description\":\"Graham is a senior software engineer at Couchbase who works on the SDK and Connectors team, mainly on the Scala and Java clients. Make his day by asking him about home composting.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/grahamp\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Introducing the Couchbase Scala SDK - The Couchbase Blog","description":"Scala SDK\ub294 \ucd9c\uc2dc \uc804 \uc54c\ud30c \ubc84\uc804\uc73c\ub85c \ub2e4\uc6b4\ub85c\ub4dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Scala SDK\uc758 \uc8fc\uc694 \uae30\ub2a5 \ubc0f \uc124\uacc4 \uc6d0\uce59\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uc138\uc694.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/ko\/couchbase-scala-sdk\/","og_locale":"ko_KR","og_type":"article","og_title":"Introducing the Couchbase Scala SDK","og_description":"The Scala SDK is available to download, in a pre-release alpha form. Learn more about the key features and design principles of the Scala SDK.","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/couchbase-scala-sdk\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-06-18T15:03:34+00:00","article_modified_time":"2023-05-19T11:35:50+00:00","og_image":[{"width":666,"height":350,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/06\/scala_and_couchbase.png","type":"image\/png"}],"author":"Graham Pople, Senior Software Engineer, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Graham Pople, Senior Software Engineer, Couchbase","Est. reading time":"8\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/"},"author":{"name":"Graham Pople, Senior Software Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/40b3fd994e3f33a8068e54e36577eb8e"},"headline":"Introducing the Couchbase Scala SDK","datePublished":"2019-06-18T15:03:34+00:00","dateModified":"2023-05-19T11:35:50+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/"},"wordCount":1417,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/scala_and_couchbase.png","articleSection":["Tools &amp; SDKs"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/","url":"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/","name":"Introducing the Couchbase Scala SDK - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/scala_and_couchbase.png","datePublished":"2019-06-18T15:03:34+00:00","dateModified":"2023-05-19T11:35:50+00:00","description":"Scala SDK\ub294 \ucd9c\uc2dc \uc804 \uc54c\ud30c \ubc84\uc804\uc73c\ub85c \ub2e4\uc6b4\ub85c\ub4dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Scala SDK\uc758 \uc8fc\uc694 \uae30\ub2a5 \ubc0f \uc124\uacc4 \uc6d0\uce59\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uc138\uc694.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/scala_and_couchbase.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/scala_and_couchbase.png","width":666,"height":350},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-scala-sdk\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Introducing the Couchbase Scala SDK"}]},{"@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\/40b3fd994e3f33a8068e54e36577eb8e","name":"\uadf8\ub808\uc774\uc5c4 \ud53c\ud50c, \uc218\uc11d \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc5d4\uc9c0\ub2c8\uc5b4, Couchbase","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/d0840b7ec045a43a30d21b57fa29318b","url":"https:\/\/secure.gravatar.com\/avatar\/4084d00daa868b9b163191a655774c94b21629bbeecd00916470d9d9878462a7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4084d00daa868b9b163191a655774c94b21629bbeecd00916470d9d9878462a7?s=96&d=mm&r=g","caption":"Graham Pople, Senior Software Engineer, Couchbase"},"description":"Graham is a senior software engineer at Couchbase who works on the SDK and Connectors team, mainly on the Scala and Java clients. Make his day by asking him about home composting.","url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/grahamp\/"}]}},"authors":[{"term_id":9084,"user_id":40102,"is_guest":0,"slug":"grahamp","display_name":"Graham Pople, Senior Software Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/4084d00daa868b9b163191a655774c94b21629bbeecd00916470d9d9878462a7?s=96&d=mm&r=g","author_category":"","last_name":"Pople, Senior Software Engineer, Couchbase","first_name":"Graham","job_title":"","user_url":"","description":"Graham\uc740 Couchbase\uc758 \uc120\uc784 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc5d4\uc9c0\ub2c8\uc5b4\ub85c, \uc8fc\ub85c Scala \ubc0f Java \ud074\ub77c\uc774\uc5b8\ud2b8\ub97c \ub2f4\ub2f9\ud558\ub294 SDK \ubc0f \ucee4\ub125\ud130 \ud300\uc5d0\uc11c \uc77c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.  \uadf8\uc5d0\uac8c \uac00\uc815\uc6a9 \ud1f4\ube44\uc5d0 \ub300\ud574 \ubb3c\uc5b4\ubcf4\uba70 \ud558\ub8e8\ub97c \uc2dc\uc791\ud558\uc138\uc694."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/7085","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\/40102"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=7085"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/7085\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/7088"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=7085"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=7085"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=7085"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=7085"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}