1. Websocket ์ด๋?
- TCP ์ฐ๊ฒฐ ํ๋๋ก ์์ ํ ๋ฆฌ์ผํ์ ์๋ฐฉํฅ ํต์ ์ด ๊ฐ๋ฅํ๋ค
- ์์ฒญ ์๋ต๋ง๋ค ๋จ๋ฐ์ ์ธ ์ฐ๊ฒฐ์ด ์์ฑ๋๋ HTTP์ ๋ค๋ฅด๊ฒ Websocket์ ์ง์์ ์ธ ์ฐ๊ฒฐ์ ์ ์งํ๋ค
- ๋ ์ดํด์ (Latency)๊ฐ ๋ฎ๋ค
- Hand Shake ์ดํ ์ต์ํ์ ๋ฐ์ดํฐ๋ง ์๋ก ์ ์กํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ์ ์ก๋์ ์ต์ํ ํ ์ ์๋ค
- ์๋ฐฉํฅ ํต์ ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด๋ ๊ทธ ์ด๋๋ ๋จผ์ ํต์ ์ ์ฃผ๋ ํ ์ ์๋ค
1.1 HTTP vs Websocket
1# HTTP2ํด๋ผ์ด์ธํธ --- ์์ฒญ --> ์๋ฒ3<-- ์๋ต ---45# Websocket6ํด๋ผ์ด์ธํธ --- ์์ฒญ/์๋ต --> ์๋ฒ7<-- ์์ฒญ/์๋ต ---
2. Socket IO
Socket IO๋ Websocket ํ๋กํ ์ฝ์ ์ฌ์ฉํด์ ๋ง๋ low-latency (๋ฎ์ ์ง์ฐ ์๊ฐ), bidirectional (์๋ฐฉํฅ ์ํต), event based(์ด๋ฒคํธ ๊ธฐ๋ฐ)์ผ๋ก ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ํต์ ํ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค
2.1 Socket IO์ ์ฃผ์ ๊ธฐ๋ฅ
ํด๋ฐฑ ๋ฉ์ปค๋์ฆ: websocket์ด ์ง์๋์ง ์๊ฑฐ๋ ๋ฌธ์ ๊ฐ ์๊ธด ์ํฉ์์๋ ํต์ ์ด ์ ์ง๋๋๋ก ๋ค์ํ ํ๋กํ ์ฝ์ ๊ฐ์ด ์ฌ์ฉํ๋ค์ด๋ฒคํธ๊ธฐ๋ฐ ์ํคํ ์ฒ: ํน์ ๋ฉ์ธ์ง๋ฅผ listening ํ๊ณ ์๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ์ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ๋คRoom & Namespace: Namespace๋ฅผ ์ด์ฉํด ํจ์จ์ ์ผ๋ก ์ฐ๊ฒฐ์ ๋๋๊ณ Room์ ์ด์ฉํด์ Broadcasting์ ์กฐ์จํ๋ค
2.2 SocketIO๋ก ๊ตฌํ ๊ฐ๋ฅํ ์์
์ฑํ ์ฑ: ์ฑ์ ์ฌ์ฉ์๊ฐ ์ค์๊ฐ์ผ๋ก ์๋ก ์ฑํ ์ ์ฃผ๊ณ ๋ฐ๋ ๊ธฐ๋ฅ๋ผ์ด๋ธ ๋ ธํฐํผ์ผ์ด์ : ์คํฌ์ธ ์ ์ ํํฉ, ๋ด์ค ์๋ฆผ, ์ฃผ์์ ์ฅ ์ค์๊ฐ ์ ๋ณด ๊ธฐ๋ฅ๋ฑํ์ ํด: ์ฌ๋ฌ ์ฌ์ฉ์๋ค์ด ๋์์ ํ๋์ ๋ฌธ์ ๋ฅผ ์์ ํ๋ ๊ธฐ๋ฅ์จ๋ผ์ธ ๊ฒ์: ๋์์ ์ฌ๋ฌ ์ฌ์ฉ์๋ค์ด ์ํธ์์ฉ์ ํ ์ ์๋ ๊ฒ์
2.3 Namespace & Room

Namespace: Socket IO์์ ๋ฆฌ์์ค๋ฅผ ๋๋๋ ๋ฐฉ๋ฒ์ด๋ค.- REST API URL์ฒ๋ผ ์ ์ํ๋ฉฐ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ์ด๋ฒคํธ๋ฅผ ๊ฒฉ๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ค
Room: Namespace์์ ํ๋ฒ ๋ ๊ทธ๋ฃน์ผ๋ก ๋๋ ์ ์๊ฒ ํด์ค๋ค.- ํ๋์ ์ฐ๊ฒฐ์ ์ฌ๋ฌ๊ฐ์ Room ์ ๋์์ ๋ค์ด๊ฐ ์ ์์ผ๋ฉฐ Broadcasting์ ์ ์ฉํ๋ค
1// Namespace2const to = require('socket.io')(3000)34const chatNamespace = io.of('/chat')5chatNamespace.on('connection', (socket) => {6console.log('User connected to chat namespace')7socket.on('message', (msg) => {8console.log(;'Chat message:', msg)9})10})1112const newsNamespace = io.of('/news')13newsNamespace.on('connection', (socket) => {14console.log('User connected to news namespace')15socket.on('update', (news) => {16console.log('News update:', news)17})18})
1// Room2const io = require('socket.io')(3000)34io.on('connection', socket => {5console.log('User connected')67// Room ์ ์ฅํ๊ธฐ8socket.join('room1')910// 'room1'์ ๋ธ๋ก๋์บ์คํ11socket.to('room1').emit('message', 'Hello room1')1213// Room ๋์ค๊ธฐ14socket.leave('room1')15})
3. NestJS Queue

3.1 Queue์ ์ฅ์
- ์๋ฒ ์ฑ๋ฅ ์ต์ ํ๊ฐ ๊ฐ๋ฅํ๋ค.
- ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ ๋ฐ๋ก Worker Node์๊ฒ ์ ๊ฐํ ์ ์๋ค.
- ์ค์ผ์ผ๋ง์ด ์์ ๋กญ๋ค
- Worker Node๋ง ๋ฐ๋ก ์ค์ผ์ผ๋ง ๊ฐ๋ฅํ๋ค.
- ์ฌ๋ฌ๊ฐ์ Worker Node๋ฅผ ์์ฑํ๊ณ ๋์์ ์์ ์ ํ๋ก์ธ์ฑ ํ ์ ์๋ค.
- ์์
์ด ์ ์ค๋ ํ๋ฅ ์ด ์ ๋ค
- ์คํจํ ์์ ์ฌ์๋
- ์คํจํ ์์ ๋ฉํ๋ฐ์ดํฐ ์ ์ง
- ์ฐ์ ์์ ์ง์ ๊ฐ๋ฅ
- ์ค์ํ ์์ ์ ์ฐ์ ์ฒ๋ฆฌํ๋๋ก ํ ์ ์๋ค.
- Request -> Response ๋ผ์ดํ์ฌ์ดํด์ ๋๋ ์ด๋ฅผ ์ค์ฌ ์ค ์ ์๋ค.