Gateways
Gateways
๊ฒ์ดํธ์จ์ด๋ @WebSocketGateway()
๋ฐ์ฝ๋ ์ดํฐ๋ก ์ฃผ์์ด ๋ฌ๋ฆฐ ํด๋์ค์
๋๋ค. ๊ฒ์ดํธ์จ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก socket.io ํจํค์ง๋ฅผ ์ฌ์ฉํ์ง๋ง ๊ธฐ๋ณธ ์น ์์ผ ๊ตฌํ์ ํฌํจํ์ฌ ๊ด๋ฒ์ํ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํธํ์ฑ์ ์ ๊ณตํฉ๋๋ค. ์ฌ๊ธฐ.
warning ํํธ ๊ฒ์ดํธ์จ์ด๋ ๋จ์ํ ๊ณต๊ธ์์ ๋์ผํ๊ฒ ์๋ํ๋ฏ๋ก ์์ฑ์๋ฅผ ํตํด ์์ฝ๊ฒ ์ข ์์ฑ์ ์ฃผ์ ํ ์ ์์ต๋๋ค. ๋ํ ๊ฒ์ดํธ์จ์ด๋ ๋ค๋ฅธ ํด๋์ค (๊ณต๊ธ์ ๋ฐ ์ปจํธ๋กค๋ฌ)์ ์ํด ์ฃผ์ ๋ ์๋ ์์ต๋๋ค.
Installation
๋จผ์ ํ์ํ ํจํค์ง๋ฅผ ์ค์นํด์ผํฉ๋๋ค.
Overview
์ผ๋ฐ์ ์ผ๋ก ์ฑ์ด ์น ์์ฉ ํ๋ก๊ทธ๋จ์ด ์๋๊ฑฐ๋ ์๋์ผ๋ก ํฌํธ๋ฅผ ๋ณ๊ฒฝํ์ง ์์ ๊ฒฝ์ฐ ๊ฐ ๊ฒ์ดํธ์จ์ด๋ HTTP ์๋ฒ๊ฐ ์คํ๋๋ ๊ฒ๊ณผ ๋์ผํ ํฌํธ๋ฅผ ์์ ํฉ๋๋ค. @WebSocketGateway(80)
๋ฐ์ฝ๋ ์ดํฐ์ ์ธ์๋ฅผ ์ ๋ฌํ์ฌ ์ด ๋์์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ 80
์ ์ ํ๋ ํฌํธ ๋ฒํธ์
๋๋ค. ๋ํ ๋ค์ ๊ตฌ์ฑ์ผ๋ก ์ด ๊ฒ์ดํธ์จ์ด์์ ์ฌ์ฉํ๋ namespace๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
๊ฒฝ๊ณ ๊ฒ์ดํธ์จ์ด๋
providers
๋ฐฐ์ด ์์ ๋ฃ์ ๋๊น์ง ์์๋์ง ์์ต๋๋ค.
๋ค์ ์คํ์ด์ค
๋ ์ ์ผํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์
์ด ์๋๋๋ค. ์ฌ๊ธฐ์ ์ธ๊ธ๋ ๋ค๋ฅธ ์์ฑ์ ์ ๋ฌํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์์ฑ์ ์ธ์คํด์คํ ํ๋ก์ธ์ค ๋์ ์์ผ ์์ฑ์๋ก ์ ๋ฌ๋ฉ๋๋ค.
์ข์, ๊ฒ์ดํธ์จ์ด๋ ์ง๊ธ ๋ฃ๊ณ ์์ง๋ง ์ฐ๋ฆฌ๋ ์ง๊ธ๊น์ง ๋ค์ด์ค๋ ๋ฉ์์ง๋ฅผ subscriptํ์ง ์์ต๋๋ค. events
๋ฉ์์ง๋ฅผ subscriptionํ๊ณ ๋๊ฐ์ ๋ฐ์ดํฐ๋ก ์ฌ์ฉ์์๊ฒ ์๋ตํ๋ ํธ๋ค๋ฌ๋ฅผ ๋ง๋ค์ด ๋ด
์๋ค.
info ํํธ
@SubscribeMessage()
๋ฐ์ฝ๋ ์ดํฐ๋@nestjs/websockets
ํจํค์ง์์ ๊ฐ์ ธ์ต๋๋ค.
handleEvent()
ํจ์๋ ๋ ๊ฐ์ ์ธ์๋ฅผ ์ทจํฉ๋๋ค. ์ฒซ๋ฒ์งธ๋ ํ๋ซํผ ๋ณ ์์ผ ์ธ์คํด์ค์ด๊ณ ๋ ๋ฒ์งธ๋ ํด๋ผ์ด์ธํธ์์ ๋ฐ์ ๋ฐ์ดํฐ์
๋๋ค. ๋ฉ์์ง๋ฅผ ๋ฐ์ผ๋ฉด ๋๊ตฐ๊ฐ๊ฐ ๋คํธ์ํฌ๋ฅผ ํตํด ๋ณด๋ธ ๊ฒ๊ณผ ๋์ผํ ๋ฐ์ดํฐ๋ก ์น์ธ์ ๋ณด๋
๋๋ค. ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ณ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ, ์๋ฅผ ๋ค์ด client.emit()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์์ง๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ๊ฒฝ์ฐ ์ธํฐ์
ํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฌ์ฉ์์๊ฒ ์๋ตํ์ง ์์ผ๋ ค๋ฉด ์๋ฌด ๊ฒ๋ ๋ฐํํ์ง ๋ง์ญ์์ค (๋๋ "์ ์๋์ง ์์"๊ณผ ๊ฐ์ด "๊ฑฐ์ง"๊ฐ์ ๋ช
์์ ์ผ๋ก ๋ฐํ).
์ด์ ํด๋ผ์ด์ธํธ๊ฐ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ๋
handleEvent()
๋ฉ์๋๊ฐ ์คํ๋ฉ๋๋ค. ์ ํธ๋ค๋ฌ ๋ด์์ ์์ฑ๋ ๋ฉ์์ง๋ฅผ ๋ค์ผ๋ ค๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ์น์ธ ๋ฆฌ์ค๋๋ฅผ ์ฒจ๋ถํด์ผํฉ๋๋ค.
Multiple responses
์น์ธ์ ํ๋ฒ๋ง ๋ฐ์ก๋ฉ๋๋ค. ๋ํ ๊ธฐ๋ณธ WebSockets ๊ตฌํ์์๋ ์ง์๋์ง ์์ต๋๋ค. ์ด ์ ํ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ๊ฐ์ง ์์ฑ์ผ๋ก ๊ตฌ์ฑ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ ์ ์์ต๋๋ค. ์์ฑ๋ ์ด๋ฒคํธ์ ์ด๋ฆ์ธ event
์ ํด๋ผ์ด์ธํธ์ ์ ๋ฌํด์ผ ํ๋ data
์
๋๋ค.
info ํํธ
WsResponse
์ธํฐํ์ด์ค๋@nestjs/websockets
ํจํค์ง์์ ๊ฐ์ ธ์ต๋๋ค.
๋ค์ด์ค๋ ์๋ต์ ๋ค์ผ๋ ค๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ๋ค๋ฅธ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ ์ฉํด์ผํฉ๋๋ค.
Asynchronous responses
๊ฐ ๋ฉ์์ง ํธ๋ค๋ฌ๋ ๋๊ธฐ์ ๋๋ ๋น๋๊ธฐ์ (async
) ์ผ ์ ์์ผ๋ฏ๋ก Promise
๋ฅผ ๋ฐํํ ์ ์์ต๋๋ค. ๋ํ Observable์ ๋ฐํ ํ ์ ์์ต๋๋ค. ์ฆ, ์ฌ๋ฌ ๊ฐ์ ๋ฐํํ ์ ์์ต๋๋ค (์คํธ๋ฆผ์ด ์๋ฃ ๋ ๋๊น์ง ๋ฐฉ์ถ ๋จ).
์์ ๋ฉ์์ง ์ฒ๋ฆฌ๊ธฐ๋ 3 ๋ฒ (์์๋๋ก response
๋ฐฐ์ด์ ๊ฐ ํญ๋ชฉ๊ณผ ํจ๊ป) ์๋ตํฉ๋๋ค.
Lifecycle hooks
3 ๊ฐ์ง ์ ์ฉํ ์๋ช ์ฃผ๊ธฐ ํํฌ๊ฐ ์์ต๋๋ค. ๋ชจ๋ ํด๋น ์ธํฐํ์ด์ค๊ฐ ์์ผ๋ฉฐ ๋ค์ ํ์ ์ค๋ช ๋์ด ์์ต๋๋ค.
OnGatewayInit
afterInit()
๋ฉ์๋๋ฅผ ๊ฐ์ ๋ก ๊ตฌํํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํน์ ์๋ฒ ์ธ์คํด์ค๋ฅผ ์ธ์๋ก ์ฌ์ฉํฉ๋๋ค. (ํ์ํ ๊ฒฝ์ฐ ๋๋จธ์ง๋ฅผ ํ์ฐ์ํต๋๋ค).
OnGatewayConnection
handleConnection()
๋ฉ์๋๋ฅผ ๊ฐ์ ๋ก ๊ตฌํํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํน์ ํด๋ผ์ด์ธํธ ์์ผ ์ธ์คํด์ค๋ฅผ ์ธ์๋ก ์ฌ์ฉํฉ๋๋ค.
OnGatewayDisconnect
handleDisconnect()
๋ฉ์๋๋ฅผ ๊ฐ์ ๋ก ๊ตฌํํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํน์ ํด๋ผ์ด์ธํธ ์์ผ ์ธ์คํด์ค๋ฅผ ์ธ์๋ก ์ฌ์ฉํฉ๋๋ค.
info ํํธ ๊ฐ ๋ผ์ดํ ์ฌ์ดํด ์ธํฐํ์ด์ค๋
@nestjs/websockets
ํจํค์ง์์ ๊ณต๊ฐ๋ฉ๋๋ค.
Server
๊ฒฝ์ฐ์ ๋ฐ๋ผ ํ๋ซํผ ๋ณ ๊ธฐ๋ณธ ์๋ฒ ์ธ์คํด์ค์ ์ง์ ์ก์ธ์ค ํ ์ ์์ต๋๋ค. ์ด ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ afterInit()
๋ฉ์๋ (OnGatewayInit
์ธํฐํ์ด์ค)์ ์ธ์๋ก ์ ๋ฌ๋ฉ๋๋ค. ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ @WebSocketServer()
๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
warning ์๋ฆผ
@WebSocketServer()
๋ฐ์ฝ๋ ์ดํฐ๋@nestjs/websockets
ํจํค์ง์์ ๊ฐ์ ธ์ต๋๋ค.
Nest๋ ์ฌ์ฉํ ์ค๋น๊ฐ ๋๋ฉด ์๋ฒ ์ธ์คํด์ค๋ฅผ ์ด ์์ฑ์ ์๋์ผ๋ก ํ ๋นํฉ๋๋ค.
Example
์ค์ ์ฌ๋ก๋ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค.
Last updated
Was this helpful?