ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

๐Ÿช NestJS Cookies – ์‹ค์ „ ์ฟ ํ‚ค ๊ด€๋ฆฌ์™€ ๋ณด์•ˆ๊นŒ์ง€ ์™„๋ฒฝ ๊ฐ€์ด๋“œ


NestJS๋Š” Express ๋˜๋Š” Fastify ํ•˜์œ„ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—,
์ฟ ํ‚ค๋ฅผ ์‰ฝ๊ฒŒ ์ฝ๊ณ  ์“ฐ๊ธฐ ์œ„ํ•œ ๋ฏธ๋“ค์›จ์–ด ์„ค์ • ๋ฐ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฒˆ ๊ธ€์€ NestJS ๊ณต์‹ ๋ฌธ์„œ – Cookies๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ,
์ฟ ํ‚ค์˜ ์ฝ๊ธฐ/์“ฐ๊ธฐ/์‚ญ์ œ๋ถ€ํ„ฐ ์„œ๋ช… ์ฟ ํ‚ค, ๋ณด์•ˆ ์˜ต์…˜, ์‹ค๋ฌด ์ ์šฉ๋ฒ•๊นŒ์ง€ ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.


โœ… 1. cookie-parser ์„ค์น˜ ๋ฐ ๋“ฑ๋ก (Express ๊ธฐ์ค€)

npm install cookie-parser
// main.ts
import * as cookieParser from 'cookie-parser';

const app = await NestFactory.create(AppModule);
app.use(cookieParser('your-secret-key')); // ์„œ๋ช… ์ฟ ํ‚ค์šฉ ํ‚ค
await app.listen(3000);

โ˜‘๏ธ cookieParser()๋ฅผ use()๋กœ ๋“ฑ๋กํ•ด์•ผ ๋ชจ๋“  ์š”์ฒญ์— ์ฟ ํ‚ค ์ ‘๊ทผ ๊ฐ€๋Šฅ
โ˜‘๏ธ secret ํ‚ค๋ฅผ ์ง€์ •ํ•˜๋ฉด signed ์ฟ ํ‚ค ๊ธฐ๋Šฅ ์‚ฌ์šฉ ๊ฐ€๋Šฅ


โœ… 2. ์ฟ ํ‚ค ์ฝ๊ธฐ – @Req() ๋˜๋Š” FastifyRequest

@Get('read')
readCookie(@Req() request: Request) {
  return request.cookies['myCookie']; // ์ผ๋ฐ˜ ์ฟ ํ‚ค
}

โ˜‘๏ธ request.cookies, request.signedCookies ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ


โœ… 3. ์ฟ ํ‚ค ์“ฐ๊ธฐ – @Res() ์‚ฌ์šฉ

@Post('set')
setCookie(@Res() response: Response) {
  response.cookie('myCookie', 'hello', {
    httpOnly: true,
    maxAge: 60000, // 1๋ถ„
  });
  response.send('์ฟ ํ‚ค ์„ค์ • ์™„๋ฃŒ');
}

์ฃผ์š” ์˜ต์…˜

์˜ต์…˜ ์„ค๋ช…

httpOnly JS ์ ‘๊ทผ ์ฐจ๋‹จ (๋ณด์•ˆ ํ•„์ˆ˜)
secure HTTPS ํ™˜๊ฒฝ์—์„œ๋งŒ ์ „์†ก
signed ์„œ๋ช…๋œ ์ฟ ํ‚ค (๋ณ€์กฐ ๊ฐ์ง€)
maxAge ์ฟ ํ‚ค ์œ ํšจ ์‹œ๊ฐ„ (๋ฐ€๋ฆฌ์ดˆ)
sameSite CSRF ๋ฐฉ์ง€์šฉ ์ •์ฑ… (strict, lax, none)

 

๋ฐ˜์‘ํ˜•

โœ… 4. ์„œ๋ช…๋œ ์ฟ ํ‚ค (signed cookies)

@Res() response.cookie('signedCookie', 'secretValue', {
  signed: true,
});
@Req() request.signedCookies['signedCookie'];

โ˜‘๏ธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฐ’์„ ์กฐ์ž‘ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์„œ๋ช…๋œ ์ฟ ํ‚ค ์‚ฌ์šฉ์„ ๊ถŒ์žฅ
โ˜‘๏ธ ๋‹จ, cookieParser('secret') ํ•„์ˆ˜


โœ… 5. ์ฟ ํ‚ค ์‚ญ์ œ

@Delete('clear')
clearCookie(@Res() response: Response) {
  response.clearCookie('myCookie');
  response.send('์ฟ ํ‚ค ์‚ญ์ œ๋จ');
}

โœ… 6. Fastify ์‚ฌ์šฉ ์‹œ ์ฐธ๊ณ  ์‚ฌํ•ญ

  • Fastify์—์„œ๋Š” fastify-cookie ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:
npm install fastify-cookie
import fastifyCookie from '@fastify/cookie';

app.register(fastifyCookie, {
  secret: 'my-secret', // ์„œ๋ช… ์ฟ ํ‚ค์šฉ
});

โ˜‘๏ธ Express์™€ ๋™์ผํ•˜๊ฒŒ request.cookies, response.setCookie() ํ™œ์šฉ ๊ฐ€๋Šฅ


๐Ÿง  ์‹ค๋ฌด ์ „๋žต ์š”์•ฝ

์ž‘์—… ๋ฐฉ๋ฒ•

์ฟ ํ‚ค ์ฝ๊ธฐ request.cookies['key']
์ฟ ํ‚ค ์„ค์ • response.cookie('key', 'value', options)
์ฟ ํ‚ค ์‚ญ์ œ response.clearCookie('key')
์„œ๋ช… ์ฟ ํ‚ค ์‚ฌ์šฉ signed: true + cookie-parser(secret)
๋ณด์•ˆ ์„ค์ • httpOnly, secure, sameSite ์„ค์ • ๊ถŒ์žฅ

 

NestJS ์ฟ ํ‚ค ์‚ฌ์šฉ๋ฒ•,NestJS cookie-parser,NestJS signed cookies,NestJS ์ฟ ํ‚ค ๋ณด์•ˆ,NestJS ์ฟ ํ‚ค ์„ค์ •,NestJS Fastify ์ฟ ํ‚ค,NestJS httpOnly ์ฟ ํ‚ค,NestJS response.cookie,NestJS request.cookies,NestJS ์‹ค๋ฌด ์ฟ ํ‚ค ๊ด€๋ฆฌ


 

โ€ป ์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค.
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/07   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•