์ด๋ฒ์ ์งํํ๋ 2๊ฐ์ง ํ๋ก์ ํธ์์ ์น์์ผ์ ์ด์ฉํด์ ์ฑํ ๊ธฐ๋ฅ์ ๊ตฌํํด์ผํ๋ค. ๊ทธ์ ์ ์น์์ผ์ด ๋ญ์ง ์์๋ณด๋๋ก ํ์!
์น์์ผ(Web Socket)?
์น์์ผ ํ๋กํ ์ฝ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ฅผ ์ฐ๊ฒฐํ๊ณ , ์ค์๊ฐ์ผ๋ก ํต์ ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ ํ๋กํ ์ฝ์ด๋ค. ์ฌ๊ธฐ์ ์ฃผ๋ชฉํด์ผํ ์ ์ ์ค์๊ฐ์ด๋ผ๋ ์ ์ด๋ค. HTTP ํต์ ์ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒฝ์ฐ์๋ง ์๋ฒ๊ฐ ์๋ตํ๋ ๋จ๋ฐฉํฅ ํต์ ์ด์ง๋ง, ์น์์ผ์ ์๋ฐฉํฅ, ์ค์๊ฐ ํต์ ์ ํ๋ค.
๋ํ ์น์์ผ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์์ ๋์ํ๋ฉฐ HTTP์ ๋ค๋ฅด๊ฒ ์ํ(Stateful) ํ๋กํ ์ฝ์ด๋ค. ์ฐ๊ฒฐ์ ๋งบ๊ธฐ์ํด ํ๋ฒ์ ํธ๋์ ฐ์ดํฌ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ณ , ์ดํ์ ์ง์์ ์ผ๋ก ์ฐ๊ฒฐ์ ๋ณด์ฅํ๋ค. ์ด๋ ๋งค๋ฒ ๋งค์ธ์ง ์ ์ก์ ์๋ก์ด ์ฐ๊ฒฐ์ ๋งบ์ ํ์๊ฐ ์์ด ํจ์จ์ ์ด๋ค. ์ฆ, ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ํ๋ฒ์ ์ฐ๊ฒฐ์ ๋งบ์ผ๋ฉด ๊ฐ์ ์ฐ๊ฒฐ์ ํตํด ํต์ ์ ํ๋ฏ๋ก TCP ์ปค๋ฅ์ ์ ๋น์ฉ์ ์๋์์๋ค.
์น์์ผ์ HTTP์ ๊ฐ์ด HTTP (80 port) , HTTPS (443 port) ์์์ ๋์ํ๋ค. ์ฒ์์ ์ฐ๊ฒฐ์ HTTP ํ๋กํ ์ฝ์ ์ด์ฉํด ํธ๋์ ฐ์ดํฌ๋ฅผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๊ฒฐ์ด ์ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ฉด ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ์ WebSocket ์ฐ๊ฒฐ(TCP/IP ๊ธฐ๋ฐ) ์ด ์์๋๋ค.
๊ทธ๋ผ ์น์์ผ์ด ๋์ค๊ธฐ ์ ์๋ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ค์๊ฐ ํต์ ์ ํ์๊น?
Polling
ํด๋ง ๋ฐฉ์์ ์ผ์ ํ ์ฃผ๊ธฐ๋ก ์๋ฒ์ request๋ฅผ ๋ณด๋ด๋ ๋ฐฉ์์ด๋ค.
setTimeout, setInterval ๋ฑ์ ์ฌ์ฉํด์ ์ผ์ ์ฃผ๊ธฐ๋ก ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ ๋ฐฉ์์ธ๋ฐ, ์ด๋ ๋ถํ์ํ request์ connection์ ์์ฑํด์ ์๋ฒ์ ๋ถ๋ด์ ์ค๋ค. ๋ํ ์์ฒญ์ฃผ๊ธฐ๊ฐ ์งง์์ง๊ฒ ๋๋ฉด ๋ถํ๊ฐ ์ฆ๊ฐํ๊ฒ๋๊ณ , ์ผ์ ํ ์ฃผ๊ธฐ๋ฅผ ๋๊ณ ํต์ ์ ํ๋ฏ๋ก ์๋ฒฝํ ์ค์๊ฐ์ผ๋ก ๋ณด๊ธฐ ํ๋ค๋ค. ๊ทธ๋ฆฌ๊ณ HTTP ๊ธฐ๋ฐ์ ํต์ ์ด๊ธฐ ๋๋ฌธ์ Request, Response ํค๋๊ฐ ํฌ๋ค.
ํด๋ง ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
1. ์๋ต์ ์ค์๊ฐ์ผ๋ก ๋ฐ์ ํ์๊ฐ ์์๋
2. ๋ค์์ ์ฌ์ฉ์๊ฐ ๋์์ ์ฌ์ฉํ ๋
3. facebook ์น์ฑํ , google๋ฉ์ ์ ๋ฑ
Long Polling
๋กฑํด๋ง ๋ฐฉ์์ ํด๋ง๊ณผ ๋น์ทํ๊ฒ ์ผ์ ํ ์ฃผ๊ธฐ๋ก ์์ฒญ์ ๋ณด๋ด์ง๋ง, ์๋ฒ๊ฐ ์๋ต์ ๋ฐ๋ก ์ ๋ฌํ์ง ์๋ ๋ฐฉ์์ด๋ค.
์์ฒญ์ ๋ณด๋์๋, ์๋ฒ๊ฐ ์๋ต์ ๋ฐ๋ก ๋ณด๋ด์ง์๊ณ ํน์ ํ ์ด๋ฒคํธ๋ ํ์์์์ด ๋ฐ์ํ ๋ ์๋ต์ ์ ๋ฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ต์ ๋ฐ์ ํด๋ผ์ด์ธํธ๋ ๋ค์ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ค. ์ด๋ฌํ ์ ์ ๋ณผ๋ Polling๋ณด๋ค ๋ถํ์ํ ์์ฒญ์ ๋ณด๋ด์ง์์ ์ข์๋ณด์ด์ง๋ง, Long Polling๋ ๋์์ ์ธ ์์ฒญ๊ณผ ์๋ต์ด ์๊ธฐ๋ฉด ๋ถํ๊ฐ ๋ฐ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฐฉ๋ฒ๋ HTTP ๊ธฐ๋ฐ์ ํต์ ์ด์ฌ์ ํค๋๊ฐ ํฌ๋ค.
Streaming
์คํธ๋ฆฌ๋ฐ ๋ฐฉ์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์๋ ์๋ต์ ์ฃผ๋๋ฐ, ์ด๋ฌํ ์๋ต์ ์๋ฃ์ํค์ง ์๊ณ ๊ณ์ ์ฐ๊ฒฐ์ ์ ์งํ๋ ๋ฐฉ์์ด๋ค.
Long Polling์ ๋นํด ์๋ต๋ง๋ค ๋ค์ ์์ฒญ์ ํ์ง์์ ํจ์ธ์ ์ด์ง๋ง, ์ฐ๊ฒฐ์๊ฐ์ด ๊ธธ์ด์ง๋ฉด ์ ํจ์ฑ๊ด๋ฆฌ๊ฐ ํ๋ค์ด์ง๋ค. ๋ํ HTTP ๊ธฐ๋ฐ์ ํต์ ์ด์ฌ์ ํค๋์ ํฌ๊ธฐ๊ฐ ํฌ๋ค.
์น ์์ผ ํน์ง
์ด๋ฌํ ๋ฐฉ๋ฒ์ ๋์ฒด ํ๊ธฐ ์ํด ๋์จ ํ๋กํ ์ฝ์ด ์น์์ผ ํ๋กํ ์ฝ์ด๋ค. ๊ทธ๋ผ ์ข ๋ ์์ธํ ์์๋ณด์. ์น์์ผ ํ๋กํ ์ฝ์ ์ฌ์์ ws(websocket) , wss(websocket secure) ์ด๋ ๊ฒ ๋๊ฐ์ง๊ฐ ์๋ค. wss๋ ๋ฐ์ดํฐ ๋ณด์์ ์ํด SSL์ ์ ์ฉํ ํ๋กํ ์ฝ์ด๋ค.
์น์์ผ์ ์๋๋ HTTP์ Post๋ณด๋ค ๋น ๋ฅด๋ฉฐ, ์ต์ด์ ์์ฒญ์์ ๋ฐ๋์ Get ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ ์์ผ๋ก ๊ตฌ์ฑ๋ ๋ฉ์ธ์ง๋ผ๋ ๋ ผ๋ฆฌ์ ์ธ ๋จ์๋ฅผ ์ก์์ ํ๋ค. ์ด๋ ๋ฉ์ธ์ง์ ํฌํจ๋ ์ ์๋ ๊ตํ ๊ฐ๋ฅํ ๋ฉ์ธ์ง๋ ํ ์คํธ์ ๋ฐ์ด๋๋ฆฌ ๋๊ฐ ๋ฟ์ด๋ค.
์น์์ผ์ ํ๊ณ
1. ์น์์ผ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์ ํธํ๋์ง ์๋๋ค.
์น์์ผ์ HTML5 ์ดํ์ ๊ณต๊ฐ๋์๋ค. ์ฆ, HTML5 ์ด์ ์ ๊ธฐ์ ๋ก ๊ตฌํ๋ ์น์๋น์ค์์๋ ๋์ํ์ง ์์์๋์๋ค. ์ด๋ฌํ ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋์จ๊ฒ์ด Sokcet.io , SockJS ๋ฑ ์ด๋ค. ์ด๋ HTML5 ์ด์ ์ ๊ธฐ์ ๋ก ๊ตฌํ๋ ์๋น์ค์์ ์น์์ผ์ ์ฌ์ฉํ ์์๊ฒ ํด์ฃผ๋๋ฐ ์ค์ ๋ก๋ ์น์์ผ์ ์ฌ์ฉํ๋ ๊ฒ์ ์๋๊ณ ์น์์ผ์ฒ๋ผ ๋์ํ๋ ๊ฒ์ด๋ค. ์์์ ์ค๋ช ํ๋ ๋ฐฉ๋ฒ์ ์น์์ผ๊ณผ ๊ฐ์ด ์ค์๊ฐํํ๋ก ์ฌ์ฉ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค.
2. ์น์์ผ์ ๋ฌธ์์ด๋ง ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค.
์ด๋ฅผ ์ํด STOMP(Simple Text Oriented Messaging Protocol)์ด ๋ฑ์ฅํ๋ค. STOMP๋ ๋ฉ์ธ์ง ์ ์ก์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด ํ์ํ ํ๋กํ ์ฝ์ด๋ค. ๋ฉ์ธ์ง ๋ธ๋ก์ปค๋ฅผ ์ฌ์ฉํด ๋ฉ์ธ์ง๋ฅผ Pub / Sub (๋ฐํ ๋ฐ ๊ตฌ๋ ) ์๋น์ค๋ฅผ ์ด์ฉํ ์์๋ค. STOMP ํ๋กํ ์ฝ์ websocket ์์์ ๋์ํ๋ฉฐ, ๋ฉ์ธ์ง์ ํค๋์ ๊ฐ์ ์ค์์์ด ํค๋ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ํต์ ์ ์ธ์ฆ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๊ณ , STOMP ์คํ์ ์ ์ํ ๊ท์น๋ง ์์งํค๋ฉด ์ฌ๋ฌ ์ธ์ด ํ๋ซํผ๊ฐ ๋ฉ์ธ์ง๋ฅผ ์ํธ์ด์ฉ ๊ฐ๋ฅํ๋ค.