๐[WEB] WebSocket์ด๋?
WebSocket?
์น ์์ผ์ Transport Protocol
์ ์ผ์ข
์ผ๋ก, ๋ ํ๋ก๊ทธ๋จ ๊ฐ์ ๋ฉ์์ง ๊ตํ์ ์ํ ํต์ ๋ฐฉ๋ฒ ์ค ํ๋์ด๋ค
์น ์์ผ์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์์ผ Connection
์ ์ ์งํ์ฌ ์ธ์ ๋ ์๋ฐฉํฅ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ธฐ์ ์ด๋ค.
์ค์๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌํ์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
- SNS
- ๋ฉ์ ์
- โฆ ๋ฑ
์น ์์ผ์ ํน์ง
1. ์๋ฐฉํฅ ํต์ (Full-Duplex)
- ๋ฐ์ดํฐ ์ก์์ ์ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ ํต์ ๋ฐฉ๋ฒ
- ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์๋ก์๊ฒ ์ํ ๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์์
- HTTP๋ ์์ฒญ ์์๋ง ์๋ต์ ์ฃผ๋ ๋จ๋ฐฉํฅ ํต์
2. ์ค์๊ฐ ๋คํธ์ํน (Real Time-Networking)
- ์น ํ๊ฒฝ์์ ์ฐ์๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๋ ธ์ถ์ํฌ ์ ์์
์น ์์ผ์ ์ ์ฐ์ง?
๊ธฐ์กด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ํต์ ์ ๋๋ถ๋ถ HTTP๋ฅผ ํตํด ์งํํ๋ค.
๋, HTTP๋ Request/Response ๊ธฐ๋ฐ์ Stateless
ํ๋กํ ์ฝ์ด๋ค.
- ์๋ฒ-ํด๋ผ์ด์ธํธ ๊ฐ์ ์ฐ๊ฒฐ์ด ์๊ตฌ์ ์ด์ง ์์
- ํด๋ผ์ด์ธํธ์์ Request๋ฅผ ํ ๋๋ง ์๋ฒ๊ฐ Response๋ฅผ ํ๋ ๋ฐฉ์ (๋จ๋ฐฉํฅ)
์ด๋ฐ ๊ฒฝ์ฐ์๋ ์๋ฒ์ ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์ดํธ ๋๋๋ผ๋ ํด๋ผ์ด์ธํธ์๋ ์ ๋ฐ์ดํธ๋ฅผ ์งํํ์ง ์๋ ํ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ด ์ด๋ฃจ์ด์ง์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
- Ajax๊ณผ ๊ฐ์ ๊ธฐ์ ์ ํตํด ์ด๋์ ๋ ํด๊ฒฐ์ด ๊ฐ๋ฅํ์ง๋ง, ๋น ๋ฅธ ์ ๋ฐ์ดํธ๊ฐ ์๋ช ์ธ ์๋น์ค์ ๊ฒฝ์ฐ์๋ ์ด ๋ํ ๋ถ์ ์ ํ ์ ์์
์ด๋ฐ ๋ฌธ์ ์ ํด๊ฒฐ์ ์ํด ์ฌ์ฉ๋๋ ๊ฒ์ด ์น ์์ผ
์ด๋ค.
๊ทธ๋ผ ์น ์์ผ์ ์ด๋ป๊ฒ ์ฐ๊ฒฐํ์ง?
์ผ๋จ ์น ์์ผ์ HTTP์ ๋ฌ๋ฆฌ Stateful
ํ๋กํ ์ฝ์ด๋ค.
๋๋ฌธ์, ํด๋ผ์ด์ธํธ์ ํ ๋ฒ ์ฐ๊ฒฐ์ด ๋๋ฉด ๊ณ์ ๊ฐ์ ๋ผ์ธ์ ์ฌ์ฉํด ํต์ ํ๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ HTTP, TCP ์ฐ๊ฒฐ ํธ๋ํฝ์ ํผํ ์ ์๋ค.
๋, ์น ์์ผ์ HTTP์ ๋ง์ฐฌ๊ฐ์ง๋ก 80๋ฒ ํฌํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฐฉํ๋ฒฝ ์ฌ์ค์ ์ด ํ์ ์๋ค๋ ์ฅ์ ๋ ์๋ค๊ณ ํ๋ค.
์๋ ์๋ฆฌ๋?
์๋ฒ-ํด๋ผ์ด์ธํธ ๊ฐ์ ์น ์์ผ์ HTTP ํ๋กํ ์ฝ์ ํตํด ์ด๋ฃจ์ด์ง๋ค.
์ฅ HTTP๊ฐ ์ ๋์?
๋ง์ฝ ์ฐ๊ฒฐ์ด ์ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค๋ฉด, ์๋ฒ-ํด๋ผ์ด์ธํธ ๊ฐ์ ์น ์์ผ ์ฐ๊ฒฐ์ด ์ด๋ฃจ์ด์ง๊ณ ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด HTTP ์ฐ๊ฒฐ์ ์๋์ผ๋ก ๋์ด์ง๋ค.
์ฆ, ์ต์ด ์ ์ ์์๋ง HTTP์ ์์์ HandShaking์ ํ๊ธฐ ๋๋ฌธ์ HTTP Header๋ฅผ ์ฌ์ฉํ๊ณ ์ฐ๊ฒฐ์ ๋๋ ๊ฒ์ด๋ค.
Django์์ ์น ์์ผ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ?
socketio
Django, Flask, FastAPI ๋ฑ๊ณผ ๊ฐ์ Python ๊ธฐ๋ฐ์ ํ๋ ์์ํฌ๋ Python์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ๋ ํ๋ก๊ทธ๋จ์์ ์น ์์ผ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ ์ค ํ๋๊ฐ socketio
์ด๋ค.
socketio
๋ Node.js ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ ์์ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
์ด๊ฑด ๋ค์์ ๊ธ์ ์์ฑํ๋ฉฐ ๊ฐ๋ ์ ์ ๋ฆฌํ๊ณ , ํํ ๋ฆฌ์ผ ์งํ ํ ์ ๋ฐ์ดํธ ํด์ผ๊ฒ ๋ค..!
Django Channels
Django์์๋ ํนํ ์ค์๊ฐ ์น ํต์ ๋ฐ ์์ผ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๊ธฐ ์ํด Django Channels
๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ํ๋ค.
๐ย Django Channels๋?
์ฐธ๊ณ ์๋ฃ
[Introduction | Socket.IO](https://socket.io/docs/v2/) |
๋๊ธ๋จ๊ธฐ๊ธฐ