Decorator - {nestjs}


README

week14-18 {swjungle}{my own weapon}{nestjs, socketio}์—์„œ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š” NestJS ํ”„๋กœ์ ํŠธ ์ง„ํ–‰๋„์ค‘ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์€ ๋ถ€๋ถ„์ด ๋งŽ์ด ๋ณด์—ฌ ์ง์ ‘ ๋งŒ๋“ค์–ด ๋ณด๋ฉด์„œ ๊ณต๋ถ€ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

DIY :: Query

client.handshake.query[param?: string] โŸถ @WSQuery(param?: string) : ์–ด์ฐจํ”ผ ๋˜‘๊ฐ™์ด HTTP/S๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ฑฐ๋‹ˆ๊นŒ ์จ๋„ ๋˜์ง€ ์•Š์„๊นŒ? ํ–ˆ์ง€๋งŒ ์ง์ ‘ ์ฐ์–ด๋ณด๋‹ˆ null์ด ๋‚˜์™”๋‹ค.

@SubscribeMessage('stop')
async stop(client: Socket, payload: { cur_time: Date }, @Query('uuId') uuid: string) {
	Logger.debug('uuid: ' + uuid);
[Nest] 6106  - 12/01/2023, 11:40:52 AM   DEBUG uuid: null

๊ทธ๋ž˜์„œ ๋ณ„๋„์˜ @Wsquery('uuId') ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์—ˆ๊ณ  ์œ„์—์„œ ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜์˜€๊ณ , ์ด๋ฒˆ์—” uuId๊ฐ€ ์ž˜ ์ฐํ˜€์ ธ ๋‚˜์™”๋‹ค. ํ•˜์ง€๋งŒ payload๋ฅผ ๋ถ„ํ•ดํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์—๋Ÿฌ๋ฅผ ๋งž์ดํ•˜๊ณ  ๋ง์•˜๋‹ค. ํŽ˜์ด๋กœ๋“œ๋Š” ์ธ์ž์˜ ์ˆœ์„œ์— ์˜ํ–ฅ์„ ๋ฐ›๋Š”์ง€๋ผ ๋งŒ์•ฝ ์ด๋ ‡๊ฒŒ ์“ฐ๊ณ  ์‹ถ๋‹ค๋ฉด payload๋ฅผ ์œ„ํ•œ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜ ๋” ๋งŒ๋“ค์–ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ์ผ๋‹จ ๋‚˜๋Š” ๋น ๋ฅด๊ฒŒ ๊ฐ€๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ถ€๋ถ„์€ ๋„˜๊ธฐ๋„๋ก ํ•˜๊ฒ ๋‹ค.

DIY :: Guard

์ด๋ฒˆ์— ๋งŒ๋“ค์–ด๋ณผ ๊ฒƒ์€ game์˜ status๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๋กœ์ง์„ ๊ฐ€๋“œ์— ๋‹ด์•„๋ณผ ๊ฒƒ์ด๋‹ค. user uuid ํ˜น์€ host uuid์— ๋”ฐ๋ผ game ์ธ์Šคํ„ด์Šค๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฐฉ์‹์ด ๋‹ค๋ฅด๊ณ , ๊ฐ€๋“œ๋ฅผ ๊ฑธ ์ƒํƒœ๊ฐ€ ์ด ์„ธ๊ฐ€์ง€ (wait, playing, end)๋‚˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•„๋งˆ๋„ Reflection์„ ์‚ฌ์šฉํ•˜์—ฌ์•ผ ํ•  ๊ฒƒ ๊ฐ™์•„๋ณด์ธ๋‹ค.

https://docs.nestjs.com/fundamentals/execution-context#reflection-and-metadata

์ƒˆ๋กœ์šด Reflector#createDecorator๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ณ , ๊ฐ€๋“œ๋ฅผ ๊ฑธ๊ณ ์‹ถ์€ ์ปจํ…์ŠคํŠธ์—@SetMetadata() ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค.