๊ฐœ๋ฐœ ์ง€์‹/WEB ์ง€์‹

๐ŸŒ Polling / Long Polling / Server Sent Event / WebSocket ์ •๋ฆฌ

์ธํŒŒ_ 2022. 1. 28. 20:00

polling-longpolling-serversentevent-websocket

 

์„œ๋ฒ„์˜ event๋ฅผ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ณด๋‚ด๋Š” 4๊ฐ€์ง€ ๋ฐฉ๋ฒ•

polling-longpolling-serversentevent-websocket


polling

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ‰๋ฒ”ํ•œ http request๋ฅผ ์„œ๋ฒ„๋กœ ๊ณ„์† ๋‚ ๋ ค์„œ ์ด๋ฒคํŠธ ๋‚ด์šฉ์„ ์ „๋‹ฌ๋ฐ›๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ๊ฐ€์žฅ ์‰ฌ์šด๋ฐฉ๋ฒ•์ด์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ณ„์†์ ์œผ๋กœ request๋ฅผ ๋‚ ๋ฆฌ๊ธฐ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธ๊ฐ€ ๋งŽ์•„์ง€๋ฉด ์„œ๋ฒ„์˜ ๋ถ€๋‹ด์ด ๊ธ‰์ฆํ•˜๊ฒŒ ๋œ๋‹ค. http request connection์„ ๋งบ๊ณ  ๋Š๋Š”๊ฒƒ ์ž์ฒด๊ฐ€ ๋ถ€๋‹ด์ด ๋งŽ์€ ๋ฐฉ์‹์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํด๋ผ์ด์–ธํŠธ์—์„œ ์‹ค์‹œ๊ฐ„์ •๋„์˜ ๋น ๋ฅธ ์‘๋‹ต์„ ๊ธฐ๋Œ€ํ•˜๊ธฐ๋„ ์–ด๋ ต๋‹ค.
  • polling์€ http ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ผ์ •ํ•˜๊ฒŒ ๊ฐฑ์‹ ๋˜๋Š” ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์ด๋‹ค. (ex. ๋Œ€์‹œ๋ณด๋“œ ๊ฐฑ์‹ )
Http Overhead ๋ž€?
์ •๋ณด์˜ ์‹ ๋ขฐ์„ฑ ํŒ๋‹จ์„ ์œ„ํ•œ, ๋ณด๋‚ด์ง€๋Š” ํ—ค๋” ๊ฐ™์€ ์ •๋ณด ๋•Œ๋ฌธ์— ์˜คํžˆ๋ ค ๋ฐ์ดํ„ฐ๋Ÿ‰์ด๋‚˜ ์ฒ˜๋ฆฌ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•˜๋Š”๊ฑธ ๋งํ•œ๋‹ค.
 

[WEB] ๐Ÿ“š HTTP Overhead ๋ž€?

์˜ค๋ฒ„ํ—ค๋“œ ๋ž€? ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ์ด ์ถ”๊ฐ€์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ˜„์ƒ์„ ๋งํ•œ๋‹ค. ex) A๋ผ๋Š” ์ฒ˜๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๋ฉด 3์ดˆ ๊ฑธ๋ฆฐ๋‹ค. ์•ˆ์ „์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ B๋ผ๋Š” ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ์‹œ๊ฐ„์ด 10์ดˆ๊ฐ€ ๊ฑธ๋ ธ๋‹ค.

inpa.tistory.com


long-polling

  • ์„œ๋ฒ„ ์ธก์—์„œ ์ ‘์†์„ ์—ด์–ด๋‘๋Š” ์‹œ๊ฐ„์„ ๊ธธ๊ฒŒํ•˜๋Š” ๋ฐฉ์‹.
    • ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ http request๋ฅผ ๋‚ ๋ฆฐ๋‹ค.
    • ์„œ๋ฒ„์— ์‘๋‹ต์— ๋Œ€ํ•œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด ๊ณ„์† ๊ธฐ๋‹ค๋ฆฌ๋‹ค๊ฐ€ ์„œ๋ฒ„์—์„œ ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ๋กœ ์ „๋‹ฌํ•  ์ด๋ฒคํŠธ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ์ˆœ๊ฐ„ response ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋ฉด์„œ ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋œ๋‹ค.
    • ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” ๊ณง๋ฐ”๋กœ ๋‹ค์‹œ http request๋ฅผ ๋‚ ๋ ค์„œ ์„œ๋ฒ„์˜ ๋‹ค์Œ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ์ผ๋ฐ˜ polling ๋ฐฉ์‹๋ณด๋‹ค๋Š” ์„œ๋ฒ„์˜ ๋ถ€๋‹ด์ด ์ค„๊ฒ ์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ณด๋‚ด๋Š” ์ด๋ฒคํŠธ๋“ค์˜ ์‹œ๊ฐ„๊ฐ„๊ฒฉ์ด ์ข๋‹ค๋ฉด polling ๊ณผ ๋ณ„ ์ฐจ์ด๊ฐ€ ์—†๊ฒŒ ๋˜๋ฉฐ, ๋‹ค์ˆ˜์˜ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋™์‹œ์— ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ๋  ๊ฒฝ์šฐ์—๋Š” ๊ณง๋ฐ”๋กœ ๋‹ค์ˆ˜์˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ ์ ‘์†์„ ์‹œ๋„ํ•˜๋ฉด์„œ ์„œ๋ฒ„์˜ ๋ถ€๋‹ด์ด ๊ธ‰์ฆํ•˜๊ฒŒ ๋œ๋‹ค.
  • hang๊ฑธ๋ฆฐ๊ฒƒ ์ฒ˜๋Ÿผ ์‘๋‹ต์„ ๋ณด๋ฅ˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— hang get ์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.
  • ํŠน์„ฑ์ƒ ๊ตฌํ˜„์„ ์œ„ํ•ด ๋ฌดํ•œ iframe์— script tag๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ผผ์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

polling-longpolling-serversentevent-websocket


websocket

  • ์–‘๋ฐฉํ–ฅ ์ฑ„๋„์„ ์ด์šฉํ•ด ์ฑ„ํŒ…๋ฐฉ ์ฒ˜๋Ÿผ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๊ธฐ์กด http์š”์ฒญ ์‘๋‹ต ๋ฐฉ์‹์€ ์š”์ฒญํ•œ ๊ทธ ํด๋ผ์ด์–ธํŠธ์—๋งŒ ์‘๋‹ต์ด ๊ฐ€๋Šฅํ–ˆ๋Š”๋ฐ, ws ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์›น์†Œ์ผ“ ํฌํŠธ์— ์ ‘์†ํ•ด ์žˆ๋Š” ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ด๋ฒคํŠธ ๋ฐฉ์‹์œผ๋กœ ์‘๋‹ตํ•œ๋‹ค
  • ์ตœ์ดˆ ์ ‘์†์ด ์ผ๋ฐ˜ http request๋ฅผ ํ†ตํ•ด handshaking๊ณผ์ •์„ ํ†ตํ•ด ์ด๋ฃจ์–ด ์ง€๊ธฐ ๋–„๋ฌธ์—, ๊ธฐ์กด์˜ 80, 443 ํฌํŠธ๋กœ ์ ‘์†์„ ํ•˜๋ฏ€๋กœ ์ถ”๊ฐ€๋กœ ๋ฐฉํ™”๋ฒฝ์„ ์—ด์ง€ ์•Š๊ณ ๋„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๊ณ , http ๊ทœ๊ฒฉ์ธ CORS์ ์šฉ์ด๋‚˜ ์ธ์ฆ๋“ฑ์˜ ๊ณผ์ •์„ ๊ธฐ์กด๊ณผ ๋™์ผํ•˜๊ฒŒ ๊ฐ€์ €๊ฐˆ ์ˆ˜ ์žˆ๋Š”๊ฒƒ์ด ์žฅ์ ์ด๋‹ค.
  • ๋‹จ, websocket ํ”„๋กœํ† ์ฝœ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ „์ด์ค‘ ์—ฐ๊ฒฐ๊ณผ ์ƒˆ๋กœ์šด ์›น์†Œ์ผ“ ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
Socket.io
node.js ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ธฐ์ˆ ๋กœ ์ž์ฒด ์ŠคํŒฉ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ socket.io ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค๊ณ  socket.io ํด๋ผ์ด์–ธํŠธ์™€ ๋ธŒ๋ผ์šฐ์ €์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ณ  ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.
 

[SOCKET] ๐Ÿ“š WS ์›น์†Œ์ผ“ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

์„ ํ–‰ํ•™์Šต [WEB] ๐ŸŒ ์›น ์†Œ์ผ“ (Socket) ์—ญ์‚ฌ๋ถ€ํ„ฐ ์ •๋ฆฌ โ€‹ ์›น ๊ฐœ๋ฐœ์„ ์ฒ˜์Œ ๋ฐฐ์šฐ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค๋ฉด ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ํ†ต์‹ ์€ ๋ชจ๋‘ HTTP ํ”„๋กœํ† ์ฝœ๋งŒ ์ด์šฉํ•ด์„œ ์ด๋ฃจ์–ด์ง„๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์›น

inpa.tistory.com

 

[SOCKET] ๐Ÿ“š Socket.IO ์‚ฌ์šฉ ํ•ด๋ณด๊ธฐ

Socket.IO node.js์—์„œ๋Š” ๋งŽ์€ ์›น ์†Œ์ผ“ ๊ตฌํ˜„์ฒด๊ฐ€ ์žˆ๋‹ค. socket.io์™€ ws๊ฐ€ ์žˆ๋‹ค. ws๋Š” ๊ธฐ๋ณธ์— ์ถฉ์‹คํ•œ ๋Š๋‚Œ์ด๊ณ , socket.io๋Š” ๊ธฐ๋ณธ๋„ ๊ธฐ๋ณธ์ด์ง€๋งŒ ๋ญ”๊ฐ€ ์ƒ‰๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด room์ด๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์ด

inpa.tistory.com


SSE (Server-Sent Events)

  • HTML5 ํ‘œ์ค€์•ˆ์ด๋ฉฐ ์–ด๋Š์ •๋„ ์›น์†Œ์ผ“์˜ ์—ญํ• ์„ ํ•˜๋ฉด์„œ ๋” ๊ฐ€๋ณ๋‹ค.
  • websocket ๊ณผ ๊ฐ™์ด ์–‘๋ฐฉํ–ฅ์ด ์•„๋‹Œ server -> client ๋‹จ๋ฐฉํ–ฅ์ด๊ธฐ์— ์„œ๋ฒ„์˜ event ๋‚˜ message๋ฅผ client ๋กœ push ํ•˜๋Š” ์ž‘์—…์— ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ์–‘๋ฐฉํ–ฅ์ด ์•„๋‹ˆ๊ธฐ์— ์š”์ฒญ ์‹œ ajax๋กœ ์‰ฝ๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์žฌ์ ‘์† ์ฒ˜๋ฆฌ ๊ฐ™์€ ๋Œ€๋ถ€๋ถ„์˜ ์ €์ˆ˜์ค€ ์ฒ˜๋ฆฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ง€์›๋œ๋‹ค.
  • IE๋Š” ๊ธฐ๋ณธ ๋ฏธ์ง€์›์ด์ง€๋งŒ, polyfill์„ ์ด์šฉํ•  ๊ฒฝ์šฐ IE๋ฅผ ํฌํ•จํ•œ ํฌ๋กœ์Šค๋ธŒ๋ผ์šฐ์ง•์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
 

[NODE] ๐Ÿ“š Server Sent Events ๐Ÿ’ฏ ์ •๋ฆฌ (+์‚ฌ์šฉ๋ฒ•)

SSE - Server Sent Events ๋ž€? SSE๋Š” ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ, ์ง€์†์ ์œผ๋กœ Streaming ํ•˜๋Š” ๊ธฐ์ˆ  ์ด๋‹ค. SSE๋Š” ์›น ํ‘œ์ค€์œผ๋กœ์จ IE๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›๋˜๋ฉฐ, IE์—ญ์‹œ polyfill์„ ํ†ตํ•ด ์ง€์›์ด ๊ฐ€๋Šฅํ•˜.

inpa.tistory.com