๐ŸŒ WebSocket: HTTP์˜ ํ•œ๊ณ„๋ฅผ ๋„˜๋Š” ์‹ค์‹œ๊ฐ„ ํ†ต์‹ 

๋„๋‘๋งจยท2025๋…„ 7์›” 2์ผ

๊ณต๋ถ€

๋ชฉ๋ก ๋ณด๊ธฐ
21/23

๐Ÿงฒ์ฝ”์ผ์˜ Web Socket๋ฅผ ๋ณด๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.


1๏ธโƒฃ WebSocket์ด๋ž€?

HTML5์—์„œ ๋„์ž…๋œ ์–‘๋ฐฉํ–ฅ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ

  • W3C์™€ IETF์—์„œ ํ‘œ์ค€ํ™”๋œ Full-Duplex ํ†ต์‹  ํ”„๋กœํ† ์ฝœ
  • ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)์™€ ์„œ๋ฒ„๊ฐ€ ์ง€์†์ ์ธ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹  ๊ฐ€๋Šฅ
  • ๊ธฐ์กด HTTP์™€ ๋‹ฌ๋ฆฌ, ์„œ๋ฒ„๋„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ž์œ ๋กญ๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์Œ

๐Ÿ“Œ ์ „์†ก ์ฃผ์†Œ: ws:// (๊ธฐ๋ณธ) ๋˜๋Š” wss:// (TLS ๋ณด์•ˆ)


2๏ธโƒฃ WebSocket์ด ๋“ฑ์žฅํ•œ ๋ฐฐ๊ฒฝ

๊ธฐ์กด HTTP ๊ธฐ๋ฐ˜ ๋ฐฉ์‹๋“ค์€ ์‹ค์‹œ๊ฐ„์„ฑ์— ํ•œ๊ณ„๊ฐ€ ์žˆ์—ˆ์Œ:

๋ฐฉ์‹ํŠน์ง•๋ฌธ์ œ์ 
Polling์ฃผ๊ธฐ์ ์œผ๋กœ ์š”์ฒญ ์ „์†ก๋„คํŠธ์›Œํฌ ๋‚ญ๋น„
Long Polling์‘๋‹ต๊นŒ์ง€ ์—ฐ๊ฒฐ ์œ ์ง€์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค ๋ถ€๋‹ด
Server-Sent Events (SSE)์„œ๋ฒ„ โ†’ ํด๋ผ์ด์–ธํŠธ ๋‹จ๋ฐฉํ–ฅ ์ŠคํŠธ๋ฆฌ๋ฐํด๋ผ์ด์–ธํŠธ โ†’ ์„œ๋ฒ„ ์ „์†ก ๋ถˆ๊ฐ€
HTTPํ—ค๋” ๋ฐ˜๋ณต ์ „์†ก์œผ๋กœ ์˜ค๋ฒ„ํ—ค๋“œ ํผ๋‹จ๋ฐฉํ–ฅ & ๋น„ํšจ์œจ

โœ… WebSocket์€ ์ง€์† ์—ฐ๊ฒฐ, ํ—ค๋” ์ƒ๋žต, ์–‘๋ฐฉํ–ฅ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์„ ๋ชจ๋‘ ๋งŒ์กฑ


3๏ธโƒฃ WebSocket ์ž‘๋™ ๊ตฌ์กฐ

๐Ÿ” 1. ํ•ธ๋“œ์…ฐ์ดํฌ (HTTP Upgrade)

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ Upgrade: websocket ํ—ค๋” ํฌํ•จํ•˜์—ฌ ์š”์ฒญ
  2. ์„œ๋ฒ„๊ฐ€ 101 Switching Protocols ์‘๋‹ต์œผ๋กœ ์ˆ˜๋ฝ
  3. Sec-WebSocket-Key โ†’ Sec-WebSocket-Accept๋กœ ๊ฒ€์ฆ
GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: xxxxxxxxx==
Sec-WebSocket-Version: 13

๐Ÿ“ก 2. ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ ์ „์†ก

  • ์—ฐ๊ฒฐ ํ›„ HTTP ํ”„๋กœํ† ์ฝœ์—์„œ WebSocket ํ”„๋กœํ† ์ฝœ๋กœ ์ „ํ™˜
  • ๋ฉ”์‹œ์ง€๋Š” ํ”„๋ ˆ์ž„ ๋‹จ์œ„๋กœ ์†ก์ˆ˜์‹ 
  • ํ”„๋ ˆ์ž„ ๊ตฌ์กฐ: FIN | Opcode | Payload Length | Masking Key | Payload

ํ…์ŠคํŠธ ๋ฉ”์‹œ์ง€(UTF-8), ์ด์ง„ ๋ฐ์ดํ„ฐ ๋“ฑ ๋ชจ๋‘ ์ „์†ก ๊ฐ€๋Šฅ


๐Ÿ”š 3. ์—ฐ๊ฒฐ ์ข…๋ฃŒ (Close Frame)

  • ํด๋ผ์ด์–ธํŠธ ๋˜๋Š” ์„œ๋ฒ„ ์ค‘ ํ•œ ์ชฝ์ด Close ํ”„๋ ˆ์ž„ ์ „์†ก
  • ์ƒ๋Œ€๋ฐฉ์ด Close ํ”„๋ ˆ์ž„์œผ๋กœ ์‘๋‹ตํ•˜๋ฉด ์—ฐ๊ฒฐ ์ข…๋ฃŒ

4๏ธโƒฃ ์–ธ์ œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„๊นŒ?

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹ค์‹œ๊ฐ„์„ฑ๊ณผ ์ƒ์‹œ ์—ฐ๊ฒฐ์ด ์ค‘์š”ํ•œ ์„œ๋น„์Šค์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

  • ๐Ÿ’ฌ ์ฑ„ํŒ… ์„œ๋น„์Šค
  • ๐Ÿ“ˆ ์‹ค์‹œ๊ฐ„ ์ฃผ์‹ ์‹œ์„ธ ์•Œ๋ฆผ
  • ๐ŸŽฎ ์˜จ๋ผ์ธ ๊ฒŒ์ž„
  • ๐Ÿ›  ๋ผ์ด๋ธŒ ํ˜‘์—… ๋„๊ตฌ
  • ๐Ÿงญ ์ƒํƒœ ๋™๊ธฐํ™” ๊ธฐ๋ฐ˜ ์•ฑ (์ง€๋„, ๋ชจ๋‹ˆํ„ฐ๋ง ๋Œ€์‹œ๋ณด๋“œ ๋“ฑ)

5๏ธโƒฃ ๋ณด์กฐ ๊ธฐ์ˆ : Socket.IO, STOMP ๋“ฑ

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌํŠน์ง•
Socket.IO์ž๋™ ํด๋ฐฑ ์ง€์› (WebSocket ๋ฏธ์ง€์› ๋ธŒ๋ผ์šฐ์ € ๋Œ€์‘), ๋„ค์ž„์ŠคํŽ˜์ด์Šค/์ด๋ฒคํŠธ ์ง€์›
STOMP๋ฉ”์‹œ์ง• ํ”„๋กœํ† ์ฝœ (ex. Spring WebSocket์—์„œ ์ž์ฃผ ์‚ฌ์šฉ)
SignalR.NET ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ํ”„๋ ˆ์ž„์›Œํฌ

๐Ÿ“Œ Socket.IO๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ WebSocket โ†’ Long Polling์œผ๋กœ ์ž๋™ ๋Œ€์ฒดํ•˜์—ฌ ํ˜ธํ™˜์„ฑ ํ™•๋ณด


โœ… ๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ

ํ•ญ๋ชฉWebSocket
์—ฐ๊ฒฐ ๋ฐฉ์‹์ง€์† ์—ฐ๊ฒฐ (Full-Duplex)
๊ธฐ๋ฐ˜TCP
์žฅ์ ์‹ค์‹œ๊ฐ„์„ฑ, ์–‘๋ฐฉํ–ฅ, ํ—ค๋” ์˜ค๋ฒ„ํ—ค๋“œ ์—†์Œ
๋‹จ์ ์œ ์ง€ ๋น„์šฉ (์—ฐ๊ฒฐ ์ˆ˜ ์œ ์ง€)
ํ™œ์šฉ ์˜ˆ์ฑ„ํŒ…, ๊ฒŒ์ž„, ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง

0๊ฐœ์˜ ๋Œ“๊ธ€