{"id":1819,"date":"2014-12-16T17:45:47","date_gmt":"2014-12-16T17:45:47","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1819"},"modified":"2025-06-13T23:52:01","modified_gmt":"2025-06-14T06:52:01","slug":"using-couchbase-ruby-gem-eventmachine","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/using-couchbase-ruby-gem-eventmachine\/","title":{"rendered":"\uc774\ubca4\ud2b8\uba38\uc2e0\uacfc \ud568\uaed8 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub8e8\ube44 \uc82c \uc0ac\uc6a9\ud558\uae30"},"content":{"rendered":"<p>\uc774\ubbf8 \ub208\uce58\ucc44\uc168\uaca0\uc9c0\ub9cc, \uc0c8\ub85c\uc6b4 <a href=\"https:\/\/rubygems.org\/gems\/couchbase\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub8e8\ube44 \uc82c<\/a> \uac00 \ucd5c\uadfc \ucd9c\uc2dc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. 1.2.2 \ub9b4\ub9ac\uc2a4\ub294 \ub300\ubd80\ubd84 \uba87 \uac00\uc9c0 \ubc84\uadf8 \uc218\uc815\uc774 \ud3ec\ud568\ub41c \uc720\uc9c0 \uad00\ub9ac \ub9b4\ub9ac\uc2a4\uc774\uc9c0\ub9cc, \uc0c8\ub85c\uc6b4 \uc2e4\ud5d8\uc801 \uae30\ub2a5\uc778 \ub2e4\uc74c\uacfc \ud1b5\ud569\uc744 \uc2dc\ub3c4\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/rubygems.org\/gems\/eventmachine\">\uc774\ubca4\ud2b8 \uba38\uc2e0<\/a> \ub77c\uc774\ube0c\ub7ec\ub9ac\uc785\ub2c8\ub2e4. \uc774 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 \uc774\ubca4\ud2b8\uba38\uc2e0 \ube44\ub3d9\uae30 \ubaa8\ub378\uc5d0 \uae30\ubc18\ud55c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c Couchbase Server\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uac04\ub7b5\ud558\uac8c \uc18c\uac1c\ud569\ub2c8\ub2e4.<\/p>\n<p>EventMachine \ud1b5\ud569\uc740 (\ud604\uc7ac) UNIX \uacc4\uc5f4 \uc2dc\uc2a4\ud15c(\uc608: Linux, Solaris, BSD)\uc5d0\uc11c\ub9cc \uc561\uc138\uc2a4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.  \ub610\ud55c \ud30c\uc774\ubc84\ub97c \uc0ac\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0 MRI \ub8e8\ube44 \ubc84\uc804 1.9 \uc774\uc0c1\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n<h2>\uc0cc\ub4dc\ubc15\uc2a4 \uc124\uc815<\/h2>\n<p>\uccab \ubc88\uc9f8 \ub2e8\uacc4\ub294 \ubaa8\ub4e0 \uc800\uc218\uc900 Couchbase \ud504\ub85c\ud1a0\ucf5c \uc138\ubd80 \uc0ac\ud56d\uc744 \ucc98\ub9ac\ud558\ub294 libcouchbase \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc124\uce58\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc124\uce58\ud558\ub824\uba74 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/develop\/c\/current\/\">\uacf5\uc2dd \ud398\uc774\uc9c0\uc758 \uc124\uce58 \uac00\uc774\ub4dc<\/a>. \uc5ec\uae30\uc11c\ub294 \uc77c\ubc18\uc801\uc778 GNU\/Linux \ubc15\uc2a4(\uc800\ub294 Debian \ubd88\uc548\uc815 \ubc84\uc804\uc744 \uc0ac\uc6a9 \uc911\uc785\ub2c8\ub2e4)\uc5d0 \ud544\uc694\ud55c \ub2e8\uacc4\ub9cc \ubcf5\uc81c\ud558\uaca0\uc2b5\ub2c8\ub2e4:<\/p>\n<ol>\n<li>\n<p>\ub9ac\ud3ec\uc9c0\ud1a0\ub9ac PGP \ud0a4\ub97c \uc124\uce58\ud569\ub2c8\ub2e4:<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family:monospace\">$ wget -O- https:\/\/packages.couchbase.com\/ubuntu\/couchbase.key | sudo apt-key add -<\/div>\n<\/p><\/div>\n<\/li>\n<li>\n<p>\uc124\uc815 \uc800\uc7a5\uc18c \uc18c\uc2a4. \uc5ec\uae30\uc11c\ub294 \uc6b0\ubd84\ud22c 12.04\uc6a9 \ub9c1\ud06c\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\uc9c0\ub9cc, \uc77c\ubc18\uc801\uc73c\ub85c\ub294 \uc82c \uc790\uccb4\uc5d0 \ub0b4\uc7a5\ub41c \uc774\ubca4\ud2b8\uba38\uc2e0 \ud50c\ub7ec\uadf8\uc778\uc744 \uc0ac\uc6a9\ud560 \uac83\uc774\ubbc0\ub85c \uc911\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ud328\ud0a4\uc9c0\ub294 \ub3d9\uc77c\ud55c \ucf54\ub4dc\ubca0\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \ube4c\ub4dc\ub41c \ub2e4\ub978 \ud328\ud0a4\uc9c0 \uc800\uc7a5\uc18c\uc5d0 \uc788\uc73c\uba70, \uc720\uc77c\ud55c \ucc28\uc774\uc810\uc740 IO \ub77c\uc774\ube0c\ub7ec\ub9ac \ubc84\uc804(<a href=\"https:\/\/libevent.org\">libevent<\/a>, <a href=\"https:\/\/software.schmorp.de\/pkg\/libev.html\">\ub9ac\ubca0\ud504<\/a>) \ubc30\ud3ec \ubc84\uc804\uc5d0 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family:monospace\">$ sudo wget -O\/etc\/apt\/sources.list.d\/couchbase.list https:\/\/packages.couchbase.com\/ubuntu\/couchbase-ubuntu1204.list<\/div>\n<\/p><\/div>\n<\/li>\n<li>\n<p>libcouchbase \ud5e4\ub354, \ud575\uc2ec \ub77c\uc774\ube0c\ub7ec\ub9ac \ubc0f \ub514\ubc84\uadf8 \uc2ec\ubcfc\uc744 \uc124\uce58\ud569\ub2c8\ub2e4. \ub2e4\uc2dc \ub9d0\ud558\uc9c0\ub9cc, \uba85\ub839\uc904 \ub3c4\uad6c\ub098 IO \ubc31\uc5d4\ub4dc \uc911 \ud558\ub098\ub97c \uc124\uce58\ud560 \uc218\ub3c4 \uc788\uc9c0\ub9cc \ud604\uc7ac \uc791\uc5c5\uc5d0\ub294 \ud544\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family:monospace\">$ sudo apt-get \uc5c5\ub370\uc774\ud2b8<br \/>\n\t$ sudo sudo apt-get \uc124\uce58 libcouchbase-dev libcouchbase2-core libcouchbase-dbg<\/div>\n<div class=\"text geshifilter-text\" style=\"font-family:monospace\">\u00a0<\/div>\n<\/p><\/div>\n<p>\uadf8\uac8c \ub2e4\uc785\ub2c8\ub2e4.\u00a0<\/p>\n<p>\uc774\uc81c \ub2e4\uc74c\uc744 \uc124\uce58\ud574\uc57c \ud569\ub2c8\ub2e4. <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/download\/\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc11c\ubc84<\/a>\ub97c \ud074\ub9ad\ud558\uace0 \uacf5\uc2dd \uc0ac\uc774\ud2b8\uc758 \uc9c0\uce68\uc744 \ub530\ub985\ub2c8\ub2e4. \uc124\uce58 \ud6c4\uc5d0\ub294 https:\/\/localhost:8091 \uc5d0\uc11c \uad00\ub9ac\uc790 \ucf58\uc194\uc774 \uc2e4\ud589\ub418\uace0 \ub3d9\uc77c\ud55c \ud3ec\ud2b8\uc5d0\uc11c REST API\ub3c4 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucd08\uae30 \uad6c\uc131 \ub2e8\uacc4\ub97c \uac70\uce58\uba74 \uacb0\uad6d \"default\"\ub77c\ub294 \uc774\ub984\uc758 \ubc84\ud0b7\uc774 \ud560\ub2f9\ub429\ub2c8\ub2e4.<\/p>\n<\/li>\n<li>\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c \ubcf4\uc11d \uc790\uccb4\ub97c \uc124\uce58\ud574\uc57c \ud569\ub2c8\ub2e4. \ud130\ubbf8\ub110\uc5d0 \uc785\ub825\ud558\ub294 \uac83\ub9cc\ud07c\uc774\ub098 \uac04\ub2e8\ud569\ub2c8\ub2e4:<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family:monospace\">$ \ubcf4\uc11d \uc124\uce58 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4<br \/>\n\t\uae30\ubcf8 \ud655\uc7a5 \ud504\ub85c\uadf8\ub7a8 \uad6c\ucd95\ud558\uae30.  \uc2dc\uac04\uc774 \uac78\ub9b4 \uc218 \uc788\uc2b5\ub2c8\ub2e4...<br \/>\n\tcouchbase-1.2.2 \uc124\uce58 \uc131\uacf5<br \/>\n\t\ubcf4\uc11d 1\uac1c \uc124\uce58<br \/>\n\tcouchbase-1.2.2\uc6a9 ri \ubb38\uc11c \uc124\uce58...<br \/>\n\tcouchbase-1.2.2\uc6a9 RDoc \ubb38\uc11c \uc124\uce58...<\/div>\n<\/p><\/div>\n<\/li>\n<\/ol>\n<h2>\uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uad6c\ucd95<\/h2>\n<p>\ud1b5\ud569\uc744 \uc2dc\uc5f0\ud558\uae30 \uc704\ud574 EventMachine\uc744 \uc0ac\uc6a9\ud558\uc5ec \uac04\ub2e8\ud55c \ucc44\ud305 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ube4c\ub4dc\ud558\uace0 \ubaa8\ub4e0 \uc774\ubca4\ud2b8\uc5d0 \ub300\ud55c \ub85c\uae45\uc744 Couchbase \ubc84\ud0b7\uc5d0 \ucd94\uac00\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. EventMachine\uc744 \uc0ac\uc6a9\ud558\uc5ec \ube44\ub3d9\uae30 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uad6c\ucd95\ud558\ub294 \uac83\uc740 \ub9e4\uc6b0 \uc26c\uc6b0\uba70 \uc774\ub97c \uc99d\uba85\ud558\uae30 \uc704\ud574 \uc774 \uac8c\uc2dc\ubb3c\uc5d0 \uc804\uccb4 \uc18c\uc2a4\ub97c \ub123\uc744 \uac83\uc785\ub2c8\ub2e4(\u00a0<a href=\"https:\/\/github.com\/couchbase\/couchbase-ruby-client\/tree\/master\/examples\/chat-em\">examples\/chat-em<\/a> \ub514\ub809\ud1a0\ub9ac\uc5d0 \uc800\uc7a5\ud569\ub2c8\ub2e4).<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family:monospace\">ChatServer \ud074\ub798\uc2a4 &lt; EM::\uc5f0\uacb0<\/p>\n<p>\u00a0 @@clients = []<\/p>\n<p>\u00a0 def post_init<br \/>\n\u00a0 \u00a0 \uc0ac\uc6a9\uc790 \uc774\ub984 = nil<br \/>\n\u00a0 \u00a0 send_data(\"*** \uc774\ub984\uc774 \ubb34\uc5c7\uc778\uac00\uc694?\")<br \/>\n\u00a0 \ub05d<\/p>\n<p>\u00a0 def receive_data(data)<br \/>\n\u00a0 \u00a0 if @\uc0ac\uc6a9\uc790\uba85<br \/>\n\u00a0 \u00a0 \u00a0 \ube0c\ub85c\ub4dc\uce90\uc2a4\ud2b8(\ub370\uc774\ud130 \uc2a4\ud2b8\ub9bd, @\uc0ac\uc6a9\uc790 \uc774\ub984)<br \/>\n\u00a0 \u00a0 else<br \/>\n\u00a0 \u00a0 \u00a0 name = data.gsub(\/s+|[[]]\/, '').strip[0..20]<br \/>\n\u00a0 \u00a0 \u00a0 if name.empty?<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 send_data(\"*** \uc774\ub984\uc774 \ubb34\uc5c7\uc778\uac00\uc694?\")<br \/>\n\u00a0 \u00a0 \u00a0 else<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \uc0ac\uc6a9\uc790 \uc774\ub984 = \uc774\ub984<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 @@clients.push(self)<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 broadcast(\"#{@\uc0ac\uc6a9\uc790 \uc774\ub984}\uc774 \uac00\uc785\ud588\uc2b5\ub2c8\ub2e4\")<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 send_data(\"*** \uc548\ub155\ud558\uc138\uc694, #{@username}!n\")<br \/>\n\u00a0 \u00a0 \u00a0 \ub05d<br \/>\n\u00a0 \u00a0 \ub05d<br \/>\n\u00a0 \ub05d<\/p>\n<p>\u00a0 def unbind<br \/>\n\u00a0 \u00a0 @@clients.delete(self)<br \/>\n\u00a0 \u00a0 \ubc29\uc1a1(\"#{@\uc0ac\uc6a9\uc790 \uc774\ub984}\uc774 \ub5a0\ub0ac\uc2b5\ub2c8\ub2e4\") if @\uc0ac\uc6a9\uc790 \uc774\ub984<br \/>\n\u00a0 \ub05d<\/p>\n<p>\u00a0 def broadcast(message, author = nil)<br \/>\n\u00a0 \u00a0 \uc811\ub450\uc0ac = \uc791\uc131\uc790 ? \"\" : \"***\"<br \/>\n\u00a0 \u00a0 @@clients.each do |client|<br \/>\n\u00a0 \u00a0 \u00a0 \ud074\ub77c\uc774\uc5b8\ud2b8 == self\uac00 \uc544\ub2c8\uba74<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 client.send_data(\"#{\uc811\ub450\uc0ac} #{\uba54\uc2dc\uc9c0}n\")<br \/>\n\u00a0 \u00a0 \u00a0 \ub05d<br \/>\n\u00a0 \u00a0 \ub05d<br \/>\n\u00a0 \ub05d<\/p>\n<p>\ub05d<\/p>\n<p>\uc774\ubca4\ud2b8\uba38\uc2e0.\uc2e4\ud589<br \/>\n\u00a0 #\ub97c \ub20c\ub7ec \uc911\uc9c0\ud558\ub824\uba74 Control + C\ub97c \ub204\ub985\ub2c8\ub2e4.<br \/>\n\u00a0 Signal.trap(\"INT\") { EventMachine.stop }<br \/>\n\u00a0 Signal.trap(\"TERM\") { EventMachine.stop }<\/p>\n<p>\u00a0 EventMachine.start_server(\"0.0.0.0\", 9999, ChatServer)<br \/>\n\ub05d<\/div>\n<\/div>\n<p>\uc774\uac83\uc740 EM::Connection\uc744 \uae30\ubc18\uc73c\ub85c \ud558\ub294 \uc77c\ubc18\uc801\uc778 \uc774\ubca4\ud2b8 \uba38\uc2e0 \uc11c\ubc84\uc785\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uc7ac\uc815\uc758\ub41c \uba54\uc11c\ub4dc\uc758 \uc758\ubbf8\ub97c \ubaa8\ub974\ub294 \ubd84\ub4e4\uc744 \uc704\ud574 \ub2e4\uc74c\uc740 <a href=\"https:\/\/eventmachine.rubyforge.org\/EventMachine\/Connection.html\">\uacf5\uc2dd \ubb38\uc11c<\/a>:<\/p>\n<blockquote>\n<p>EventMachine::Connection\uc740 \uc0c8 \uc5f0\uacb0\uc774 \uc0dd\uc131\ub420 \ub54c\ub9c8\ub2e4 EventMachine\uc758 \ucc98\ub9ac \ub8e8\ud504\uc5d0 \uc758\ud574 \uc778\uc2a4\ud134\uc2a4\ud654\ub418\ub294 \ud074\ub798\uc2a4\uc785\ub2c8\ub2e4. (\uc0c8 \uc5f0\uacb0\uc740 \uc6d0\uaca9 \uc11c\ubc84\uc5d0 \ub85c\uceec\ub85c \uc2dc\uc791\ub418\uac70\ub098 \uc6d0\uaca9 \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0\uc11c \ub85c\uceec\ub85c \uc218\ub77d\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4). \uc5f0\uacb0 \uac1d\uccb4\uac00 \uc778\uc2a4\ud134\uc2a4\ud654\ub418\uba74 connect \ub610\ub294 start_server \ud638\ucd9c\uc5d0 \uc9c0\uc815\ub41c \uc0ac\uc6a9\uc790 \uc815\uc758 \ubaa8\ub4c8\uc5d0 \ud3ec\ud568\ub41c \uae30\ub2a5\uc774 \ud63c\ud569\ub429\ub2c8\ub2e4. \uc0ac\uc6a9\uc790 \uc815\uc758 \ud578\ub4e4\ub7ec \ubaa8\ub4c8\uc740 \uc5ec\uae30\uc5d0 \uc815\uc758\ub41c \ud45c\uc900 \uba54\uc11c\ub4dc\uc758 \uc77c\ubd80 \ub610\ub294 \uc804\ubd80\ub97c \uc7ac\uc815\uc758\ud560 \uc218 \uc788\uc744 \ubfd0\ub9cc \uc544\ub2c8\ub77c \uc784\uc758\uc758 \ucd94\uac00 \ucf54\ub4dc\ub97c \ucd94\uac00\ud558\uc5ec \ud63c\ud569\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>EventMachine\uc740 \uc8fc\uc5b4\uc9c4 \uc2dc\uac04\uc5d0 \ud65c\uc131\ud654\ub41c \ubaa8\ub4e0 \ub124\ud2b8\uc6cc\ud06c \uc5f0\uacb0\uc5d0 \ub300\ud574 EventMachine::Connection\uc5d0\uc11c \uc0c1\uc18d\ub41c(\uadf8\ub9ac\uace0 \ud63c\ud569\ub41c \uc0ac\uc6a9\uc790 \ucf54\ub4dc\uac00 \ud3ec\ud568\ub41c) \ud558\ub098\uc758 \uac1d\uccb4\ub97c \uad00\ub9ac\ud569\ub2c8\ub2e4. \uc774\ubca4\ud2b8 \ub8e8\ud504\ub294 \uc544\ub798 \uc124\uba85\ub41c \ub300\ub85c \ud574\ub2f9 \uc5f0\uacb0\uc5d0\uc11c \ud2b9\uc815 \uc774\ubca4\ud2b8\uac00 \ubc1c\uc0dd\ud560 \ub54c\ub9c8\ub2e4 EventMachine::Connection \uac1d\uccb4\uc758 \uba54\uc11c\ub4dc\ub97c \uc790\ub3d9\uc73c\ub85c \ud638\ucd9c\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc774 \ud074\ub798\uc2a4\ub294 \uc0ac\uc6a9\uc790 \ucf54\ub4dc\uc5d0 \uc758\ud574 \uc778\uc2a4\ud134\uc2a4\ud654\ub418\uc9c0 \uc54a\uc73c\uba70 \ucd08\uae30\ud654 \uba54\uc11c\ub4dc\ub97c \uac8c\uc2dc\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc774\ubca4\ud2b8 \ub8e8\ud504\uc5d0\uc11c \ud638\ucd9c\ud560 \uc218 \uc788\ub294 EventMachine::Connection\uc758 \uc778\uc2a4\ud134\uc2a4 \uba54\uc11c\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4: #post_init, #connection_completed, #receive_data, #unbind, #ssl_verify_peer(TLS\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0), #ssl_handshake_completed.<\/p>\n<p>\uc5ec\uae30\uc5d0 \uc815\uc758\ub41c \ub2e4\ub978 \ubaa8\ub4e0 \uc778\uc2a4\ud134\uc2a4 \uba54\uc11c\ub4dc\ub294 \uc0ac\uc6a9\uc790 \ucf54\ub4dc\uc5d0 \uc758\ud574\uc11c\ub9cc \ud638\ucd9c\ub429\ub2c8\ub2e4.<\/p>\n<\/blockquote>\n<p>\ud504\ub85c\ud1a0\ucf5c\uc740 \ub9e4\uc6b0 \uac04\ub2e8\ud558\uace0 \ud68c\uc120 \uc9c0\ud5a5\uc801\uc785\ub2c8\ub2e4. \uac01 \uc5f0\uacb0\uc5d0 \ub300\ud574 EventMachine\uc740 \uba3c\uc800 \uc0c8 \ucc38\uac00\uc790\uc758 \uc774\ub984\uc744 \ubb3c\uc5b4\ubcf4\uace0 \uadf8\uc758 \ubaa8\ub4e0 \uba54\uc2dc\uc9c0\ub97c \uadf8\ub8f9\uc5d0 \ube0c\ub85c\ub4dc\uce90\uc2a4\ud2b8\ud558\ub294 ChatServer\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4. \ud154\ub137\uc774\ub098 nc\uc640 \uac19\uc740 \uc784\uc758\uc758 \ud14d\uc2a4\ud2b8 \ud504\ub85c\ud1a0\ucf5c\uc744 \ud1b5\ud574 \ud1b5\uc2e0\ud560 \uc218 \uc788\ub294 \uc120\ud638\ud558\ub294 \ub3c4\uad6c\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c\uc740 \uc5d4\ub4dc\ud3ec\uc778\ud2b8 \uac04 \uc138\uc158\uc758 \uc0d8\ud50c\uc785\ub2c8\ub2e4.<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family:monospace\">~ $ \ud154\ub137 \ub85c\uceec\ud638\uc2a4\ud2b8 9999 ??? ~ $ nc localhost 9999<br \/>\n127.0.0.1 \uc2dc\ub3c4 \uc911... ??? *** \uc774\ub984\uc774 \ubb34\uc5c7\uc778\uac00\uc694?<br \/>\n\ub85c\uceec \ud638\uc2a4\ud2b8\uc5d0 \uc5f0\uacb0\ub418\uc5c8\uc2b5\ub2c8\ub2e4.             ??? alice<br \/>\n\uc774\uc2a4\ucf00\uc774\ud504 \ubb38\uc790\ub294 '^]'\uc785\ub2c8\ub2e4. ??? *** \uc548\ub155\ud558\uc138\uc694, \uc568\ub9ac\uc2a4!<br \/>\n*** \uc774\ub984\uc774 \ubb34\uc5c7\uc778\uac00\uc694?              ??? *** \ubc25\uc774 \uac00\uc785\ud588\uc2b5\ub2c8\ub2e4<br \/>\n\ubc25 ??? \uc548\ub155\ud558\uc138\uc694 \uc5ec\ub7ec\ubd84<br \/>\n*** \uc548\ub155, \ubc25!                        ??? \uc548\ub155, \ubc25! \uc798 \uc9c0\ub0c8\uc5b4?<br \/>\n\uc548\ub155\ud558\uc138\uc694 \uc5ec\ub7ec\ubd84 ??? ^C<br \/>\n \uc548\ub155, \ubc25! \uc798 \uc9c0\ub0c8\uc5b4?    ??? ~ $<br \/>\n*** \uc568\ub9ac\uc2a4\uac00 \ub5a0\ub0ac\uc2b5\ub2c8\ub2e4 ???<br \/>\n^] \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0???<br \/>\ntelnet&gt; \uc5f0\uacb0\uc774 \ub2eb\ud614\uc2b5\ub2c8\ub2e4.          ???<br \/>\n~ $ \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ???<\/div>\n<\/div>\n<p>\uc774\uc81c Couchbase\ub97c \uc870\uae08 \ucd94\uac00\ud560 \ucc28\ub840\uc785\ub2c8\ub2e4. \ubaa8\ub4e0 \uba54\uc2dc\uc9c0\ub97c \uac00\ub2a5\ud55c \ud55c \ud6a8\uc728\uc801\uc73c\ub85c \ubd84\uc0b0 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \ubcf4\uad00\ud558\uace0 \uc2f6\ub2e4\uace0 \uac00\uc815\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/why-nosql\/nosql-database\/\">Couchbase\uac00 \ub2f5\uc785\ub2c8\ub2e4.<\/a> :). \uadf8\ub807\uac8c \ud574\uc57c \ud569\ub2c8\ub2e4:<\/p>\n<p>\uba54\uc2dc\uc9c0\uc640 \uc120\ud0dd\uc801 \uc791\uc131\uc790(\uc2dc\uc2a4\ud15c \uc774\ubca4\ud2b8\uc758 \uacbd\uc6b0 nil)\ub97c \uc218\ub77d\ud574\uc57c \ud558\ub294 ChatServer \ud074\ub798\uc2a4\uc5d0\uc11c \ub85c\uadf8 \uba54\uc11c\ub4dc\ub97c \uad6c\ud604\ud569\ub2c8\ub2e4:<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family:monospace\">def log(message, author = nil)<br \/>\n\u00a0 Couchbase.bucket.incr(\"log:key\", :initial =&gt; 1) do |res|<br \/>\n\u00a0 \u00a0 \ud56d\ubaa9 = {<br \/>\n\u00a0 \u00a0 \u00a0 'time' =&gt; Time.now.utc,<br \/>\n\u00a0 \u00a0 \u00a0 '\uc791\uc131\uc790' =&gt; \uc791\uc131\uc790 || \"[\uc2dc\uc2a4\ud15c]\",<br \/>\n\u00a0 \u00a0 \u00a0 '\uba54\uc2dc\uc9c0' =&gt; \uba54\uc2dc\uc9c0<br \/>\n\u00a0 \u00a0 }<br \/>\n\u00a0 \u00a0 Couchbase.bucket.set(\"log:#{res.value}\", entry)<br \/>\n\u00a0 \ub05d<br \/>\n\ub05d<\/div>\n<\/div>\n<p>\uadf8\ub7f0 \ub2e4\uc74c \uc5f0\uacb0\ub41c \ubaa8\ub4e0 \ud074\ub77c\uc774\uc5b8\ud2b8\ub97c \ubc18\ubcf5\ud558\uae30 \uc9c1\uc804\uc5d0 \ube0c\ub85c\ub4dc\uce90\uc2a4\ud2b8 \uba54\uc11c\ub4dc\uc5d0 log(message, author)\uc5d0 \ub300\ud55c \ud638\ucd9c\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uc5f0\uacb0\ub41c \uc9c1\ud6c4 \uc11c\ubc84\ub97c \uc2e4\ud589\ud558\uae30 \uc704\ud574 EventMachine.start_server\ub97c Couchbase::Bucket#on_connect \ucf5c\ubc31\uc73c\ub85c \ub798\ud551\ud569\ub2c8\ub2e4. \uacb0\uacfc \ub8e8\ud504 \uc2e4\ud589\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4:<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family:monospace\">\uc774\ubca4\ud2b8\uba38\uc2e0.\uc2e4\ud589<br \/>\n\u00a0 #\ub97c \ub20c\ub7ec \uc911\uc9c0\ud558\ub824\uba74 Control + C\ub97c \ub204\ub985\ub2c8\ub2e4.<br \/>\n\u00a0 Signal.trap(\"INT\") { EventMachine.stop }<br \/>\n\u00a0 Signal.trap(\"TERM\") { EventMachine.stop }<\/p>\n<p>\u00a0 Couchbase.connection_options = {:async =&gt; true, :engine =&gt; :eventmachine}<br \/>\n\u00a0 Couchbase.bucket.on_connect do |res|<br \/>\n\u00a0 \u00a0 if res.success?<br \/>\n\u00a0 \u00a0 \u00a0 EventMachine.start_server(\"0.0.0.0\", 9999, ChatServer)<br \/>\n\u00a0 \u00a0 else<br \/>\n\u00a0 \u00a0 \u00a0 \"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc11c\ubc84\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: #{res.error}\"<br \/>\n\u00a0 \u00a0 \ub05d<br \/>\n\u00a0 \ub05d<br \/>\n\ub05d<\/div>\n<\/div>\n<p>\uc5ec\uae30\uae4c\uc9c0\uc785\ub2c8\ub2e4! \ud5a5\ud6c4\uc5d0\ub294 \uc774 \uc608\uc81c\ub97c \ud655\uc7a5\ud558\uc5ec \ub2e4\uc74c\uacfc \uac19\uc740 \ucd5c\uc2e0 \uae30\uc220\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/github.com\/igrigorik\/em-synchrony\/\">em-synchrony<\/a> \uc6f9\uc18c\ucf13\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ube14\ub85c\uadf8\uc5d0\uc11c \uc5c5\ub370\uc774\ud2b8\ub97c \ud655\uc778\ud558\uc138\uc694.<\/p>\n<h2>\ubcf4\ub108\uc2a4 \ud3ec\uc778\ud2b8<\/h2>\n<p>\ub2e8\uc21c\ud55c \ub85c\uae45\uc740 \uadf8\ub2e4\uc9c0 \ud765\ubbf8\ub86d\uc9c0 \uc54a\uc744 \uc218 \uc788\uc9c0\ub9cc, Couchbase Server\ub97c \uc0ac\uc6a9\ud558\uba74 Couchbase\uc758 \ub180\ub77c\uc6b4 \uc99d\ubd84 \ub9f5-\ub9ac\ub4c0\uc2a4 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uc5ec \ubcf4\uae30 \ucffc\ub9ac\ub85c \uac04\ub2e8\ud55c \ubd84\uc11d\uc744 \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, \ub2e4\uc74c\uc740 \ubaa8\ub4e0 \ud56d\ubaa9\uc744 \uc2dc\uac04\uc21c\uc73c\ub85c \uac00\uc838\uc624\ub294 Map \ud568\uc218\uc785\ub2c8\ub2e4.<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family:monospace\">\ud568\uc218 (\ubb38\uc11c, \uba54\ud0c0) {<br \/>\n\u00a0 if (doc.message) {<br \/>\n\u00a0 \u00a0 if (doc.author == \"[system]\" &amp;&amp; doc.time) {<br \/>\n\u00a0 \u00a0 \u00a0 emit(new Date(doc.time), \"*** \" + doc.message);<br \/>\n\u00a0 \u00a0 } else {<br \/>\n\u00a0 \u00a0 \u00a0 emit(\uc0c8\ub85c\uc6b4 \ub0a0\uc9dc(doc.\uc2dc\uac04), \" \" + doc.\uba54\uc2dc\uc9c0);<br \/>\n\u00a0 \u00a0 }<br \/>\n\u00a0 }<br \/>\n}<\/div>\n<\/div>\n<p>\uadf8\ub9ac\uace0 JSON \ucd9c\ub825\uc785\ub2c8\ub2e4.<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family:monospace\">{\"total_rows\":6,\"rows\":[<br \/>\n\u00a0 {\"id\":\"log:1\u2033,\"key\":\"2013-02-11T19:08:05.000Z\",\"value\":\"*** \uc568\ub9ac\uc2a4\uac00 \uac00\uc785\ud588\uc2b5\ub2c8\ub2e4\"},<br \/>\n\u00a0 {\"id\":\"log:2\u2033,\"key\":\"2013-02-11T19:08:18.000Z\",\"value\":\"*** bob\uc774 \uac00\uc785\ud588\uc2b5\ub2c8\ub2e4\"},<br \/>\n\u00a0 {\u201cid\u201d:\u201dlog:3\u2033,\u201dkey\u201d:\u201d2013-02-11T19:08:38.000Z\u201d,\u201dvalue\u201d:\u201d hi everyone\u201d},<br \/>\n\u00a0 {\"id\":\"log:4\u2033,\"key\":\"2013-02-11T19:08:48.000Z\",\"value\":\"\uc548\ub155\ud558\uc138\uc694, \ubc25! \uc798 \uc9c0\ub0b4\uc138\uc694?\"},<br \/>\n\u00a0 {\"id\":\"log:5\u2033,\"key\":\"2013-02-11T19:08:58.000Z\",\"value\":\"*** \uc568\ub9ac\uc2a4\uac00 \ub5a0\ub0ac\uc2b5\ub2c8\ub2e4\"},<br \/>\n\u00a0 {\"id\":\"log:6\u2033,\"key\":\"2013-02-11T19:09:01.000Z\",\"value\":\"*** \ubc25\uc774 \ub5a0\ub0ac\uc2b5\ub2c8\ub2e4\"}<br \/>\n]}<\/div>\n<\/div>\n<p>\uc790, \uc5ec\uae30\uae4c\uc9c0\uc785\ub2c8\ub2e4. \uc774 \uc2e4\ud5d8\uc801\uc778 \uc0c8 \uae30\ub2a5\uc744 \uc990\uaca8\ubcf4\uc138\uc694. \uc774 \uae30\ub2a5\uc740 \ud5a5\ud6c4 \ub9b4\ub9ac\uc2a4\uc5d0\uc11c \uc644\uc804\ud788 \uc9c0\uc6d0\ub420 \uc608\uc815\uc785\ub2c8\ub2e4. \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud558\uba74 \ubb38\uc81c\ub97c \uc81c\uae30\ud574 \uc8fc\uc138\uc694. <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/issues\/browse\/RCBC\/\">RCBC \ud504\ub85c\uc81d\ud2b8 \uc774\uc288 \ud2b8\ub798\ucee4<\/a>. \uc218\uc815\uacfc \uae30\uc5ec\ub3c4 \uc5b8\uc81c\ub098 \ud658\uc601\ud558\uba70 Apache 2.0 \ub77c\uc774\uc120\uc2a4\uc5d0 \ub530\ub77c \uc624\ud508 \uc18c\uc2a4\uc785\ub2c8\ub2e4. \uc5ec\ub7ec\ubd84\uc740 <a href=\"https:\/\/github.com\/couchbase\/couchbase-ruby-client\/\">\uae43\ud5c8\ube0c\uc758 \uc18c\uc2a4<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>As you may have noticed the new couchbase ruby gem has been released recently. The release 1.2.2 is mostly a maintenance release with several bug fixes, but yet you can try one new experimental feature: integration with EventMachine library. This [&hellip;]<\/p>","protected":false},"author":25,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[9407],"tags":[],"ppma_author":[8995],"class_list":["post-1819","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ruby"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Using Couchbase Ruby Gem with EventMachine - The Couchbase Blog<\/title>\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\/using-couchbase-ruby-gem-eventmachine\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using Couchbase Ruby Gem with EventMachine\" \/>\n<meta property=\"og:description\" content=\"As you may have noticed the new couchbase ruby gem has been released recently. The release 1.2.2 is mostly a maintenance release with several bug fixes, but yet you can try one new experimental feature: integration with EventMachine library. This [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/using-couchbase-ruby-gem-eventmachine\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2014-12-16T17:45:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T06:52:01+00:00\" \/>\n<meta name=\"author\" content=\"Sergey Avseyev, SDK Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@avsej\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sergey Avseyev, SDK Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/\"},\"author\":{\"name\":\"Sergey Avseyev, SDK Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/e9181374f225c90084ec3ba86bdcfa2e\"},\"headline\":\"Using Couchbase Ruby Gem with EventMachine\",\"datePublished\":\"2014-12-16T17:45:47+00:00\",\"dateModified\":\"2025-06-14T06:52:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/\"},\"wordCount\":1324,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Ruby\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/\",\"name\":\"Using Couchbase Ruby Gem with EventMachine - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2014-12-16T17:45:47+00:00\",\"dateModified\":\"2025-06-14T06:52:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using Couchbase Ruby Gem with EventMachine\"}]},{\"@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\/e9181374f225c90084ec3ba86bdcfa2e\",\"name\":\"Sergey Avseyev, SDK Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/796ab283bd56fe3716a102ebe16daff6\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/288a892d231cf8c4e57ed0643e4681b4654a141361f6ec3c5b79ccd4d885e038?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/288a892d231cf8c4e57ed0643e4681b4654a141361f6ec3c5b79ccd4d885e038?s=96&d=mm&r=g\",\"caption\":\"Sergey Avseyev, SDK Engineer, Couchbase\"},\"description\":\"Sergey Avseyev is a SDK Engineer at Couchbase. Sergey Avseyev is responsible for development of Kafka connector, and underlying library, which implements DCP, Couchbase replication protocol. Also maintaining PHP SDK for Couchbase.\",\"sameAs\":[\"https:\/\/x.com\/avsej\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/sergey-avseyev\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Using Couchbase Ruby Gem with EventMachine - The Couchbase Blog","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\/using-couchbase-ruby-gem-eventmachine\/","og_locale":"ko_KR","og_type":"article","og_title":"Using Couchbase Ruby Gem with EventMachine","og_description":"As you may have noticed the new couchbase ruby gem has been released recently. The release 1.2.2 is mostly a maintenance release with several bug fixes, but yet you can try one new experimental feature: integration with EventMachine library. This [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/using-couchbase-ruby-gem-eventmachine\/","og_site_name":"The Couchbase Blog","article_published_time":"2014-12-16T17:45:47+00:00","article_modified_time":"2025-06-14T06:52:01+00:00","author":"Sergey Avseyev, SDK Engineer, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@avsej","twitter_misc":{"Written by":"Sergey Avseyev, SDK Engineer, Couchbase","Est. reading time":"6\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/"},"author":{"name":"Sergey Avseyev, SDK Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/e9181374f225c90084ec3ba86bdcfa2e"},"headline":"Using Couchbase Ruby Gem with EventMachine","datePublished":"2014-12-16T17:45:47+00:00","dateModified":"2025-06-14T06:52:01+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/"},"wordCount":1324,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Ruby"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/","url":"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/","name":"Using Couchbase Ruby Gem with EventMachine - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2014-12-16T17:45:47+00:00","dateModified":"2025-06-14T06:52:01+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/using-couchbase-ruby-gem-eventmachine\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Using Couchbase Ruby Gem with EventMachine"}]},{"@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\/e9181374f225c90084ec3ba86bdcfa2e","name":"\uc138\ub974\uac8c\uc774 \uc544\ube0c\uc81c\uc608\ud504, SDK \uc5d4\uc9c0\ub2c8\uc5b4, \uce74\uc6b0\uce58\ubca0\uc774\uc2a4","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/796ab283bd56fe3716a102ebe16daff6","url":"https:\/\/secure.gravatar.com\/avatar\/288a892d231cf8c4e57ed0643e4681b4654a141361f6ec3c5b79ccd4d885e038?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/288a892d231cf8c4e57ed0643e4681b4654a141361f6ec3c5b79ccd4d885e038?s=96&d=mm&r=g","caption":"Sergey Avseyev, SDK Engineer, Couchbase"},"description":"\uc138\ub974\uac8c\uc774 \uc544\ube0c\uc81c\uc608\ud504\ub294 Couchbase\uc758 SDK \uc5d4\uc9c0\ub2c8\uc5b4\uc785\ub2c8\ub2e4. \uc138\ub974\uac8c\uc774 \uc544\ube0c\uc81c\uc608\ud504\ub294 Couchbase \ubcf5\uc81c \ud504\ub85c\ud1a0\ucf5c\uc778 DCP\ub97c \uad6c\ud604\ud558\ub294 \uae30\ubcf8 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc640 Kafka \ucee4\ub125\ud130\uc758 \uac1c\ubc1c\uc744 \ub2f4\ub2f9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ub610\ud55c Couchbase\uc6a9 PHP SDK\ub97c \uc720\uc9c0 \uad00\ub9ac\ud569\ub2c8\ub2e4.","sameAs":["https:\/\/x.com\/avsej"],"url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/sergey-avseyev\/"}]}},"authors":[{"term_id":8995,"user_id":25,"is_guest":0,"slug":"sergey-avseyev","display_name":"Sergey Avseyev, SDK Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/288a892d231cf8c4e57ed0643e4681b4654a141361f6ec3c5b79ccd4d885e038?s=96&d=mm&r=g","author_category":"","last_name":"Avseyev, SDK Engineer, Couchbase","first_name":"Sergey","job_title":"","user_url":"","description":"\uc138\ub974\uac8c\uc774 \uc544\ube0c\uc81c\uc608\ud504\ub294 Couchbase\uc758 SDK \uc5d4\uc9c0\ub2c8\uc5b4\uc785\ub2c8\ub2e4. \uc138\ub974\uac8c\uc774 \uc544\ube0c\uc81c\uc608\ud504\ub294 Couchbase \ubcf5\uc81c \ud504\ub85c\ud1a0\ucf5c\uc778 DCP\ub97c \uad6c\ud604\ud558\ub294 \uae30\ubcf8 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc640 Kafka \ucee4\ub125\ud130\uc758 \uac1c\ubc1c\uc744 \ub2f4\ub2f9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ub610\ud55c Couchbase\uc6a9 PHP SDK\ub97c \uc720\uc9c0 \uad00\ub9ac\ud569\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/1819","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\/25"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=1819"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/1819\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=1819"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=1819"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=1819"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=1819"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}