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

Was this helpful?