개발공부/Spring
[Spring] 게시글 조회수 중복방지
곱마2
2024. 5. 30. 17:14
반응형
1. 이슈
게시판 글 조회수를 카운트하면서 동일한 사용자가 새로고침만 해도 중복으로 조회수가 측정되는 상황이 있었다.
이를 방지하기 위해 여러 방안을 찾아봤다.
2. 해결방안
조회수 중복방지를 위한 여러 방안들을 정리해 봤다
방안 | 장점 | 단점 |
쿠키 | 서버의 공간을 절약 | 사용자가 쿠키를 삭제시 중복가능 (조작가능) 다른 브라우저 사용시 중복가능 |
IP(MAC주소) | 조작이 불가능 | 여러 사용자가 같은 IP를 사용시 중복가능 (중복 IP) 다른 기기라면 중복가능 |
로그인 | 로그인한 사용자의 정확한 조회수 체크가능 | 비로그인자는 정확한 카운트가 불가능 |
세션 | 서버에 정보를 저장하기에 보안에 좋음 | 서버의 리소스를 사용하기에 부하가 증가할 수 있음 |
이 중 단순한 조회수 중복방지를 위한 것이기에 쿠키를 이용하여 구현했다.
3. 구현
private void readCount(Long board_id, HttpServletRequest request, HttpServletResponse response) {
//조회수 중복 체크
Cookie oldCookie = null;
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("postView")) {
oldCookie = cookie;
}
}
}
if (oldCookie != null) {
if (!oldCookie.getValue().contains("[" + board_id + "]")) {
//조회수 증가
boardService.readCount(board_id);
oldCookie.setValue(oldCookie.getValue() + "_[" + board_id + "]");
oldCookie.setPath("/");
oldCookie.setMaxAge(60 * 60 * 24);
response.addCookie(oldCookie);
}
} else {
//조회수 증가
boardService.readCount(board_id);
Cookie newCookie = new Cookie("postView","[" + board_id + "]");
newCookie.setPath("/");
newCookie.setMaxAge(60 * 60 * 24);
response.addCookie(newCookie);
}
}
설명
전체적인 로직은 이렇다.
사용자가 게시글 조회 시 조회수가 상승하며, 해당 게시글 쿠키(postView + 게시글 id)를 생성한다.
(조회한 게시글마다 쿠키생성)
이 쿠키를 통해 중복 조회수 검사를 진행한다.
- HttpServletRequest로부터 클라이언트의 쿠키를 가져온다.
- 쿠키들 중 postView라는 이름의 쿠키가 있는지 검사한다. (이미 조회한 게시글일 때 생기는 쿠키)
만약 존재한다면 oldCookie라는 이름으로 가져온다. - postView가 존재한다면 해당 쿠키의 value가 현재 접근한 게시글의 id를 포함하고 있는지 검사한다.
- 게시글 id에 해당하는 postView가 있다면 조회수가 증가 x, 없다면 해당 게시글의 조회수가 상승시키고 게시글 id를 가진 쿠키를 추가하여 HttpServletResponse에게 전달한다.
- oldCookie가 없다면 해당 게시글의 조회수가 상승시키고 게시글 id를 가진 쿠키를 추가하여 HttpServletResponse에게 전달한다.
https://mighty96.github.io/til/view/
[Spring] 게시글 조회수 중복 방지
I. 개요 게시판에 있어서 조회수는 사용자가 읽고 싶은 글을 선택하는데에 중요한 지표가 된다. 하지만 단순히 게시글에 접근했다고 조회수를 모두 올려준다면, 새로고침만으로도 조회수를 끝
mighty96.github.io
Vue.js && Spring - 게시글 조회 수 중복 방지
1. 개요 조회수 중복 방지는 웹사이트나 애플리케이션에서 매우 중요한 기능 중 하나입니다. 중복된 조회수를 제대로 처리하지 않으면, 신뢰성 있는 데이터를 제공할 수 없고, 광고 수익을 추적
alswo471.tistory.com
잘못된 내용이 있다면 지적부탁드립니다. 방문해주셔서 감사합니다. |

반응형