Post

[Network] Polling, SSE, Websocket์ด๋ž€?

[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๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿ“Œ ์ •๋ฆฌ

network

ย PollingLong PollingSSEWebsocket
ํ†ต์‹  ๋ฐฉํ–ฅ์„œ๋ฒ„ โ†’ ํด๋ผ์ด์–ธํŠธ์„œ๋ฒ„ โ†’ ํด๋ผ์ด์–ธํŠธ์„œ๋ฒ„ โ†’ ํด๋ผ์ด์–ธํŠธ์„œ๋ฒ„ โ†” ํด๋ผ์ด์–ธํŠธ
ํ”„๋กœํ† ์ฝœHTTPHTTPHTTPTCP
๊ตฌํ˜„ ๋‚œ์ด๋„โ˜…โ˜…โ˜…โ˜…โ˜…โ˜…โ˜…
์—ฐ๊ฒฐ์˜ ์ˆ˜์—ฌ๋Ÿฌ ๊ฐœ โ‡’ ์ฃผ๊ธฐ์ ์œผ๋กœ ์š”์ฒญ์—ฌ๋Ÿฌ ๊ฐœ โ‡’ ์—ฐ๊ฒฐ ๋‹น ์š”์ฒญ 1๊ฐœํด๋ผ์ด์–ธํŠธ ๋‹น 1๊ฐœํด๋ผ์ด์–ธํŠธ ๋‹น 1๊ฐœ
ํ™•์žฅ์„ฑ๋‚ฎ์Œ๋‚ฎ์Œ๋†’์Œ๊ฐ€์žฅ ๋†’์Œ
๋ธŒ๋ผ์šฐ์ € ์ง€์›๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๋Œ€๋ถ€๋ถ„์˜ ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €๋Œ€๋ถ€๋ถ„์˜ ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €
์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ์ˆ˜๋™ ๊ตฌํ˜„์ˆ˜๋™ ๊ตฌํ˜„์ž๋™์œผ๋กœ ์žฌ์—ฐ๊ฒฐ, but ์ผ๋ถ€ ์ˆ˜๋™ ์ฒ˜๋ฆฌ๋‚ด์žฅ ๋งค์ปค๋‹ˆ์ฆ˜ ์กด์žฌ
This post is licensed under CC BY 4.0 by the author.