{"id":6290,"date":"2019-01-21T13:46:34","date_gmt":"2019-01-21T21:46:34","guid":{"rendered":"http:\/\/www.couchbase.com\/blog\/?p=6290"},"modified":"2025-06-13T22:39:33","modified_gmt":"2025-06-14T05:39:33","slug":"real-time-user-deduplication-couchbase-eventing","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/real-time-user-deduplication-couchbase-eventing\/","title":{"rendered":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc774\ubca4\ud2b8 \uae30\ub2a5\uc744 \ud1b5\ud55c \uc2e4\uc2dc\uac04 \uc0ac\uc6a9\uc790 \uc911\ubcf5 \uc81c\uac70"},"content":{"rendered":"<div class=\"paragraph\">\n<p>\uc0ac\uc6a9\uc790 \uc911\ubcf5 \uc81c\uac70\ub294 \uc0ac\uc6a9\uc790 \uad00\ub828 \ub370\uc774\ud130 \uc9d1\ud569\uc744 \uad00\ub9ac\ud558\ub294 \ubaa8\ub4e0 \uc0ac\ub78c\uc5d0\uac8c \uc911\uc694\ud55c \ud65c\ub3d9\uc785\ub2c8\ub2e4. \uacbd\uc6b0\uc5d0 \ub530\ub77c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \ub3d9\uc77c\ud55c \uc0ac\uc6a9\uc790\uc758 \uc5ec\ub7ec \ubc84\uc804\uc774 \uc874\uc7ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub294 \uc798\ubabb\ub41c \ub370\uc774\ud130 \uad00\ub9ac, \uc77c\uce58\ud558\uc9c0 \uc54a\ub294 \uc0ac\uc6a9\uc790 \ub370\uc774\ud130, \uc0ac\uc6a9\uc790 \ub610\ub294 \uc2dc\uc2a4\ud15c \uc624\ub958 \ub4f1 \uc5ec\ub7ec \uac00\uc9c0 \uc774\uc720\ub85c \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub610\ud55c \uc5ec\ub7ec \ub2e4\ub978 \uc2dc\uc2a4\ud15c\uc5d0\uc11c \uc0ac\uc6a9\uc790 \uc815\ubcf4\uac00 \uc9d1\uacc4\ub418\ub294 \uacbd\uc6b0\ub3c4 \ud754\ud569\ub2c8\ub2e4. \uae30\ubcf8 \uc0ac\uc6a9\uc790 \ub370\uc774\ud130 \uc138\ud2b8\uac00 \uc788\uc9c0\ub9cc \uc18c\uc15c \ubbf8\ub514\uc5b4, \ud2f0\ucf13\ud305 \ub610\ub294 \ub4f1\ub85d \uc2dc\uc2a4\ud15c\uacfc \uac19\uc740 \ud0c0\uc0ac \ub370\uc774\ud130 \ub610\ub294 \uc870\uc9c1 \ub0b4 \ub2e4\ub978 \uc0ac\uc77c\ub85c\uc758 \ucd94\uac00 \uc0ac\uc6a9\uc790 \uc815\ubcf4\ub85c \ubcf4\uac15\ud558\uace0 \uc2f6\uc744 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/01\/11801-headshot-andy-deduplication.jpg\" alt=\"11801 headshot andy deduplication\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>\uc774 \uae00\uc740 Andy Kruth\uac00 \uc791\uc131\ud55c \uac8c\uc2a4\ud2b8 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc785\ub2c8\ub2e4. Andy Kruth\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ud68c\uc0ac\uc758 \uc218\uc11d \ucee8\uc124\ud134\ud2b8\uc785\ub2c8\ub2e4. <a href=\"https:\/\/www.linkedin.com\/company\/avalon-consulting-llc\">\uc544\ubc1c\ub860 \ucee8\uc124\ud305, LLC<\/a> \uc5d0\uc11c \ube45\ub370\uc774\ud130 \uc2dc\uc2a4\ud15c\uc758 \uc544\ud0a4\ud14d\ucc98 \ubc0f \uac1c\ubc1c\uacfc NoSQL \uc194\ub8e8\uc158\uc5d0 \uc8fc\ub825\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uac8c\uc2dc\ubb3c\uc740 \uc2e0\uc2dc\ub0b4\ud2f0 \ub808\uc988\uc5d0\uc11c \uc218\ud589\ud55c \uc791\uc5c5\uc758 \uc601\ud5a5\uc744 \ubc1b\uc558\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c \uc608\uc81c\ub294 \ub2e8\uc21c\ud574 \ubcf4\uc774\uc9c0\ub9cc, Reds \ube44\uc988\ub2c8\uc2a4\uc758 \uc5ec\ub7ec \uce21\uba74\uc5d0 \uc788\ub294 \uc0ac\uc6a9\uc790 \ub370\uc774\ud130\ub97c \ub2e8\uc77c \uacc4\uc815 \ubc0f \uac00\uad6c \ub370\uc774\ud130 \uc9d1\ud569\uc73c\ub85c \uc911\ubcf5 \uc81c\uac70\ud55c \ud6e8\uc52c \ub354 \ubcf5\uc7a1\ud55c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uae30\ubc18\uc73c\ub85c \ud569\ub2c8\ub2e4.<\/em><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc5b4\ub5a4 \uacbd\uc6b0\ub4e0 \uc0ac\uc6a9\uc790 \uc815\ubcf4\ub97c \uac04\uacb0\ud558\uace0 \uc815\ud655\ud55c \ub370\uc774\ud130 \uc9d1\ud569\uc73c\ub85c \uc911\ubcf5 \uc81c\uac70\ud558\uae30\ub294 \uc77c\ubc18\uc801\uc778 \uc791\uc5c5\uc785\ub2c8\ub2e4. \uc774\ub97c \uc218\ud589\ud558\ub294 \uc804\ud1b5\uc801\uc778 \uc811\uadfc \ubc29\uc2dd\uc740 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ud1b5\ud574 \ubaa8\ub4e0 \uc0ac\uc6a9\uc790 \uc815\ubcf4\ub97c \uc2e4\ud589\ud558\uc5ec \uc815\uc758\ub41c \ud734\ub9ac\uc2a4\ud2f1\uc5d0 \ub530\ub77c \ub808\ucf54\ub4dc\ub97c \ub9e4\uce6d\ud558\uace0 \ub2e8\uc77c \ub370\uc774\ud130 \uc138\ud2b8\ub97c \ucd9c\ub825\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uc774 \ubc29\ubc95\uc740 '\ud6a8\uacfc\uac00 \uc788\uc9c0\ub9cc', \ucea1\ucc98\ud560 \uc218 \uc788\ub294 \ubaa8\ub4e0 \ub378\ud0c0\uc5d0 \ub300\ud574 \uc815\uae30\uc801\uc73c\ub85c \ub610\ub294 \uc801\uc5b4\ub3c4 \uc815\uae30\uc801\uc73c\ub85c \uc77c\uad04\uc801\uc73c\ub85c \uc218\ud589\ud574\uc57c \ud558\ub294 \uc791\uc5c5\uc778 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uc774 \uc811\uadfc \ubc29\uc2dd\uc758 \ub2e8\uc810\uc740 \ubc30\uce58 \ub610\ub294 \uc608\uc57d\ub41c \uc791\uc5c5\uc744 \uc0ac\uc6a9\ud560 \ub54c\ub9c8\ub2e4 \ub370\uc774\ud130 \uacb0\uacfc\uac00 \ubd80\uc2e4\ud574\uc9c8 \uac00\ub2a5\uc131\uc774 \uc0c1\ub2f9\ud788 \ub192\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub3c4\uc785\uacfc \ud568\uaed8 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/eventing\/\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc774\ubca4\ud2b8<\/a>\uc774\uc81c \ud6a8\uacfc\uc801\uc778 \uc911\ubcf5 \uc81c\uac70\ub97c \uc704\ud55c \uc0c8\ub85c\uc6b4 \uc635\uc158\uc774 \uc2e4\uc2dc\uac04\uc73c\ub85c \uc81c\uacf5\ub429\ub2c8\ub2e4! \uc774\ubca4\ud2b8\uc5d0 \ub300\ud55c \uc77c\ubc18\uc801\uc778 \uc815\ubcf4\ub294 \uc774\ubbf8 \ub2e4\ub978 \uc5ec\ub7ec \uae00\uc5d0\uc11c \ucda9\ubd84\ud788 \ub2e4\ub8e8\uc5c8\uae30 \ub54c\ubb38\uc5d0 \uc5ec\uae30\uc11c\ub294 \uc0dd\ub7b5\ud558\uaca0\uc2b5\ub2c8\ub2e4( <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/eventing\/\">\uc5ec\uae30<\/a>\ubc0f <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/eventing-best-practices\/\">\uc5ec\uae30<\/a>\ubc0f <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/eventing-notification-couchbase-functions\/\">\uc5ec\uae30<\/a>). \ub300\uc2e0 \uc774 \uae00\uc5d0\uc11c\ub294 Couchbase Eventing\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc2e4\uc2dc\uac04 \uc911\ubcf5 \uc81c\uac70 \uc5d4\uc9c4\uc744 \uac1c\ubc1c\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud55c \uac04\ub2e8\ud55c \uc608\uc81c\uc5d0 \ucd08\uc810\uc744 \ub9de\ucd94\uace0\uc790 \ud569\ub2c8\ub2e4. \uc2dc\uc791\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_the_bucket_setup\">\ubc84\ud0b7 \uc124\uc815<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\uc774 \ub370\ubaa8\uc5d0\ub294 \ucd1d 4\uac1c\uc758 \ubc84\ud0b7\uc774 \ud544\uc694\ud569\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\uba54\ud0c0\ub370\uc774\ud130 - \uc774\ubca4\ud2b8 \ud568\uc218\ub97c \uc2e4\ud589\ud558\uae30 \uc704\ud55c \ubaa8\ub4e0 \uc815\ubcf4\ub97c \uc800\uc7a5\ud558\ub294 \ud544\uc218 \uba54\ud0c0\ub370\uc774\ud130 \ubc84\ud0b7\uc785\ub2c8\ub2e4.<\/li>\n<li>\uc2a4\ud14c\uc774\uc9d5 - \uc774 \ubc84\ud0b7\uc740 \ubaa8\ub4e0 \uc0ac\uc6a9\uc790 \ub370\uc774\ud130\uc758 \ub79c\ub529 \uc874 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4.<\/li>\n<li>fieldindex - \uc774 \ubc84\ud0b7\uc740 \uc0ac\uc6a9\uc790\ub97c \ub9e4\uce6d\ud558\ub294 \ub370 \ud544\uc694\ud55c \ud544\ub4dc \uc815\ubcf4\uc758 \uc778\ub371\uc2a4 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4.<\/li>\n<li>\uc0ac\uc6a9\uc790 - \uc774 \ubc84\ud0b7\uc740 \ucd5c\uc885 \uacb0\uacfc\ubb3c\uc778 \uac04\uacb0\ud55c \uc0ac\uc6a9\uc790 \ub370\uc774\ud130 \uc138\ud2b8\uc785\ub2c8\ub2e4.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_the_function_setup\">\uae30\ub2a5 \uc124\uc815<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\uc911\ubcf5 \uc81c\uac70 \ud568\uc218\ub97c \ub9cc\ub4e4 \ub54c(\uc800\ub294 \"\uc911\ubcf5 \uc81c\uac70\"\ub77c\uace0 \uc774\ub984 \uc9c0\uc5c8\uc2b5\ub2c8\ub2e4), \uba54\ud0c0\ub370\uc774\ud130 \ubc84\ud0b7\uc740 \"\uba54\ud0c0\ub370\uc774\ud130\"\ub85c, \uc18c\uc2a4 \ubc84\ud0b7\uc740 \"\uc2a4\ud14c\uc774\uc9d5\"\uc73c\ub85c \uc9c0\uc815\ud569\ub2c8\ub2e4. \ub610\ud55c \ub450 \uac1c\uc758 \ubcc4\uce6d\uc744 \uc815\uc758\ud574\uc57c \ud569\ub2c8\ub2e4: \"users\"\ub294 \uc0ac\uc6a9\uc790 \ubc84\ud0b7\uc744 \uac00\ub9ac\ud0a4\uace0 \"fieldindex\"\ub294 \ud544\ub4dc \uc778\ub371\uc2a4 \ubc84\ud0b7\uc744 \uac00\ub9ac\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_the_function_code\">\ud568\uc218 \ucf54\ub4dc<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\uc774 \ub370\ubaa8\uc5d0\uc11c\ub294 \ub9e4\uc6b0 \uac04\ub2e8\ud55c \uc911\ubcf5 \uc81c\uac70 \uc2dc\ub098\ub9ac\uc624\ub97c \uace0\ub824\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4: \uc774\uba54\uc77c \uc8fc\uc18c\ub97c \uae30\ubc18\uc73c\ub85c \ud55c \uac04\uacb0\ud55c \uc0ac\uc6a9\uc790 \ubaa9\ub85d\uacfc \ub098\uc911\uc5d0 \uac10\uc0ac \ubaa9\uc801\uc73c\ub85c \ud574\ub2f9 \uc774\uba54\uc77c\uc774 \ud3ec\ud568\ub41c \ubaa8\ub4e0 \uc6d0\ubcf8 \ubb38\uc11c \ubaa9\ub85d\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc774 \uc608\uc5d0\uc11c\ub294 \ub9e4\uc6b0 \uac04\ub2e8\ud55c \ubb38\uc11c\ub85c \uc791\uc5c5\ud558\uaca0\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c\uc740 \uc544\uc774\ub514\uc5b4\ub97c \uc81c\uacf5\ud558\uae30 \uc704\ud55c \ubb38\uc11c\uc785\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">\"test::1\" {\r\n\t\"email\": \"abc@abc.com\"\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\ud568\uc218 \ucf54\ub4dc \uc804\uccb4\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">function OnUpdate(doc, meta) {\r\n    var email = getEmailFromDoc(doc)\r\n\r\n    if (email != null) {\r\n        var user = getUserFromEmail(email)\r\n        var userDoc = {}\r\n\r\n        if (user != null) {\r\n            userDoc = users[user]\r\n            userDoc.matches = userDoc.matches.concat([meta.id])\r\n        } else {\r\n            userDoc = doc\r\n            userDoc.userid = meta.id\r\n            userDoc.created = Date.now()\r\n            userDoc.matches = [meta.id]\r\n        }\r\n\r\n        users[userDoc.userid] = userDoc\r\n        addEmailToFieldIndex(email, userDoc.userid)\r\n    } else {\r\n        \/\/ doc does not have an email and is not valid for deduplication\r\n    }\r\n}\r\n\r\nfunction getEmailFromDoc(doc) {\r\n    for (var key in doc) {\r\n        var field = key.toLowerCase()\r\n\r\n        if (field.includes(\"email\")) {\r\n            return doc[key]\r\n        }\r\n    }\r\n\r\n    return null\r\n}\r\n\r\nfunction getUserFromEmail(email) {\r\n    try {\r\n        return fieldindex[\"email::\" + email].userid\r\n    } catch (e) {\r\n        \/\/ user was not found, let's just return null\r\n    }\r\n\r\n    return null\r\n}\r\n\r\nfunction addEmailToFieldIndex(email, user) {\r\n    fieldindex[\"email::\" + email] = {\"userid\": user}\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_parsing_the_document\">\ubb38\uc11c \uad6c\ubb38 \ubd84\uc11d\ud558\uae30<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>OnUpdate(doc, meta) \ud568\uc218\uc5d0\uc11c \uc2dc\uc791\ud569\ub2c8\ub2e4. \uc774 \ud568\uc218\ub294 \uc2a4\ud14c\uc774\uc9d5 \ubc84\ud0b7\uc5d0 \uc788\ub294 \ubb38\uc11c\uac00 \ubcc0\uacbd\ub420 \ub54c\ub9c8\ub2e4, \uc989 \uc6d0\uc2dc \ubb38\uc11c\uac00 \ucd94\uac00\ub418\uac70\ub098 \uc5c5\ub370\uc774\ud2b8\ub420 \ub54c\ub9c8\ub2e4 \ud638\ucd9c\ub429\ub2c8\ub2e4. \uccab \ubc88\uc9f8 \ub2e8\uacc4\ub294 \uc218\uc2e0 \ubb38\uc11c\uc758 \uc774\uba54\uc77c \uc8fc\uc18c\ub97c \ud655\uc778\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574 \uc791\uc740 \ub3c4\uc6b0\ubbf8 \ud568\uc218\uc778 getEmailFromDoc(doc)\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud568\uc218\ub294 \ub2e8\uc21c\ud788 \ubb38\uc11c\uc758 \ubaa8\ub4e0 \ud544\ub4dc \uc774\ub984\uc744 \ubc18\ubcf5\ud558\uc5ec '\uc774\uba54\uc77c'\uc774\ub77c\ub294 \ubb38\uc790\uc5f4\uc774 \ud3ec\ud568\ub41c \ud544\ub4dc \uc774\ub984\uc744 \ucc3e\uc740 \ub2e4\uc74c \ud574\ub2f9 \uac12\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. \uc774 \ud568\uc218\uc5d0\uc11c\ub294 \ud2b9\uc815 \ud544\ub4dc \uc774\ub984\uc744 \ucc3e\ub3c4\ub85d \uc120\ud0dd\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \uc5ec\uae30\uc5d0 \uc5ec\ub7ec \ub370\uc774\ud130 \uc18c\uc2a4\uac00 \uc788\ub294 \uacbd\uc6b0 \uac01 \uc18c\uc2a4\uc5d0\uc11c \uc11c\ub85c \ub2e4\ub978 \ud544\ub4dc \uc774\ub984\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c \uc704\uc758 \uc77c\ubc18\ud654\ub41c \uc811\uadfc \ubc29\uc2dd\uc774 \uc801\ud569\ud560 \uc218 \uc788\ub2e4\ub294 \uc810\uc744 \uc5fc\ub450\uc5d0 \ub450\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_finding_a_match\">\uc77c\uce58\ud558\ub294 \ud56d\ubaa9 \ucc3e\uae30<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\uc774\uba54\uc77c \uc8fc\uc18c\uac00 \uc900\ube44\ub418\uc5c8\uc73c\uba74 \uc774\uc81c \ub2e4\uc74c \ub2e8\uacc4\ub85c \ub118\uc5b4\uac08 \ucc28\ub840\uc785\ub2c8\ub2e4. \uc774\uba54\uc77c\uc774 \uc5c6\uc73c\uba74 \uc774 \uc608\uc81c\uc5d0\uc11c \ubb38\uc11c\ub97c \ubb34\uc2dc\ud558\uba74 \ub429\ub2c8\ub2e4. \uc774\uba54\uc77c \uc8fc\uc18c\ub97c \uc131\uacf5\uc801\uc73c\ub85c \uc5bb\uc5c8\ub2e4\uace0 \uac00\uc815\ud558\uba74 \ub2e4\uc74c \ub2e8\uacc4\ub294 \uc0ac\uc6a9\uc790\uac00 \uc774\ubbf8 \uc874\uc7ac\ud558\ub294 \uacbd\uc6b0 '\uc0ac\uc6a9\uc790' \ubc84\ud0b7\uc5d0\uc11c \ud45c\uc900 \uc0ac\uc6a9\uc790\ub97c \uac80\uc0c9\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574 \ub450 \ubc88\uc9f8 \ub3c4\uc6b0\ubbf8 \ud568\uc218\uc778 getUserFromEmail(email)\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud568\uc218\ub294 \uc774\uba54\uc77c\uc5d0 \ub300\ud55c \ud0a4 \uac12 \uc870\ud68c\ub85c \uac04\ub2e8\ud788 \uc0ac\uc6a9\ud560 \"fieldindex\" \ubc84\ud0b7\uc744 \ud65c\uc6a9\ud569\ub2c8\ub2e4. \"fieldindex\" \ubc84\ud0b7\uc5d0\uc11c \uc774\uba54\uc77c\uacfc \uc77c\uce58\ud558\ub294 \ubb38\uc11c\ub97c \uac80\uc0c9\ud569\ub2c8\ub2e4. \"fieldindex\"\uc758 \ud0a4\uc5d0 \ub370\uc774\ud130 \uc720\ud615\uc744 \ubbf8\ub9ac \ucd94\uac00\ud558\uc5ec \ub098\uc911\uc5d0 \ub354 \ub9ce\uc740 \ub370\uc774\ud130 \uc720\ud615\uc744 \ucd94\uac00\ud560 \ub54c \ud63c\ub3d9\ud558\uc9c0 \uc54a\ub3c4\ub85d \ud569\ub2c8\ub2e4! \"fieldindex\"\uc5d0\uc11c \uc774\uba54\uc77c\uc744 \ucc3e\uc73c\uba74 \uad00\ub828 \uc0ac\uc6a9\uc790 \uc544\uc774\ub514\ub97c \ubc18\ud658\ud558\uace0, \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74 null\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_deduplication\">\uc911\ubcf5 \uc81c\uac70<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\uc628\uc5c5\ub370\uc774\ud2b8 \ud568\uc218\uc5d0\uc11c \uae30\uc874 \uc0ac\uc6a9\uc790 \uc544\uc774\ub514\ub97c \ucc3e\ub294 \ub370 \uc131\uacf5\ud588\ub2e4\uba74 '\uc0ac\uc6a9\uc790' \ubc84\ud0b7\uc5d0\uc11c \ud574\ub2f9 \uae30\uc874 \uc0ac\uc6a9\uc790\ub97c \uac80\uc0c9\ud558\uace0 \ud604\uc7ac \ubb38\uc11c \uba54\ud0c0\uc544\uc774\ub514\ub97c \uc77c\uce58\ud558\ub294 \ubb38\uc11c \ubaa9\ub85d\uc5d0 \ucd94\uac00\ud558\uae30\ub9cc \ud558\uba74 \ub429\ub2c8\ub2e4. \uae30\uc874 \uc0ac\uc6a9\uc790 \uc544\uc774\ub514\ub97c \ucc3e\uc9c0 \ubabb\ud558\uba74 \uc0c8 \uc0ac\uc6a9\uc790\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4. \uc774\ub807\uac8c \ud558\ub824\uba74 \uc6d0\ubcf8 \ubb38\uc11c\uc5d0\uc11c \uc2dc\uc791\ud558\uc5ec \uc0dd\uc131\ub41c \ud0c0\uc784\uc2a4\ud0ec\ud504\uc640 \uc774 \uc0ac\uc6a9\uc790 \uc774\uba54\uc77c\uacfc \uc77c\uce58\ud558\ub294 \ubb38\uc11c \ubaa9\ub85d\uc744 \ub2f4\uc744 \uc77c\uce58 \ud56d\ubaa9 \uc2dc\uc791 \ud544\ub4dc \ub4f1 \uba87 \uac00\uc9c0 \ud544\ub4dc\ub97c \ucd94\uac00\ud558\uae30\ub9cc \ud558\uba74 \ub429\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc0c8 \uc0ac\uc6a9\uc790 \ubb38\uc11c\ub97c \uac00\uc838\uc624\uac70\ub098 \ub9cc\ub4e0 \ud6c4\uc5d0\ub294 \ud574\ub2f9 \ubb38\uc11c\ub97c '\uc0ac\uc6a9\uc790' \ubc84\ud0b7\uc5d0 \uc800\uc7a5\ud569\ub2c8\ub2e4. \uc0ac\uc6a9\uc790\ub97c \uc800\uc7a5\ud560 \uba54\ud0c0\uc544\uc774\ub514\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uc774 \uc608\uc5d0\uc11c\ub294 \ub2e8\uc21c\ud788 \uc774 \uc0ac\uc6a9\uc790\ub97c \uc0dd\uc131\ud558\ub294 \uc6d0\ubcf8 \ubb38\uc11c\uc758 \uba54\ud0c0\uc544\uc774\ub514\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\uc9c0\ub9cc, \ub2e4\ub978 \uac83\uc744 \uc120\ud0dd\ud560 \uc218\ub3c4 \uc788\uc73c\uba70 \uc774\ub294 \uc5ec\ub7ec\ubd84\uc758 \uc120\ud0dd\uc5d0 \ub2ec\ub824 \uc788\uc2b5\ub2c8\ub2e4. \uc0ac\uc6a9\uc790\uac00 \uc774\ubbf8 \uc874\uc7ac\ud558\ub294 \uacbd\uc6b0 \ub2e8\uc21c\ud788 \ub36e\uc5b4\uc4f0\uae30\ub9cc \ud558\uba74 \ub429\ub2c8\ub2e4.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_indexing_the_user\">\uc0ac\uc6a9\uc790 \uc0c9\uc778 \uc0dd\uc131<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c, \uc774 \uc774\uba54\uc77c \uc8fc\uc18c\uac00 \ud3ec\ud568\ub41c \ud5a5\ud6c4 \ubb38\uc11c\ub97c \uc62c\ubc14\ub974\uac8c \uc2dd\ubcc4\ud560 \uc218 \uc788\ub3c4\ub85d \"fieldindex\" \ubc84\ud0b7\uc744 \uc5c5\ub370\uc774\ud2b8\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574 \ub9c8\uc9c0\ub9c9 \ud5ec\ud37c \ud568\uc218\uc778 addEmailToFieldIndex(email, user)\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uc774 \ud568\uc218\ub294 \uc9c0\uc815\ub41c \uc774\uba54\uc77c\uc744 \ud0a4\ub85c, \uc9c0\uc815\ub41c \uc0ac\uc6a9\uc790 \uc544\uc774\ub514\ub97c \ubb38\uc11c \ubcf8\ubb38\uc73c\ub85c \"fieldindex\" \ubc84\ud0b7\uc5d0 \uac04\ub2e8\ud788 \uae30\ub85d\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc5ec\uae30\uae4c\uc9c0\uc785\ub2c8\ub2e4! <strong>\ub2e8 50\uc904\uc758 \ucf54\ub4dc\ub9cc\uc73c\ub85c \uc2e4\uc2dc\uac04 \uc0ac\uc6a9\uc790 \uc911\ubcf5 \uc81c\uac70 \uc5d4\uc9c4\uc758 \uc2dc\uc791\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/strong> \ud14c\uc2a4\ud2b8\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_testing_the_function\">\uae30\ub2a5 \ud14c\uc2a4\ud2b8<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\uc774 \ud568\uc218\ub97c \ubc30\ud3ec\ud55c \ud6c4 '\uc2a4\ud14c\uc774\uc9d5' \ubc84\ud0b7\uc5d0 \uba87 \uac1c\uc758 \ubb38\uc11c\ub97c \ub9cc\ub4e4\uc5b4 \ud14c\uc2a4\ud2b8\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uba3c\uc800 \uae30\uc900 \uc0ac\uc6a9\uc790\ub97c \ub9cc\ub4e4\uc5b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. '\uc2a4\ud14c\uc774\uc9d5' \ubc84\ud0b7\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc740 \uc0c8 \ubb38\uc11c\ub97c \ub9cc\ub4ed\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">\"test::1\" {\r\n\t\"email\": \"abc@abc.com\"\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\"fieldindex\" \ubc0f \"users\" \ubc84\ud0b7\uc5d0\uc11c \uc989\uac01\uc801\uc778 \ud6a8\uacfc\ub97c \ubcfc \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4. \"fieldindex\"\uc5d0\ub294 \ud0a4\/\uac12 \ubb38\uc11c\uac00 \ub9cc\ub4e4\uc5b4\uc838 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">email::abc@abc.com {\r\n\t\"userid\":\"test::1\"\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc774 \uc774\uba54\uc77c\uc740 \ub2e8\uc21c\ud788 \uc0ac\uc6a9\uc790 \uc544\uc774\ub514\ub97c \uac00\ub9ac\ud0a4\ub294 \uc774\uba54\uc77c\uc774\uba70, \uc774 \uacbd\uc6b0 \uccab \ubc88\uc9f8 \uc6d0\ubcf8 \ubb38\uc11c\uc758 \uba54\ud0c0 \uc544\uc774\ub514\uc778 test::1\uc5d0 \ud574\ub2f9\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub2e4\uc74c\uc73c\ub85c '\uc0ac\uc6a9\uc790' \ubc84\ud0b7\uc744 \uc0b4\ud3b4\ubd05\ub2c8\ub2e4. \uc5ec\uae30\uc5d0\ub294 \uc0c8\ub85c \uc0dd\uc131\ub41c \uc0ac\uc6a9\uc790\uac00 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">test::1 {\r\n\t\"email\":\"abc@abc.com\",\r\n\t\"userid\":\"test::1\",\r\n\t\"created\":1546531965825,\r\n\t\"matches\":[\"test::1\"]\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc6d0\ubcf8 \uc774\uba54\uc77c \uc8fc\uc18c\uc640 \uc77c\uce58\ud558\ub294 \ubb38\uc11c\uc758 \uc804\uccb4 \ubaa9\ub85d\uc744 \ud3ec\ud568\ud55c \uba87 \uac00\uc9c0 \ucd94\uac00 \ud544\ub4dc\uac00 \uc788\uc74c\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4(\ud604\uc7ac\ub85c\uc11c\ub294 \uccab \ubc88\uc9f8 \ubb38\uc11c\uc5d0 \ubd88\uacfc\ud569\ub2c8\ub2e4).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc5d0\uc9c0 \ucf00\uc774\uc2a4\ub97c \ud14c\uc2a4\ud2b8\ud558\uae30 \uc704\ud574 \ubb38\uc11c\ub97c \uba87 \uac1c \ub354 \ucd94\uac00\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c \ub450 \ubb38\uc11c\ub97c '\uc2a4\ud14c\uc774\uc9d5' \ubc84\ud0b7\uc5d0 \ucd94\uac00\ud569\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">test::2 {\r\n\t\"name\":\"Tavi\"\r\n}\r\n\r\ntest::3 {\r\n\t\"useremail\":\"abc@abc.com\"\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>test::2 \ubb38\uc11c\uc5d0\ub294 \uc774\uba54\uc77c \ud544\ub4dc\uac00 \uc5c6\uc73c\uba70 \uc774\uba54\uc77c\uc774 \uc5c6\ub294 \ubb38\uc11c\ub97c \ubb34\uc2dc\ud558\uace0 \uc788\ub2e4\ub294 \uc0ac\uc2e4\uc744 \ud14c\uc2a4\ud2b8\ud558\ub294 \uc6a9\ub3c4\ub85c\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>test::3 \ubb38\uc11c\uc5d0\uc11c\ub294 \uba87 \uac00\uc9c0\ub97c \ud14c\uc2a4\ud2b8\ud569\ub2c8\ub2e4. \uccab\uc9f8, \uc774\uba54\uc77c \ud544\ub4dc\uac00 \"useremail\"\uc774\uc9c0\ub9cc \uc77c\ubc18\uc801\uc778 \uc774\uba54\uc77c \ud544\ub4dc \ucc3e\uae30 \ubc29\uc2dd\uc774\ubbc0\ub85c \ubb38\uc81c\uc5c6\uc774 \uc7a1\ud600\uc57c \ud569\ub2c8\ub2e4. \ub458\uc9f8, \uc77c\uce58\ud558\ub294 \uc774\uba54\uc77c\uc774 \uc788\uc2b5\ub2c8\ub2e4! \"\uc0ac\uc6a9\uc790\" \ubc84\ud0b7\uc744 \ud655\uc778\ud558\uc5ec \uc5b4\ub5bb\uac8c \ub418\uc5c8\ub294\uc9c0 \uc0b4\ud3b4\ubd05\uc2dc\ub2e4. \uc5ec\uc804\ud788 \ud55c \uba85\uc758 \uc0ac\uc6a9\uc790\ub9cc \uc788\uc9c0\ub9cc \ubb38\uc11c\uac00 \uc57d\uac04 \ub2e4\ub985\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">test::1 {\r\n\t\"email\":\"abc@abc.com\",\r\n\t\"userid\":\"test::1\",\r\n\t\"created\":1546531965825,\r\n\t\"matches\":[\"test::1\", \"test::3\"]\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc5ec\uae30\uc11c \uc720\uc77c\ud55c \ucc28\uc774\uc810\uc740 \uc774\uc81c \uc77c\uce58 \ud544\ub4dc\uc5d0 test::3 \ubb38\uc11c\uc5d0 \ub300\ud55c \ucc38\uc870\uac00 \uc788\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4. \ub9cc\uc138! \ud574\ub2f9 \ubb38\uc11c\ub97c \uc131\uacf5\uc801\uc73c\ub85c \uc911\ubcf5 \uc81c\uac70\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_conclusion\">\uacb0\ub860<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\uc704\uc5d0 \ud45c\uc2dc\ub41c \uac83\ucc98\ub7fc \uc0c8\ub85c\uc6b4 Couchbase Eventing \uc2dc\uc2a4\ud15c\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc2e4\uc2dc\uac04 \uc0ac\uc6a9\uc790 \uc911\ubcf5 \uc81c\uac70 \uc5d4\uc9c4\uc744 \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uc608\uc81c\ub294 \ub9e4\uc6b0 \ub2e8\uc21c\ud654\ub418\uc5c8\uc9c0\ub9cc, \uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8(\uc774\ubca4\ud2b8 \ud568\uc218\uc5d0 \uc0ac\uc6a9\ub418\ub294 \uc5b8\uc5b4)\ub294 \ub9e4\uc6b0 \ub2e4\uc7ac\ub2e4\ub2a5\ud558\uba70 \uc6d0\ud558\ub294 \uac70\uc758 \ubaa8\ub4e0 \uac83\uc744 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ubcf4\ub2e4 \uc644\ubcbd\ud55c \uae30\ub2a5\uc744 \uac16\ucd98 \uc911\ubcf5 \uc81c\uac70 \uc5d4\uc9c4\uc740 \uc0ac\uc6a9\uc790 \uc774\uba54\uc77c\ubfd0 \uc544\ub2c8\ub77c \ub354 \ub9ce\uc740 \ud544\ub4dc\ub97c \uace0\ub824\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud6e8\uc52c \ub354 \ubcf5\uc7a1\ud55c \ud734\ub9ac\uc2a4\ud2f1\uc744 \uc0ac\uc6a9\ud574 \ubb38\uc11c\ub97c \uc11c\ub85c \uc77c\uce58\uc2dc\ud0ac \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \ud2b9\uc815 \uc0ac\uc6a9\uc790\uc758 \uc2dd\ubcc4 \uc815\ubcf4\ub97c \uae30\ubc18\uc73c\ub85c \ud2b9\uc815 \uc0ac\uc6a9\uc790\ub97c \uac00\uad6c\ub85c \uadf8\ub8f9\ud654\ud558\ub294 \ub450 \ubc88\uc9f8 \uc218\uc900\uc758 \ub9e4\uce6d\uc744 \uace0\ub824\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ubaa8\ub4e0 \uac83\uc740 \uc0ac\uc6a9\uc790\uc758 \uc120\ud0dd\uc5d0 \ub2ec\ub824 \uc788\uc9c0\ub9cc, Couchbase Eventing\uc744 \uc0ac\uc6a9\ud558\uba74 \uc2e4\uc2dc\uac04 \uc911\ubcf5 \uc81c\uac70\uac00 \uc26c\uc6cc\uc9d1\ub2c8\ub2e4.<\/p>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>User deduplication is an important activity for anyone managing a corpus of user related data. In some cases you may end up with multiple versions of the same user in your database. This can happen for any number of reasons: [&hellip;]<\/p>","protected":false},"author":71,"featured_media":6291,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816,2273,9327],"tags":[1543],"ppma_author":[8937],"class_list":["post-6290","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-eventing","category-javascript","tag-javascript"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.7 (Yoast SEO v26.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Real Time User Deduplication with Couchbase Eventing<\/title>\n<meta name=\"description\" content=\"User deduplication is an important activity for anyone managing user related data. Couchbase Eventing is a new option for effective deduplication.\" \/>\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\/real-time-user-deduplication-couchbase-eventing\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Real Time User Deduplication with Couchbase Eventing\" \/>\n<meta property=\"og:description\" content=\"User deduplication is an important activity for anyone managing user related data. Couchbase Eventing is a new option for effective deduplication.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/real-time-user-deduplication-couchbase-eventing\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-01-21T21:46:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T05:39:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/01\/118-hero-deduplication.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"600\" \/>\n\t<meta property=\"og:image:height\" content=\"209\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"Real Time User Deduplication with Couchbase Eventing\",\"datePublished\":\"2019-01-21T21:46:34+00:00\",\"dateModified\":\"2025-06-14T05:39:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/\"},\"wordCount\":1463,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/01\/118-hero-deduplication.jpg\",\"keywords\":[\"javascript\"],\"articleSection\":[\"Couchbase Server\",\"Eventing\",\"JavaScript\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/\",\"name\":\"Real Time User Deduplication with Couchbase Eventing\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/01\/118-hero-deduplication.jpg\",\"datePublished\":\"2019-01-21T21:46:34+00:00\",\"dateModified\":\"2025-06-14T05:39:33+00:00\",\"description\":\"User deduplication is an important activity for anyone managing user related data. Couchbase Eventing is a new option for effective deduplication.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/01\/118-hero-deduplication.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/01\/118-hero-deduplication.jpg\",\"width\":600,\"height\":209,\"caption\":\"Pete Rose Baseballs by David Berkowitz - licensed through Creative Commons - https:\/\/www.flickr.com\/photos\/davidberkowitz\/6006921869\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Real Time User Deduplication with Couchbase Eventing\"}]},{\"@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\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\/\/crosscuttingconcerns.com\",\"https:\/\/x.com\/mgroves\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc774\ubca4\ud2b8 \uae30\ub2a5\uc744 \ud1b5\ud55c \uc2e4\uc2dc\uac04 \uc0ac\uc6a9\uc790 \uc911\ubcf5 \uc81c\uac70","description":"\uc0ac\uc6a9\uc790 \uc911\ubcf5 \uc81c\uac70\ub294 \uc0ac\uc6a9\uc790 \uad00\ub828 \ub370\uc774\ud130\ub97c \uad00\ub9ac\ud558\ub294 \ubaa8\ub4e0 \uc0ac\ub78c\uc5d0\uac8c \uc911\uc694\ud55c \ud65c\ub3d9\uc785\ub2c8\ub2e4. \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc774\ubca4\ud2b8\ub294 \ud6a8\uacfc\uc801\uc778 \uc911\ubcf5 \uc81c\uac70\ub97c \uc704\ud55c \uc0c8\ub85c\uc6b4 \uc635\uc158\uc785\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\/real-time-user-deduplication-couchbase-eventing\/","og_locale":"ko_KR","og_type":"article","og_title":"Real Time User Deduplication with Couchbase Eventing","og_description":"User deduplication is an important activity for anyone managing user related data. Couchbase Eventing is a new option for effective deduplication.","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/real-time-user-deduplication-couchbase-eventing\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-01-21T21:46:34+00:00","article_modified_time":"2025-06-14T05:39:33+00:00","og_image":[{"width":600,"height":209,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/01\/118-hero-deduplication.jpg","type":"image\/jpeg"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"8\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"Real Time User Deduplication with Couchbase Eventing","datePublished":"2019-01-21T21:46:34+00:00","dateModified":"2025-06-14T05:39:33+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/"},"wordCount":1463,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/01\/118-hero-deduplication.jpg","keywords":["javascript"],"articleSection":["Couchbase Server","Eventing","JavaScript"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/","url":"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc774\ubca4\ud2b8 \uae30\ub2a5\uc744 \ud1b5\ud55c \uc2e4\uc2dc\uac04 \uc0ac\uc6a9\uc790 \uc911\ubcf5 \uc81c\uac70","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/01\/118-hero-deduplication.jpg","datePublished":"2019-01-21T21:46:34+00:00","dateModified":"2025-06-14T05:39:33+00:00","description":"\uc0ac\uc6a9\uc790 \uc911\ubcf5 \uc81c\uac70\ub294 \uc0ac\uc6a9\uc790 \uad00\ub828 \ub370\uc774\ud130\ub97c \uad00\ub9ac\ud558\ub294 \ubaa8\ub4e0 \uc0ac\ub78c\uc5d0\uac8c \uc911\uc694\ud55c \ud65c\ub3d9\uc785\ub2c8\ub2e4. \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc774\ubca4\ud2b8\ub294 \ud6a8\uacfc\uc801\uc778 \uc911\ubcf5 \uc81c\uac70\ub97c \uc704\ud55c \uc0c8\ub85c\uc6b4 \uc635\uc158\uc785\ub2c8\ub2e4.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/01\/118-hero-deduplication.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/01\/118-hero-deduplication.jpg","width":600,"height":209,"caption":"Pete Rose Baseballs by David Berkowitz - licensed through Creative Commons - https:\/\/www.flickr.com\/photos\/davidberkowitz\/6006921869"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/real-time-user-deduplication-couchbase-eventing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Real Time User Deduplication with Couchbase Eventing"}]},{"@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\/3929663e372020321b0152dc4fa65a58","name":"\ub9e4\ud29c \uadf8\ub85c\ube0c\uc2a4","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"Matthew D. Groves\ub294 \ucf54\ub529\uc744 \uc88b\uc544\ud558\ub294 \uc0ac\ub78c\uc785\ub2c8\ub2e4. C#, jQuery, PHP \ub4f1 \ubb34\uc5c7\uc774\ub4e0 \ud480 \ub9ac\ud018\uc2a4\ud2b8\ub97c \uc81c\ucd9c\ud560 \uc815\ub3c4\ub85c \ucf54\ub529\uc744 \uc88b\uc544\ud569\ub2c8\ub2e4. 90\ub144\ub300\uc5d0 \ubd80\ubaa8\ub2d8\uc758 \ud53c\uc790 \uac00\uac8c\ub97c \uc704\ud574 QuickBASIC POS \uc571\uc744 \ub9cc\ub4e0 \uc774\ud6c4\ub85c \uc804\ubb38\uc801\uc73c\ub85c \ucf54\ub529\uc744 \ud574\uc654\uc2b5\ub2c8\ub2e4. \ud604\uc7ac Couchbase\uc758 \uc120\uc784 \uc81c\ud488 \ub9c8\ucf00\ud305 \uad00\ub9ac\uc790\ub85c \uc77c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc5ec\uac00 \uc2dc\uac04\uc5d0\ub294 \uac00\uc871\uacfc \ud568\uaed8 \ucd95\uad6c \uacbd\uae30\ub97c \uad00\ub78c\ud558\uace0 \uac1c\ubc1c\uc790 \ucee4\ubba4\ub2c8\ud2f0\uc5d0 \ucc38\uc5ec\ud558\uba70 \uc2dc\uac04\uc744 \ubcf4\ub0c5\ub2c8\ub2e4. \uadf8\ub294 .NET\uc758 AOP, .NET\uc758 \ud504\ub85c \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4, Pluralsight \uc800\uc790, Microsoft MVP\uc758 \uc800\uc790\uc774\uae30\ub3c4 \ud569\ub2c8\ub2e4.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/matthew-groves\/"}]}},"authors":[{"term_id":8937,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","author_category":"","last_name":"Groves","first_name":"Matthew","job_title":"","user_url":"https:\/\/crosscuttingconcerns.com","description":"Matthew D. Groves\ub294 \ucf54\ub529\uc744 \uc88b\uc544\ud558\ub294 \uc0ac\ub78c\uc785\ub2c8\ub2e4.  C#, jQuery, PHP \ub4f1 \ubb34\uc5c7\uc774\ub4e0 \ud480 \ub9ac\ud018\uc2a4\ud2b8\ub97c \uc81c\ucd9c\ud560 \uc815\ub3c4\ub85c \ucf54\ub529\uc744 \uc88b\uc544\ud569\ub2c8\ub2e4.  90\ub144\ub300\uc5d0 \ubd80\ubaa8\ub2d8\uc758 \ud53c\uc790 \uac00\uac8c\ub97c \uc704\ud574 QuickBASIC POS \uc571\uc744 \ub9cc\ub4e0 \uc774\ud6c4\ub85c \uc804\ubb38\uc801\uc73c\ub85c \ucf54\ub529\uc744 \ud574\uc654\uc2b5\ub2c8\ub2e4.  \ud604\uc7ac Couchbase\uc758 \uc120\uc784 \uc81c\ud488 \ub9c8\ucf00\ud305 \uad00\ub9ac\uc790\ub85c \uc77c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc5ec\uac00 \uc2dc\uac04\uc5d0\ub294 \uac00\uc871\uacfc \ud568\uaed8 \ucd95\uad6c \uacbd\uae30\ub97c \uad00\ub78c\ud558\uace0 \uac1c\ubc1c\uc790 \ucee4\ubba4\ub2c8\ud2f0\uc5d0 \ucc38\uc5ec\ud558\uba70 \uc2dc\uac04\uc744 \ubcf4\ub0c5\ub2c8\ub2e4.  \uadf8\ub294 .NET\uc758 AOP, .NET\uc758 \ud504\ub85c \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4, Pluralsight \uc800\uc790, Microsoft MVP\uc758 \uc800\uc790\uc774\uae30\ub3c4 \ud569\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/6290","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\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=6290"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/6290\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/6291"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=6290"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=6290"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=6290"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=6290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}