{"id":3287,"date":"2017-04-24T10:30:54","date_gmt":"2017-04-24T17:30:54","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=3287"},"modified":"2025-06-13T23:43:26","modified_gmt":"2025-06-14T06:43:26","slug":"data-sync-on-ios-couchbase-mobile","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/data-sync-on-ios-couchbase-mobile\/","title":{"rendered":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ubaa8\ubc14\uc77c\uc744 \uc0ac\uc6a9\ud558\uc5ec iOS \uae30\uae30 \uac04 \ub370\uc774\ud130 \ub3d9\uae30\ud654"},"content":{"rendered":"<p>\uc774 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 Couchbase Mobile\uc744 \uc0ac\uc6a9\ud558\uc5ec iOS \uae30\uae30\uc5d0\uc11c \ub370\uc774\ud130 \ubcf5\uc81c\/\ub3d9\uae30\ud654\ub97c \uc2dc\uc791\ud558\ub294 \ubc29\ubc95\uc744 \uc0b4\ud3b4\ubd05\ub2c8\ub2e4. Couchbase \ubaa8\ubc14\uc77c \uc2a4\ud0dd\uc740 Couchbase \uc11c\ubc84, \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774 \ubc0f Couchbase Lite \uc784\ubca0\ub514\ub4dc NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub85c \uad6c\uc131\ub429\ub2c8\ub2e4. \uc774\uc804 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/couchbase-lite-embedded-in-ios-app-part1\/\">post<\/a>\uc5d0\uc11c Couchbase Lite\ub97c iOS \uc571\uc5d0\uc11c \ub3c5\ub9bd\ud615 \uc784\ubca0\ub514\ub4dc NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub85c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc124\uba85\ud588\uc2b5\ub2c8\ub2e4. \uc774 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 \ud478\uc2dc \ubc0f \ud480 \ubcf5\uc81c, \uc778\uc99d \ubc0f \uc561\uc138\uc2a4 \uc81c\uc5b4, \ucc44\ub110 \ubc0f \ub3d9\uae30\ud654 \uae30\ub2a5\uc758 \ud575\uc2ec \uac1c\ub150\uc744 \ubcf4\uc5ec\uc8fc\ub294 \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\uc640 \ud568\uaed8 \uc0d8\ud50c iOS \uc571\uc744 \uc548\ub0b4\ud569\ub2c8\ub2e4.<\/p>\n<p><!--more--><\/p>\n<p>\uc5ec\uae30\uc11c\ub294 Swift\uc758 iOS \uc571 \ucee8\ud14d\uc2a4\ud2b8\uc5d0\uc11c \ub370\uc774\ud130 \ub3d9\uae30\ud654\ub97c \uc0b4\ud3b4\ubcfc \uac83\uc774\uc9c0\ub9cc, \uc5ec\uae30\uc11c \uc124\uba85\ud558\ub294 \ubaa8\ub4e0 \ub0b4\uc6a9\uc740 \ub2e4\ub978 \ud50c\ub7ab\ud3fc(Android, iOS(ObjC), Xamarin)\uc5d0\uc11c \uac1c\ubc1c\ub41c \ubaa8\ubc14\uc77c \uc571\uc5d0\ub3c4 \ub3d9\uc77c\ud558\uac8c \uc801\uc6a9\ub429\ub2c8\ub2e4. \ud3b8\ucc28\ub294 \uc774\uc640 \uac19\uc774 \uba85\uc2dc\ub429\ub2c8\ub2e4.<\/p>\n<p>\ucc38\uace0: \ud604\uc7ac \ud504\ub85c\ub355\uc158 \ub9b4\ub9ac\uc2a4\uc778 Couchbase Mobile v1.4\uc5d0 \ub300\ud574 \ub17c\uc758\ud560 \uc608\uc815\uc785\ub2c8\ub2e4. \ucd5c\uc2e0 <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/2.0\/whatsnew.html?language=ios\">\uac1c\ubc1c\uc790 \ubbf8\ub9ac\ubcf4\uae30 <\/a>\uc0c8\ub86d\uace0 \ud765\ubbf8\ub85c\uc6b4 \uae30\ub2a5\uc774 \ub9ce\uc774 \ud3ec\ud568\ub41c Couchbase Mobile \ubc84\uc804 2.0\uc744 \ucd9c\uc2dc\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ubaa8\ubc14\uc77c<\/h2>\n<p>Couchbase \ubaa8\ubc14\uc77c \uc2a4\ud0dd\uc740 Couchbase \uc11c\ubc84, \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774 \ubc0f Couchbase Lite \uc784\ubca0\ub514\ub4dc NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub85c \uad6c\uc131\ub429\ub2c8\ub2e4. \uc774 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 NoSQL\uc758 \uae30\ubcf8 \uc0ac\ud56d\uc5d0 \ub300\ud574 \uc124\uba85\ud569\ub2c8\ub2e4. <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/couchbase-replication-and-sync\/\">\ub370\uc774\ud130 \ubcf5\uc81c \ubc0f \ub3d9\uae30\ud654<\/a> \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ubaa8\ubc14\uc77c\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uc5ec\uae30\uc11c\ub294 iOS \uc571 \uac1c\ubc1c, Swift\uc758 \uae30\ubcf8, NoSQL\uc758 \uae30\ubcf8\uc5d0 \uc775\uc219\ud558\uace0 Couchbase\uc5d0 \ub300\ud574 \uc5b4\ub290 \uc815\ub3c4 \uc774\ud574\ud558\uace0 \uc788\ub2e4\uace0 \uac00\uc815\ud558\uaca0\uc2b5\ub2c8\ub2e4. Couchbase Mobile\uc5d0 \ub300\ud574 \ub354 \uc790\uc138\ud788 \uc54c\uace0 \uc2f6\uc73c\uc2dc\ub2e4\uba74 \uc774 \uae00\uc758 \ub05d\ubd80\ubd84\uc5d0\uc11c \ub9ce\uc740 \ub9ac\uc18c\uc2a4\ub97c \ucc3e\uc544\ubcf4\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774<\/h2>\n<p>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\ub294 \uc7a5\uce58 \uac04\uc740 \ubb3c\ub860 \uc7a5\uce58\uc640 \ud074\ub77c\uc6b0\ub4dc \uac04\uc5d0 \ub370\uc774\ud130\ub97c \uc548\uc804\ud558\uac8c \ub3d9\uae30\ud654\ud558\ub294 \uc778\ud130\ub137 \uae30\ubc18 \ub3d9\uae30\ud654 \uba54\ucee4\ub2c8\uc998\uc785\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c\uc744 \uc81c\uacf5\ud558\ub294 \uc6f9 \uc778\ud130\ud398\uc774\uc2a4\ub97c \ub178\ucd9c\ud569\ub2c8\ub2e4.<\/p>\n<ul>\n<li>\ub514\ubc14\uc774\uc2a4 \ubc0f \ud074\ub77c\uc6b0\ub4dc \uac04 \ub370\uc774\ud130 \ub3d9\uae30\ud654<\/li>\n<li>\uc561\uc138\uc2a4 \uc81c\uc5b4<\/li>\n<li>\ub370\uc774\ud130 \uc720\ud6a8\uc131 \uac80\uc0ac<\/li>\n<\/ul>\n<p>\ubaa8\ub4e0 HTTP \ud074\ub77c\uc774\uc5b8\ud2b8\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc790\uc138\ud788 \uc0b4\ud3b4\ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c \ub0b4\uc6a9\uc744 \ud655\uc778\ud558\uc138\uc694. <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/querying-couchbase-sync-gateway-with-postman\/\">post<\/a> \uc778\ud130\ud398\uc774\uc2a4 \ucffc\ub9ac\ub97c \uc704\ud574 Postman\uc744 \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc124\uba85\ud569\ub2c8\ub2e4.<\/p>\n<p>\ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\ub97c \uc0ac\uc6a9\ud55c \ub370\uc774\ud130 \ubcf5\uc81c \ub610\ub294 \ub3d9\uae30\ud654\uc640 \uad00\ub828\ub41c \uc138 \uac00\uc9c0 \uc8fc\uc694 \uac1c\ub150\uc774 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>\ucc44\ub110<\/h3>\n<p>\ucc44\ub110\uc740 \ud0dc\uadf8\uc640 \uba54\uc2dc\uc9c0 \ub300\uae30\uc5f4\uc758 \uc870\ud569\uc73c\ub85c \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ubaa8\ub4e0 \ubb38\uc11c\ub294 \ud558\ub098 \uc774\uc0c1\uc758 \ucc44\ub110\uc5d0 \ud560\ub2f9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ubb38\uc11c\ub294 \ubb38\uc11c\uc5d0 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\ub294 \uc0ac\uc6a9\uc790\ub97c \uc9c0\uc815\ud558\ub294 \ucc44\ub110\uc5d0 \ud560\ub2f9\ub429\ub2c8\ub2e4. \uc0ac\uc6a9\uc790\ub294 \ud558\ub098 \uc774\uc0c1\uc758 \ucc44\ub110\uc5d0 \ub300\ud55c \uc561\uc138\uc2a4 \uad8c\ud55c\uc774 \ubd80\uc5ec\ub418\uba70 \ud574\ub2f9 \ucc44\ub110\uc5d0 \ud560\ub2f9\ub41c \ubb38\uc11c\ub9cc \uc77d\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc790\uc138\ud55c \ub0b4\uc6a9\uc740\u00a0<a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/guides\/sync-gateway\/channels\/index.html?language=ios\">\ucc44\ub110\uc5d0 \ub300\ud55c \ubb38\uc11c\ub97c \ucc38\uc870\ud558\uc138\uc694.<\/a><\/p>\n<p>&nbsp;<\/p>\n<h3>\ub3d9\uae30\ud654 \uae30\ub2a5<\/h3>\n<p>\ub3d9\uae30\ud654 \ud568\uc218\ub294 \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\uc5d0\uc11c \uc2e4\ud589\ub418\ub294 JavaScript \ud568\uc218\uc785\ub2c8\ub2e4. \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc0c8 \ubb38\uc11c, \uc218\uc815\ubcf8 \ub610\ub294 \uc0ad\uc81c\uac00 \ucd94\uac00\ub420 \ub54c\ub9c8\ub2e4 \ub3d9\uae30\ud654 \ud568\uc218\uac00 \ud638\ucd9c\ub429\ub2c8\ub2e4. \ub3d9\uae30\ud654 \ud568\uc218\ub294 \ub2e4\uc74c\uc744 \ub2f4\ub2f9\ud569\ub2c8\ub2e4.<\/p>\n<ul>\n<li>\u00a0\ubb38\uc11c \uc720\ud6a8\uc131 \uac80\uc0ac,<\/li>\n<li>\ubcc0\uacbd \uc2b9\uc778\ud558\uae30<\/li>\n<li>\ucc44\ub110\uc5d0 \ubb38\uc11c \ud560\ub2f9 \ubc0f<\/li>\n<li>\uc0ac\uc6a9\uc790\uc5d0\uac8c \ucc44\ub110\uc5d0 \ub300\ud55c \uc561\uc138\uc2a4 \uad8c\ud55c\uc744 \ubd80\uc5ec\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n<p>\uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \ub2e4\uc74c\uc744 \ud655\uc778\ud558\uc138\uc694. <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/guides\/sync-gateway\/sync-function-api-guide\/index.html?language=ios\">\ub3d9\uae30\ud654 \uae30\ub2a5\uc5d0 \ub300\ud55c \ubb38\uc11c<\/a>\u00a0.<\/p>\n<p>&nbsp;<\/p>\n<h3>\ubcf5\uc81c<\/h3>\n<p>\ubcf5\uc81c \ub610\ub294 \ub3d9\uae30\ud654\ub294 \ub85c\uceec \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 \uc6d0\uaca9 \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774 \uac04\uc758 \ubcc0\uacbd \uc0ac\ud56d\uc744 \ub3d9\uae30\ud654\ud558\ub294 \ud504\ub85c\uc138\uc2a4\uc785\ub2c8\ub2e4. \ub450 \uac00\uc9c0 \uc885\ub958\uac00 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>\ud478\uc2dc \ubcf5\uc81c\ub294 \ub85c\uceec \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \uc6d0\uaca9 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub85c \ubcc0\uacbd \uc0ac\ud56d\uc744 \ud478\uc2dc\ud558\ub294 \ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/li>\n<li>\ud480 \ubcf5\uc81c\ub294 \uc6d0\uaca9 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \ub85c\uceec \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub85c \ubcc0\uacbd \uc0ac\ud56d\uc744 \uac00\uc838\uc624\ub294 \ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/li>\n<\/ul>\n<p>\uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \ub2e4\uc74c\uc744 \ud655\uc778\ud558\uc138\uc694. <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/current\/guides\/couchbase-lite\/native-api\/replication\/index.html?language=swift\">\ubcf5\uc81c \uad00\ub828 \ubb38\uc11c<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<h2>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774 \uc124\uce58<\/h2>\n<p>\ub2e4\uc74c\uc744 \ub530\ub974\uc2ed\uc2dc\uc624.<a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/installation\/sync-gateway\/index.html?language=ios\">\u00a0\uc124\uce58 \uac00\uc774\ub4dc<\/a>\u00a0\ub97c \ud074\ub9ad\ud558\uc5ec \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\ub97c \uc124\uce58\ud569\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c \uad6c\uc131 \ud30c\uc77c\uc744 \uc0ac\uc6a9\ud558\uc5ec \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\ub97c \uc2dc\uc791\ud569\ub2c8\ub2e4. \uad6c\uc131 \ud30c\uc77c\uc758 \uc815\ud655\ud55c \uc704\uce58\ub294 \ud50c\ub7ab\ud3fc\uc5d0 \ub530\ub77c \ub2e4\ub985\ub2c8\ub2e4. \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc124\uce58 \uac00\uc774\ub4dc\ub97c \ucc38\uc870\ud558\uc138\uc694.<\/p>\n<h3>\ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774 \uad6c\uc131 \ud30c\uc77c<\/h3>\n<pre class=\"lang:js decode:true\">{\r\n  \"log\": [\"*\"],\r\n  \"CORS\": {\r\n     \"Origin\":[\"*\"]\r\n  },\r\n  \"databases\": {\r\n    \"demo\": {\r\n      \"server\": \"walrus:\",\r\n      \"bucket\": \"default\",\r\n      \"users\": { \r\n        \"GUEST\": { \"disabled\": true, \"admin_channels\": [\"*\"] } ,\r\n        \"joe\": {\"password\":\"password\" ,\"disabled\": false, \"admin_channels\":[\"_public\",\"_joe\"]} ,\r\n        \"jane\":{\"password\":\"password\" ,\"disabled\": false, \"admin_channels\":[\"_public\",\"_jane\"]}\r\n      },\r\n      \"unsupported\": {\r\n        \"user_views\": {\r\n          \"enabled\":true\r\n        }\r\n      },\r\n    \r\n  \r\n  \"sync\": \r\n  `\r\n      \r\n      function (doc, oldDoc){\r\n     \r\n\r\n        \/\/ Check if doc is being deleted\r\n        if (doc._deleted == undefined) {\r\n          \/\/ Validate current version has relevant keys\r\n          validateDocument(doc);\r\n        }\r\n        else {\r\n          \/\/ Validate  old document has relevant keys\r\n          validateDocument(oldDoc);\r\n        }\r\n\r\n        var docOwner = (doc._deleted == undefined) ? doc.owner : oldDoc.owner;\r\n    \r\n\r\n        var publicChannel = \"_public\";\r\n\r\n        var privateChannel = \"_\"+docOwner;\r\n\r\n        \/\/ Grant user read access to public channels and user's own channel\r\n        access(docOwner,[publicChannel,privateChannel]);\r\n\r\n\r\n        \/\/ Check if this was a doc update (as opposed to a doc create or delete)\r\n        if (doc._deleted == undefined &amp;&amp; oldDoc != null &amp;&amp; oldDoc._deleted == undefined) {\r\n\r\n            if (doc.tag != oldDoc.tag) {\r\n                 throw({forbidden: \"Cannot change tag of document\"});\r\n         \r\n            }\r\n        }\r\n\r\n\r\n        \/\/ Check if new\/updated document is tagged as \"public\" \r\n        var docTag =  (doc._deleted == undefined) ? doc.tag : oldDoc.tag;\r\n    \r\n        if (doc._deleted == undefined) {\r\n          if (docTag == \"public\") {\r\n           \r\n            \/\/ All documents tagged public go into \"public\" channel which to open to all\r\n            channel(publicChannel);\r\n         \r\n        }\r\n        else {\r\n\r\n            \/\/ Ensure that the owner of document is the user making the request\r\n            requireUser(docOwner);\r\n\r\n            \/\/ All non-public tagged docs go into a user user specific channel\r\n            channel(privateChannel);\r\n\r\n         }\r\n       }\r\n       else {\r\n          channel(doc.channels);\r\n       }\r\n\r\n\r\n        function validateDocument (doc) {\r\n           \/\/ Basic validation of document\r\n          if (!doc.tag ) {\r\n            \/\/ Every doc must include a tag\r\n            throw({forbidden: \"Invalid document type: Tag not provided\" + doc.tag});\r\n          }\r\n\r\n           if (!doc.owner) {\r\n            \/\/ Every doc must include a owner\r\n            throw({forbidden: \"Invalid document type: Owner not provided\" + doc.owner});\r\n          \r\n          }\r\n        }\r\n      }\r\n  \r\n\r\n`\r\n    }\r\n  }\r\n}<\/pre>\n<p>\uad6c\uc131 \ud30c\uc77c\uc5d0\uc11c \uc8fc\ubaa9\ud574\uc57c \ud560 \uba87 \uac00\uc9c0 \uc8fc\uc694 \uc0ac\ud56d\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>8\ubc88\uc9f8 \uc904: '\uc11c\ubc84'\uc758 'walrus:' \uac12\uc740 \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\uac00 \ub370\uc774\ud130\ub97c \uc778\uba54\ubaa8\ub9ac\uc5d0 \uc720\uc9c0\ud574\uc57c \ud558\uba70 Couchbase \uc11c\ubc84\uc5d0 \uc758\ud574 \ubc31\uc5c5\ub418\uc9c0 \uc54a\uc74c\uc744 \ub098\ud0c0\ub0c5\ub2c8\ub2e4.<\/li>\n<li>11\uc904: \uac8c\uc2a4\ud2b8 \uc0ac\uc6a9\uc790 \uc561\uc138\uc2a4\uac00 \ube44\ud65c\uc131\ud654\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/li>\n<li>12-13\uc904: \uc2dc\uc2a4\ud15c\uc5d0 \"Jane\"\uacfc \"Joe\"\ub77c\ub294 \ub450 \uba85\uc758 \uc0ac\uc6a9\uc790\uac00 \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \ub450 \uc0ac\uc6a9\uc790 \ubaa8\ub450 \"_public\" \ucc44\ub110\uc5d0 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\uc73c\uba70 \uac01\uac01 \uc790\uc2e0\uc758 \ube44\uacf5\uac1c \ucc44\ub110\uc5d0 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<li>22-100 \ub77c\uc778: \ub2e4\uc74c\uc744 \uc218\ud589\ud558\ub294 \uac04\ub2e8\ud55c \ub3d9\uae30\ud654 \uae30\ub2a5\n<ol>\n<li>29-36\uc904 : \ubb38\uc11c\uc5d0 \uc0ac\uc6a9\uc790 \uc815\uc758 '\ud0dc\uadf8' \ubc0f '\uc18c\uc720\uc790' \uc18d\uc131\uc774 \ud3ec\ud568\ub418\uc5b4 \uc788\ub294\uc9c0 \ud655\uc778\ud558\uae30 \uc704\ud55c \ubb38\uc11c \uc720\ud6a8\uc131 \uac80\uc0ac\n<ol>\n<li>\"\ud0dc\uadf8\" \uc18d\uc131\uc740 \ubb38\uc11c\uac00 \ubaa8\ub4e0 \uc0ac\uc6a9\uc790\uc5d0\uac8c \uacf5\uac1c\uc801\uc73c\ub85c \uc0ac\uc6a9 \uac00\ub2a5\ud55c\uc9c0 \ub610\ub294 \uc0ac\uc6a9\uc790\uc5d0\uac8c \ube44\uacf5\uac1c\ub85c \uc81c\uacf5\ub418\ub294\uc9c0 \uc9c0\uc815\ud558\ub294 \ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/li>\n<li>'\uc18c\uc720\uc790' \uc18d\uc131\uc740 \ubb38\uc11c\uac00 \ubaa8\ub4e0 \uc0ac\uc6a9\uc790\uc5d0\uac8c \uacf5\uac1c\uc801\uc73c\ub85c \uc0ac\uc6a9 \uac00\ub2a5\ud55c\uc9c0 \ub610\ub294 \uc0ac\uc6a9\uc790\uc5d0\uac8c \ube44\uacf5\uac1c\ub85c \uc81c\uacf5\ub418\ub294\uc9c0 \uc9c0\uc815\ud558\ub294 \ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/li>\n<\/ol>\n<\/li>\n<li>46\uc904: \uc0ac\uc6a9\uc790\uc5d0\uac8c '_\uacf5\uac1c' \ubc0f \ube44\uacf5\uac1c \ucc44\ub110(\ubb38\uc11c \uc18c\uc720\uc790\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2dd\ubcc4\ub428)\uc5d0 \ub300\ud55c \uc561\uc138\uc2a4 \uad8c\ud55c\uc744 \ubd80\uc5ec\ud569\ub2c8\ub2e4.<\/li>\n<li>51-56\uc904 : \ubb38\uc11c \uc5c5\ub370\uc774\ud2b8\uc778 \uacbd\uc6b0 \"\ud0dc\uadf8\" \uc18d\uc131\uc774 \uc5ec\ub7ec \uc218\uc815\ubcf8\uc5d0\uc11c \ubcc0\uacbd\ub418\uc9c0 \uc54a\uc558\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4.<\/li>\n<li>66\uc904: '\uacf5\uac1c' \ud0dc\uadf8\uac00 \uc788\ub294 \ubaa8\ub4e0 \ubb38\uc11c\ub97c '_public' \ucc44\ub110\uc5d0 \ud560\ub2f9\ud569\ub2c8\ub2e4.<\/li>\n<li>72\uc904: '\uacf5\uac1c' \uc774\uc678\uc758 \ud0dc\uadf8\uac00 \uc788\ub294 \ubaa8\ub4e0 \ubb38\uc11c\ub97c \ube44\uacf5\uac1c \ucc44\ub110\uc5d0 \ud560\ub2f9\ud569\ub2c8\ub2e4.\n<ol>\n<li>75\ubc88 \ub77c\uc778: \ube44\uacf5\uac1c \ucc44\ub110 \ubb38\uc11c\uc758 \uacbd\uc6b0 \uba3c\uc800 \ubb38\uc11c \uc18c\uc720\uc790\uac00 \uc694\uccad\uc744 \ud55c \uc0ac\ub78c\uc778\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<h2>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub77c\uc774\ud2b8<\/h2>\n<p>Couchbase Lite\ub294 \uae30\uae30\uc5d0\uc11c \uc2e4\ud589\ub418\ub294 \uc784\ubca0\ub514\ub4dc NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc785\ub2c8\ub2e4. Couchbase Lite\ub294 \uc5ec\ub7ec \ubc30\ud3ec \ubaa8\ub4dc\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Couchbase Lite \uc2dc\uc791\ud558\uae30 \u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/ko\/couchbase-lite-embedded-in-ios-app-part1\/\">post<\/a> \uc5d0\uc11c \ub3c5\ub9bd\ud615 \ubc30\ud3ec \ubaa8\ub4dc\uc5d0 \ub300\ud574 \uc124\uba85\ud569\ub2c8\ub2e4. \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub77c\uc774\ud2b8\ub294 \uc5ec\ub7ec \uae30\uae30\uc5d0\uc11c \ub370\uc774\ud130\ub97c \ub3d9\uae30\ud654\ud560 \uc218 \uc788\ub294 \uc6d0\uaca9 \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\uc640 \ud568\uaed8 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\ub97c \uc0ac\uc6a9\ud55c \ubc30\ud3ec \ubaa8\ub4dc\uc5d0 \ub300\ud574 \uc124\uba85\ud569\ub2c8\ub2e4.<\/p>\n<p>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub77c\uc774\ud2b8 \ud504\ub808\uc784\uc6cc\ud06c\ub97c iOS \uc571\uc5d0 \ud1b5\ud569\ud560 \uc218 \uc788\ub294 \ub2e4\uc591\ud55c \uc635\uc158\uc774 \uc788\uc2b5\ub2c8\ub2e4. Couchbase \ubaa8\ubc14\uc77c\uc744 \ud655\uc778\ud558\uc138\uc694. <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/installation\/ios\/index.html?language=ios\">\uc2dc\uc791\ud558\uae30 \uac00\uc774\ub4dc<\/a>\u00a0\ub97c \ud074\ub9ad\ud574 \ub2e4\uc591\ud55c \ud1b5\ud569 \uc635\uc158\uc744 \ud655\uc778\ud558\uc138\uc694.<\/p>\n<h3>\ub124\uc774\ud2f0\ube0c API<\/h3>\n<p>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub77c\uc774\ud2b8\ub294 \uc571\uc774 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ud50c\ub7ab\ud3fc\uacfc \uc27d\uac8c \uc778\ud130\ud398\uc774\uc2a4\ud560 \uc218 \uc788\ub294 iOS, \uc548\ub4dc\ub85c\uc774\ub4dc, \uc708\ub3c4\uc6b0\uc6a9 \ub124\uc774\ud2f0\ube0c API\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc571 \uac1c\ubc1c\uc790\ub294 Couchbase Lite \uc784\ubca0\ub514\ub4dc \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \ub0b4\ubd80\uc5d0 \ub300\ud574 \uac71\uc815\ud560 \ud544\uc694 \uc5c6\uc774 \uba4b\uc9c4 \uc571 \uad6c\ucd95\uc5d0\ub9cc \uc9d1\uc911\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uae30\ubcf8 API\ub97c \uc0ac\uc6a9\ud558\uba74 \ub2e4\ub978 \ud50c\ub7ab\ud3fc \ud504\ub808\uc784\uc6cc\ud06c\/\uc11c\ube0c\uc2dc\uc2a4\ud15c\uacfc \uc0c1\ud638 \uc791\uc6a9\ud560 \ub54c\uc640 \ub9c8\ucc2c\uac00\uc9c0\ub85c Couchbase Lite \ud504\ub808\uc784\uc6cc\ud06c\uc640 \uc0c1\ud638 \uc791\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 \ub2e4\uc2dc \ud55c \ubc88 Couchbase Mobile v1.4\uc5d0 \ub300\ud574 \uc124\uba85\ud558\uaca0\uc2b5\ub2c8\ub2e4. \uc804\uccb4 API \ubaa9\ub85d\uc740 Couchbase\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/references\/couchbase-lite\/couchbase-lite\/index.html\">\uac1c\ubc1c\uc790<\/a> \uc0ac\uc774\ud2b8.<\/p>\n<h2>iOS \uc571 \ub370\ubaa8<\/h2>\n<p>\uc5ec\uae30\uc5d0\uc11c \ub370\ubaa8 Xcode \ud504\ub85c\uc81d\ud2b8\ub97c \ub2e4\uc6b4\ub85c\ub4dc\ud558\uc138\uc694.\u00a0<a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-lite-ios-starterapp\">\uae43\ud5c8\ube0c \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac<\/a>\u00a0\ub97c \ud074\ub9ad\ud558\uace0 '\ub3d9\uae30\ud654 \uc9c0\uc6d0' \ube0c\ub79c\uce58\ub85c \uc804\ud658\ud569\ub2c8\ub2e4. \uc774 \ube14\ub85c\uadf8\uc758 \ub098\uba38\uc9c0 \ubd80\ubd84\uc5d0\uc11c\ub294 \uc774 \uc571\uc744 \uc608\uc2dc\ub85c \uc0ac\uc6a9\ud558\uaca0\uc2b5\ub2c8\ub2e4. \uc774 \uc571\uc740 Cocoapods\ub97c \uc0ac\uc6a9\ud558\uc5ec Couchbase Lite \ud504\ub808\uc784\uc6cc\ud06c\ub97c \ud1b5\ud569\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:default decode:true\">git clone git@github.com:couchbaselabs\/couchbase-lite-ios-standalone-sampleapp.git\r\ngit checkout syncsupport<\/pre>\n<p>&nbsp;<\/p>\n<div id=\"attachment_3293\" style=\"width: 291px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3293\" class=\"size-full wp-image-3293\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/demo_recording_short.gif\" alt=\"\" width=\"281\" height=\"510\" \/><p id=\"caption-attachment-3293\" class=\"wp-caption-text\">\uc0ac\uc6a9\uc790 \uac04 \ubb38\uc11c \ub3d9\uae30\ud654<\/p><\/div>\n<ol>\n<li>\uc571\uc744 \ube4c\ub4dc\ud558\uace0 \uc2e4\ud589\ud569\ub2c8\ub2e4. \ub85c\uadf8\uc778 \uc54c\ub9bc\uc774 \ud45c\uc2dc\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/li>\n<li>\uc0ac\uc6a9\uc790 \"jane\"\uacfc \ube44\ubc00\ubc88\ud638 \"password\"\ub97c \uc785\ub825\ud569\ub2c8\ub2e4. \uc774 \uc0ac\uc6a9\uc790\ub294 \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774 \uad6c\uc131 \ud30c\uc77c\uc5d0\uc11c \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/li>\n<li>\uc624\ub978\ucabd \uc0c1\ub2e8\uc758 '+' \ubc84\ud2bc\uc744 \ud0ed\ud558\uc5ec \uccab \ubc88\uc9f8 \ubb38\uc11c\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4.\n<ol>\n<li>\ubb38\uc11c \uc774\ub984\uacfc \ud55c \uc904 \uc124\uba85\uc744 \uc785\ub825\ud569\ub2c8\ub2e4.<\/li>\n<li>\"\ube44\uacf5\uac1c\" \ud0dc\uadf8\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/li>\n<li>\ud478\uc2dc \ub9ac\ud50c\ub9ac\ucf00\uc774\ud130\uac00 \ubb38\uc11c\ub97c \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\ub85c \ud478\uc2dc\ud558\uace0 \ub3d9\uae30\ud654 \uae30\ub2a5\uc5d0 \uc758\ud574 \ucc98\ub9ac\ub429\ub2c8\ub2e4. \ub3d9\uae30\ud654 \uae30\ub2a5\uc740 \ud0dc\uadf8\ub97c \uae30\ubc18\uc73c\ub85c \ubb38\uc11c\ub97c \uc0ac\uc6a9\uc790\uc758 \ube44\uacf5\uac1c \ucc44\ub110\uc5d0 \ud560\ub2f9\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n<\/li>\n<li>\uc624\ub978\ucabd \uc0c1\ub2e8\uc758 '+' \ubc84\ud2bc\uc744 \ud0ed\ud558\uc5ec \ub450 \ubc88\uc9f8 \ubb38\uc11c\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4.\n<ol>\n<li>\ubb38\uc11c \uc774\ub984\uacfc \ud55c \uc904 \uc124\uba85\uc744 \uc785\ub825\ud569\ub2c8\ub2e4.<\/li>\n<li>\"\uacf5\uac1c\" \ud0dc\uadf8\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/li>\n<li>\ud478\uc2dc \ub9ac\ud50c\ub9ac\ucf00\uc774\ud130\uac00 \ubb38\uc11c\ub97c \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\ub85c \ud478\uc2dc\ud558\uace0 \ub3d9\uae30\ud654 \uae30\ub2a5\uc5d0 \uc758\ud574 \ucc98\ub9ac\ub429\ub2c8\ub2e4. \ub3d9\uae30\ud654 \ud568\uc218\ub294 \uacf5\uac1c \ud0dc\uadf8\ub97c \uae30\ubc18\uc73c\ub85c \ubb38\uc11c\ub97c \uacf5\uac1c \ucc44\ub110\uc5d0 \ud560\ub2f9\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n<\/li>\n<li>\uc774\uc81c Jane \uc744 \"\ub85c\uadf8\uc624\ud504\"\ud569\ub2c8\ub2e4. \ub85c\uadf8\uc778 \uc54c\ub9bc\uc774 \ub2e4\uc2dc \ud45c\uc2dc\ub429\ub2c8\ub2e4.<\/li>\n<li>\uc0ac\uc6a9\uc790 \"joe\"\uc640 \ube44\ubc00\ubc88\ud638 \"password\"\ub97c \uc785\ub825\ud569\ub2c8\ub2e4. \uc774 \uc0ac\uc6a9\uc790\ub294 \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774 \uad6c\uc131 \ud30c\uc77c\uc5d0\uc11c\ub3c4 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/li>\n<li>Jane\uc774 \ub9cc\ub4e0 \uacf5\uac1c \ubb38\uc11c\uac00 \ub098\uc5f4\ub429\ub2c8\ub2e4.\n<ol>\n<li>\u00a0\uadf8 \ub4a4\uc5d0\uc11c \ud480 \ub9ac\ud50c\ub9ac\ucf00\uc774\ud130\ub294 \uc870\uc758 \ube44\uacf5\uac1c \ucc44\ub110\uacfc \uacf5\uac1c \ucc44\ub110\uc5d0\uc11c \ubaa8\ub4e0 \ubb38\uc11c\ub97c \uac00\uc838\uc635\ub2c8\ub2e4. Jane\uc774 \ub9cc\ub4e0 \uacf5\uac1c \ubb38\uc11c\ub294 \uac00\uc838\uc624\uae30\ub429\ub2c8\ub2e4. \uadf8\ub7ec\ub098 Joe\ub294 Jane\uc758 \ube44\uacf5\uac1c \ucc44\ub110\uc5d0 \uc561\uc138\uc2a4\ud560 \uc218 \uc5c6\uc73c\ubbc0\ub85c Jane\uc774 \ub9cc\ub4e0 \ube44\uacf5\uac1c \ubb38\uc11c\ub294 \uac00\uc838\uc624\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>\ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\uc758 \uc0c1\ud0dc\ub97c \ud655\uc778\ud558\ub824\uba74 Postman \ub610\ub294 HTTP \ud074\ub77c\uc774\uc5b8\ud2b8\ub97c \uc0ac\uc6a9\ud558\uc5ec \uad00\ub9ac\uc790 REST \uc778\ud130\ud398\uc774\uc2a4\uc5d0 \ucffc\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c\uc740 \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\uc5d0 \ub300\ud55c CURL \uc694\uccad\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:default decode:true\">curl -X GET \\\r\n 'https:\/\/localhost:4985\/demo\/_all_docs?access=false&amp;channels=false&amp;include_docs=true' \\\r\n -H 'accept: application\/json' \\\r\n -H 'cache-control: no-cache' \\\r\n -H 'content-type: application\/json'<\/pre>\n<p>\ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\uc758 \uc751\ub2f5\uc5d0\ub294 \uacf5\uac1c \ubc0f Jane\uc758 \ube44\uacf5\uac1c \ucc44\ub110\uc5d0 \uac01\uac01 \ud560\ub2f9\ub41c \ub450 \uac1c\uc758 \ubb38\uc11c\uac00 \ud45c\uc2dc\ub429\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:default decode:true\">{\r\n  \"rows\": [\r\n    {\r\n      \"key\": \"-6gCouN6jj0ScYgpMD7Qj1a\",\r\n      \"id\": \"-6gCouN6jj0ScYgpMD7Qj1a\",\r\n      \"value\": {\r\n        \"rev\": \"1-dfa6d453a1515ee3dd64012ccaf53046\",\r\n        \"channels\": [\r\n          \"_jane\"\r\n        ]\r\n      },\r\n      \"doc\": {\r\n        \"_id\": \"-6gCouN6jj0ScYgpMD7Qj1a\",\r\n        \"_rev\": \"1-dfa6d453a1515ee3dd64012ccaf53046\",\r\n        \"name\": \"doc101\",\r\n        \"overview\": \"This is a private doc from Jane\",\r\n        \"owner\": \"jane\",\r\n        \"tag\": \"private\"\r\n      }\r\n    },\r\n    {\r\n      \"key\": \"-A2wR44pAFCdu1Yufx14_1S\",\r\n      \"id\": \"-A2wR44pAFCdu1Yufx14_1S\",\r\n      \"value\": {\r\n        \"rev\": \"1-1a8cd0ea3b7574cf6f7ba4a10152a466\",\r\n        \"channels\": [\r\n          \"_public\"\r\n        ]\r\n      },\r\n      \"doc\": {\r\n        \"_id\": \"-A2wR44pAFCdu1Yufx14_1S\",\r\n        \"_rev\": \"1-1a8cd0ea3b7574cf6f7ba4a10152a466\",\r\n        \"name\": \"doc102\",\r\n        \"overview\": \"This is a public doc shared by Jane\",\r\n        \"owner\": \"jane\",\r\n        \"tag\": \"public\"\r\n      }\r\n    }\r\n  ],\r\n  \"total_rows\": 2,\r\n  \"update_seq\": 5\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h3>\ucf54\ub4dc \uc0b4\ud3b4\ubcf4\uae30<\/h3>\n<p>\uc774\uc81c iOS \ub370\ubaa8 \uc571\uc758 \uad00\ub828 \ucf54\ub4dc \uc2a4\ub2c8\ud3ab\uc744 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<h4><strong>\uc0ac\uc6a9\uc790\ubcc4 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5f4\uae30\/\uc0dd\uc131\u00a0<\/strong><\/h4>\n<p>\uc5f4\uae30 <em>DocListTableViewController.swift<\/em> \ud30c\uc77c\uc744 \ucc3e\uc544 <em>\uc0ac\uc6a9\uc790\uc5d0 \ub300\ud55c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5f4\uae30<\/em>\u00a0\ud568\uc218\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:swift decode:true\">\u00a0do {\r\n\u00a0 \u00a0 \u00a0 \u00a0\/\/ 1: Set Database Options\r\n\u00a0 \u00a0 \u00a0 \u00a0let options = CBLDatabaseOptions()\r\n\u00a0 \u00a0 \u00a0 \u00a0options.storageType\u00a0 = kCBLSQLiteStorage\r\n\u00a0 \u00a0 \u00a0 \u00a0options.create = true\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0 \u00a0\/\/ 2: Create a DB for logged in user if it does not exist else return handle to existing one\r\n\u00a0 \u00a0 \u00a0 \u00a0self.db\u00a0 = try cbManager.openDatabaseNamed(user.lowercased(), with: options)\r\n\u00a0 \u00a0 \u00a0 \u00a0self.showAlertWithTitle(NSLocalizedString(\"Success!\", comment: \"\"), message: NSLocalizedString(\"Database \\(user) was opened succesfully at path \\(CBLManager.defaultDirectory())\", comment: \"\"))\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0  \/\/ 3. Start replication with remote Sync Gateway\r\n\u00a0 \u00a0 \u00a0\u00a0 startDatabaseReplicationForUser(user, password: password)\r\n\u00a0 \u00a0 \u00a0 \u00a0return true\r\n\u00a0 \u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 \u00a0 \u00a0 catch\u00a0 {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ handle error\u00a0\u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0 \u00a0 }\r\n<\/pre>\n<ol>\n<li>\ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 \uc5f0\uacb0\ud560 \uc635\uc158\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4. CBLDatabaseOptions \ud074\ub798\uc2a4\uc5d0\uc11c \ub2e4\ub978 \uc635\uc158\uc744 \uc0b4\ud3b4\ubcf4\uc138\uc694.<\/li>\n<li>\ud604\uc7ac \uc0ac\uc6a9\uc790\uc758 \uc774\ub984\uc73c\ub85c \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \ub9cc\ub4ed\ub2c8\ub2e4. \uc774\ub807\uac8c \ud558\uba74 \uc571\uc758 \ubaa8\ub4e0 \uc0ac\uc6a9\uc790\uac00 \uc790\uc2e0\ub9cc\uc758 \ub85c\uceec \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ubcf5\uc0ac\ubcf8\uc744 \uac16\uac8c \ub429\ub2c8\ub2e4. \ud574\ub2f9 \uc774\ub984\uc758 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uac00 \uc874\uc7ac\ud558\uba74 \uae30\uc874 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \ub300\ud55c \ud578\ub4e4\uc774 \ubc18\ud658\ub418\uace0 \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74 \uc0c8 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uac00 \uc0dd\uc131\ub429\ub2c8\ub2e4. \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc774\ub984\uc740 \uc18c\ubb38\uc790\ub85c \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4. \uc131\uacf5\ud558\uba74 \ub85c\uceec \ub370\uc774\ud130\ubca0\uc774\uc2a4\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc73c\uba74 \uc0c8 \ub85c\uceec \ub370\uc774\ud130\ubca0\uc774\uc2a4\uac00 \ub9cc\ub4e4\uc5b4\uc9d1\ub2c8\ub2e4. \uae30\ubcf8\uc801\uc73c\ub85c \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub294 \uae30\ubcf8 \uacbd\ub85c(\/\ub3c4\uc11c\uad00\/\uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8 \uc9c0\uc6d0)\uc5d0 \ub9cc\ub4e4\uc5b4\uc9d1\ub2c8\ub2e4. \uc778\uc2a4\ud134\uc2a4\ud654\ud560 \ub54c \ub2e4\ub978 \ub514\ub809\ud130\ub9ac\ub97c \uc9c0\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/references\/couchbase-lite\/couchbase-lite\/manager\/manager\/index.html\">CBLManager<\/a> \ud074\ub798\uc2a4.<\/li>\n<li>\uc8fc\uc5b4\uc9c4 \uc0ac\uc6a9\uc790 \uc790\uaca9 \uc99d\uba85\uc5d0 \ub300\ud574 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ubcf5\uc81c \ud504\ub85c\uc138\uc2a4\ub97c \uc2dc\uc791\ud569\ub2c8\ub2e4. \ub2e4\uc74c \uc139\uc158\uc5d0\uc11c \ubcf5\uc81c \ucf54\ub4dc\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc124\uba85\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n<h4><strong>\ubb38\uc11c \uac00\uc838\uc624\uae30<\/strong><\/h4>\n<p>D<em>ocListTableViewController.swif<\/em>\ud30c\uc77c\uc744 \ucc3e\uc544 <em>\uc0ac\uc6a9\uc790 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \ub300\ud55c \ubaa8\ub4e0 \ubb38\uc11c \uac00\uc838\uc624\uae30<\/em>\u00a0\u00a0\ud568\uc218\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:default decode:true\">\/\/ 1. Create Query to fetch all documents. You can set a number of properties on the query object\r\nliveQuery = self.db?.createAllDocumentsQuery().asLive()\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\nguard let liveQuery = liveQuery else {\r\n\u00a0 \u00a0 \u00a0  return\r\n}\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\/\/ 2: You can optionally set a number of properties on the query object.\r\n\/\/ Explore other properties on the query object\r\nliveQuery.limit = UInt(UINT32_MAX) \/\/ All documents\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\/\/ \u00a0 query.postFilter =\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\/\/3. Start observing for changes to the database\r\nself.addLiveQueryObserverAndStartObserving()\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\/\/ 4: Run the query to fetch documents asynchronously\r\nliveQuery.runAsync({ (enumerator, error) in\r\n\u00a0 \u00a0 \u00a0 \u00a0 switch error {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 case nil:\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ 5: The \"enumerator\" is of type CBLQueryEnumerator and is an enumerator for the results\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.docsEnumerator = enumerator\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 default:\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.showAlertWithTitle(NSLocalizedString(\"Data Fetch Error!\", comment: \"\"), message: error.localizedDescription)\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 })\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 \u00a0 \u00a0 catch\u00a0 {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ handle error\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0 \u00a0 }\r\n<\/pre>\n<ol>\n<li>\uc9c0\uc815\ub41c \uc774\ub984\uc758 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \ub300\ud55c \ud578\ub4e4 \uac00\uc838\uc624\uae30<\/li>\n<li>\ucffc\ub9ac \uac1d\uccb4\ub97c \ub9cc\ub4ed\ub2c8\ub2e4. \uc774 \ucffc\ub9ac\ub294 \ubaa8\ub4e0 \ubb38\uc11c\ub97c \uac00\uc838\uc624\ub294 \ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\uc758 \ub3d9\uae30\ud654 \uae30\ub2a5\uc740 \uc0ac\uc6a9\uc790\uac00 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\ub294 \ucc44\ub110\uc5d0\uc11c\ub9cc \ubb38\uc11c\ub97c \uac00\uc838\uc624\ub3c4\ub85d \ud569\ub2c8\ub2e4. \uc77c\ubc18 \ucffc\ub9ac \uac1c\uccb4 \ub610\ub294 \"\ub77c\uc774\ube0c\" \ucffc\ub9ac \uac1c\uccb4\ub97c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \"\ub77c\uc774\ube0c\" \ucffc\ub9ac \uac1c\uccb4\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc720\ud615\uc785\ub2c8\ub2e4. <em>CBLLiveQuery<\/em> \ucffc\ub9ac \uacb0\uacfc\uc5d0 \uc601\ud5a5\uc744 \ubbf8\uce58\ub294 \ubc29\uc2dd\uc73c\ub85c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uac00 \ubcc0\uacbd\ub420 \ub54c\ub9c8\ub2e4 \uc790\ub3d9\uc73c\ub85c \uc0c8\ub85c \uace0\uccd0\uc9d1\ub2c8\ub2e4. \ucffc\ub9ac\uc5d0\ub294 \uacb0\uacfc\ub97c \uc0ac\uc6a9\uc790 \uc9c0\uc815\ud558\uae30 \uc704\ud574 \uc870\uc815\ud560 \uc218 \uc788\ub294 \uc5ec\ub7ec \uac00\uc9c0 \uc18d\uc131\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc18d\uc131\uc744 \uc218\uc815\ud558\uace0 \uacb0\uacfc\uc5d0 \ubbf8\uce58\ub294 \uc601\ud5a5\uc744 \ud655\uc778\ud574 \ubcf4\uc138\uc694.<\/li>\n<li>\ub370\uc774\ud130\ubca0\uc774\uc2a4 \ubcc0\uacbd\uc0ac\ud56d\uc5d0 \ub300\ud55c \uc54c\ub9bc\uc744 \ubc1b\uc73c\ub824\uba74 \ub77c\uc774\ube0c \ucffc\ub9ac \uac1c\uccb4\uc5d0 \uc635\uc800\ubc84\ub97c \uba85\uc2dc\uc801\uc73c\ub85c \ucd94\uac00\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\uc5d0 \ub300\ud574\uc11c\ub294 \"\ubb38\uc11c\uc758 \ub85c\uceec \ubc0f \uc6d0\uaca9 \ub3d9\uae30\ud654\ub41c \ubcc0\uacbd\uc0ac\ud56d \uad00\ucc30\ud558\uae30\" \uc139\uc158\uc5d0\uc11c \uc790\uc138\ud788 \uc124\uba85\ud569\ub2c8\ub2e4. \uad00\ucc30\uc790\uac00 \ub354 \uc774\uc0c1 \ud544\uc694\ud558\uc9c0 \uc54a\uc73c\uba74 \uad00\ucc30\uc790\ub97c \uc81c\uac70\ud558\uace0 \ubcc0\uacbd\uc0ac\ud56d \uad00\ucc30\uc744 \uc911\uc9c0\ud558\ub294 \uac83\uc744 \uc78a\uc9c0 \ub9c8\uc138\uc694!<\/li>\n<li>\ucffc\ub9ac\ub97c \ube44\ub3d9\uae30\uc801\uc73c\ub85c \uc2e4\ud589\ud569\ub2c8\ub2e4. \uc6d0\ud558\ub294 \uacbd\uc6b0 \ub3d9\uae30\uc2dd\uc73c\ub85c \uc2e4\ud589\ud560 \uc218\ub3c4 \uc788\uc9c0\ub9cc \ub370\uc774\ud130 \uc9d1\ud569\uc774 \ud070 \uacbd\uc6b0\uc5d0\ub294 \ube44\ub3d9\uae30\uc2dd\uc73c\ub85c \uc2e4\ud589\ud558\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ol>\n<p>\ucffc\ub9ac\uac00 \uc131\uacf5\uc801\uc73c\ub85c \uc2e4\ud589\ub418\uba74 CBLQueryEnumerator \uac1d\uccb4\ub97c \uc5bb\uac8c \ub429\ub2c8\ub2e4. \ucffc\ub9ac \uc5f4\uac70\uc790\ub97c \uc0ac\uc6a9\ud558\uba74 \uacb0\uacfc\ub97c \uc5f4\uac70\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uacb0\uacfc\ub97c \ud45c\uc2dc\ud558\ub294 \ud14c\uc774\ube14 \ubcf4\uae30\uc758 \ub370\uc774\ud130 \uc18c\uc2a4\ub85c \ub9e4\uc6b0 \uc801\ud569\ud569\ub2c8\ub2e4.<\/p>\n<h4><\/h4>\n<h4><strong>\ubb38\uc11c\uc5d0 \ub300\ud55c \ub85c\uceec \ubc0f \uc6d0\uaca9 \ub3d9\uae30\ud654 \ubcc0\uacbd \uc0ac\ud56d \uad00\ucc30\ud558\uae30\u00a0<\/strong><\/h4>\n<p>\uc5f4\uae30 <em>DocListTableViewController.swift <\/em>\ud30c\uc77c\uc5d0\uc11c addLiveQueryObserverAndStartObserving \ud568\uc218\ub97c \ucc3e\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \ubcc0\uacbd \uc0ac\ud56d\uc740 \ub85c\uceec \uc7a5\uce58\uc5d0\uc11c \uc0ac\uc6a9\uc790\uac00 \uc218\ud589\ud55c \uc791\uc5c5\uc758 \uacb0\uacfc\uc77c \uc218\ub3c4 \uc788\uace0 \ub2e4\ub978 \uc7a5\uce58\uc5d0\uc11c \ub3d9\uae30\ud654\ub41c \ubcc0\uacbd \uc0ac\ud56d\uc758 \uacb0\uacfc\uc77c \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:swift decode:true\">\u00a0\/\/ 1. iOS Specific. Add observer to the live Query object\r\n    liveQuery.addObserver(self, forKeyPath: \"rows\", options: NSKeyValueObservingOptions.new, context: nil)\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0\r\n \/\/ 2. Start observing changes\r\n    liveQuery.start()\r\n<\/pre>\n<ol>\n<li>\ucffc\ub9ac \uacb0\uacfc\uc5d0 \uc601\ud5a5\uc744 \ubbf8\uce58\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \ubcc0\uacbd \uc0ac\ud56d\uc744 \uc54c\ub9bc \ubc1b\uc73c\ub824\uba74 \ub77c\uc774\ube0c \ucffc\ub9ac \uac1c\uccb4\uc5d0 \uc635\uc800\ubc84\ub97c \ucd94\uac00\ud558\uc138\uc694. \ub300\uc2e0 iOS\uc758 \ud0a4-\uac12-\uc635\uc800\ubc84 \ud328\ud134\uc744 \ud65c\uc6a9\ud558\uc5ec \ubcc0\uacbd \uc0ac\ud56d\uc5d0 \ub300\ud55c \uc54c\ub9bc\uc744 \ubc1b\uc2b5\ub2c8\ub2e4. \ub77c\uc774\ube0c \ucffc\ub9ac \uac1c\uccb4\uc5d0 KVO \uc635\uc800\ubc84\ub97c \ucd94\uac00\ud558\uc5ec \ub77c\uc774\ube0c \ucffc\ub9ac \uac1c\uccb4\uc758 \"\ud589\" \uc18d\uc131 \ubcc0\uacbd \uc0ac\ud56d\uc744 \uad00\ucc30\ud558\uae30 \uc2dc\uc791\ud569\ub2c8\ub2e4. \uc774\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ub2e4\ub978 \ud50c\ub7ab\ud3fc\uc758 \uc801\uc808\ud55c \uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec API\ub97c \ud1b5\ud574 \ucc98\ub9ac\ub429\ub2c8\ub2e4. <em>\ucd94\uac00 \ubcc0\uacbd \ub9ac\uc2a4\ub108<\/em> \ud568\uc218\ub97c \ud638\ucd9c\ud569\ub2c8\ub2e4.<\/li>\n<li>\ubcc0\uacbd \uc0ac\ud56d \uad00\ucc30 \uc2dc\uc791 .<\/li>\n<\/ol>\n<p>LiveQuery \uac1d\uccb4\uc758 \"\ud589\" \uc18d\uc131\uc5d0 \uc601\ud5a5\uc744 \ubbf8\uce58\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \ubcc0\uacbd \uc0ac\ud56d\uc774 \uc788\uc744 \ub54c\ub9c8\ub2e4 \uc571\uc5d0 \ubcc0\uacbd \uc54c\ub9bc\uc774 \uc804\uc1a1\ub429\ub2c8\ub2e4. \ubcc0\uacbd \uc54c\ub9bc\uc744 \ubc1b\uc73c\uba74 UI\ub97c \uc5c5\ub370\uc774\ud2b8\ud560 \uc218 \uc788\uc73c\uba70, \uc774 \uacbd\uc6b0 \ud14c\uc774\ube14 \ubdf0\ub97c \ub2e4\uc2dc \ub85c\ub4dc\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:swift decode:true\">if keyPath == \"rows\" {\r\n\u00a0 \u00a0 self.docsEnumerator = self.liveQuery?.rows\r\n\u00a0 \u00a0 tableView.reloadData()\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h4><strong>\ubcf5\uc81c \uc694\uccad \uc778\uc99d<\/strong><\/h4>\n<p>\uc5f4\uae30 <em>DocListTableViewController.swift \ud30c\uc77c<\/em> \ub97c \ud074\ub9ad\ud558\uace0 <em>\uc0ac\uc6a9\uc790\uc5d0 \ub300\ud55c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ubcf5\uc81c \uc2dc\uc791<\/em>\u00a0\ud568\uc218\uc785\ub2c8\ub2e4.<\/p>\n<p>\ubaa8\ub4e0 \ubcf5\uc81c \uc694\uccad\uc740 \uc778\uc99d\uc744 \ubc1b\uc544\uc57c \ud569\ub2c8\ub2e4. \uc774 \uc571\uc5d0\uc11c\ub294 HTTP \uae30\ubcf8 \uc778\uc99d\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:swift decode:true\">let auth = CBLAuthenticator.basicAuthenticator(withName: user, password: password)<\/pre>\n<p>\uc778\uc99d\uc790 \uc720\ud615\uc5d0\ub294 \uae30\ubcf8, Facebook, OAuth1, \ud398\ub974\uc18c\ub098, SSL\/TLS \uc778\uc99d\uc11c \ub4f1 \uc5ec\ub7ec \uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h4><strong>\ud480 \ubcf5\uc81c<\/strong><\/h4>\n<p>\uc5f4\uae30 <em>DocListTableViewController.swift \ud30c\uc77c<\/em> \ub97c \ud074\ub9ad\ud558\uace0 <em>\uc2dc\uc791\ud480\ubcf5\uc81c\uc704\ub4dc\uc778\uc99d\uc790<\/em>\u00a0\ud568\uc218\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:swift decode:true\">\/\/ 1: Create a Pull replication to start pulling from remote source\r\nlet pullRepl = db?.createPullReplication(URL(string: kDbName, relativeTo: URL.init(string: kRemoteSyncUrl))!)\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0\r\n\/\/ 2. Set Authenticator for pull replication\r\npullRepl?.authenticator = auth\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0\r\n\/\/ Continuously look for changes\r\npullRepl?.continuous = true\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0\r\n\/\/ Optionally, Set channels from which to pull\r\n\/\/ pullRepl?.channels = [...]\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0\r\n \/\/ 4. Start the pull replicator\r\n\u00a0pullRepl?.start()\r\n<\/pre>\n<ol>\n<li>\uc6d0\uaca9 \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\uc5d0\uc11c \ubcc0\uacbd \uc0ac\ud56d\uc744 \uac00\uc838\uc624\ub824\uba74 \ud480 \ub9ac\ud50c\ub9ac\ucf00\uc774\ud130\ub97c \ub9cc\ub4dc\uc138\uc694. \uc6d0\uaca9 \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\uc758 <em>kRemoteSyncUrl<\/em> \ub294 \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\uc5d0 \uc788\ub294 \uc6d0\uaca9 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc758 URL\uc785\ub2c8\ub2e4.<\/li>\n<li>\uc778\uc99d\uc790\ub97c \ud480 \ubcf5\uc81c\uc640 \uc5f0\uacb0\ud569\ub2c8\ub2e4. \uc120\ud0dd\uc801\uc73c\ub85c \ubb38\uc11c\ub97c \uac00\uc838\uc62c \ucc44\ub110\uc744 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<li>\ubcf5\uc81c\ub97c '\uc9c0\uc18d'\uc73c\ub85c \uc124\uc815\ud558\uba74 \uba85\uc2dc\uc801\uc73c\ub85c \uc911\uc9c0\ud558\uac70\ub098 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \ub2eb\uc9c0 \uc54a\ub294 \ud55c \ubcc0\uacbd \ub0b4\uc6a9 \uc5c5\ub370\uc774\ud2b8\ub97c \ubb34\uae30\ud55c \uac00\uc838\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<li>\ud480 \ubcf5\uc81c \uc2dc\uc791<\/li>\n<\/ol>\n<h4><strong>\ud478\uc2dc \ubcf5\uc81c<\/strong><\/h4>\n<p>\uc5f4\uae30 <em>DocListTableViewController.swift \ud30c\uc77c<\/em> \ub97c \ud074\ub9ad\ud558\uace0 <em>\uc2dc\uc791 \ud478\uc2dc \ubcf5\uc81c \uc704\ub4dc \uc778\uc99d\uc790<\/em>\u00a0\ud568\uc218\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:default decode:true\">\/\/ 1: Create a push replication to start pushing to remote source\r\nlet pushRepl = db?.createPushReplication(URL(string: kDbName, relativeTo: URL.init(string:kRemoteSyncUrl))!)\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0\r\n\/\/ 2. Set Authenticator for push replication\r\npushRepl?.authenticator = auth\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0\r\n\/\/ Continuously push\u00a0 changes\r\npushRepl?.continuous = true\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0\r\n\/\/ 3. Start the push replicator\r\npushRepl?.start()<\/pre>\n<ol>\n<li>\ud478\uc2dc \ubcf5\uc81c\uae30\ub97c \ub9cc\ub4e4\uc5b4 \uc6d0\uaca9 \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\uc5d0 \ubcc0\uacbd \uc0ac\ud56d\uc744 \ud478\uc2dc\ud569\ub2c8\ub2e4. \ud478\uc2dc \ubcf5\uc81c\uae30 <em>kRemoteSyncUrl<\/em> \ub294 \ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774\uc5d0 \uc788\ub294 \uc6d0\uaca9 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc758 URL\uc785\ub2c8\ub2e4.<\/li>\n<li>\uc778\uc99d\uc790\ub97c \ud478\uc2dc \ubcf5\uc81c\uc640 \uc5f0\uacb0\ud569\ub2c8\ub2e4.<\/li>\n<li>\ubcf5\uc81c\ub97c '\uc9c0\uc18d'\uc73c\ub85c \uc124\uc815\ud558\uba74 \uba85\uc2dc\uc801\uc73c\ub85c \uc911\uc9c0\ud558\uac70\ub098 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \ub2eb\uc9c0 \uc54a\ub294 \ud55c \ubcc0\uacbd \uc0ac\ud56d \uc5c5\ub370\uc774\ud2b8\ub97c \ubb34\uae30\ud55c \ud478\uc2dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<li>\ud478\uc2dc \ubcf5\uc81c \uc2dc\uc791<\/li>\n<\/ol>\n<h4><strong>\ubcf5\uc81c \uc0c1\ud0dc \ubaa8\ub2c8\ud130\ub9c1<\/strong><\/h4>\n<p>\uc5f4\uae30 <em>DBListTableViewController.swift<\/em> \ud30c\uc77c\uc744 \uc5f4\uace0 \ucd94\uac00 \uc6d0\uaca9 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ubcc0\uacbd \uc635\uc800\ubc84 \ubc0f \uc2dc\uc791 \uc635\uc800\ube59 \ud568\uc218\ub97c \ucc3e\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:default decode:true\">\/\/ 1. iOS Specific. Add observer to the NOtification Center to observe replicator changes\r\nNotificationCenter.default.addObserver(forName: NSNotification.Name.cblReplicationChange, object: db, queue: nil) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 [unowned self] (notification) in\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0 \/\/ Handle changes to the replicator status - Such as displaying progress\r\n  \/\/ indicator when status is .running \r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p>iOS \uc54c\ub9bc \uc13c\ud130\uc5d0 \uc635\uc800\ubc84\ub97c \ucd94\uac00\ud558\uc5ec \ubcf5\uc81c \uc0c1\ud0dc\ub97c \ubaa8\ub2c8\ud130\ub9c1\ud558\uc5ec \ub2e4\uc74c \uc54c\ub9bc\uc744 \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <em>cbl\ubcf5\uc81c\ubcc0\uacbd<\/em> \uc54c\ub9bc\uc744 \ucd94\uac00\ud558\uc138\uc694. \uc608\ub97c \ub4e4\uc5b4 \uc54c\ub9bc \ud578\ub4e4\ub7ec\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc0ac\uc6a9\uc790\uc5d0\uac8c \uc801\uc808\ud55c \uc9c4\ud589\ub960 \ud45c\uc2dc\uae30\ub97c \ud45c\uc2dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.  \uc774\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ub2e4\ub978 \ud50c\ub7ab\ud3fc\uc758 \uc801\uc808\ud55c \uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec API\ub97c \ud1b5\ud574 \ucc98\ub9ac\ub429\ub2c8\ub2e4. <em>\ucd94\uac00 \ubcc0\uacbd \ub9ac\uc2a4\ub108<\/em> \ud568\uc218\ub97c \ud638\ucd9c\ud569\ub2c8\ub2e4.<\/p>\n<h2>\ub2e4\uc74c \ub2e8\uacc4\ub294 \ubb34\uc5c7\uc778\uac00\uc694?<\/h2>\n<p>\uc5ec\ub7ec\ubd84\uc758 \uc758\uacac\uc744 \ub4e3\uace0 \uc2f6\uc2b5\ub2c8\ub2e4. \uc9c8\ubb38\uc774\ub098 \ud53c\ub4dc\ubc31\uc774 \uc788\uc73c\uba74 \uc5b8\uc81c\ub4e0\uc9c0 \ud2b8\uc704\ud130\ub85c \uc5f0\ub77d\ud574 \uc8fc\uc138\uc694. <a href=\"https:\/\/twitter.com\/rajagp\">@rajagp<\/a> \ub610\ub294 \uc774\uba54\uc77c\uc744 \ubcf4\ub0b4\uc8fc\uc138\uc694. <a href=\"mailto:priya.rajagopal@couchbase.com\">priya.rajagopal@couchbase.com<\/a>. \ub370\ubaa8 \uc571\uc744 \uac1c\uc120\ud558\uace0 \uc2f6\uc73c\uc2dc\uba74 \ud480 \ub9ac\ud018\uc2a4\ud2b8\ub97c \uc81c\ucd9c\ud574 \uc8fc\uc138\uc694. <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-lite-ios-starterapp\">\uae43\ud5c8\ube0c \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac.<\/a><\/p>\n<p>\uadf8\ub9ac\uace0 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/forums\/c\/mobile\/\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ubaa8\ubc14\uc77c \uac1c\ubc1c\uc790 \ud3ec\ub7fc<\/a> \ub294 \ubaa8\ubc14\uc77c \uad00\ub828 \uc9c8\ubb38\uc5d0 \ub300\ud55c \ub2f5\ubcc0\uc744 \uc5bb\uc744 \uc218 \uc788\ub294 \ub610 \ub2e4\ub978 \uc88b\uc740 \uc7a5\uc18c\uc774\uba70, \uac1c\ubc1c \ud3ec\ud138\uc5d0\uc11c \uc790\uc138\ud55c \ub0b4\uc6a9\uc744 \ud655\uc778\ud558\uc138\uc694. <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/guides\/sync-gateway\/index.html?language=ios\">\ub3d9\uae30\ud654 \uac8c\uc774\ud2b8\uc6e8\uc774<\/a>\u00a0\uadf8\ub9ac\uace0 <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/guides\/couchbase-lite\/index.html?language=ios\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub77c\uc774\ud2b8<\/a>\u00a0. \uc5ec\uae30\uc11c \ub17c\uc758\ub41c \ubaa8\ub4e0 \ub0b4\uc6a9\uc740 Couchbase Mobile 1.4\uc758 \ucee8\ud14d\uc2a4\ud2b8\uc5d0 \uad00\ud55c \uac83\uc785\ub2c8\ub2e4. Couchbase Mobile 2.0\uc5d0\ub294 \uc0c8\ub86d\uace0 \ud765\ubbf8\ub85c\uc6b4 \ubcc0\uacbd \uc0ac\ud56d\uc774 \ub9ce\uc774 \uc788\uc2b5\ub2c8\ub2e4. \ubc18\ub4dc\uc2dc\u00a0\u00a0<a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/2.0\/whatsnew.html?language=ios\">\uac1c\ubc1c\uc790 \ubbf8\ub9ac\ubcf4\uae30 <\/a>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ubaa8\ubc14\uc77c \ubc84\uc804 2.0.<\/p>","protected":false},"excerpt":{"rendered":"<p>This post looks at how you get started with data replication\/synchronization across iOS devices using Couchbase Mobile. The Couchbase Mobile Stack comprises of Couchbase Server, Sync Gateway and Couchbase Lite embedded NoSQL Database. In an earlier post, we discussed how [&hellip;]<\/p>","protected":false},"author":1423,"featured_media":3298,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,7667,1810,1816,2366],"tags":[1952,1536,1725,1562,1953],"ppma_author":[8948],"class_list":["post-3287","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-lite","category-couchbase-mobile","category-couchbase-server","category-sync-gateway","tag-data-replication","tag-ios","tag-nosql-database","tag-replication","tag-sync-function"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Data Synchronization Across iOS Devices Using Couchbase Mobile - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"This post looks discusses data replication\/synchronization using Couchbase Sync Gateway across devices with Couchbase Lite embedded NoSQL Database\" \/>\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\/data-sync-on-ios-couchbase-mobile\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Data Synchronization Across iOS Devices Using Couchbase Mobile\" \/>\n<meta property=\"og:description\" content=\"This post looks discusses data replication\/synchronization using Couchbase Sync Gateway across devices with Couchbase Lite embedded NoSQL Database\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/data-sync-on-ios-couchbase-mobile\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-24T17:30:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T06:43:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/Screen-Shot-2017-04-18-at-12.45.04-PM.png\" \/>\n\t<meta property=\"og:image:width\" content=\"587\" \/>\n\t<meta property=\"og:image:height\" content=\"364\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Priya Rajagopal, Senior Director, Product Management\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@rajagp\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Priya Rajagopal, Senior Director, Product Management\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/\"},\"author\":{\"name\":\"Priya Rajagopal, Senior Director, Product Management\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c\"},\"headline\":\"Data Synchronization Across iOS Devices Using Couchbase Mobile\",\"datePublished\":\"2017-04-24T17:30:54+00:00\",\"dateModified\":\"2025-06-14T06:43:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/\"},\"wordCount\":2262,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/Screen-Shot-2017-04-18-at-12.45.04-PM.png\",\"keywords\":[\"Data Replication\",\"ios\",\"NoSQL Database\",\"replication\",\"sync function\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Lite\",\"Couchbase Mobile\",\"Couchbase Server\",\"Sync Gateway\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/\",\"name\":\"Data Synchronization Across iOS Devices Using Couchbase Mobile - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/Screen-Shot-2017-04-18-at-12.45.04-PM.png\",\"datePublished\":\"2017-04-24T17:30:54+00:00\",\"dateModified\":\"2025-06-14T06:43:26+00:00\",\"description\":\"This post looks discusses data replication\/synchronization using Couchbase Sync Gateway across devices with Couchbase Lite embedded NoSQL Database\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/Screen-Shot-2017-04-18-at-12.45.04-PM.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/Screen-Shot-2017-04-18-at-12.45.04-PM.png\",\"width\":587,\"height\":364,\"caption\":\"Couchbase Data Synchronization\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Data Synchronization Across iOS Devices Using Couchbase Mobile\"}]},{\"@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\/c2da90e57717ee4970c48a87a131ac2c\",\"name\":\"Priya Rajagopal, Senior Director, Product Management\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b50a54778b979d8c345b036ab138734\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g\",\"caption\":\"Priya Rajagopal, Senior Director, Product Management\"},\"description\":\"Priya Rajagopal is a Senior Director of Product Management at Couchbase responsible for developer platforms for the cloud and the edge. She has been professionally developing software for over 20 years in several technical and product leadership positions, with 10+ years focused on mobile technologies. As a TISPAN IPTV standards delegate, she was a key contributor to the IPTV standards specifications. She has 22 patents in the areas of networking and platform security.\",\"sameAs\":[\"https:\/\/x.com\/rajagp\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/priya-rajagopalcouchbase-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ubaa8\ubc14\uc77c\uc744 \uc0ac\uc6a9\ud55c iOS \uae30\uae30 \uac04 \ub370\uc774\ud130 \ub3d9\uae30\ud654 - \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","description":"\uc774 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 Couchbase Lite \uc784\ubca0\ub514\ub4dc NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uac00 \uc788\ub294 \uc7a5\uce58\uc5d0\uc11c Couchbase Sync Gateway\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub370\uc774\ud130 \ubcf5\uc81c\/\ub3d9\uae30\ud654\uc5d0 \ub300\ud574 \uc0b4\ud3b4\ubd05\ub2c8\ub2e4.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/ko\/data-sync-on-ios-couchbase-mobile\/","og_locale":"ko_KR","og_type":"article","og_title":"Data Synchronization Across iOS Devices Using Couchbase Mobile","og_description":"This post looks discusses data replication\/synchronization using Couchbase Sync Gateway across devices with Couchbase Lite embedded NoSQL Database","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/data-sync-on-ios-couchbase-mobile\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-04-24T17:30:54+00:00","article_modified_time":"2025-06-14T06:43:26+00:00","og_image":[{"width":587,"height":364,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/Screen-Shot-2017-04-18-at-12.45.04-PM.png","type":"image\/png"}],"author":"Priya Rajagopal, Senior Director, Product Management","twitter_card":"summary_large_image","twitter_creator":"@rajagp","twitter_misc":{"Written by":"Priya Rajagopal, Senior Director, Product Management","Est. reading time":"10\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/"},"author":{"name":"Priya Rajagopal, Senior Director, Product Management","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c"},"headline":"Data Synchronization Across iOS Devices Using Couchbase Mobile","datePublished":"2017-04-24T17:30:54+00:00","dateModified":"2025-06-14T06:43:26+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/"},"wordCount":2262,"commentCount":4,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/Screen-Shot-2017-04-18-at-12.45.04-PM.png","keywords":["Data Replication","ios","NoSQL Database","replication","sync function"],"articleSection":["Best Practices and Tutorials","Couchbase Lite","Couchbase Mobile","Couchbase Server","Sync Gateway"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/","url":"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ubaa8\ubc14\uc77c\uc744 \uc0ac\uc6a9\ud55c iOS \uae30\uae30 \uac04 \ub370\uc774\ud130 \ub3d9\uae30\ud654 - \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/Screen-Shot-2017-04-18-at-12.45.04-PM.png","datePublished":"2017-04-24T17:30:54+00:00","dateModified":"2025-06-14T06:43:26+00:00","description":"\uc774 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 Couchbase Lite \uc784\ubca0\ub514\ub4dc NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uac00 \uc788\ub294 \uc7a5\uce58\uc5d0\uc11c Couchbase Sync Gateway\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub370\uc774\ud130 \ubcf5\uc81c\/\ub3d9\uae30\ud654\uc5d0 \ub300\ud574 \uc0b4\ud3b4\ubd05\ub2c8\ub2e4.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/Screen-Shot-2017-04-18-at-12.45.04-PM.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/Screen-Shot-2017-04-18-at-12.45.04-PM.png","width":587,"height":364,"caption":"Couchbase Data Synchronization"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/data-sync-on-ios-couchbase-mobile\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Data Synchronization Across iOS Devices Using Couchbase Mobile"}]},{"@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\/c2da90e57717ee4970c48a87a131ac2c","name":"\ud504\ub9ac\uc57c \ub77c\uc790\uace0\ud314, \uc81c\ud488 \uad00\ub9ac \ubd80\ubb38 \uc120\uc784 \uc774\uc0ac","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b50a54778b979d8c345b036ab138734","url":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","caption":"Priya Rajagopal, Senior Director, Product Management"},"description":"\ud504\ub9ac\uc57c \ub77c\uc790\uace0\ud314\uc740 \ud074\ub77c\uc6b0\ub4dc \ubc0f \uc5e3\uc9c0\uc6a9 \uac1c\ubc1c\uc790 \ud50c\ub7ab\ud3fc\uc744 \ub2f4\ub2f9\ud558\ub294 Couchbase\uc758 \uc81c\ud488 \uad00\ub9ac \uc218\uc11d \uc774\uc0ac\uc785\ub2c8\ub2e4. \uadf8\ub140\ub294 20\ub144 \uc774\uc0c1 \uc5ec\ub7ec \uae30\uc220 \ubc0f \uc81c\ud488 \ub9ac\ub354\uc2ed \uc9c1\ucc45\uc744 \ub9e1\uc73c\uba70 \uc804\ubb38\uc801\uc73c\ub85c \uc18c\ud504\ud2b8\uc6e8\uc5b4\ub97c \uac1c\ubc1c\ud574 \uc654\uc73c\uba70, \uadf8\uc911 10\ub144 \uc774\uc0c1\uc740 \ubaa8\ubc14\uc77c \uae30\uc220\uc5d0 \uc9d1\uc911\ud588\uc2b5\ub2c8\ub2e4. TISPAN IPTV \ud45c\uc900 \ub300\ud45c\ub85c\uc11c IPTV \ud45c\uc900 \uc0ac\uc591\uc5d0 \ud575\uc2ec\uc801\uc778 \uae30\uc5ec\ub97c \ud588\uc2b5\ub2c8\ub2e4. \ub124\ud2b8\uc6cc\ud0b9 \ubc0f \ud50c\ub7ab\ud3fc \ubcf4\uc548 \ubd84\uc57c\uc5d0\uc11c 22\uac1c\uc758 \ud2b9\ud5c8\ub97c \ubcf4\uc720\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.","sameAs":["https:\/\/x.com\/rajagp"],"url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/priya-rajagopalcouchbase-com\/"}]}},"authors":[{"term_id":8948,"user_id":1423,"is_guest":0,"slug":"priya-rajagopalcouchbase-com","display_name":"Priya Rajagopal, Senior Director, Product Management","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","author_category":"","last_name":"Rajagopal, Senior Director, Product Management","first_name":"Priya","job_title":"","user_url":"","description":"\ud504\ub9ac\uc57c \ub77c\uc790\uace0\ud314\uc740 \ud074\ub77c\uc6b0\ub4dc \ubc0f \uc5e3\uc9c0\uc6a9 \uac1c\ubc1c\uc790 \ud50c\ub7ab\ud3fc\uc744 \ub2f4\ub2f9\ud558\ub294 Couchbase\uc758 \uc81c\ud488 \uad00\ub9ac \uc218\uc11d \uc774\uc0ac\uc785\ub2c8\ub2e4. \uadf8\ub140\ub294 20\ub144 \uc774\uc0c1 \uc5ec\ub7ec \uae30\uc220 \ubc0f \uc81c\ud488 \ub9ac\ub354\uc2ed \uc9c1\ucc45\uc744 \ub9e1\uc73c\uba70 \uc804\ubb38\uc801\uc73c\ub85c \uc18c\ud504\ud2b8\uc6e8\uc5b4\ub97c \uac1c\ubc1c\ud574 \uc654\uc73c\uba70, \uadf8\uc911 10\ub144 \uc774\uc0c1\uc740 \ubaa8\ubc14\uc77c \uae30\uc220\uc5d0 \uc9d1\uc911\ud588\uc2b5\ub2c8\ub2e4. TISPAN IPTV \ud45c\uc900 \ub300\ud45c\ub85c\uc11c IPTV \ud45c\uc900 \uc0ac\uc591\uc5d0 \ud575\uc2ec\uc801\uc778 \uae30\uc5ec\ub97c \ud588\uc2b5\ub2c8\ub2e4. \ub124\ud2b8\uc6cc\ud0b9 \ubc0f \ud50c\ub7ab\ud3fc \ubcf4\uc548 \ubd84\uc57c\uc5d0\uc11c 22\uac1c\uc758 \ud2b9\ud5c8\ub97c \ubcf4\uc720\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/3287","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\/1423"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=3287"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/3287\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/3298"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=3287"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=3287"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=3287"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=3287"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}