쉽게 쉽게

[Spring] 게시글 조회수 중복방지 본문

개발공부/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)를 생성한다.

(조회한 게시글마다 쿠키생성) 

이 쿠키를 통해 중복 조회수 검사를 진행한다.

  1. HttpServletRequest로부터 클라이언트의 쿠키를 가져온다.
  2. 쿠키들 중 postView라는 이름의 쿠키가 있는지 검사한다. (이미 조회한 게시글일 때 생기는 쿠키)
    만약 존재한다면 oldCookie라는 이름으로 가져온다.
  3. postView가 존재한다면 해당 쿠키의 value가 현재 접근한 게시글의 id를 포함하고 있는지 검사한다.
  4. 게시글 id에 해당하는 postView가 있다면 조회수가 증가 x, 없다면 해당 게시글의 조회수가 상승시키고 게시글 id를 가진 쿠키를 추가하여 HttpServletResponse에게 전달한다.
  5. oldCookie가 없다면 해당 게시글의 조회수가 상승시키고 게시글 id를 가진 쿠키를 추가하여 HttpServletResponse에게 전달한다.

https://mighty96.github.io/til/view/

 

[Spring] 게시글 조회수 중복 방지

I. 개요 게시판에 있어서 조회수는 사용자가 읽고 싶은 글을 선택하는데에 중요한 지표가 된다. 하지만 단순히 게시글에 접근했다고 조회수를 모두 올려준다면, 새로고침만으로도 조회수를 끝

mighty96.github.io

https://alswo471.tistory.com/entry/Vuejs-Spring-%EA%B2%8C%EC%8B%9C%EA%B8%80-%EC%A1%B0%ED%9A%8C-%EC%88%98-%EC%A4%91%EB%B3%B5-%EB%B0%A9%EC%A7%80

 

Vue.js && Spring - 게시글 조회 수 중복 방지

1. 개요 조회수 중복 방지는 웹사이트나 애플리케이션에서 매우 중요한 기능 중 하나입니다. 중복된 조회수를 제대로 처리하지 않으면, 신뢰성 있는 데이터를 제공할 수 없고, 광고 수익을 추적

alswo471.tistory.com

잘못된 내용이 있다면 지적부탁드립니다. 방문해주셔서 감사합니다.

 

 

반응형

'개발공부 > Spring' 카테고리의 다른 글

[Spring] tiles 적용  (5) 2024.09.05
[Spring] static 변수에 autowired 설정 방법  (0) 2024.07.29
[Spring] 스케줄러 구현  (1) 2024.06.30
spring tiles 사용법  (0) 2023.06.25