[HTTP] WebSocket

2024. 12. 8. 14:18ยท๐ŸŒ Network/๐Ÿ“œHTTP

WebSocket

IETF(๊ตญ์ œ ์ธํ„ฐ๋„ท ํ‘œ์ค€ํ™” ๊ธฐ๊ตฌ)

- HTTP ํ”„๋กœํ† ์ฝœ์˜ ์ตœ์‹ ํ™” ๋ฐ ์—…๋ฐ์ดํŠธ ์ž‘์—…์€ IETF(Internet Engineering Task Force)**๊ฐ€ ์ฃผ๋„ํ•˜๊ณ  ์žˆ๋‹ค.

- IETF ์‚ฐํ•˜ HTTP Working Group์€ HTTP์˜ ๊ฐœ์„ ๊ณผ ํ‘œ์ค€ํ™”๋ฅผ ๋‹ด๋‹นํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๋ฒ„์ „๊ณผ ๊ด€๋ จ ๊ธฐ์ˆ ๋“ค์ด ์ •์˜๋˜๊ณ  ๋ฐฐํฌ๋˜๋ฉฐ, ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋Ÿฌํ•œ HTTP ํ‘œ์ค€์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ์ƒˆ๋กœ์šด ํ‘œ์ค€์— ๋งž์ถฐ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋˜๊ฒŒ ๋œ๋‹ค.

 

์ด๋Ÿฌํ•œ, IETF์—์„œ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์˜ ํ•„์š”์„ฑ์„ ๋А๊ปด WebSocket ํ”„๋กœํ† ์ฝœ์„ ๋งŒ๋“ค์—ˆ๊ณ , HTTP ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜์œผ๋กœ ์—ฐ๊ฒฐ์„ ์„ค์ • ํ•˜๊ณ , ์ดํ›„์— WebSocket ํ”„๋กœํ† ์ฝœ๋กœ ์ „ํ™˜๋˜์–ด ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.

 

HTTP -> WebSocket ์ „ํ™˜ ๊ณผ์ •

1. HTTP ์š”์ฒญ ํ—ค๋”์— Upgrade: websocket๊ณผ Connection: Upgrade์„ ํฌํ•จํ•ด์„œ WebSocket ์—ฐ๊ฒฐ ์š”์ฒญ

GET /chat HTTP/1.1
Host: example.com
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
Origin: http://example.com

2. ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ๋ฐ›์•„ WebSocket ์—…๊ทธ๋ ˆ์ด๋“œ ์š”์ฒญ ์ˆ˜๋ฝ ๋ฐ HTTP 101 ์ƒํƒœ ์ฝ”๋“œ๋กœ ์‘๋‹ต

- ์ด๋•Œ, Upgrade: websocket๊ณผ Connection: Upgrade ํ—ค๋”๊ฐ€ ํฌํ•จ๋˜์–ด ์‘๋‹ต์ด ๊ฐ€๊ฒŒ ๋จ.

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: dGhlIHNhbXBsZSBub25jZQ==

3. ์ด๋ ‡๊ฒŒ HandShack๊ฐ€ ๋๋‚œ ๋’ค WebSocket ํ”„๋กœํ† ์ฝœ๋กœ ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ํ•˜๊ฒŒ ๋จ.

์—ฐ๊ฒฐ์ด ์™„๋ฃŒ๋˜๋ฉด ๋” ์ด์ƒ HTTP๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ, WebSocket ํ”„๋กœํ† ์ฝœ๋กœ ํ†ต์‹ ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•ด, ์›๋ž˜ HTTP ๋ฉ”์‹œ์ง€ ํ˜•ํƒœ๋กœ ๋ณด๋‚ด๋˜ ๋ฐ์ดํ„ฐ๋ฅผ WebSocket ๋ฉ”์‹œ์ง€ ํ˜•ํƒœ๋กœ ๋ณด๋‚ด๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

- ํ•ด๋‹น WebSocket ๋ฉ”์‹œ์ง€ ํ˜•ํƒœ๋Š” WebSocket ํ”„๋ ˆ์ž„์ด๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.

 

์„œ๋ฒ„๋Š” ์†Œ์ผ“ ์„ธ์…˜์„ ์ƒ์„ฑํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ฒŒ ๋œ๋‹ค( ์ฆ‰, ์œ ์ง€ํ•˜๊ฒŒ ๋จ (Stateful) )

 

WebSocket์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

HTTP๋กœ ์‹ค์‹œ๊ฐ„์„ ๊ตฌํ˜„ํ•˜๊ธฐ์—๋Š” 3 way handshake๋กœ ๋น„์šฉ์ด ๋„ˆ๋ฌด ๋งŽ์ด ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์–‘๋ฐฉํ–ฅ์„ ์‚ฌ์šฉํ•ด ์‹ค์‹œ๊ฐ„์„ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜๋ฉด ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๋Œ€ํ•œ ๋น„์šฉ์ด ๋“ค์ง€ ์•Š๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ๋‹จ์ ์œผ๋กœ๋Š” ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์„œ๋ฒ„ ์ž์›์„ ๋งŽ์ด ์†Œ๋น„ํ•˜๊ฒŒ ๋  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์ ์ ˆํ•œ ํ”„๋กœํ† ์ฝœ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ค.

 

WebSocket ์ด์šฉ์—†์ด AJAX๋ฅผ ํ†ตํ•ด HTTP์—์„œ๋„ ์‹ค์‹œ๊ฐ„์ฒ˜๋Ÿผ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ, HTTP๋Š” ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์ด๋ฉฐ, HTTP ๋ฐฉ์‹์œผ๋กœ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ”„๋กœํ† ์ฝœ์˜ ๊ทœ์•ฝ์ธ 3 way handshake ๊ณผ์ •์„ ์ง„ํ–‰ํ•ด์•ผํ•œ๋‹ค. ํ•ด๋‹น ๋ฐฉ์‹์€ ๋งค๋ฒˆ ์š”์ฒญ๋งˆ๋‹ค ์ง„ํ–‰์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋Š”๊ฑด, ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์„ ๊ตฌํ˜„ํ•œ๋‹ค ๊ฐ€์ •ํ•˜๋ฉด ๋งค ์ฑ„ํŒ…์š”์ฒญ ๋งˆ๋‹ค 3 way handshake๋ฅผ ํ•ด์•ผํ•œ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋˜๊ณ , ๊ทธ๋ ‡๋‹ค๋ฉด 3 way handshake์— ๋Œ€ํ•œ ์ถ”๊ฐ€์ ์ธ ๋น„์šฉ์ด ์ง€์†์ ์œผ๋กœ ๋“ ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋œ๋‹ค.

์ด๋Ÿฌํ•œ ๋ถ€๋ถ„ ๋•Œ๋ฌธ์— ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์„ ์œ„ํ•ด HTTP์—์„œ ์—…๊ทธ๋ ˆ์ด๋“œ ๋œ WebSocket์ด ๋‚˜์™”์œผ๋ฉฐ, WebSocket์„ ํ†ตํ•ด ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ํ•œ ๋ฒˆ์˜ 3 way handshake๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ ์ง€์†์„ ๋ณด์žฅํ•˜๊ฒŒ ๋œ๋‹ค. ์ถ”๊ฐ€์ ์ธ ๋น„์šฉ์ด ๋“ค์ง€ ์•Š๋Š”๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

 

 

 

 

WebSocket ๊ฐ€์ด๋“œ

1. websocket.org / ์›น ์†Œ์ผ“ ๋ฐฐ๊ฒฝ ์ง€์‹

https://websocket.org/guides/road-to-websockets/

 

The Road to WebSockets

A look at how web technologies evolved since the inception of the World Wide `Web``, culminating with the emergence of WebSockets, a vastly superior improvement on HTTP for building realtime web apps.

websocket.org

2. MDN web docs

https://developer.mozilla.org/ko/docs/Web/API/WebSocket

 

WebSocket - Web API | MDN

WebSocket ๊ฐ์ฒด๋Š” WebSocket ์„œ๋ฒ„ ์—ฐ๊ฒฐ์˜ ์ƒ์„ฑ๊ณผ ๊ด€๋ฆฌ ๋ฐ ์—ฐ๊ฒฐ์„ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹  API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

developer.mozilla.org

 

'๐ŸŒ Network > ๐Ÿ“œHTTP' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[HTTP] ์›น ํƒ„์ƒ ๋ฐฐ๊ฒฝ  (0) 2024.12.18
[HTTP] HTTP๋ž€?  (1) 2024.12.18
[HTTP] CSR & SSR ์ด๋ž€?  (1) 2024.11.14
(HTTP) Stateless, Stateful  (3) 2024.04.26
HTTP  (2) 2024.04.26
'๐ŸŒ Network/๐Ÿ“œHTTP' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [HTTP] ์›น ํƒ„์ƒ ๋ฐฐ๊ฒฝ
  • [HTTP] HTTP๋ž€?
  • [HTTP] CSR & SSR ์ด๋ž€?
  • (HTTP) Stateless, Stateful
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด๋ณด๊ธฐ (153)
      • ๐ŸŽ“๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต (26)
        • ๐Ÿ–ฅ๏ธ์ปดํ“จํ„ฐ๊ณผํ•™๊ณผ (1)
        • ๐ŸŒ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ… (11)
        • โš™๏ธ์ปดํ“จํ„ฐ์˜ ์ดํ•ด (11)
        • ๐Ÿ›๏ธ์„ธ๊ณ„์˜์ •์น˜์™€๊ฒฝ์ œ (3)
      • ๐Ÿ› ๏ธBackend (49)
        • ๐Ÿ“š๋ฐฑ์—”๋“œ ๊ณต๋ถ€ (3)
        • โ˜•Java (20)
        • ๐ŸŒณSpring (10)
        • โšกPython (13)
        • JavaScript (1)
        • ๐Ÿ›ข๏ธDatabase (0)
        • Algorithm Problem Solving (2)
      • ๐ŸŒฟGitHub (1)
      • ๐ŸŒ Network (7)
        • ๐Ÿ“œHTTP (7)
      • ๐Ÿš€DevOps (1)
      • Data Structure (1)
      • โ›บ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ (65)
      • ์žก๋‹ด (1)
      • ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ธ€ (2)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • GitHub
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์„ธ๊ณ„ํ™”
    ์ž๋ฐ”
    ๋ฐฉํ†ต๋Œ€
    spring
    ์ปดํŒŒ์ผ๋Ÿฌ
    ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ…
    ์ปดํ“จํ„ฐ์˜ ์ดํ•ด
    Spring Framework
    ๋ฐฉ์†ก๋Œ€
    ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ…๊ฐœ๋ก 
    Python
    Java
    ํŒŒ์ด์ฌ
    ํด๋ž˜์Šค
    ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต
    ์œ ๋น„์ฟผํ„ฐ์Šค
    ๋‹คํ˜•์„ฑ
    ์Šคํ”„๋ง
    ํด๋ผ์šฐ๋“œ
    ์ž…์ถœ๋ ฅ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.1
junbin2
[HTTP] WebSocket
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”