key와 value 형태로 클라이언트에 저장되는 데이터다. session에 비해 보안에는 취약하지만
비교적 가벼워 장바구니나 자동 로그인같이 페이지가 다시 reload된 이후에도 참조해야하는 값을 저장하기에 유용하다.
이번에 블로그를 만들면서 cookie를 이용하여 조회수 증가 기능을 구현하였다.
클라이언트 ip와 사용자가 방문한 게시물 id를 같이 저장해서 중복으로 조회수가 증가되는 것을 방지했다.
cookie 패키지
npm install --save cookie-parser
ip를 가지고올 수 있는 패키지
npm install request-ip --save
// 쿠키 parser 로딩 후 app에 등록
const cookieParser = require('cookie-parser');
app.use(cookieParser())
// client ip를 가져오는 함수
function getUserIP(req) {
const addr = req.headers['x-forwarded-for'] || req.connection.remoteAddress
return addr
}
쿠키 읽는 법
res.cookie(key, value, {옵션})
// 쿠키에 저장되어있는 값이 있는지 확인 (없을 시 undefined 반환)
if (req.cookies[boardId] == undefined) {
// key, value, 옵션을 설정해준다.
res.cookie(boardId, getUserIP(req), {
// 유효시간 : 12분
maxAge: 720000
})
// 조회수 증가 쿼리
await board.updateOne({ boardId }, { $inc: {'viewCount': 1}})
}
개발자 도구에서 아래와 같이 확인가능
아직도 이 방법이 최선인지는 모르겠으나..
그래도 초반에 계획한대로 기능 구현까지 성공해서 기분이 좋다.
또한, 패키지 설치만으로 이렇게 쉽게 쿠키와 ip에 접근할 수 있다는 점에서 놀랐다.
계속해서 무엇가가 추가되고 사라지는 node.js 생태계에서
뒤처지지 않도록 꾸준히 트렌드를 파악해야겠다는 생각이 들었다.