WebSocket์ด๋?
1. WebSocket ์ ์
WebSocket์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์๋ฐฉํฅ, ์ค์๊ฐ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ํ๋กํ ์ฝ์ด๋ค. ์ผ๋ฐ์ ์ธ HTTP ์์ฒญ/์๋ต ๋ฐฉ์๊ณผ ๋ฌ๋ฆฌ, WebSocket์ ํ ๋ฒ ์ฐ๊ฒฐ์ ๋งบ์ผ๋ฉด ์ ์ง๋ ์ํ์์ ์ง์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ํน์ฑ์ ๊ฐ์ง๋ค.
2. WebSocket์ ์ฃผ์ ํน์ง
- ํ ์ด์ค ํต์ (Full-Duplex Communication)
- ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์๋ก ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์ฃผ๊ณ ๋ฐ์ ์ ์์.
- ๊ธฐ์กด HTTP์ ์์ฒญ-์๋ต ๋ชจ๋ธ๊ณผ ๋ค๋ฅด๊ฒ, ์๋ฒ๋ ํด๋ผ์ด์ธํธ์๊ฒ ๋จผ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์์.
- ์ง์์ ์ธ ์ฐ๊ฒฐ(Persistent Connection)
- ์ด๊ธฐ ํธ๋์
ฐ์ดํฌ(Handshake) ํ, TCP ์ฐ๊ฒฐ์ด ๋์ด์ง์ง ์๊ณ ์ ์ง๋จ.
- ์ถ๊ฐ์ ์ธ ์ฐ๊ฒฐ ์ค์ ์ด ํ์ ์์ผ๋ฏ๋ก ๋คํธ์ํฌ ์ค๋ฒํค๋๊ฐ ๊ฐ์ํจ.
- ๋ฎ์ ์ง์ฐ์๊ฐ(Low Latency)
- HTTP ์์ฒญ์ ํตํ ํด๋ง(Polling) ๋ฐฉ์๋ณด๋ค ๋ ๋น ๋ฅธ ์ค์๊ฐ ๋ฐ์ดํฐ ์ ์ก ๊ฐ๋ฅ.
- ์จ๋ผ์ธ ๊ฒ์, ์ฑํ
์ ํ๋ฆฌ์ผ์ด์
, ์ฃผ์ ๊ฑฐ๋ ์์คํ
๋ฑ์์ ํ์ฉ๋จ.
- ํค๋ ์ค๋ฒํค๋ ๊ฐ์
- WebSocket์ ์ฒ์ ์ฐ๊ฒฐ ์ HTTP ํธ๋์
ฐ์ดํฌ๋ฅผ ์ํํ์ง๋ง, ์ดํ์๋ ์ต์ํ์ ํค๋๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ ์ฌ์ฉ๋์ ์ ์ฝํจ.
3. WebSocket ์ฐ๊ฒฐ ๊ณผ์
1๏ธโฃ ํธ๋์
ฐ์ดํฌ(Handshake)
- WebSocket์ ๊ธฐ์กด HTTP๋ฅผ ์ด์ฉํด ์ด๊ธฐ ์ฐ๊ฒฐ์ ์ค์ ํจ.
- ํด๋ผ์ด์ธํธ๊ฐ HTTP Upgrade ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ฒ๊ฐ ์ด๋ฅผ ์น์ธํ๋ฉด WebSocket ์ฐ๊ฒฐ์ด ํ๋ฆฝ๋จ.
# makefile
GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9YZrdjA==
Sec-WebSocket-Version: 13
# makefile
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
- ์ดํ๋ถํฐ๋ WebSocket ํ๋ ์(Frame) ๊ธฐ๋ฐ์ผ๋ก ์๋ฐฉํฅ ํต์ ์ด ์์๋จ.
2๏ธโฃ ๋ฐ์ดํฐ ์ ์ก (Message Frame)
- WebSocket์ ๋ฐ์ดํฐ๋ฅผ ํ๋ ์(Frame) ๋จ์๋ก ์ฃผ๊ณ ๋ฐ์.
- ์ฃผ์ ํ๋ ์ ์ ํ:
3๏ธโฃ ์ฐ๊ฒฐ ์ข
๋ฃ (Closing Connection)
- ํด๋ผ์ด์ธํธ ๋๋ ์๋ฒ๊ฐ Close Frame์ ๋ณด๋ด๋ฉด, WebSocket ์ฐ๊ฒฐ์ด ์ข
๋ฃ๋จ.
4. WebSocket vs HTTP ๋น๊ต
ํน์ง |
WebSocket |
HTTP |
ํต์ ๋ฐฉ์ |
์๋ฐฉํฅ (Full-Duplex) |
๋จ๋ฐฉํฅ (Request-Response) |
์ฐ๊ฒฐ ์ ์ง |
์ง์ ์ฐ๊ฒฐ |
์์ฒญ๋ง๋ค ์ ์ฐ๊ฒฐ ์์ฑ |
๋ฐ์ดํฐ ์ ์ก ์๋ |
๋น ๋ฆ (๋ฎ์ ์ง์ฐ์๊ฐ) |
์๋์ ์ผ๋ก ๋๋ฆผ |
ํค๋ ์ค๋ฒํค๋ |
๋ฎ์ (์ต์ํ์ ํค๋) |
๋ง์ (๊ฐ ์์ฒญ๋ง๋ค ํค๋ ํฌํจ) |
์ฌ์ฉ ์ฌ๋ก |
์ค์๊ฐ ์ฑํ
, ๊ฒ์, ๊ธ์ต ๋ฐ์ดํฐ |
์ ์ ์นํ์ด์ง, API ํธ์ถ |
5. WebSocket ์ฌ์ฉ ์์ (Python & JavaScript)
๐ Python (FastAPI) ๊ธฐ๋ฐ WebSocket ์๋ฒ
from fastapi import FastAPI, WebSocket
from fastapi.responses import HTMLResponse
app = FastAPI()
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
while True:
data = await websocket.receive_text()
await websocket.send_text(f"Message received: {data}")
๐ JavaScript (ํ๋ก ํธ์๋)
const socket = new WebSocket("ws://localhost:8000/ws");
socket.onopen = () => {
console.log("WebSocket Connected!");
socket.send("Hello Server!");
};
socket.onmessage = (event) => {
console.log("Received: " + event.data);
};
socket.onclose = () => {
console.log("WebSocket Disconnected!");
};
6. WebSocket์ ์ฃผ์ ํ์ฉ ์ฌ๋ก
- ์ค์๊ฐ ์ฑํ
(Chatting)
- WhatsApp, Slack, Discord ๋ฑ ์ค์๊ฐ ๋ฉ์์ง ์๋น์ค
- ์จ๋ผ์ธ ๊ฒ์ (Online Multiplayer Games)
- ๊ฒ์ ๋ด ์ค์๊ฐ ์ํ ๋๊ธฐํ, ํ๋ ์ด์ด ๊ฐ ์ด๋ฒคํธ ์ ๋ฌ
- ์ฃผ์ ๋ฐ ๊ธ์ต ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ
- ์ค์๊ฐ ์ฃผ๊ฐ ๋ณ๋, ํธ๋ ์ด๋ฉ ์์คํ
- IoT ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ
- ์ผ์ ๋ฐ์ดํฐ ์์ง ๋ฐ ์๊ฒฉ ์ ์ด
- ๋ผ์ด๋ธ ์คํธ๋ฆฌ๋ฐ & ์คํฌ์ธ ์ค๊ณ
- ์ค์๊ฐ ๋ฐฉ์ก, ๊ฒฝ๊ธฐ ์ ์ ์
๋ฐ์ดํธ
- ํ์
๋๊ตฌ (Google Docs ๊ฐ์ ๋์ ํธ์ง)
- ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ๋ฌธ์๋ฅผ ํธ์งํ ์ ์๋๋ก ๋ฐ์ดํฐ ๋๊ธฐํ
7. WebSocket์ ํ๊ณ์ ๋ฐ ๋์
โ WebSocket์ ๋จ์
- ์๋ฒ ๋ถํ ์ฆ๊ฐ
- ๋ค์์ WebSocket ์ฐ๊ฒฐ์ ๊ด๋ฆฌํ๋ ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ฐ CPU ์ฌ์ฉ๋ ์ฆ๊ฐ.
- ํ๋ก์ ๋ฐ ๋ฐฉํ๋ฒฝ ๋ฌธ์
- ์ผ๋ถ ๋คํธ์ํฌ ํ๊ฒฝ(๊ธฐ์
๋ด๋ถ๋ง ๋ฑ)์์ WebSocket์ด ์ฐจ๋จ๋ ๊ฐ๋ฅ์ฑ์ด ์์.
- ๋ธ๋ผ์ฐ์ ๋ฐ ๋คํธ์ํฌ ์ง์
- ์ค๋๋ ๋ธ๋ผ์ฐ์ ๋ฐ ์ผ๋ถ ๋คํธ์ํฌ ํ๊ฒฝ์์๋ ์ง์๋์ง ์์ ์ ์์.
โ
WebSocket ๋์ ๊ธฐ์
๋์ |
์ค๋ช
|
SSE (Server-Sent Events) |
์๋ฒ → ํด๋ผ์ด์ธํธ ๋จ๋ฐฉํฅ ์คํธ๋ฆฌ๋ฐ (HTTP ๊ธฐ๋ฐ) |
Long Polling |
ํด๋ผ์ด์ธํธ๊ฐ ์ง์์ ์ผ๋ก ์์ฒญ์ ๋ณด๋ด๋ ๋ฐฉ์ (๋นํจ์จ์ ) |
gRPC Streaming |
HTTP/2 ๊ธฐ๋ฐ์ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ |
8. ๊ฒฐ๋ก
- WebSocket์ ์ง์์ ์ธ ์ฐ๊ฒฐ์ ์ ์งํ๋ฉด์ ์๋ฐฉํฅ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ๊ธฐ์ ๋ก, ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์์ ํ์์ ์ผ๋ก ์ฌ์ฉ๋จ.
- HTTP ๊ธฐ๋ฐ์ ํด๋ง(Polling) ๋ฐฉ์๋ณด๋ค ๋คํธ์ํฌ ํจ์จ์ด ์ข๊ณ , ์๋ต ์๋๊ฐ ๋น ๋ฆ.
- ํ์ง๋ง ์๋ฒ ๋ถํ ๋ฐ ๋คํธ์ํฌ ํ๊ฒฝ์ ๋ฐ๋ผ ์ ์ ํ ๋์์ ๊ณ ๋ คํด์ผ ํจ.
โ
์ฌ์ฉํด์ผ ํ ๋: ์ค์๊ฐ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๊ฒฝ์ฐ (์ฑํ
, ๊ฒ์, ์คํธ๋ฆฌ๋ฐ ๋ฑ)
โ ํผํด์ผ ํ ๋: ๋จ์ํ ์์ฒญ-์๋ต ๊ธฐ๋ฐ API (RESTful API๊ฐ ์ ํฉ)