[Network] Polling, SSE, Websocket์ด๋?
๐ Polling
polling
์ ํด๋ผ์ด์ธํธ๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ํ ์๋ต์ ๋ฆฌํดํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๊ตฌํ์ด ๊ฐ๋จํ๊ณ HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ฏ๋ก ํธํ์ฑ์ด ์ข๋ค.
์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋งค๋ฒ ์๋ต์ ์ ์กํด์ผ ํ๋ค. ๋ฐ๋ผ์ ํน์ํ ์ํฉ์ด ์๋๋ฉด ๋๋ถ๋ถ์ ์์ฒญ์ด ๋ถํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ ์ ์๋ค. ๋ํ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ๋ง์์ง์๋ก ์๋ฒ์ ๋ถํ๊ฐ ์ฆ๊ฐํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ธฐ๊น์ง ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฏ๋ก ์ค์๊ฐ์ฑ์ด ๋จ์ด์ง๋ค.
๐ Long Polling
long polling
์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ธ ํ ์๋ฒ๊ฐ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ์ค๋น๋ ๋๊น์ง ์์ฒญ์ ์ ์งํ๋ ๋ฐฉ์์ด๋ค. ๋ค์ ๋งํด ์๋ฒ๋ก๋ถํฐ ์๋ต์ ๋ฐ์ ๋๊น์ง ํด๋ผ์ด์ธํธ๋ ๋๊ธฐํ๋ค. ๋ฐ์ดํฐ๊ฐ ์ค๋น๋๋ฉด ์๋ฒ๋ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ต์ ๋ณด๋ธ๋ค. long polling ์ญ์ HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ค.
์๋ฒ๋ก๋ถํฐ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ฆ์ ๋ฐ์ ์ ์์ผ๋ฏ๋ก polling ๋ฐฉ๋ฒ๋ณด๋ค ์ค์๊ฐ์ฑ์ด ๋์์ง๋ค. ๋ํ polling ๋ฐฉ๋ฒ์ ๋นํด ์๋ฒ์ ์์ฒญ์ ์ค์ผ ์ ์๋ค. ํด๋ผ์ด์ธํธ๊ฐ ๋ถํ์ํ ์์ฒญ์ ๋ณด๋ด์ง ์๊ธฐ ๋๋ฌธ์ ๋คํธ์ํฌ ํธ๋ํฝ์ ์ค์ผ ์ ์๋ค.
๊ทธ๋ฌ๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ ์ฐ๊ฒฐ์ ์ง์์ ์ผ๋ก ์ ์งํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฐ๊ฒฐ์ด ๋์ด์ง ๊ฒฝ์ฐ ์ฌ์ฐ๊ฒฐ์ ํด์ผ ํ๊ณ , ์ด ๊ณผ์ ์์ ์ง์ฐ์ด ๋ฐ์ํ ์ ์๋ค. ๋ํ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ์ ์ง๋๋ ๋์ ์๋ฒ๋ ํด๋น ์์ฒญ์ ๋๊ธฐ ์ํ๋ก ์ ์งํด์ผ ํ๋ฏ๋ก ๋ค์์ ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ๋ ๊ฒฝ์ฐ ์๋ฒ ์์์ด ์๋ชจ๋ ์ ์๋ค. ๋ํ ์์ฒญ๊ณผ ์๋ต์ ํ๋ฆ์ ๊ด๋ฆฌํด์ผ ํ๋ฏ๋ก ๊ตฌํ์ด ๋ค์ ๋ณต์กํ ์ ์๋ค.
๐ SSE(Server-Sent Events)
SSE(Server-Sent Events)
๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ฉด ์๋ฒ๊ฐ ์ง์์ ์ธ ์ฐ๊ฒฐ์ ์ ์งํ์ฌ ์ค์๊ฐ์ผ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๋ฐฉ๋ฒ์ด๋ค. SSE๋ ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ํฅํ๋ ๋จ๋ฐฉํฅ ์ฐ๊ฒฐ์ด๋ค. ์ฆ, ์ผ๋ฐ์ ์ผ๋ก ํด๋ผ์ด์ธํธ๋ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์๋ค.
HTTP ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฏ๋ก ํธํ์ฑ์ด ์ข๊ณ , ๊ตฌํ์ด ๊ฐ๋จํ๋ค. ์๋ฒ๊ฐ ์ฐ๊ฒฐ์ ์ ์งํ๋ฉฐ ์ค์๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค. ํด๋ผ์ด์ธํธ๋ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ง์์ ์ผ๋ก ์์ ํ ์ ์๋ค.
SSE๋ ์ฐ๊ฒฐ์ด ๋์ด์ง๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ์๋์ผ๋ก ์ฌ์ฐ๊ฒฐํ๋ ๊ธฐ๋ฅ์ด ์กด์ฌํ๋ค. ๋ํ ๊ตฌํ์ด ๊ฐ๋จํ๋ค.
๊ทธ๋ฌ๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ณ ์ ํ๋ค๋ฉด ๋ณ๋์ HTTP ์์ฒญ์ ๋ณด๋ด์ผ ํ๋ค. SSE๋ ๋๋ถ๋ถ์ ์ต์ ๋ธ๋ผ์ฐ์ ์์ ์ง์๋์ง๋ง ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์๋ ํธํ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๐ WebSocket
websocket
์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ ์ง์์ ์ธ ์ฐ๊ฒฐ์ ํตํ ์๋ฐฉํฅ ๋ฐ์ดํฐ ์ ์ก์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ค์๊ฐ ๋ฐ์ดํฐ ์ ์ก์ด ๊ฐ๋ฅํ๊ณ ๋งค๋ฒ HTTP ์์ฒญ์ ๋ณด๋ด๋ ์ค๋ฒํค๋๋ฅผ ์ค์ผ ์ ์๋ค. ์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ค๋ช
ํ๋ฉด, ์ฒ์ 3-way handshake๋ฅผ ํตํด ์ฐ๊ฒฐ๋๋ฉด, ๋ณ๋์ ์์ฒญ ์์ด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค.
ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ ์ฐ๊ฒฐ์ด ์๋ฆฝ๋๋ฉด ์๋ฐฉํฅ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์๋ค. ๋ํ ์ง์์ ์ธ ์ฐ๊ฒฐ ๋๋ถ์ ๋ฐ์ดํฐ๊ฐ ์ค๋น๋๋ฉด ๋ฐ๋ก ์ ์กํ ์ ์๋ค.
์น์์ผ๊ณผ HTTP๋ ์๋ก ๋ค๋ฅธ ํ๋กํ ์ฝ์ด๋ค. HTTP๋ ์์ฒญ ๋ฐ ์๋ต์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ฉฐ, ์น์์ผ์ ํ ๋ฒ์ handshake ์ดํ ์ง์์ ์ธ ์ฐ๊ฒฐ์ ์ ์งํ๋ค.
๊ทธ๋ฌ๋ ๊ตฌํ์ด ๋ค์ ๋ณต์กํ๋ฉฐ ์ง์์ ์ธ ์ฐ๊ฒฐ์ ์ ์งํ๊ธฐ ๋๋ฌธ์ ๋ง์ ํด๋ผ์ด์ธํธ๊ฐ ๋์์ ์ฐ๊ฒฐ๋ ๊ฒฝ์ฐ ์๋ฒ์ ์์ ์๋ชจ๊ฐ ์ฆ๊ฐํ ์ ์๋ค. ๋ง์ฝ ์๋ฒ ์ธก์์ ๋ณด๋ผ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ, ํด๋ผ์ด์ธํธ๋ ์ด๋ฅผ ์ ์ ์๊ณ , ์ง์์ ์ธ ์์ฒญ์ ๋ณด๋ด ํ์ธํด์ผ ํ๋ ๋ถํธํจ์ด ์๋ค. ๋ํ ๋ณด์ ์ธก๋ฉด์์ ๊ณ ๋ คํด์ผ ํ๋ ์ ์ด ์กด์ฌํ๋๋ฐ, ๋ฐ์ดํฐ๊ฐ ์ํธํ๋์ง ์์ ์ํ๋ก ์ ์ก๋ ์ ์๊ธฐ ๋๋ฌธ์ SSL ๋๋ TLS์ ๊ฐ์ ๋ณด์ ํ๋กํ ์ฝ์ ์ ์ฉํด์ผ ํ๋ค.
๋๋ถ๋ถ์ ์น ์๋ฒ๋ ์น์์ผ์ ์ง์ํ์ง๋ง ์ถ๊ฐ์ ์ธ ์ค์ ์ด ํ์ํ ์ ์๋ค. ๋ํ ํด๋ผ์ด์ธํธ ์ธก์๋ ์น์์ผ API๋ฅผ ํตํด ์ฐ๊ฒฐ์ ์ค์ ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค.
๐ ์ ๋ฆฌ
ย | Polling | Long Polling | SSE | Websocket |
---|---|---|---|---|
ํต์ ๋ฐฉํฅ | ์๋ฒ โ ํด๋ผ์ด์ธํธ | ์๋ฒ โ ํด๋ผ์ด์ธํธ | ์๋ฒ โ ํด๋ผ์ด์ธํธ | ์๋ฒ โ ํด๋ผ์ด์ธํธ |
ํ๋กํ ์ฝ | HTTP | HTTP | HTTP | TCP |
๊ตฌํ ๋์ด๋ | โ | โ | โ โ | โ โ โ |
์ฐ๊ฒฐ์ ์ | ์ฌ๋ฌ ๊ฐ โ ์ฃผ๊ธฐ์ ์ผ๋ก ์์ฒญ | ์ฌ๋ฌ ๊ฐ โ ์ฐ๊ฒฐ ๋น ์์ฒญ 1๊ฐ | ํด๋ผ์ด์ธํธ ๋น 1๊ฐ | ํด๋ผ์ด์ธํธ ๋น 1๊ฐ |
ํ์ฅ์ฑ | ๋ฎ์ | ๋ฎ์ | ๋์ | ๊ฐ์ฅ ๋์ |
๋ธ๋ผ์ฐ์ ์ง์ | ๋ชจ๋ ๋ธ๋ผ์ฐ์ | ๋ชจ๋ ๋ธ๋ผ์ฐ์ | ๋๋ถ๋ถ์ ์ต์ ๋ธ๋ผ์ฐ์ | ๋๋ถ๋ถ์ ์ต์ ๋ธ๋ผ์ฐ์ |
์ค๋ฅ ์ฒ๋ฆฌ | ์๋ ๊ตฌํ | ์๋ ๊ตฌํ | ์๋์ผ๋ก ์ฌ์ฐ๊ฒฐ, but ์ผ๋ถ ์๋ ์ฒ๋ฆฌ | ๋ด์ฅ ๋งค์ปค๋์ฆ ์กด์ฌ |