-
Notifications
You must be signed in to change notification settings - Fork 2
๐ Socket.io ์ต(๊ฐ)์ ํ
TCP ๊ธฐ๋ฐ์ ์๋ฐฉํฅ ์ก์์ ์ ํ๋กํ ์ฝ ์ด๋ค.
OSI Layer์์๋ HTTP์ ๊ฐ์ 7๊ณ์ธต์ ์์น๋ฅผ ํ๊ณ ์๊ณ ์ฐ๊ฒฐ์ด ์ ์ง๋๋ค๋ ์ ์์ ํฐ ์ฅ์ ์ด ์๋ ํ๋กํ ์ฝ์ด๋ค.
ํน์ง์ผ๋ก๋
- ์๋ฐฉํฅ ์ก์์ ๊ฐ๋ฅ (full duplex)
- ์ค์๊ฐ ๋คํธ์ํน ๊ฐ๋ฅ (Real-time networking)
- ๋ฎ์ ์ง์ฐ์๊ฐ (low latency)
Socket.IO์ room ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ๊ฐ ์คํธ๋ฆฌ๋ฐ ๋ฐฉ์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํจ์ผ๋ก์จ, ๋ฐฉ ์ฐธ์ฌ์๋ค ๊ฐ์ ์ค์๊ฐ ๋ฐ์ดํฐ ๊ณต์ ๊ฐ ํด๋น ๋ฐฉ ๋ด์์๋ง ์ด๋ฃจ์ด์ง๋๋ก ๊ตฌํํ์ต๋๋ค.
@WebSocketGateway({
namespace: 'rooms', // namespace ๋ฑ๋ก => ws://localhost:3000/rooms ๋ก ์ ๊ทผ
cors: {
origin: '*',
methods: ['GET', 'POST'],
},
})
export class RoomGateway{
@WebSocketServer()
server: Server; // server ๋ฑ๋ก
constructor() {} // ์ธ๋ถ repository, service ๋ฑ ์์กด์ฑ ์ฃผ์
@SubscribeMessage('test_message') // 'test_message' ๋ผ๋ event name์ผ๋ก ์๋ณ
async handleTest(
@ConnectedSocket() client: Socket, // client : ํ์ฌ ์ฌ์ฉ์ ์์ ์ socket
@MessageBody() data : { testId : string; }, // messageBody์ ๋ด์์ ํด๋ผ์ด์ธํธ์์ emit
) {
// ๋ก์ง
}
}
- ๊ธฐ๋ณธ์ ์ผ๋ก NestJS์
@WebSocketGateway
๋ฅผ implementํ์ฌ ์ฌ์ฉ -
RoomGateway
ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ํด๋ผ์ด์ธํธ์์ ์ ์กํ๋ WS message์ ๊ดํ ๊ฐ๊ฐ์ ํธ๋ค๋ฌ ํจ์๋ฅผ ๋ฑ๋ก ํด์ฃผ๋ ๋ฐฉ์
sequenceDiagram
participant Client
participant Server
participant Repository
rect rgb(200, 200, 200)
Note over Client,Repository: ๊ธฐ์กด ๋ฐฉ์
Client->>Server: Socket ์ฐ๊ฒฐ (handshaking)
Server->>Client: Socket ์ฐ๊ฒฐ ์๋ต (handshaking)
Client->>Server: joinRoom ์ด๋ฒคํธ ๋ฐ์
Server->>Repository: ๋ฐฉ ์ ๋ณด ์กฐํ
Repository-->>Server: ๋ฐฉ ์ ๋ณด ๋ฐํ
Server-->>Client: ๋ฐฉ ์ฐธ์ฌ ๊ฒฐ๊ณผ ์๋ต
end
์๋ฒ์ ํด๋ผ์ด์ธํธ๋ ์ด๊ธฐ์ ์ฐ์ ์ ์ผ๋ก handshaking ๊ณผ์ ์ ์งํ์ ํ๊ฒ ๋ฉ๋๋ค.
์ดํ๋ก ์์ฒญ์ ๊ดํ์ฌ ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ํน์ message๋ฅผ emit ํ๊ณ ์๋ฒ์์ ํน์ ๋ฉ์ธ์ง์ ๊ดํ ํธ๋ค๋ฌ ํจ์๋ค์ ์ฒ๋ฆฌํ๋ ๋ก์ง์ผ๋ก ์งํ์ ํ์์ต๋๋ค.
์๋ฒ์์ ๋ฑ๋กํ ํธ๋ค๋ฌ ํจ์๋ก๋ ๋ค์๊ณผ ๊ฐ์ด ์์ต๋๋ค
handleCreateRoom
: โcreateRoomโ message subscribe์ ํตํ์ฌ ๋ฐฉ ์์ฑ์ ๊ดํ ๋ก์ง์ ๋ด๋น
handleJoinRoom
: โjoinRoomโ message subscribe์ ํตํ์ฌ ์ ์ ๊ฐ ์์ฑ๋ ๋ฐฉ์ ์
์ฅํ๋ ๊ฒ์ ์ฒ๋ฆฌํ๋ ๋ก์ง์ ๋ด๋น
handleLeaveRoom
: โleaveRoomโ message subscribe์ ํตํ์ฌ ์ ์ ๊ฐ ๋ฐฉ์์ ๋๊ฐ๋ ๊ฒ์ ๊ดํ ๋ก์ง์ ๋ด๋น
sequenceDiagram
participant Client
participant Server
participant Repository
rect rgb(200, 240, 200)
Note over Client,Repository: ๋ณ๊ฒฝ๋ ๋ฐฉ์
Client->>Server: Socket ์ฐ๊ฒฐ (handshaking)
activate Server
Server->>Repository: ๋ฐฉ ์ ๋ณด ์ฆ์ ์กฐํ
Repository-->>Server: ๋ฐฉ ์ ๋ณด ๋ฐํ
Server-->>Client: ์ฐ๊ฒฐ ์๋ฃ (handshaking)
deactivate Server
end
๋ค๋ง inear ๋ด๋ถ์์ ์์ผ ์ฐ๊ฒฐ์ ํฌ๊ฒ ํด๋ผ์ด์ธํธ๊ฐ ์๋ก์ด ๋ผ์ด๋ธ ์ธ์
์ ๋ค์ด๊ฐ๋๋ง๋ค ์๋กญ๊ฒ ์์ฑ์ด ๋ฉ๋๋ค.
๊ทธ๋ ๊ธฐ์ ํด๋ผ์ด์ธํธ์ joinRoom ๊ณผ์ ์ ์ธ์ ๋ handshaking ๊ณผ ํจ๊ป ๋ฐ๋ก ์คํ์ด ๋ฉ๋๋ค.
๊ทธ๋ ๊ธฐ์ ์ ํฌ๋ ์๋ฒ์ ์์ผ ์ฒ๋ฆฌ์ ๊ดํ ํ๋ฆ์ ํฉ์ณ์ ๋ก์ง์ ๋จ์ํํ๊ณ ์ง์ฐ์๊ฐ์ ๋ ์ค์ด๊ณ ์ ํ์์ต๋๋ค.
handleConnection
: Socket ์ฐ๊ฒฐ ์์ ์ ์ฌ์ฉ์์ ๋ฐฉ ์ฐธ์ฌ๋ฅผ ๊ฒ์ฆํ๊ณ ์ด๊ธฐํ
handleDisconnect
: Socket ์ฐ๊ฒฐ์ด ์ข
๋ฃ๋ ๋ ์ฌ์ฉ์์ ๋ฐฉ ํด์ฅ ์ฒ๋ฆฌ ๋ฐ ๊ด๋ จ๋ ์ ๋ฆฌ ์์
- ์ฐ๊ฒฐ ์๋ช ์ฃผ๊ธฐ ์ด๋ฒคํธ๋ฅผ ์ง์ ์ฒ๋ฆฌํ๋ฏ๋ก ๋๋ฝ ์์ด ๋ชจ๋ ์ฐ๊ฒฐ/์ข ๋ฃ ์ํฉ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ๋คํธ์ํฌ ๋ถ์์ ์ด๋ ์๊ธฐ์น ์์ ์ฐ๊ฒฐ ์ข ๋ฃ ์ํฉ๋ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌ
- ์ฐ๊ฒฐ ์์ ์ ํ์ํ ๋ชจ๋ ์ด๊ธฐํ ์์ ์ ํ ๋ฒ์ ์ฒ๋ฆฌ
- ๋ถํ์ํ ์ฐ๊ฒฐ์ ์กฐ๊ธฐ์ ์ฐจ๋จํ์ฌ ์๋ฒ ๋ฆฌ์์ค ์ ์ฝํ๊ณ , ์ฝ๋์ ์๋ ์ค์ผ ์ ์์
- ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๊ฐ ๋ช
ํํจ
- ์ฐ๊ฒฐ ๊ด๋ฆฌ๋
handleConnection
- ๋น์ฆ๋์ค ๋ก์ง์ ๋ฉ์์ง ํธ๋ค๋ฌ
- ์ฐ๊ฒฐ ๋๋ ์์
์
handleDisconnect
- ์ฐ๊ฒฐ ๊ด๋ฆฌ๋
๐ ffmpeg๋ stderr๋ก ๋๋ฒ๊น
์ ํ๋ ์ด์
๐ HLS ํ๋กํ ์ฝ์ ๊ดํ ์ ๋ฆฌ ๋ฐ FFmpeg ์ฌ์ฉ๊ธฐ
๐ ๋นํธ๋ tsconfig.json์ด ์ธ ๊ฐ?
๐ NestJS ๊ธฐ๋ณธ ๊ฐ๋
- Modules
๐ Socket.io ์ต(๊ฐ)์ ํ
๐ ๋์ปค์ nginx์ ์ฌ์ฉ๊ธฐ
๐ ๋ถํํ
์คํธ๋ฅผ ํด๋ณด์
๐ FSD ์ฌ์ฉ๊ธฐ, ๊ทผ๋ฐ ์ด์ ๋๋ง์ ๊ท์น์ ๊ณ๋ค์ธ
๐ CICD ๊ตฌ์กฐ ์์
๐ ์จ๋ฒ ๋จ์๋ก ์คํธ๋ฆฌ๋ฐ ํ๊ธฐ (with HLS)
๐ HLS๋ก ์์
์ฃผ๊ณ ๋ฐ๊ธฐ
๐ vite + react + typescript ํ๊ฒฝ์์ path alias ์ค์
๐ React Scan์ด ๋ญ์ฃ ?
๐ ๋ก์ปฌ ํ๊ฒฝ ๊ฐ๋ฐ ๋ชจ๋ ๋ฐฐํฌ
๐ ์จ๋ฒ ์ ์ฒด๋ฅผ ์คํธ๋ฆฌ๋ฐํ๋ค๊ณ ? (with HLS)
๐ ์ฝ๋์ ์์ ์ฑ์ ๋์ด๊ธฐ ์ํด ํ
์คํธ์ฝ๋๋ฅผ ์์ฑํด๋ณด์
๐ ์๋ก๊ณ ์นจ ์ HLS ERROR
๐ input ํ๊ทธ์ ํ๊ธ ์
๋ ฅ ํ, Enter๋ฅผ ๋๋ฅด๋ฉด ํจ์๊ฐ ๋๋ฒ ํธ์ถ๋๋ ์ค๋ฅ
๐ nginx proxy pass๋ฅผ ๋ฐ๊ฟจ๋๋ ์๊ธด ์๋ฌ - ์ค์จ๊ฑฐ ์ธ์ ๋ฌธ์
๐ ๋ฐฐํฌ ํ๊ฒฝ์์ ํด๋ผ์ด์ธํธ-์๋ฒ WS handshake
๐ ๋ ๋๋ง ๋ฒ์ธ์ ํ๋!
๐ ๊ทธ๋ผ์ด๋ ๋ฃฐ
๐ฅ ํ์ ์๊ฐ
๐ ์ฝ๋ & ๊น ์ปจ๋ฒค์
๐ณ ๊น branch ์ ๋ต
๐ ๋
ธ์
๋ฌธ์ ์ ์ฅ์
๐จ ํผ๊ทธ๋ง
๐งโ๐ป ๊ธฐํ ๊ณต์ ๋ฐํ ์๋ฃ
๐ค 2์ฃผ์ฐจ ๋ฐํ ์๋ฃ
๐ ๋ฐฑ๋ก๊ทธ
๐ 1์ฃผ์ฐจ
๐ 2์ฃผ์ฐจ
๐ 3์ฃผ์ฐจ
๐ 4์ฃผ์ฐจ
๐ 5์ฃผ์ฐจ
๐๏ธ 1์ฃผ์ฐจ
๐๏ธ 2์ฃผ์ฐจ
๐๏ธ 3์ฃผ์ฐจ
๐๏ธ 4์ฃผ์ฐจ
๐๏ธ 5์ฃผ์ฐจ
โจ 1์ฃผ์ฐจ
โจ 2์ฃผ์ฐจ
โจ 3์ฃผ์ฐจ
โจ 4์ฃผ์ฐจ