-
Notifications
You must be signed in to change notification settings - Fork 7
๐ชต 2. WebSocket ์๋ฒ
@WebSocketGateway
๋ NestJS์์ WebSocket ์๋ฒ๋ฅผ ์ค์ ํ ๋ ์ฌ์ฉํ๋ ๋ฐ์ฝ๋ ์ดํฐ์ด๋ค. ์ด ๋ฐ์ฝ๋ ์ดํฐ๋ ํด๋์ค๋ฅผ WebSocket ์๋ฒ์ ๊ฒ์ดํธ์จ์ด๋ก ์ ์ํ๊ณ , ์ด๋ฅผ ํตํด WebSocket ์ฐ๊ฒฐ ๋ฐ ๋ฉ์์ง ์ฒ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก HTTP ์๋ฒ์ ๋น์ทํ๊ฒ ์๋ํ์ง๋ง, ํด๋ผ์ด์ธํธ๊ฐ ์ง์์ ์ธ ์ฐ๊ฒฐ์ ์ ์งํ๋ฉด์ ์ค์๊ฐ ์๋ฐฉํฅ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค.
@WebSocketGateway({
cors: '*',
namespace: '/socket.io/game',
})
-
cors
: CORS ์ค์ ์ ํตํด ๋ค๋ฅธ ๋๋ฉ์ธ์์ WebSocket ์ฐ๊ฒฐ์ ํ์ฉํ ์ง ์ฌ๋ถ๋ฅผ ์ค์ ํ๋ค. -
namespace
: WebSocket์ ๋ค์์คํ์ด์ค๋ฅผ ์ง์ ํ์ฌ ์ฌ๋ฌ ์ข ๋ฅ์ WebSocket ์ฐ๊ฒฐ์ ๋ถ๋ฆฌํ ์ ์๋ค. ์๋ฅผ ๋ค์ด/socket.io/game
๋ค์์คํ์ด์ค๋ ๊ฒ์ ๊ด๋ จ ํด๋ผ์ด์ธํธ๋ค๋ง ์ฐ๊ฒฐ๋๊ฒ ํ ์ ์๋ค.
@SubscribeMessage
๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ด๋ ํน์ ๋ฉ์์ง๋ฅผ ์๋ฒ์์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉํ๋ ๋ฐ์ฝ๋ ์ดํฐ์ด๋ค. ๊ฐ ๋ฉ์์ง์ ๋ํด ๋ณ๋์ ํธ๋ค๋ฌ ๋ฉ์๋๋ฅผ ๋ง๋ค์ด ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์ํ ์ ์๋ค.
@SubscribeMessage('joinRoom')
async handleJoinRoom(@ConnectedSocket() client: Socket, @MessageBody() data: { roomId: string }) {
// handle joining room
}
-
'joinRoom'
: ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ'joinRoom'
์ด๋ผ๋ ๋ฉ์์ง๋ฅผ ๋ฐ์ ๋ ์ด ๋ฉ์๋๊ฐ ์คํ๋๋ค. -
@ConnectedSocket() client
: ํ์ฌ ์ฐ๊ฒฐ๋ ์์ผ ํด๋ผ์ด์ธํธ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐ์ฝ๋ ์ดํฐ์ด๋ค. ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ ์ํ๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋ค. -
@MessageBody() data
: ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ์ฝ๋ ์ดํฐ๋ก, ๋ฉ์์ง์ ๋ณธ๋ฌธ์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํ๋ค.
WebSocket ์๋ฒ์์๋ ์๋ฐฉํฅ ํต์ ์ ์ํด ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ค๋ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๊ณ , ํ์ํ ๊ฒฝ์ฐ ์ค์๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ด๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ค.
-
emit
: ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ๋ ์ฌ์ฉํ๋ค. ์๋ฅผ ๋ค์ด,client.to(roomId).emit('playerJoined', ...)
๋ ํน์ ๋ฃธ์ ์ํ ํด๋ผ์ด์ธํธ๋ค์๊ฒ'playerJoined'
๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ค. -
on
: ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ํน์ ๋ฉ์์ง๋ฅผ ์์ ํ ๋ ์ฌ์ฉํ๋ค.@SubscribeMessage
๋ฐ์ฝ๋ ์ดํฐ๊ฐ ๊ทธ ์ญํ ์ ํ๋ค.
OnGatewayDisconnect
์ธํฐํ์ด์ค๋ ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ ์ข
๋ฃ ์์ ๋์์ ์ฒ๋ฆฌํ๋ ๋ฉ์๋๋ฅผ ๊ตฌํํ ์ ์๊ฒ ํด์ค๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ์ ๋์์ ๋ ์ด๋ฅผ ๊ฐ์งํ๊ณ , ํ์ํ ๊ฒฝ์ฐ ์ํ๋ฅผ ์ ๋ฆฌํ๊ฑฐ๋ ๋ฆฌ์์ค๋ฅผ ํด์ ํ๋ ๋ฑ์ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค.
export class GameGateway implements OnGatewayDisconnect {
async handleDisconnect(client: Socket) {
// ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ ์ข
๋ฃ ์ฒ๋ฆฌ
}
}
- 1. ๊ฐ๋ฐ ํ๊ฒฝ ์ธํ ๋ฐ ํ๋ก์ ํธ ๋ฌธ์ํ
- 2. ์ค์๊ฐ ํต์
- 3. ์ธํ๋ผ ๋ฐ CI/CD
- 4. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด Canvas ๊ตฌํํ๊ธฐ
- 5. ์บ๋ฒ์ค ๋๊ธฐํ๋ฅผ ์ํ ์์ CRDT ๊ตฌํ๊ธฐ
-
6. ์ปดํฌ๋ํธ ํจํด๋ถํฐ ์น์์ผ๊น์ง, ํจ์จ์ ์ธ FE ์ค๊ณ
- ์ข์ ์ปดํฌ๋ํธ๋ ๋ฌด์์ธ๊ฐ? + Headless Pattern
- ํจ์จ์ ์ธ UI ์ปดํฌ๋ํธ ์คํ์ผ๋ง: Tailwind CSS + cn.ts
- Tailwind CSS๋ก ๋์์ธ ์์คํ ๋ฐ UI ์ปดํฌ๋ํธ ์ธํ
- ์น์์ผ ํด๋ผ์ด์ธํธ ๊ตฌํ๊ธฐ: React ํ๊ฒฝ์์ ํจ์จ์ ์ธ ์น์์ผ ์ํคํ ์ฒ
- ์น์์ผ ํด๋ผ์ด์ธํธ ์ฝ๋ ๋ถ์ ๋ฐ ๊ณต์
- 7. ํธ๋ฌ๋ธ ์ํ ๋ฐ ์ฑ๋ฅ/UX ๊ฐ์
- 1์ฃผ์ฐจ ๊ธฐ์ ๊ณต์
- 2์ฃผ์ฐจ ๋ฐ๋ชจ ๋ฐ์ด
- 3์ฃผ์ฐจ ๋ฐ๋ชจ ๋ฐ์ด
- 4์ฃผ์ฐจ ๋ฐ๋ชจ ๋ฐ์ด
- 5์ฃผ์ฐจ ๋ฐ๋ชจ ๋ฐ์ด
- WEEK 06 ์ฃผ๊ฐ ๊ณํ
- WEEK 06 ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- WEEK 06 ์ฃผ๊ฐ ํ๊ณ