ActionCable

Action Cable seamlessly integrates WebSockets with the rest of your Rails application. It's a full-stack offering that provides both a client-side JavaScript framework and a server-side Ruby framework

Action cable(์ดํ•˜ ์•ก์…˜์ผ€์ด๋ธ”)์€ websocket์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ ˆ์ผ์ฆˆ์—์„œ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค๋‹ˆ๋‹ค.

WebSocket์ด๋ž€?

WebSocket์˜ ๋ชฉ์ 

WebSocket ๊ธฐ์ˆ ์˜ ๋ชฉ์ ์„ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์šฐ์„  ๊ทธ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ์„ ์•Œ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •ํ†ต์ ์ธ HTTP ํ”„๋กœํ† ์ฝœ์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์š”์ฒญํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ์ˆ˜๋™์ ์œผ๋กœ ์‘๋‹ตํ•˜๋Š” ์‹์œผ๋กœ ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ ๋งŒ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์„œ๋ฒ„๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋”๋ผ๋„ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์„œ๋ฒ„์— ์žฌ์š”์ฒญํ•˜์ง€ ์•Š๋Š”ํ•œ ์ด๋ฏธ ์ œ๊ณต๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ๋น„๋™๊ธฐ ํ†ต์‹ ์ด ๋ถˆ๊ฐ€๋Šฅํ–ˆ์—ˆ์ฃ .

ํ›„์— Ajax ๊ธฐ์ˆ ๋กœ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ์–ด๋Š ์ •๋„ ๊ตฌํ˜„ํ•ด๋ƒˆ์Šต๋‹ˆ๋‹ค๋งŒ, HTTP ์ž์ฒด๊ฐ€ ๊ฐ€์ง€๋Š” ํ•œ๊ณ„๋กœ ์ธํ•ด ์—ฌ์ „ํžˆ ๋น„ํšจ์œจ์ด ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€๋ น Ajax๋กœ ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ํ…Œํฌ๋‹‰์œผ๋กœ ํด๋ง(Polling)๊ณผ ๋กฑํด๋ง(Long Polling)์ด ์žˆ์—ˆ๋Š”๋ฐ ๋‘˜ ๋ชจ๋‘ ๋ชจ๋‘ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ์—์„œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์—†๋Š”๋ฐ๋„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ด์•ผํ•˜๋Š” ๋น„ํšจ์œจ์ด ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค. ํด๋ง ๋ฐฉ์‹์€ ํ™”๋ฉด์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ผ์ •์‹œ๊ฐ„๋งˆ๋‹ค ๋™์ž‘์‹œํ‚ค๋Š” ์‹์ด๊ณ  ๋กฑ ํด๋ง ๋ฐฉ์‹์€ ๋ฐ์ดํ„ฐ ์‘๋‹ต๊ณผ ๋™์‹œ์— ๋ฐ”๋กœ ์ƒˆ ์ ‘์†์„ ๋งŒ๋“œ๋Š” ์‹์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  HTTP ํ†ต์‹ ์—์„œ๋Š” ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๋ฉ”์„ธ์ง€ ํ—ค๋”๋ฅผ ๋ฐ˜๋“œ์‹œ ํฌํ•จ์‹œ์ผœ์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒจ์šฐ 1๋ฐ”์ดํŠธ์˜ ์ •๋ณด๋ฅผ ์†ก์ˆ˜์‹ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋„ ๊ธด ํ—ค๋”๋ฅผ ์ค„์ค„์ด ์ฃผ๊ณ  ๋ฐ›์•„์•ผํ•˜๋Š” ๋น„ํšจ์œจ๋„ ๋‚จ์•„์žˆ์—ˆ์ฃ .

๊ทธ๋ž˜์„œ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ๋“ฑ์žฅํ•œ '๋น„๋™๊ธฐ ํ†ต์‹ ์„ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ'์ด Websocket(์ดํ•˜ ์›น์†Œ์ผ“)์ž…๋‹ˆ๋‹ค. ์›น์†Œ์ผ“์€ ์ ‘์† ํ™•๋ฆฝ์— HTTP๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๊ทธ ํ›„ ํ†ต์‹ ์€ ์›น์†Œ์ผ“ ๋…์ž ํ”„๋กœํ† ์ฝœ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ์ด ๋•Œ ์„œ๋ฒ„ ์ธก์—์„œ๋„ ํด๋ผ์ด์–ธํŠธ ์ธก์— ํ†ต์‹ ์„ ๋จผ์ € ๋ณด๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ„์˜ ์ง€์†์ ์ธ ์—ฐ๊ฒฐ์ด ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ SNS๋‚˜ ๊ตฌ๊ธ€Doc ๊ฐ™์€ Real-time web applicatoin ๊ตฌํ˜„์„ ์œ„ํ•ด ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์ฃ .

์›น์†Œ์ผ“๊ณผ ์•ก์…˜์ผ€์ด๋ธ”์€ ๊ณตํ†ต์ ์œผ๋กœ ์“ฐ๋Š” ์šฉ์–ด๊ฐ€ ๋ช‡๊ฐ€์ง€ ์žˆ์œผ๋‹ˆ ์งš๊ณ  ๋„˜์–ด๊ฐ‘์‹œ๋‹ค.

Connections

Connections(์ดํ•˜ ์ปค๋„ฅ์…˜)์€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์•ก์…˜์ผ€์ด๋ธ” ์„œ๋ฒ„๋Š” ๋‹ค์ˆ˜์˜ ์ปค๋„ฅ์…˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์›น์†Œ์ผ“ ์ปค๋„ฅ์…˜์€ ํ•˜๋‚˜์˜ ์ปค๋„ฅ์…˜ ์ธ์Šคํ„ด์Šค๋‹น ํ•˜๋‚˜์”ฉ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ ๋ฌผ๋ฆฌ์ ์ธ ์œ ์ €๊ฐ€ ํ•œ ๋ช…์ด๋”๋ผ๋„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋””๋ฐ”์ด์Šค๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ‘์†ํ•˜๋ฉด์„œ ์›น์†Œ์ผ“์„ ์ ‘์†ํ•œ ๋””๋ฐ”์ด์Šค ์ˆ˜๋งŒํผ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ex) ํœด๋Œ€ํฐ๊ณผ ๋งฅ๋ถ์œผ๋กœ ์Šฌ๋ž™์— ํ•œ๋ฒˆ์— ์ ‘์†ํ•œ ๊ฒฝ์šฐ

Consumers

์›น์†Œ์ผ“ ์ปค๋„ฅ์…˜์˜ ํด๋ผ์ด์–ธํŠธ๋ฅผ Consumer(์ดํ•˜ ์ปจ์Šˆ๋จธ)๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์•ก์…˜ ์ผ€์ด๋ธ”์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.

Channels

๊ฐ ์ปจ์Šˆ๋จธ๋Š” ๋‹ค์ˆ˜์˜ Channel(์ดํ•˜ ์ฑ„๋„)์„ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Subscribers

์ปจ์Šˆ๋จธ๊ฐ€ ์ฑ„๋„์„ ๊ตฌ๋…ํ•˜๋ฉด ๊ทธ ๋•Œ๋ถ€ํ„ฐ Subscriber(์ดํ•˜ ๊ตฌ๋…์ž)๊ฐ€ ๋ฉ๋‹ˆ๋‹ค!

Pub/Sub

Pub/Sub๋Š” ๊ฒŒ์‹œ์ž ๊ตฌ๋…์ž ํŒจํ„ด์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ์ฑ„๋„์— ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐœ์‹ ํ•˜๋Š” ๊ฒŒ์‹œ์ž๊ฐ€ ์žˆ๊ณ , ์ด ๋ฉ”์„ธ์ง€์— ๊ด€์‹ฌ ์žˆ๋Š” ๋ชจ๋“  ์ฑ„๋„ ๊ตฌ๋…์ž์˜ ์ถœ๋ ฅ ์ฑ„๋„๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณต์‚ฌํ•ด์ฃผ๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

Broadcastings

Broadcasting(์ดํ•˜ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…)์€ ์„œ๋ฒ„๊ฐ€ ์ฑ„๋„ ๊ตฌ๋…์ž๋“ค์—๊ฒŒ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ๊ณผ์ •์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

Last updated