[Node.js] Cookie를 이용한 조회수 구현하기

Song·2021년 7월 5일
2

Node.js

목록 보기
2/7
post-custom-banner

Cookie란,

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 생태계에서
뒤처지지 않도록 꾸준히 트렌드를 파악해야겠다는 생각이 들었다.

profile
Learn From Yesterday, Live Today, Hope for Tomorrow
post-custom-banner

0개의 댓글