쿠키관련 gpt

Jo-Jun_yeong·2024년 9월 9일

Node.js에서 쿠키는 클라이언트(주로 브라우저)와 서버 간에 작은 데이터를 저장하고 전송하는 데 사용됩니다. 서버는 클라이언트에 쿠키를 설정하고, 클라이언트는 요청마다 해당 쿠키를 서버로 전송합니다. 쿠키는 세션 관리, 사용자 인증, 사용자 설정 등을 위해 자주 사용됩니다.

쿠키의 주요 특징

  1. 클라이언트-서버 간의 데이터 저장: 쿠키는 클라이언트에 저장되고, 이후 클라이언트의 모든 요청마다 자동으로 서버에 전송됩니다.
  2. 작은 크기: 쿠키는 일반적으로 4KB 이하의 데이터를 저장합니다.
  3. 만료 시간 설정: 쿠키는 만료 시간(Expiration Time)을 설정할 수 있으며, 이 시간 이후에는 자동으로 삭제됩니다.
  4. 보안: 쿠키는 민감한 데이터를 저장하지 않도록 주의해야 합니다. HTTPS 연결에서만 쿠키가 전송되도록 secure 옵션을 사용할 수 있으며, 브라우저 스크립트에서 접근할 수 없도록 HttpOnly 옵션을 설정할 수 있습니다.

쿠키 사용 방법 (Node.js + Express)

Node.js에서 쿠키를 사용하려면 cookie-parser 미들웨어를 자주 사용합니다. 이 미들웨어는 쿠키를 설정하거나 요청 시 쿠키를 읽는 작업을 쉽게 해줍니다.

npm install cookie-parser

Express 애플리케이션에서 cookie-parser 미들웨어를 설정하고 사용하는 방법은 다음과 같습니다.

const express = require('express');
const cookieParser = require('cookie-parser');

const app = express();
const port = 3000;

// 쿠키 파서 미들웨어 등록
app.use(cookieParser());

// 쿠키 설정 예제
app.get('/set-cookie', (req, res) => {
  res.cookie('username', 'john_doe', { maxAge: 900000, httpOnly: true });
  res.send('쿠키가 설정되었습니다.');
});

// 쿠키 확인 예제
app.get('/get-cookie', (req, res) => {
  const username = req.cookies['username'];
  res.send(`저장된 쿠키 값: ${username}`);
});

// 쿠키 삭제 예제
app.get('/clear-cookie', (req, res) => {
  res.clearCookie('username');
  res.send('쿠키가 삭제되었습니다.');
});

app.listen(port, () => {
  console.log(`서버가 http://localhost:${port}에서 실행 중입니다.`);
});

쿠키 관련 메서드

1. res.cookie()

쿠키를 설정할 때 사용하는 메서드입니다. 다음과 같은 옵션을 설정할 수 있습니다.

  • name: 쿠키 이름.
  • value: 쿠키 값.
  • options: 다양한 설정 옵션 (만료 시간, 경로, 도메인 등).
res.cookie('name', 'value', { maxAge: 900000, httpOnly: true });

쿠키 옵션:

  • maxAge: 쿠키의 수명을 밀리초 단위로 설정 (예: 1000 * 60 * 60 * 24는 1일).
  • expires: 쿠키 만료 날짜를 명시적으로 설정 (Date 객체로 전달).
  • httpOnly: true로 설정하면 클라이언트의 JavaScript에서 쿠키에 접근할 수 없습니다. 보안 상의 이유로 자주 사용됩니다.
  • secure: true로 설정하면 HTTPS를 통해서만 쿠키가 전송됩니다.
  • path: 쿠키가 유효한 경로를 설정 (/가 기본값).
  • domain: 쿠키가 유효한 도메인을 설정.

2. req.cookies

cookie-parser를 사용하면, 요청 객체 req에서 req.cookies를 통해 쿠키에 접근할 수 있습니다. 이 객체는 클라이언트가 전송한 쿠키를 담고 있습니다.

const username = req.cookies['username'];

3. res.clearCookie()

쿠키를 삭제할 때 사용하는 메서드입니다.

res.clearCookie('username');

쿠키 보안

  1. HttpOnly: 이 옵션을 설정하면 클라이언트의 JavaScript가 쿠키에 접근하지 못하도록 막습니다. 이는 XSS(Cross-Site Scripting) 공격으로부터 보호하는 데 도움이 됩니다.
    res.cookie('token', '123456', { httpOnly: true });
  2. Secure: HTTPS에서만 쿠키가 전송되도록 보장합니다. 이는 MITM(Man-in-the-Middle) 공격을 방지하는 데 도움이 됩니다.
    res.cookie('token', '123456', { secure: true });
  3. SameSite: 이 옵션은 CSRF(Cross-Site Request Forgery) 공격을 방지하는 데 도움이 됩니다.
    res.cookie('token', '123456', { sameSite: 'Strict' });

쿠키 사용 예시

로그인 후 세션 관리를 위해 토큰을 저장하는 쿠키 설정 예시입니다.

app.post('/login', (req, res) => {
  const token = createJWT(req.body.username);
  res.cookie('token', token, { httpOnly: true, secure: true, maxAge: 3600000 }); // 1시간 유지
  res.send('로그인 성공');
});

app.get('/profile', (req, res) => {
  const token = req.cookies['token'];
  if (token) {
    const userData = verifyJWT(token); // JWT 검증 함수
    res.send(`환영합니다, ${userData.username}`);
  } else {
    res.status(401).send('인증되지 않은 사용자입니다.');
  }
});

요약

  • 쿠키는 클라이언트-서버 간의 작은 데이터를 저장하고 주고받는 방식입니다.
  • cookie-parser는 Node.js에서 쿠키를 쉽게 설정하고 읽는 데 사용되는 미들웨어입니다.
  • 쿠키는 만료 시간, 보안 옵션 등을 설정하여 사용할 수 있으며, 중요한 정보를 저장할 때는 적절한 보안 설정이 필요합니다.
profile
5_hero_like

0개의 댓글