SERVER/Node.js

๐Ÿ’ปSocket.Io ์ดํ•ดํ•˜๊ธฐ

์™„์žโœจ 2022. 4. 17. 18:12

๐Ÿ’ปSocket.Io ์ดํ•ดํ•˜๊ธฐ

๐Ÿ“ŒSocket.IO๋ž€?

Socket.IO๋ž€ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋ฐ˜ํ•œ ์„œ๋ฒ„์™€ ๋ธŒ๋ผ์šฐ์ € ๊ฐ„์˜ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ๋•๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

http๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ๋ฐ, polling, long-polling, WebSocket ๋“ฑ์˜ ์‹œ์Šคํ…œ ๋””์ž์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. Socket.IO๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์œ„ ๋ชจ๋ธ ์ค‘ long-polling ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

Polling

polling ๋ฐฉ์‹์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ์—์„œ ์š”์ฒญ์ด ์˜ค๋ฉด ์„œ๋ฒ„์—์„œ๋Š” ๋ณ€๊ฒฝ์ด ์—†๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋”๋ผ๋„ ์‘๋‹ต์„ ๋ณด๋‚ธ๋‹ค.

๋”ฐ๋ผ์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ •ํ•ด์ง„ ์‹œ๊ฐ„๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ์„œ๋น„์Šค์— ์ ํ•ฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ถˆํ•„์š”ํ•œ ์š”์ฒญ์ด ๋งŽ์•„์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๊ณผ๋„ํ•˜๊ฒŒ ๋ฐœ์ƒ๋  ์ˆ˜ ์žˆ๋‹ค.

Long-polling

long-polling ๋ฐฉ์‹์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„์—์„œ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‘๋‹ต์„ ๋ณด๋‚ธ๋‹ค. ์„œ๋ฒ„์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ์—๋งŒ ์‘๋‹ต์„ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์— polling ๋ฐฉ์‹๋ณด๋‹ค ๋ถˆํ•„์š”ํ•œ ์š”์ฒญ์ด ๋œ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜์ง€๋งŒ, long-polling ๋ฐฉ์‹์—์„œ๋„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„ ์‘๋‹ต์„ ๋ฌดํ•œ์ • ๊ธฐ๋‹ค๋ฆฌ์ง€๋Š” ์•Š๋Š”๋‹ค. ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์ƒˆ๋กœ์šด ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์ด๋‹ค. ์„œ๋ฒ„์—์„œ ์‘๋‹ต์„ ๋ฐ›์•˜์„ ๋•Œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฆ‰์‹œ ์š”์ฒญ์„ ๋‹ค์‹œ ๋ณด๋‚ด๋ฉด์„œ, ๋งˆ์น˜ ์˜๊ตฌ์ ์ธ ์—ฐ๊ฒฐ์ด ์ด๋ค„์ง„ ๊ฒƒ ์ฒ˜๋Ÿผ ๊ตฌํ˜„๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์‹ค์‹œ๊ฐ„ ๋ฐ˜์‘์ด ๊ฐ€๋Šฅํ•˜๊ณ  polling์— ๋น„ํ•ด์„œ ๋ถˆํ•„์š”ํ•œ ํŠธ๋ž˜ํ”ฝ์€ ์œ ๋ฐœํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์˜คํžˆ๋ ค ์ด๋ฒคํŠธ๊ฐ€ ์žฆ๋‹ค๋ฉด ์ˆœ๊ฐ„์ ์œผ๋กœ ๊ณผ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

WebSocket

WebSocket ๋ฐฉ์‹์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ์ตœ์ดˆ ํ•œ ๋ฒˆ๋งŒ ๋ณด๋‚ธ๋‹ค. ์žฌ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ์•Š์•„์„œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ ๊ณ  ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•„์š” ์ด์ƒ์œผ๋กœ ์—ฐ๊ฒฐ์„ ์˜ค๋ž˜ ์œ ์ง€ํ•  ๊ฒฝ์šฐ ์„œ๋ฒ„ CPU์— ๋ถ€๋‹ด์ด ๋˜๋Š” ๋“ฑ์˜ ๋‹จ์ ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.


Socket.Io๊ฐ€ long-polling์ด default์ธ ์ด์œ 

  • WebSocket์€ ๋ถ„๋ช…ํžˆ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ์„ค์ •ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ๊ฒฝํ—˜์— ๋”ฐ๋ฅด๋ฉด ํšŒ์‚ฌ ํ”„๋ก์‹œ, ๊ฐœ์ธ ๋ฐฉํ™”๋ฒฝ, ๋ฐ”์ด๋Ÿฌ์Šค ๋ฐฑ์‹  ์†Œํ”„ํŠธ์›จ์–ด๋กœ ์ธํ•ด WebSocket ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ๊ด€์ ์—์„œ WebSocket ์—ฐ๊ฒฐ์— ์‹คํŒจํ•˜๋ฉด ์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์‹œ์ž‘ํ•  ๋•Œ๊นŒ์ง€ ์ตœ๋Œ€ 10์ดˆ ์ด์ƒ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ง€๊ฐ์ ์œผ๋กœ ์†์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ๋Š” HTTP long-polling ์ „์†ก๊ณผ์˜ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

Socket.Io ์žฅ์ 

  • Socket.Io๋Š” WebSocket์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์ง€์›ํ•œ๋‹ค. ๋‹ค์ˆ˜ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
  • Socket.Io๋Š” ๋ชจ๋ฐ”์ผ ์žฅ์น˜๋ฅผ ํฌํ•จํ•œ ๊ฑฐ์˜ ๋ชจ๋“  ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ง€์›ํ•˜๋Š” ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ์ง€์› ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž…๋‹ˆ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ œ์ž‘๋˜์–ด ๋ธŒ๋ผ์šฐ์ €์— ์ƒ๊ด€์—†์ด ์‹ค์‹œ๊ฐ„ ์›น์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ฉฐ, ๋ธŒ๋ผ์šฐ์ € ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ Node.js ๋ชจ๋“ˆ๋กœ ์ œ๊ณต๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.