๊ฐ๋ฐ ์ง์/WEB ์ง์
๐ Polling / Long Polling / Server Sent Event / WebSocket ์ ๋ฆฌ
์ธํ_
2022. 1. 28. 20:00
์๋ฒ์ event๋ฅผ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ด๋ 4๊ฐ์ง ๋ฐฉ๋ฒ
polling
- ํด๋ผ์ด์ธํธ๊ฐ ํ๋ฒํ http request๋ฅผ ์๋ฒ๋ก ๊ณ์ ๋ ๋ ค์ ์ด๋ฒคํธ ๋ด์ฉ์ ์ ๋ฌ๋ฐ๋ ๋ฐฉ์์ด๋ค.
- ๊ฐ์ฅ ์ฌ์ด๋ฐฉ๋ฒ์ด์ง๋ง ํด๋ผ์ด์ธํธ๊ฐ ๊ณ์์ ์ผ๋ก request๋ฅผ ๋ ๋ฆฌ๊ธฐ๋๋ฌธ์ ํด๋ผ์ด์ธ๊ฐ ๋ง์์ง๋ฉด ์๋ฒ์ ๋ถ๋ด์ด ๊ธ์ฆํ๊ฒ ๋๋ค. http request connection์ ๋งบ๊ณ ๋๋๊ฒ ์์ฒด๊ฐ ๋ถ๋ด์ด ๋ง์ ๋ฐฉ์์ด๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋ผ์ด์ธํธ์์ ์ค์๊ฐ์ ๋์ ๋น ๋ฅธ ์๋ต์ ๊ธฐ๋ํ๊ธฐ๋ ์ด๋ ต๋ค.
- polling์ http ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค๋ ๋จ์ ์ด ์๋ค.
- ํ์ง๋ง ์ผ์ ํ๊ฒ ๊ฐฑ์ ๋๋ ์๋ฒ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ์์ด๋ค. (ex. ๋์๋ณด๋ ๊ฐฑ์ )
Http Overhead ๋?
์ ๋ณด์ ์ ๋ขฐ์ฑ ํ๋จ์ ์ํ, ๋ณด๋ด์ง๋ ํค๋ ๊ฐ์ ์ ๋ณด ๋๋ฌธ์ ์คํ๋ ค ๋ฐ์ดํฐ๋์ด๋ ์ฒ๋ฆฌ์๊ฐ์ด ์ฆ๊ฐํ๋๊ฑธ ๋งํ๋ค.
long-polling
- ์๋ฒ ์ธก์์ ์ ์์ ์ด์ด๋๋ ์๊ฐ์ ๊ธธ๊ฒํ๋ ๋ฐฉ์.
- ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก http request๋ฅผ ๋ ๋ฆฐ๋ค.
- ์๋ฒ์ ์๋ต์ ๋ํ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๊ณ์ ๊ธฐ๋ค๋ฆฌ๋ค๊ฐ ์๋ฒ์์ ํด๋น ํด๋ผ์ด์ธํธ๋ก ์ ๋ฌํ ์ด๋ฒคํธ๊ฐ ์๋ค๋ฉด ๊ทธ์๊ฐ response ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ฉด์ ์ฐ๊ฒฐ์ด ์ข
๋ฃ๋๋ค.
- ํด๋ผ์ด์ธํธ์์๋ ๊ณง๋ฐ๋ก ๋ค์ http request๋ฅผ ๋ ๋ ค์ ์๋ฒ์ ๋ค์ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ ๋ฐฉ์์ด๋ค.
- ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก http request๋ฅผ ๋ ๋ฆฐ๋ค.
- ์ผ๋ฐ polling ๋ฐฉ์๋ณด๋ค๋ ์๋ฒ์ ๋ถ๋ด์ด ์ค๊ฒ ์ง๋ง ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ด๋ ์ด๋ฒคํธ๋ค์ ์๊ฐ๊ฐ๊ฒฉ์ด ์ข๋ค๋ฉด polling ๊ณผ ๋ณ ์ฐจ์ด๊ฐ ์๊ฒ ๋๋ฉฐ, ๋ค์์ ํด๋ผ์ด์ธํธ์๊ฒ ๋์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์๋ ๊ฒฝ์ฐ์๋ ๊ณง๋ฐ๋ก ๋ค์์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก ์ ์์ ์๋ํ๋ฉด์ ์๋ฒ์ ๋ถ๋ด์ด ๊ธ์ฆํ๊ฒ ๋๋ค.
- hang๊ฑธ๋ฆฐ๊ฒ ์ฒ๋ผ ์๋ต์ ๋ณด๋ฅํ๊ธฐ ๋๋ฌธ์ hang get ์ด๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
- ํน์ฑ์ ๊ตฌํ์ ์ํด ๋ฌดํ iframe์ script tag๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ผผ์๊ฐ ํ์ํ๋ค.
websocket
- ์๋ฐฉํฅ ์ฑ๋์ ์ด์ฉํด ์ฑํ ๋ฐฉ ์ฒ๋ผ ์๋ฐฉํฅ ํต์ ์ด ๊ฐ๋ฅํ๋ค.
- ๊ธฐ์กด http์์ฒญ ์๋ต ๋ฐฉ์์ ์์ฒญํ ๊ทธ ํด๋ผ์ด์ธํธ์๋ง ์๋ต์ด ๊ฐ๋ฅํ๋๋ฐ, ws ํ๋กํ ์ฝ์ ํตํด ์น์์ผ ํฌํธ์ ์ ์ํด ์๋ ๋ชจ๋ ํด๋ผ์ด์ธํธ์๊ฒ ์ด๋ฒคํธ ๋ฐฉ์์ผ๋ก ์๋ตํ๋ค
- ์ต์ด ์ ์์ด ์ผ๋ฐ http request๋ฅผ ํตํด handshaking๊ณผ์ ์ ํตํด ์ด๋ฃจ์ด ์ง๊ธฐ ๋๋ฌธ์, ๊ธฐ์กด์ 80, 443 ํฌํธ๋ก ์ ์์ ํ๋ฏ๋ก ์ถ๊ฐ๋ก ๋ฐฉํ๋ฒฝ์ ์ด์ง ์๊ณ ๋ ์๋ฐฉํฅ ํต์ ์ด ๊ฐ๋ฅํ๊ณ , http ๊ท๊ฒฉ์ธ CORS์ ์ฉ์ด๋ ์ธ์ฆ๋ฑ์ ๊ณผ์ ์ ๊ธฐ์กด๊ณผ ๋์ผํ๊ฒ ๊ฐ์ ๊ฐ ์ ์๋๊ฒ์ด ์ฅ์ ์ด๋ค.
- ๋จ, websocket ํ๋กํ ์ฝ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ ์ด์ค ์ฐ๊ฒฐ๊ณผ ์๋ก์ด ์น์์ผ ์๋ฒ๊ฐ ํ์ํ๋ค.
Socket.io
node.js ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง ๊ธฐ์ ๋ก ์์ฒด ์คํฉ์ผ๋ก ๋ง๋ค์ด์ง socket.io ์๋ฒ๋ฅผ ๋ง๋ค๊ณ socket.io ํด๋ผ์ด์ธํธ์ ๋ธ๋ผ์ฐ์ ์ ๊ตฌ์ ๋ฐ์ง ์๊ณ ์ค์๊ฐ ํต์ ์ด ๊ฐ๋ฅํด์ง๋ค.
SSE (Server-Sent Events)
- HTML5 ํ์ค์์ด๋ฉฐ ์ด๋์ ๋ ์น์์ผ์ ์ญํ ์ ํ๋ฉด์ ๋ ๊ฐ๋ณ๋ค.
- websocket ๊ณผ ๊ฐ์ด ์๋ฐฉํฅ์ด ์๋ server -> client ๋จ๋ฐฉํฅ์ด๊ธฐ์ ์๋ฒ์ event ๋ message๋ฅผ client ๋ก push ํ๋ ์์ ์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ ์ ์๋ค.
- ์๋ฐฉํฅ์ด ์๋๊ธฐ์ ์์ฒญ ์ ajax๋ก ์ฝ๊ฒ ์ด์ฉํ ์ ์๋ค.
- ์ฌ์ ์ ์ฒ๋ฆฌ ๊ฐ์ ๋๋ถ๋ถ์ ์ ์์ค ์ฒ๋ฆฌ๊ฐ ์๋์ผ๋ก ์ง์๋๋ค.
- IE๋ ๊ธฐ๋ณธ ๋ฏธ์ง์์ด์ง๋ง, polyfill์ ์ด์ฉํ ๊ฒฝ์ฐ IE๋ฅผ ํฌํจํ ํฌ๋ก์ค๋ธ๋ผ์ฐ์ง์ด ๊ฐ๋ฅํ๋ค.