Skip to content

library websocket

qbsb147 edited this page Mar 21, 2026 · 7 revisions

๐Ÿ”Œ WebSocket

๐Ÿ“ ๊ฐœ์š”

WebSocket์€ ์‹ค์‹œ๊ฐ„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ๋กœ,
TCP(Transmission Control Protocol)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ํ•ต์‹ฌ:

โ€œํ•œ ๋ฒˆ ์—ฐ๊ฒฐํ•˜๋ฉด, ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง€์†์ ์œผ๋กœ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹คโ€

  • TCP ๊ธฐ๋ฐ˜ โ†’ ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก ๋ณด์žฅ
  • ๋ฉ”์‹œ์ง€ ์ˆœ์„œ ๋ณด์žฅ
  • ์–‘๋ฐฉํ–ฅ(Full-Duplex) ํ†ต์‹  ๊ฐ€๋Šฅ

ํŠน์ง•

๐Ÿ”„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹  (Full-Duplex)

  • ํด๋ผ์ด์–ธํŠธ โ†’ ์„œ๋ฒ„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ
  • ์„œ๋ฒ„ โ†’ ํด๋ผ์ด์–ธํŠธ๋„ ์ž์œ ๋กญ๊ฒŒ ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ€๋Šฅ

๐Ÿ‘‰ HTTP์™€ ๋‹ฌ๋ฆฌ ์„œ๋ฒ„๊ฐ€ ๋จผ์ € ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Œ

๐Ÿ”— ์ง€์†์  ์—ฐ๊ฒฐ (Persistent Connection)

  • ์ตœ์ดˆ ์—ฐ๊ฒฐ ์ดํ›„ ์—ฐ๊ฒฐ์„ ์œ ์ง€
  • ์ถ”๊ฐ€ HTTP ์š”์ฒญ ์—†์ด ๊ณ„์† ํ†ต์‹  ๊ฐ€๋Šฅ

๐Ÿ‘‰ ์ „ํ™” ํ†ตํ™”์ฒ˜๋Ÿผ ๊ณ„์† ์—ฐ๊ฒฐ๋œ ์ƒํƒœ ์œ ์ง€

โšก ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „์†ก

  • ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‹œ ์ฆ‰์‹œ ์ „๋‹ฌ ๊ฐ€๋Šฅ
  • Polling ์—†์ด ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ

๐Ÿ“ฆ ๋ฐ์ดํ„ฐ ์ „์†ก ๋‹จ์œ„

  • ๋ฐ์ดํ„ฐ๋Š” ํ”„๋ ˆ์ž„(Frame) ๋‹จ์œ„๋กœ ์ „๋‹ฌ๋จ

ํ”„๋ ˆ์ž„ ์ข…๋ฅ˜:

  • ํ…์ŠคํŠธ ํ”„๋ ˆ์ž„ (Text Frame)
  • ๋ฐ”์ด๋„ˆ๋ฆฌ ํ”„๋ ˆ์ž„ (Binary Frame)
  • Ping / Pong ํ”„๋ ˆ์ž„ (์—ฐ๊ฒฐ ์œ ์ง€ ํ™•์ธ)
  • Close ํ”„๋ ˆ์ž„ (์—ฐ๊ฒฐ ์ข…๋ฃŒ)

๐Ÿ’ก ์ฐธ๊ณ :

  • ํŒจํ‚ท(Packet)์€ ๋„คํŠธ์›Œํฌ ๊ณ„์ธต ๋‹จ์œ„
  • ํ”„๋ ˆ์ž„(Frame)์€ WebSocket ํ”„๋กœํ† ์ฝœ ๋‹จ์œ„

๋™์ž‘ ๋ฐฉ์‹

๐Ÿ“Š ์ „์ฒด ํ๋ฆ„

sequenceDiagram
    participant Client
    participant Server

    Client->>Server: HTTP ์š”์ฒญ (Upgrade: WebSocket)
    Server->>Client: 101 Switching Protocols
    Client->>Server: ๋ฉ”์‹œ์ง€ ์ „์†ก (Frame)
    Server->>Client: ๋ฉ”์‹œ์ง€ ์ „์†ก (Frame)
Loading

WebSocket ์—ฐ๊ฒฐ (Handshake)

WebSocket์€ HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ์—ฐ๊ฒฐ์„ ์‹œ์ž‘ํ•œ ํ›„ ํ”„๋กœํ† ์ฝœ์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ

GET /socket
Host: example.com
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Key: randomKey
Sec-WebSocket-Version: 13

๐Ÿ“Œ ์„œ๋ฒ„ ์‘๋‹ต

101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: generatedKey

์˜๋ฏธ:

  • Upgrade: websocket โ†’ WebSocket์œผ๋กœ ์ „ํ™˜ ์Šน์ธ
  • 101 Switching Protocols โ†’ ํ”„๋กœํ† ์ฝœ ์ „ํ™˜ ์™„๋ฃŒ

๐Ÿ‘‰ ์ด ์ดํ›„๋ถ€ํ„ฐ๋Š” HTTP๊ฐ€ ์•„๋‹Œ WebSocket ํ”„๋กœํ† ์ฝœ๋กœ ํ†ต์‹ 

ํ”„๋กœํ† ์ฝœ

  • ws:// โ†’ ์ผ๋ฐ˜ WebSocket
  • wss:// โ†’ ๋ณด์•ˆ WebSocket (TLS ์ ์šฉ)

๊ด€๊ณ„:

ws : wss = http : https

์ด๋ฒคํŠธ

WebSocket ์—ฐ๊ฒฐ ํ›„ ๋‹ค์Œ ์ด๋ฒคํŠธ ์‚ฌ์šฉ ๊ฐ€๋Šฅ:

  • open โ†’ ์—ฐ๊ฒฐ ์„ฑ๊ณต
  • message โ†’ ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ 
  • error โ†’ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
  • close โ†’ ์—ฐ๊ฒฐ ์ข…๋ฃŒ

์žฅ์ 

  • ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ 
  • ์„œ๋ฒ„ Push ๊ฐ€๋Šฅ
  • Polling ์ œ๊ฑฐ๋กœ ๋„คํŠธ์›Œํฌ ๋น„์šฉ ์ ˆ๊ฐ
  • ์ฑ„ํŒ…, ์•Œ๋ฆผ, ๊ฒŒ์ž„ ๋“ฑ์— ์ ํ•ฉ

ํ•œ๊ณ„์ 

์ƒํƒœ ๊ด€๋ฆฌ ํ•„์š”
: ์—ฐ๊ฒฐ์„ ๊ณ„์† ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์„œ๋ฒ„์—์„œ ์ƒํƒœ ๊ด€๋ฆฌ ํ•„์š”
์„œ๋ฒ„ ๋ถ€ํ•˜ ์ฆ๊ฐ€
: ๋งŽ์€ ์—ฐ๊ฒฐ์„ ๋™์‹œ์— ์œ ์ง€ํ•ด์•ผ ํ•จ
์—๋Ÿฌ ์ฒ˜๋ฆฌ ํ•œ๊ณ„
: ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง„ ์ด์œ ๋ฅผ ์ •ํ™•ํžˆ ์•Œ๊ธฐ ์–ด๋ ค์›€
์žฌ์—ฐ๊ฒฐ ์ฒ˜๋ฆฌ ํ•„์š”
: ์ž๋™ ์žฌ์—ฐ๊ฒฐ ์ง€์› โŒ, ํด๋ผ์ด์–ธํŠธ์—์„œ ์ง์ ‘ ๊ตฌํ˜„ ํ•„์š”
๋ธŒ๋ผ์šฐ์ € ์˜์กด์„ฑ
: HTML5 ๊ธฐ๋ฐ˜ โ†’ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ € ๋ฏธ์ง€์›

๐Ÿ“ก ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ

โš™๏ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ•

Websocket

Kafka

Redis

Debezium

๐Ÿงฉ ๊ธฐ๋Šฅ ๊ตฌํ˜„

์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ(Spring)

Pub/Sub ๊ธฐ๋ฐ˜ ๋ฉ”์„ธ์ง€ ์ฒ˜๋ฆฌ(Redis)

์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ ์ฒ˜๋ฆฌ(Kafka)

CDC(Debezium)

  • ๐Ÿ”„ CDC
๐Ÿง  ๊ฐœ๋…

๐ŸŽฏ ์„ค๊ณ„ ํŒจํ„ด

๐Ÿ—๏ธ ์•„ํ‚คํ…์ฒ˜

  • ๐Ÿ—๏ธ EDA
  • ๐Ÿ—๏ธ CDC

๐Ÿ“š ๊ธฐ์ˆ  ์Šคํƒ

Clone this wiki locally