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 |