{"id":2224,"date":"2016-04-14T17:33:59","date_gmt":"2016-04-14T17:33:58","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2224"},"modified":"2023-09-09T02:31:34","modified_gmt":"2023-09-09T09:31:34","slug":"embed-couchbase-in-an-iot-project-for-data-synchronization","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/embed-couchbase-in-an-iot-project-for-data-synchronization\/","title":{"rendered":"\ub370\uc774\ud130 \ub3d9\uae30\ud654\ub97c \uc704\ud574 IoT \ud504\ub85c\uc81d\ud2b8\uc5d0 Couchbase \ud3ec\ud568\ud558\uae30"},"content":{"rendered":"<p>\ucd5c\uadfc \uc0ac\ubb3c\uc778\ud130\ub137(IoT)\uc774 \ub300\uc138\ub85c \ub5a0\uc624\ub974\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc2dc\uacc4, \ud154\ub808\ube44\uc804, \uc628\ub3c4 \uc870\uc808\uae30 \ub4f1 \ubaa8\ub4e0 \uae30\uacc4 \uc7a5\uce58\ub97c \uc81c\uc791\ud558\uace0 \uc778\ud130\ub137\uc744 \ud1b5\ud574 \ud1b5\uc2e0\ud560 \uc218 \uc788\ub294 \uac83\uc774 \ud604\ub300\uc758 \uc2dc\ub300\uc785\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ud604\ub300\uc5d0\uc11c \ubcc0\ud558\uc9c0 \uc54a\ub294 \ud55c \uac00\uc9c0\ub294 \ub370\uc774\ud130 \uc804\uc1a1\uacfc \uc800\uc7a5\uc758 \ud544\uc694\uc131\uc785\ub2c8\ub2e4. IoT \ub514\ubc14\uc774\uc2a4\uc5d0\uc11c \uc774\ub97c \uc5b4\ub5bb\uac8c \uc218\ud589\ud560 \uc218 \uc788\uc744\uae4c\uc694?<\/p>\n<p><a href=\"https:\/\/developer.couchbase.com\/server\/?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc11c\ubc84<\/a> \ub294 \ubc29\ub300\ud55c \uc591\uc758 \uc5d4\ud130\ud504\ub77c\uc774\uc988 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\uae30 \uc704\ud574 \uc874\uc7ac\ud558\uba70 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/developers\/mobile\/?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ubaa8\ubc14\uc77c<\/a> \ub294 \ubaa8\ubc14\uc77c \uc7a5\uce58\uc5d0 \ub85c\uceec\ub85c \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\uace0 \uac00\ub2a5\ud55c \uacbd\uc6b0 Couchbase Server\uc5d0 \ub3d9\uae30\ud654\ud558\uae30 \uc704\ud574 \uc874\uc7ac\ud569\ub2c8\ub2e4. IoT\ub294 \uc5b4\ub514\uc5d0 \uc801\ud569\ud560\uae4c\uc694? IoT \ub514\ubc14\uc774\uc2a4\ub294 \uc11c\ubc84\uac00 \uc544\ub2c8\uba70 \uae30\uc220\uc801\uc73c\ub85c \ubaa8\ubc14\uc77c \ub514\ubc14\uc774\uc2a4\uac00 \uc544\ub2d9\ub2c8\ub2e4.<\/p>\n<p>\ub9ce\uc740 IoT \uae30\uae30\uc5d0\uc11c Java \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc2e4\ud589\ud560 \uc218 \uc788\ub2e4\ub294 \uc0ac\uc2e4\uc744 \uc54c\uace0 \uacc4\uc168\ub098\uc694? \uc2e4\uc81c\ub85c Java\uc6a9 Couchbase Lite SDK\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uac83\uc740 Android \ub610\ub294 iOS SDK\uac00 \uc544\ub2d9\ub2c8\ub2e4. \uc77c\ubc18 Java \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc704\ud55c SDK\uc785\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 IoT\uc5d0 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>\ud504\ub85c\uc81d\ud2b8 \ubc94\uc704<\/h2>\n<p>\uc774\uc81c \uc774\uac83\uc774 \uac00\ub2a5\ud558\ub2e4\ub294 \uac83\uc744 \uc54c\uc558\uc73c\ub2c8 \uba4b\uc9c4 IoT \uc608\uc81c\ub97c \uc0dd\uac01\ud574\ubcf4\uace0 \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c \uc2dc\ub098\ub9ac\uc624\uc5d0\uc11c iBeacon \uc608\uc81c\ub97c \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc9d1\uc744 \ube44\uc6b4 \ub3d9\uc548 \ubc18\ub824\ub3d9\ubb3c\uc744 \ucd94\uc801\ud558\uace0 \uc2f6\ub2e4\uace0 \uac00\uc815\ud574 \ubd05\uc2dc\ub2e4. \ubc18\ub824\ub3d9\ubb3c\uc774 \uc9d1\uc548 \uacf3\uacf3\uc5d0\uc11c \ud558\ub8e8 \uc911 \uba87 \uc2dc\uc5d0 \uc5b4\ub514\ub85c \uac00\ub294\uc9c0 \ud30c\uc545\ud558\uace0 \uc2f6\uc744 \uac83\uc785\ub2c8\ub2e4. \uadf8\ub798\uc11c \ubc18\ub824\ub3d9\ubb3c\uc758 \ubaa9\uac78\uc774\uc5d0 iBeacon\uc744 \ubd80\ucc29\ud558\uace0 \uc9d1 \uc8fc\ubcc0\uc5d0 \uba87 \uac1c\uc758 IoT \uc2a4\uce90\ub108\ub97c \uc124\uce58\ud558\uae30\ub85c \uacb0\uc815\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub530\ub77c\uc11c iBeacon\uc744 \uc5f0\uacb0\ud558\uace0 IoT \uac8c\uc774\ud2b8\uc6e8\uc774\ub97c \uc124\uce58\ud558\uba74 IoT \ub514\ubc14\uc774\uc2a4\uac00 \uc9c0\uc18d\uc801\uc73c\ub85c iBeacon\uc744 \uc2a4\uce94\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. iBeacon\uc774 \ubc94\uc704 \ub0b4\uc5d0 \ub4e4\uc5b4\uc624\uba74 \uc704\uce58 \ubc0f \ube44\ucf58 \uc815\ubcf4\uc640 \ud568\uaed8 \ud0c0\uc784\uc2a4\ud0ec\ud504\uac00 \uc800\uc7a5\ub418\uc5b4 \uc11c\ubc84\uc5d0 \uc5c5\ub85c\ub4dc\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub098\uc911\uc5d0 \ud788\ud2b8 \ub9f5\uc744 \uc0ac\uc6a9\ud558\uc5ec \ub098\ub9cc\uc758 \ub300\uc2dc\ubcf4\ub4dc\ub97c \ub9cc\ub4e4\uc5b4 \ub370\uc774\ud130\ub97c \ub354 \uc798 \uc774\ud574\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uadf8\ub807\ub2e4\uba74 \uc774 \ud504\ub85c\uc81d\ud2b8\ub97c \uc2dc\ub3c4\ud558\ub824\uba74 \ubb34\uc5c7\uc774 \ud544\uc694\ud560\uae4c\uc694?<\/p>\n<h2>\uc694\uad6c \uc0ac\ud56d<\/h2>\n<p>\ud558\ub4dc\uc6e8\uc5b4\ubfd0\ub9cc \uc544\ub2c8\ub77c \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc601\uc5ed\uc5d0\ub3c4 \uba87 \uac00\uc9c0 \uc694\uad6c \uc0ac\ud56d\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc544\ub798\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<ul>\n<li>\ucd5c\uc18c 1\uac1c(1) <a href=\"https:\/\/www.intel.com\/content\/www\/us\/en\/embedded\/solutions\/iot-gateway\/development-kits.html\">\uc778\ud154 IoT \uac8c\uc774\ud2b8\uc6e8\uc774<\/a><\/li>\n<li>\ucd5c\uc18c 1\uac1c(1) <a href=\"https:\/\/store.gimbal.com\/\">\uc9d0\ubc8c<\/a> \uadfc\uc811 \ube44\ucf58<\/li>\n<li>Java 1.7+<\/li>\n<li>Maven<\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/nosql-databases\/downloads\/\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774<\/a><\/li>\n<\/ul>\n<p>\ud558\ub4dc\uc6e8\uc5b4 \uc694\uad6c \uc0ac\ud56d\uc774 \uc788\uc9c0\ub9cc \ud558\ub4dc\uc6e8\uc5b4 \ube0c\ub79c\ub4dc\ub294 \uc57d\uac04 \uc720\uc5f0\ud569\ub2c8\ub2e4. \uc81c\uac00 \uc778\ud154 IoT \uac8c\uc774\ud2b8\uc6e8\uc774\uc640 \uc9d0\ubc8c \uadfc\uc811 \ube44\ucf58\uc744 \ubaa8\ub450 \ub098\uc5f4\ud55c \uc774\uc720\ub294 \uac00\uaca9\uc774 \ub9e4\uc6b0 \uc800\ub834\ud560 \ubfd0\ub9cc \uc544\ub2c8\ub77c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uad6c\ucd95\ud560 \ub54c \uc0ac\uc6a9\ud55c \uc81c\ud488\uc774\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4. \uc774 \uc608\uc81c\ub97c \ucd5c\ub300\ud55c \ud65c\uc6a9\ud558\ub824\uba74 \ube44\ucf58\uacfc \uac8c\uc774\ud2b8\uc6e8\uc774\ub97c \uc5ec\ub7ec \uac1c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \uac00\uc7a5 \uc88b\uc9c0\ub9cc \ud504\ub85c\ud1a0\ud0c0\uc774\ud551\uc5d0\ub294 \ud558\ub098\ub9cc \uc0ac\uc6a9\ud574\ub3c4 \ucda9\ubd84\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc774 \ud504\ub85c\uc81d\ud2b8\uc758 \uc9c4\ud589 \ubc29\uc2dd\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2016\/april\/embed-couchbase-in-an-iot-project-for-data-synchronization\/iot-beacon-flow.png\" \/><\/p>\n<p>\uc774 \ud504\ub85c\uc81d\ud2b8\uc758 \uc804\uccb4 \uc18c\uc2a4 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/github.com\/couchbaselabs\/iot-beacon-example\">GitHub<\/a>.<\/p>\n<h2>Couchbase\ub85c \ub370\uc774\ud130 \uc800\uc7a5\ud558\uae30<\/h2>\n<p>IoT \ubc0f \ube44\ucf58 \uc791\uc5c5\uc744 \uc2dc\uc791\ud558\uae30 \uc804\uc5d0 \ub370\uc774\ud130 \ubaa8\ub378\uc744 \uc815\uc758\ud558\uace0 Java \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uad6c\ucd95\ud558\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4. \ub9ce\uc740 \uc2dc\ub098\ub9ac\uc624 \uc911 \ud558\ub098\uc778 \uc774 \uc2dc\ub098\ub9ac\uc624\uc5d0\uc11c\ub294 Java \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \ube44\ucf58\uc744 \uac80\uc0c9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc774 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc740 \ub370\uc774\ud130 \uc800\uc7a5\ub9cc \ub2f4\ub2f9\ud569\ub2c8\ub2e4.<\/p>\n<h3>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube44\ucf58 \ub370\uc774\ud130 \ubaa8\ub378<\/h3>\n<p>\uc544\uc774\ube44\ucf58\uc5d0 \uc775\uc219\ud558\uc9c0 \uc54a\uc73c\uc2dc\ub2e4\uba74, \uc544\uc774\ube44\ucf58\uc740 \uba87 \uac00\uc9c0 \ubb38\uc790\uc5f4\uacfc \uc815\uc218 \uac12\ub9cc \uc804\uc1a1\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\ub978 \ub514\ubc14\uc774\uc2a4\uc5d0 \uc5f0\uacb0\ud560 \uc218\ub3c4 \uc5c6\uace0 \ub2e4\ub978 \ub514\ubc14\uc774\uc2a4\ub97c \ubcfc \uc218\ub3c4 \uc5c6\uc2b5\ub2c8\ub2e4. \uadf8\uc800 \uc804\uc1a1\ub9cc \ud560 \ubfd0\uc785\ub2c8\ub2e4. \uc989, \uc804\uc1a1\ub418\ub294 \uac12\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4:<\/p>\n<ul>\n<li>UUID<\/li>\n<li>\uc804\uacf5<\/li>\n<li>\ubbf8\uc131\ub144\uc790<\/li>\n<li>\uc804\uc6d0<\/li>\n<\/ul>\n<p>\uadf8\ub9ac\uace0 <strong>UUID<\/strong>, <strong>\uc804\uacf5<\/strong>\ubc0f <strong>\ubbf8\uc131\ub144\uc790<\/strong> \ub294 \ud2b9\uc815 \ube44\ucf58\uc5d0 \ub300\ud55c \uace0\uc720\ud55c \uc815\ubcf4\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc774 \uc138 \uac00\uc9c0 \uac12\uc740 \ub098\uc911\uc5d0 \ucffc\ub9ac\ud560 \ub54c \uc720\uc6a9\ud55c \ubcf5\ud569 \ud0a4\ub97c \ud615\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ube44\ucf58\uc774 \uac10\uc9c0\ub420 \ub54c\ub9c8\ub2e4 \ube44\ucf58 \ub370\uc774\ud130\ub97c \uc5b4\ub5bb\uac8c \uc800\uc7a5\ud560\uc9c0 \uc0dd\uac01\ud574 \ubd05\uc2dc\ub2e4.<\/p>\n<p>\ube44\ucf58\uc774 \uac10\uc9c0\ub420 \ub54c\ub9c8\ub2e4 \uc0c8\ub85c\uc6b4 JSON \ubb38\uc11c\ub97c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uac1c\ubcc4 \ubb38\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcf4\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre><code>\r\n{\r\n    \"uuid\": \"32342342\",\r\n    \"major\": 1,\r\n    \"minor\": 0,\r\n    \"createdAt\": 1932847298,\r\n    \"gatewayDevice\": \"kitchen\"\r\n}\r\n<\/code><\/pre>\n<p>\uc704\uc758 \uc811\uadfc \ubc29\uc2dd\uc774 \uc798\ubabb\ub41c \uac83\uc740 \uc544\ub2d9\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc5bc\ub9c8\ub098 \ub9ce\uc740 \ube44\ucf58\uc744 \ubc30\ud3ec\ud558\ub290\ub0d0\uc5d0 \ub530\ub77c \uc5c4\uccad\ub09c \uc591\uc758 \ubb38\uc11c\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \ub9d0\ud558\uc9c0\ub9cc, Couchbase\ub294 \uc774 \ubb38\uc81c\ub97c \ucc98\ub9ac\ud558\ub3c4\ub85d \uc124\uacc4\ub418\uc5c8\uc73c\ubbc0\ub85c \uc120\ud638\ub3c4\uc758 \ubb38\uc81c\uc785\ub2c8\ub2e4. \uc800\ub294 \uc2e4\uc81c\ub85c \ud2b9\uc815 \ube44\ucf58\uc5d0 \ub300\ud55c \ubaa8\ub4e0 \ube44\ucf58 \ud2b8\ub79c\uc7ad\uc158\uc744 \uc774\uc640 \uac19\uc774 \ub3d9\uc77c\ud55c \ubb38\uc11c\uc5d0 \ubcf4\uad00\ud558\ub294 \uac83\uc744 \uc120\ud638\ud569\ub2c8\ub2e4:<\/p>\n<pre><code>\r\n{\r\n    \"uuid\": \"23423423\",\r\n    \"major\": 1,\r\n    \"minor\": 0,\r\n    \"beaconStatus\": [\r\n        {\r\n            \"createdAt\": 234234321234,\r\n            \"gatewayDevice\": \"kitchen\"\r\n        },\r\n        {\r\n            \"createdAt\": 12312323544,\r\n            \"gatewayDevice\": \"garage\"\r\n        }\r\n    ]\r\n}\r\n<\/code><\/pre>\n<p>\ub450 \ubc88\uc9f8 \uc2dc\ub098\ub9ac\uc624\uc5d0\uc11c\ub294 \ube44\ucf58\uc774 \ubc1c\uacac\ub420 \ub54c\ub9c8\ub2e4 \ubcf5\ud569 \ud0a4\ub97c \uae30\ubc18\uc73c\ub85c Couchbase\ub97c \ucffc\ub9ac\ud55c \ub2e4\uc74c \uc0c1\ud0dc \ub370\uc774\ud130\ub97c \uc0c1\ud0dc \ubc30\uc5f4\uc5d0 \ucd94\uac00\ud569\ub2c8\ub2e4.<\/p>\n<h3>Maven \uc885\uc18d\uc131 \ucd94\uac00\ud558\uae30<\/h3>\n<p>\uc774 Java \ud504\ub85c\uc81d\ud2b8\ub294 Maven\uc744 \uae30\ubc18\uc73c\ub85c \ud558\ubbc0\ub85c <strong>pom.xml<\/strong> \ud30c\uc77c\uc5d0 \ud2b9\uc815 \uc885\uc18d\uc131\uc744 \ucda9\uc871\ud574\uc57c \ud569\ub2c8\ub2e4. \ud504\ub85c\uc81d\ud2b8\uc5d0 Couchbase Lite Java SDK\ub97c \ud3ec\ud568\ud558\ub824\uba74 Maven \ud30c\uc77c\uc5d0 \ub2e4\uc74c \uc885\uc18d\uc131\uc744 \ucd94\uac00\ud558\uc138\uc694:<\/p>\n<pre><code>\r\n\r\n   com.couchbase.lite\r\n   couchbase-lite-java\r\n   1.2.0\r\n\r\n<\/code><\/pre>\n<p>\uc704\uc758 \uc885\uc18d\uc131\uc744 \uc0ac\uc6a9\ud558\uba74 Couchbase \ubb38\uc11c\ub97c IoT \uc7a5\uce58\uc5d0 \ub85c\uceec\ub85c \uc800\uc7a5\ud558\uace0 Couchbase \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\uc640 \ub3d9\uae30\ud654\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>\ube44\ucf58 \ud074\ub798\uc2a4 \ub9cc\ub4e4\uae30<\/h3>\n<p>\uc544\uc774\ube44\ucf58\uc73c\ub85c \uc791\uc5c5\ud560 \uac83\uc774\ubbc0\ub85c \uc790\ubc14 \ube44\ucf58 \ud074\ub798\uc2a4\ub97c \ub9cc\ub4dc\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4. \uc774 \ud074\ub798\uc2a4\ub294 \ube44\ucf58 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\uace0 \ucffc\ub9ac \ubc1c\uc0dd \uc2dc \ub370\uc774\ud130\ub97c \ub85c\ub4dc\ud558\ub294 \uc5ed\ud560\uc744 \ub2f4\ub2f9\ud574\uc57c \ud569\ub2c8\ub2e4. \ub85c\ub529\uc774 \uc5b4\ub5a4 \uac83\uc778\uc9c0\ubd80\ud130 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4:<\/p>\n<pre><code>\r\nprivate Document load(Database database) {\r\n    Document document = null;\r\n    try {\r\n        View beaconView = database.getView(\"beacons\");\r\n        beaconView.setMap(new Mapper() {\r\n            @Override\r\n            public void map(Map&lt;String, Object&gt; document, Emitter emitter) {\r\n                List<object> keys = new ArrayList<object>();                keys.add(document.get(\"uuid\"));                keys.add(document.get(\"major\"));                keys.add(document.get(\"minor\"));                emitter.emit(keys, document.get(\"beaconStatus\"));            }        }, \"1\");        Query query = beaconView.createQuery();        List<object> keys = new ArrayList<object>();        List<object> key = new ArrayList<object>();        key.add(this.uuid);        key.add(this.major);        key.add(this.minor);        keys.add(key);        query.setKeys(keys);        QueryEnumerator result = query.run();        for (Iterator it = result; it.hasNext(); ) {            QueryRow row = it.next();            document = row.getDocument();        }    } catch (Exception e) {        e.printStackTrace();    }    return document;}A lot is happening in the above load so let's take a look at it.Since Couchbase Lite queries based on MapReduce views we first create a view. Remember we plan to use a composite key which is why we create a list of keys. The only data we need returned if a match was found is the status array that contains timestamp and gateway information.With the view in place, a query can be constructed. Since we are in a custom Java class, let's assume that we've captured the <strong>uuid<\/strong>, <strong>\uc804\uacf5<\/strong>\ubc0f <strong>\ubbf8\uc131\ub144\uc790<\/strong> values at some point in time. We'll construct the key lists out of the values and set the query to use them with the <code>query.setKeys<\/code> function.After the query runs we'll loop through the results. We are only expecting one result which can further be insured by using a limit function before executing the query. The result returned from the query, if any, will be returned to whatever calls the load function. In this case the save function calls it before saving.Now let's take a look at the save function of our beacon class.\r\n<pre><code>public String save(Database database) {    String docId = \"\";    Map&lt;String, Object&gt; properties = new HashMap&lt;String, Object&gt;();    ArrayList beaconStatusList = new ArrayList();    Document document = this.load(database);    if(document != null) {        properties.putAll(document.getProperties());        beaconStatusList = (ArrayList) properties.get(\"beaconStatus\");    } else {        document = database.createDocument();        properties.put(\"uuid\", this.uuid);        properties.put(\"major\", this.major);        properties.put(\"minor\", this.minor);    }    beaconStatusList.add(this.beaconStatus);    properties.put(\"beaconStatus\", beaconStatusList);    try {        docId = document.putProperties(properties).getDocument().getId();    } catch (Exception e) {        e.printStackTrace();    }    return docId;}<\/code><\/pre>\n<p>In the save function we first want to load documents to see if they first exist. If a document exists for the beacon information, we want to add to it, otherwise we can just create a new document. After we've reconstructed our Couchbase document, whether it be from scratch or from existing document data, we save it via the <code>putProperties<\/code> \ud568\uc218\ub97c \ud638\ucd9c\ud558\uba70, \uc774 \uc2dc\uc810\uc5d0\uc11c \ube44\ucf58 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\uace0 \ub85c\uceec \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub77c\uc774\ud2b8 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \uc77d\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\uc640 \ub3d9\uae30\ud654\ud558\uae30<\/h3>\n<p>More than likely you're going to be working with more than one IoT scanning gateway. Because of this, the beacon data (in the embedded document model) will need to be synchronized between IoT devices. Now we can take our saving and loading code to the next level.Take a look at the following code:<\/p>\n<pre><code>try {    manager = new Manager(new JavaContext(\"data\"), Manager.DEFAULT_OPTIONS);    database = manager.getDatabase(\"iot-project\");    URL url = new URL(\"https:\/\/192.168.1.174:4984\/beacons-iot\/\");    final Replication push = database.createPushReplication(url);    Replication pull = database.createPullReplication(url);    pull.setContinuous(false);    push.setContinuous(false);    pull.addChangeListener(new Replication.ChangeListener() {        @Override        public void changed(Replication.ChangeEvent event) {            if(event.getSource().getStatus() == Replication.ReplicationStatus.REPLICATION_STOPPED) {                beacon.save(database);                push.start();            }        }    });    push.addChangeListener(new Replication.ChangeListener() {        @Override        public void changed(Replication.ChangeEvent event) {            if(event.getSource().getStatus() == Replication.ReplicationStatus.REPLICATION_STOPPED) {                System.exit(1);            }        }    });    pull.start();} catch (Exception e) {    e.printStackTrace();}<\/code><\/pre>\n<p>\uc774 \ucf54\ub4dc\ub294 \ub2e4\ub978 \ud074\ub798\uc2a4(\uac00\uae09\uc801\uc774\uba74 \uc5ec\ub7ec\ubd84\uc758 <code>\uba54\uc778<\/code> function. Essentially it will initialize connection to your local database, configure the push and pull replicators to a remotely running instance of Sync Gateway, and start the save and synchronization process.To be more specific, the replication process will only happen one time. When we run the application, first we will pull down any relevent beacon documents from the server. By using change listeners on the replicators we can wait to save only after we've finished downloading any changes. To prevent the Java application from remaining open after pushing, we add a listener that will close the application upon completion.<\/p>\n<h3>SQLite \uc885\uc18d\uc131 \uc624\ub958 \ud574\uacb0<\/h3>\n<p>When building this application with Maven, there shouldn't be any issues. However, depending on the IoT device you deploy to there could be a library dependency issue. There are many different architectures in circulation. An example error might look like the following:<\/p>\n<pre><code>Library not found: \/native\/linux\/i386\/libsqlite3.so<\/code><\/pre>\n<p>\uc774 \ubb38\uc81c\ub294 JAR \uc544\uce74\uc774\ube0c\ub97c \ucd94\ucd9c\ud558\uace0 \ub514\ub809\ud130\ub9ac \uc911 \ud558\ub098\uc758 \uc774\ub984\uc744 \ubc14\uafbc \ub2e4\uc74c \ub2e4\uc2dc JAR\ub85c \ud328\ud0a4\uc9d5\ud558\uba74 \uc27d\uac8c \ud574\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc880 \ub354 \uad6c\uccb4\uc801\uc73c\ub85c \uc124\uba85\ud558\uc790\uba74, \ub2e4\uc74c \uba85\ub839\uc744 \uc2e4\ud589\ud558\uc5ec JAR \ud30c\uc77c\uc744 \ucd94\ucd9c\ud569\ub2c8\ub2e4:<\/p>\n<pre><code>jar xvf [filename].jar<\/code><\/pre>\n<p>\ucd94\ucd9c\ud55c \ubb38\uc11c\uc640 \ud30c\uc77c\uc5d0\uc11c \uc774\ub984\uc744 \ubcc0\uacbd\ud569\ub2c8\ub2e4. <strong>\/\ub124\uc774\ud2f0\ube0c\/\ub9ac\ub205\uc2a4\/x86<\/strong> \ub514\ub809\ud1a0\ub9ac\ub97c <strong>\/\ub124\uc774\ud2f0\ube0c\/\ub9ac\ub205\uc2a4\/i386<\/strong>. \uc774 \uc791\uc5c5\uc774 \uc644\ub8cc\ub418\uba74 JAR \ud30c\uc77c\uc744 \ub2e4\uc2dc \ud328\ud0a4\uc9d5\ud558\uace0 \ub2e4\uc2dc \ubc30\ud3ec\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre><code>jar cvfm [filename].jar META-INF\/MANIFEST.MF .<\/code><\/pre>\n<p>\uc704\uc758 \uba85\ub839\uc740 JAR \ud30c\uc77c\uc744 \ub2e4\uc2dc \ud328\ud0a4\uc9d5\ud569\ub2c8\ub2e4.<\/p>\n<h2>\uc544\uc774\ube44\ucf58 \uc2a4\uce94 \ubc0f \uc0c1\ud0dc \ucd94\uc801\ud558\uae30<\/h2>\n<p>Like mentioned previously, the Java application is not responsible for detecting iBeacons. It is only responsible for saving the data. Instead we're going to make use of a few tools that come pre-installed on a Linux operating system.<\/p>\n<h3>Linux \ub3c4\uad6c\ub85c \uc2a4\uce94<\/h3>\n<p>\ub300\ubd80\ubd84\uc758 Linux \ubc30\ud3ec\ud310\uc5d0\ub294 <strong>hcitool<\/strong> \uadf8\ub9ac\uace0 <strong>hcidump<\/strong> \uc560\ud50c\ub9ac\ucf00\uc774\uc158. \uc560\ud50c\ub9ac\ucf00\uc774\uc158 <strong>hcitool<\/strong> \ub97c \uc0ac\uc6a9\ud558\uba74 \ubc94\uc704 \ub0b4\uc5d0 \uc788\ub294 \ube14\ub8e8\ud22c\uc2a4 \uc7a5\uce58\ub97c \uac80\uc0c9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c\uacfc \uac19\uc774 \uc2e4\ud589\ud558\uba74 \ub429\ub2c8\ub2e4:<\/p>\n<pre><code>hcitool lescan<\/code><\/pre>\n<p>\uc704\ub294 \uc2a4\uce94\uc5d0\uc11c \ubc1c\uacac\ub41c \ub514\ubc14\uc774\uc2a4\uc5d0 \ub300\ud55c \uae30\ubcf8 \uc815\ubcf4\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4. \uadf8\ub7f0 \ub2e4\uc74c <strong>hcidump<\/strong> \ub3c4\uad6c\ub97c \uc0ac\uc6a9\ud558\uc5ec \uac80\uc0c9\ub41c \ube14\ub8e8\ud22c\uc2a4 \ub370\uc774\ud130\uc5d0 \ub300\ud55c \ubaa8\ub4e0 \uac83\uc744 \ud45c\uc2dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uc640 \uac19\uc740 \ub3c4\uad6c\ub294 \uc6d0\uc2dc \ub370\uc774\ud130\ub97c \ud45c\uc2dc\ud569\ub2c8\ub2e4:<\/p>\n<pre><code>hcidump --raw<\/code><\/pre>\n<p>The problem is that data is very raw. It is not something we can work with in its current form. We wouldn't be able to use it to make sense of iBeacon data.<\/p>\n<h3>\ub798\ub514\uc6b0\uc2a4 \ub124\ud2b8\uc6cd\uc2a4\uc758 \ub3c4\uad6c\ub85c \ud504\ub85c\uc138\uc2a4 \uac04\uc18c\ud654\ud558\uae30<\/h3>\n<p>\uc5ec\uae30\uc5d0\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/developer.radiusnetworks.com\/ibeacon\/idk\/ibeacon_scan\">\ub798\ub514\uc6b0\uc2a4 \ub124\ud2b8\uc6cc\ud06c<\/a> \uac00 \ub4f1\uc7a5\ud569\ub2c8\ub2e4. \ub77c\ub294 \uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc788\uc2b5\ub2c8\ub2e4. <strong>\uc544\uc774\ube44\ucf58 \uc2a4\uce94<\/strong> \ub97c \uc0ac\uc6a9\ud558\uc5ec <strong>hcitool<\/strong> \uadf8\ub9ac\uace0 <strong>hcidump<\/strong>\ub97c \ud30c\uc2f1\ud558\uc5ec \uae68\ub057\ud558\uac8c \uc815\ub9ac\ud588\uc2b5\ub2c8\ub2e4. \uc544\ub798\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre><code>#!\/bin\/bash# iBeacon Scan by Radius Networks# Modified by Nic Raboy at Couchbaseif [[ $1 == \"parse\" ]]; then    packet=\"\"    capturing=\"\"    count=0    while read line    do        count=$[count + 1]        if [ \"$capturing\" ]; then            if [[ $line =~ ^[0-9a-fA-F]{2} [0-9a-fA-F] ]]; then                packet=\"$packet $line\"            else                if [[ $packet =~ ^04 3E 2A 02 01 .{26} 02 01 .{14} 02 15 ]]; then                    UUID=`echo $packet | sed 's\/^.{69}(.{47}).*$\/1\/'`                    MAJOR=`echo $packet | sed 's\/^.{117}(.{5}).*$\/1\/'`                    MINOR=`echo $packet | sed 's\/^.{123}(.{5}).*$\/1\/'`                    POWER=`echo $packet | sed 's\/^.{129}(.{2}).*$\/1\/'`                    UUID=`echo $UUID | sed -e 's\/ \/\/g' -e 's\/^(.{8})(.{4})(.{4})(.{4})(.{12})$\/1-2-3-4-5\/'`                    MAJOR=`echo $MAJOR | sed 's\/ \/\/g'`                    MAJOR=`echo \"ibase=16; $MAJOR\" | bc`                    MINOR=`echo $MINOR | sed 's\/ \/\/g'`                    MINOR=`echo \"ibase=16; $MINOR\" | bc`                    POWER=`echo \"ibase=16; $POWER\" | bc`                    POWER=$[POWER - 256]                    # Launch Couchbase Java Application To Save Beacon Transaction                    java -jar iot-couchbase-project.jar $UUID $MAJOR $MINOR $POWER                fi                capturing=\"\"                packet=\"\"            fi        fi        if [ ! \"$capturing\" ]; then            if [[ $line =~ ^&gt; ]]; then                packet=`echo $line | sed 's\/^&gt;.(.*$)\/1\/'`                capturing=1            fi        fi    doneelse    sudo hcitool lescan --duplicates 1&gt;\/dev\/null &amp;    sudo hcidump --raw | .\/$0 parse $1fi<\/code><\/pre>\n<p>\uc774 \uc2a4\ud06c\ub9bd\ud2b8\ub294 \ud55c \uc904\uc744 \uc81c\uc678\ud558\uace0\ub294 Radius Networks\uc5d0\uc11c \uc791\uc131\ud588\uc74c\uc744 \ubc1d\ud799\ub2c8\ub2e4:<\/p>\n<pre><code>java -jar iot-couchbase-project.jar $UUID $MAJOR $MINOR $POWER<\/code><\/pre>\n<p>We're taking the information parsed by the script and piping it into our Java application to be saved. This script will run continuously until manually stopped.<img decoding=\"async\" src=\"\/wp-content\/original-assets\/2016\/april\/embed-couchbase-in-an-iot-project-for-data-synchronization\/iot-couchbase-ibeacon-example.gif\" \/>\uc704\ub294 \uc774 \ud504\ub85c\uc81d\ud2b8\uac00 \uc2e4\uc81c\ub85c \uc791\ub3d9\ud558\ub294 \uc0d8\ud50c \uc560\ub2c8\uba54\uc774\uc158\uc785\ub2c8\ub2e4.<\/p>\n<h2>\uacb0\ub860<\/h2>\n<p>That wasn't so bad right? You just created a simple Internet of Things (IoT) project that scans iBeacons and saves the information into Couchbase. The Couchbase Lite Java SDK is near identical to the Couchbase Lite Android SDK. With it we can take our Java applications to pretty much anything that supports Java.A full working example project can be seen on <a href=\"https:\/\/github.com\/couchbaselabs\/iot-beacon-example\">GitHub<\/a>.<\/object><\/object><\/object><\/object><\/object><\/object><\/code><\/p>","protected":false},"excerpt":{"rendered":"<p>The Internet of Things (IoT) is becoming all the rage lately. Being able to craft any mechanical device, for example watches, televisions, thermostats, and have them communicate over the internet is the modern age. In this modern age, one thing [&hellip;]<\/p>","protected":false},"author":63,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1815,1810,1818],"tags":[1627,1337],"ppma_author":[9032],"class_list":["post-2224","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-best-practices-and-tutorials","category-couchbase-mobile","category-java","tag-ibeacon","tag-iot"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Embed Couchbase in an IoT Project for Data Synchronization<\/title>\n<meta name=\"description\" content=\"See how to create a simple Internet of Things (IoT) project that scans iBeacons and saves the information into Couchbase.\" \/>\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\/embed-couchbase-in-an-iot-project-for-data-synchronization\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Embed Couchbase in an IoT Project for Data Synchronization\" \/>\n<meta property=\"og:description\" content=\"See how to create a simple Internet of Things (IoT) project that scans iBeacons and saves the information into Couchbase.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/embed-couchbase-in-an-iot-project-for-data-synchronization\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/thepolyglotdeveloper\" \/>\n<meta property=\"article:published_time\" content=\"2016-04-14T17:33:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-09T09:31:34+00:00\" \/>\n<meta name=\"author\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nraboy\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/\"},\"author\":{\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\"},\"headline\":\"Embed Couchbase in an IoT Project for Data Synchronization\",\"datePublished\":\"2016-04-14T17:33:58+00:00\",\"dateModified\":\"2023-09-09T09:31:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/\"},\"wordCount\":1504,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"ibeacon\",\"IoT\"],\"articleSection\":[\"Application Design\",\"Best Practices and Tutorials\",\"Couchbase Mobile\",\"Java\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/\",\"name\":\"Embed Couchbase in an IoT Project for Data Synchronization\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-04-14T17:33:58+00:00\",\"dateModified\":\"2023-09-09T09:31:34+00:00\",\"description\":\"See how to create a simple Internet of Things (IoT) project that scans iBeacons and saves the information into Couchbase.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/#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\/embed-couchbase-in-an-iot-project-for-data-synchronization\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Embed Couchbase in an IoT Project for Data Synchronization\"}]},{\"@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\/bb545ebe83bb2d12f91095811d0a72e1\",\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"caption\":\"Nic Raboy, Developer Advocate, Couchbase\"},\"description\":\"Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand.\",\"sameAs\":[\"https:\/\/www.thepolyglotdeveloper.com\",\"https:\/\/www.facebook.com\/thepolyglotdeveloper\",\"https:\/\/x.com\/nraboy\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/nic-raboy-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\ub370\uc774\ud130 \ub3d9\uae30\ud654\ub97c \uc704\ud574 IoT \ud504\ub85c\uc81d\ud2b8\uc5d0 Couchbase \ud3ec\ud568\ud558\uae30","description":"See how to create a simple Internet of Things (IoT) project that scans iBeacons and saves the information into Couchbase.","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\/embed-couchbase-in-an-iot-project-for-data-synchronization\/","og_locale":"ko_KR","og_type":"article","og_title":"Embed Couchbase in an IoT Project for Data Synchronization","og_description":"See how to create a simple Internet of Things (IoT) project that scans iBeacons and saves the information into Couchbase.","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/embed-couchbase-in-an-iot-project-for-data-synchronization\/","og_site_name":"The Couchbase Blog","article_author":"https:\/\/www.facebook.com\/thepolyglotdeveloper","article_published_time":"2016-04-14T17:33:58+00:00","article_modified_time":"2023-09-09T09:31:34+00:00","author":"Nic Raboy, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@nraboy","twitter_misc":{"Written by":"Nic Raboy, Developer Advocate, Couchbase","Est. reading time":"7\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/"},"author":{"name":"Nic Raboy, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1"},"headline":"Embed Couchbase in an IoT Project for Data Synchronization","datePublished":"2016-04-14T17:33:58+00:00","dateModified":"2023-09-09T09:31:34+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/"},"wordCount":1504,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["ibeacon","IoT"],"articleSection":["Application Design","Best Practices and Tutorials","Couchbase Mobile","Java"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/","url":"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/","name":"\ub370\uc774\ud130 \ub3d9\uae30\ud654\ub97c \uc704\ud574 IoT \ud504\ub85c\uc81d\ud2b8\uc5d0 Couchbase \ud3ec\ud568\ud558\uae30","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-04-14T17:33:58+00:00","dateModified":"2023-09-09T09:31:34+00:00","description":"See how to create a simple Internet of Things (IoT) project that scans iBeacons and saves the information into Couchbase.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/embed-couchbase-in-an-iot-project-for-data-synchronization\/#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\/embed-couchbase-in-an-iot-project-for-data-synchronization\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Embed Couchbase in an IoT Project for Data Synchronization"}]},{"@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\/bb545ebe83bb2d12f91095811d0a72e1","name":"Nic Raboy, \uac1c\ubc1c\uc790 \uc639\ud638\uc790, Couchbase","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354","url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","caption":"Nic Raboy, Developer Advocate, Couchbase"},"description":"\ub2c9 \ub77c\ubcf4\uc774\ub294 \ucd5c\uc2e0 \uc6f9 \ubc0f \ubaa8\ubc14\uc77c \uac1c\ubc1c \uae30\uc220\uc744 \uc639\ud638\ud558\ub294 \uc0ac\ub78c\uc785\ub2c8\ub2e4. \uadf8\ub294 Java, JavaScript, Golang \ubc0f Angular, NativeScript, Apache Cordova\uc640 \uac19\uc740 \ub2e4\uc591\ud55c \ud504\ub808\uc784\uc6cc\ud06c\uc5d0 \ub300\ud55c \uacbd\ud5d8\uc774 \uc788\uc2b5\ub2c8\ub2e4. Nic\uc740 \uc6f9 \ubc0f \ubaa8\ubc14\uc77c \uac1c\ubc1c\uc744 \ubcf4\ub2e4 \uc27d\uac8c \uc774\ud574\ud560 \uc218 \uc788\ub3c4\ub85d \uc790\uc2e0\uc758 \uac1c\ubc1c \uacbd\ud5d8\uc5d0 \ub300\ud574 \uae00\uc744 \uc4f0\uace0 \uc788\uc2b5\ub2c8\ub2e4.","sameAs":["https:\/\/www.thepolyglotdeveloper.com","https:\/\/www.facebook.com\/thepolyglotdeveloper","https:\/\/x.com\/nraboy"],"url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/nic-raboy-2\/"}]}},"authors":[{"term_id":9032,"user_id":63,"is_guest":0,"slug":"nic-raboy-2","display_name":"Nic Raboy, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","author_category":"","last_name":"Raboy","first_name":"Nic","job_title":"","user_url":"https:\/\/www.thepolyglotdeveloper.com","description":"\ub2c9 \ub77c\ubcf4\uc774\ub294 \ucd5c\uc2e0 \uc6f9 \ubc0f \ubaa8\ubc14\uc77c \uac1c\ubc1c \uae30\uc220\uc744 \uc639\ud638\ud558\ub294 \uc0ac\ub78c\uc785\ub2c8\ub2e4. \uadf8\ub294 Java, JavaScript, Golang \ubc0f Angular, NativeScript, Apache Cordova\uc640 \uac19\uc740 \ub2e4\uc591\ud55c \ud504\ub808\uc784\uc6cc\ud06c\uc5d0 \ub300\ud55c \uacbd\ud5d8\uc774 \uc788\uc2b5\ub2c8\ub2e4. Nic\uc740 \uc6f9 \ubc0f \ubaa8\ubc14\uc77c \uac1c\ubc1c\uc744 \ubcf4\ub2e4 \uc27d\uac8c \uc774\ud574\ud560 \uc218 \uc788\ub3c4\ub85d \uc790\uc2e0\uc758 \uac1c\ubc1c \uacbd\ud5d8\uc5d0 \ub300\ud574 \uae00\uc744 \uc4f0\uace0 \uc788\uc2b5\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/2224","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\/63"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=2224"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/2224\/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=2224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=2224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=2224"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=2224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}