반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 중첩 break
- java
- contiune
- 붕대 감기 자바
- 다형성
- 리눅스
- 캡슐화
- 프로그래머스 붕대 감기
- SQL Mapper
- hackerrank
- 붕대 감기
- 혼공얄코
- 객체지향
- 오블완
- 프로그래머스
- 멀티프로세싱
- 티스토리챌린지
- CPU
- break 사용법
- 멀티태스킹
- 오버라이딩
- 자바의정석
- 입출력
- spring security
- 쿠키
- continue 사용법
- over()
- spring security 설정
- 오버로딩
- 자바의 정석
Archives
- Today
- Total
쉽게 쉽게
[Spring] 게시글 조회수 중복방지 본문
반응형
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' 카테고리의 다른 글
[Spring] Spring Security 구현 (1) - 설정 (1) | 2024.10.31 |
---|---|
[Spring] tiles 적용 (5) | 2024.09.05 |
[Spring] static 변수에 autowired 설정 방법 (0) | 2024.07.29 |
[Spring] 스케줄러 구현 (1) | 2024.06.30 |
spring tiles 사용법 (0) | 2023.06.25 |