[Node] Cookie

MinJae·2일 전
0

Node

목록 보기
4/4

💡 쿠키란 ?

웹 서버가 브라우저에게 지시하여 사용자 로컬 컴퓨터에 저장하는 4k 이하의 작은 데이터입니다. 쿠키는 HTTP가 무상태 프로토콜이라는 약점을 보완하기 위해 도입했으며, name=value 형태로 저장됩니다.

Node.js에서 쿠키를 다루려면 클라리언트와 서버 간의 HTTP 요청과 응답의 Set-Cookie 헤더를 통해 쿠키 데이터를 주고받습니다. Node.js는 기본적으로 쿠키 관련 라이브러리를 포함하지 않으므로, 쿠키를 쉽게 관리하려면 cookie-parser와 같은 미들웨어나 cookies 패키지를 사용하면 편리합니다.

1. 쿠키 설정하기

쿠키를 설정할 때는 Set-Cookie 헤더를 사용해 응답을 보냅니다. 쿠키는 브라우저가 저장하며, 이후 요청 시 자동으로 전송됩니다.

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

app.use(cookieParser());

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

maxAge 옵션으로 쿠키의 수명을 900초로 설정하고, httpOnly: true를 추가하여 클라이언트 쪽 자바스크립트가 쿠키에 접근할 수 없도록 설정했습니다.

2. 쿠키 읽기

쿠키는 req.cookies 객체를 통해 읽을 수 있습니다.

app.get('/get-cookie', (req, res) => {
    const name = req.cookies.name;
    if (name) {
        res.send(`쿠키 값: ${name}`);
    } else {
        res.send('쿠키가 없습니다.');
    }
});

3. 쿠키 삭제하기

쿠키를 삭제하려면 res.clearCookie() 메서드를 사용하여 쿠키를 클라이언트 쪽에서 제거할 수 있습니다.

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

4. 쿠키 옵션

  • maxAge: 쿠키의 수명을 밀리초 단위로 설정합니다.
  • expires: 쿠키의 만료 시간을 지정합니다.
  • httpOnly: 쿠키가 HTTP 요청에서만 접근 가능하도록 합니다.
  • secure: HTTPS에서만 쿠키를 전송하도록 설정합니다.
  • sameSite: 쿠키가 요청하는 사이트에서만 전송되도록 합니다. (Strict, Lax, None)

기본 HTTP 모듈로 쿠키 설정하기

cookie-parser 없이도 Node.js의 기본 http 모듈을 사용해 쿠키를 설정할 수 있습니다.

const http = require('http');

const server = http.createServer((req, res) => {
    if (req.url === '/set-cookie') {
        res.writeHead(200, {
            'Set-Cookie': 'name=John Doe; Max-Age=900; HttpOnly'
        });
        res.end('쿠키가 설정되었습니다.');
    } else if (req.url === '/get-cookie') {
        const cookies = req.headers.cookie;
        res.end(`쿠키: ${cookies}`);
    } else {
        res.end('다른 경로입니다.');
    }
});

server.listen(3000, () => {
    console.log('서버가 3000번 포트에서 시작되었습니다.');
});

✅ 참고

profile
반갑습니다
post-custom-banner

0개의 댓글