앞선 아티클을 통해서 우리는 쿠키의 기본적인 원리를 확인했습니다. 이번 아티클에서는 아주 간단한 예제를 통해서, "쿠키를 통해 사용자를 식별하는" 예제를 살펴보겠습니다. 실제 과정은 아니지만, 아주 간단한 로그인 기능을 구현해 보고 사용자를 식별하는 과정을 살펴보겠습니다.
아래와 같이 두 개의 파일을 생성해 보겠습니다.
[cookie2.html]
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>COOKIE & SESSION SAMPLE</title>
</head>
<body>
<form action="/login">
<input id="name" name="name" placeholder="enter the name" />
<button id="login">LOGIN</button>
</form>
</body>
</html>
[cookie2.js]
const http = require('http');
const fs = require('fs').promises;
const path = require('path');
// *1번 시작
const parseCookies = (cookie = '') =>
cookie
.split(';')
.map(v => v.split('='))
.reduce((acc, [k, v]) => {
acc[k.trim()] = decodeURIComponent(v);
return acc;
}, {});
// 1번 끝*
// *2번 시작
http.createServer(async (req, res) => {
const cookies = parseCookies(req.headers.cookie);
// 주소가 /login으로 시작하는 경우
if(req.url.startsWith('/login')) {
const url = new URL(req.url, 'http://localhost:8084');
const name = url.searchParams.get('name');
const expires = new Date();
// 쿠키의 유효 시간은 현재 시각 + 5분으로 설정한다.
expires.setMinutes(expires.getMinutes() + 5);
res.writeHead(302, {
Location: '/',
'Set-Cookie': `name=${encodeURIComponent(name)}; Expires=${expires.toGMTString()}; HttpOnly; Path=/`,
});
res.end();
// 주소가 /이면서 name이라는 쿠키가 있는 경우
} else if (cookies.name) {
res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
res.end(`${cookies.name}님 안녕하세요`);
} else { // 주소가 /이면서 name이라는 쿠키가 없는 경우
try {
const data = await fs.readFile(path.join(__dirname, 'cookie2.html'));
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
res.end(data);
} catch (err) {
res.writeHead(500, { 'Content-Type': 'text/plain; charset=utf-8' });
res.end(err.message);
}
}
})
.listen(8084, () => {
console.log('8084번 포트 서버 대기 중');
});
코드에 대한 자세한 설명은 다음 아티클에서 이어가겠습니다.
'Programming > Node.js' 카테고리의 다른 글
5. http 모듈로 서버 만들기 (3) - 쿠키와 세션의 이해 [5] (0) | 2024.07.29 |
---|---|
5. http 모듈로 서버 만들기 (3) - 쿠키와 세션의 이해 [4] (0) | 2024.07.25 |
5. http 모듈로 서버 만들기 (3) - 쿠키와 세션의 이해 [2] (0) | 2024.07.22 |
5. http 모듈로 서버 만들기 (3) - 쿠키와 세션의 이해 [1] (0) | 2024.07.19 |
5. http 모듈로 서버 만들기 (2) - REST와 라우팅 [9] : header, body (0) | 2024.07.16 |