티스토리 뷰

| Spring 쿠키를 이용하여 조회수 컨트롤


Spring을 이용해 게시판을 구현하고 있던 중


조회수 증가 로직을 만들어서 실행한 결과 새로고침을 하면 계속해서 조회수가 증가됩니다.


그러다 문득 해당 게시판 번호 수와 관련된 쿠키를 생성해서 저장해놓으면


조회수 무한 증가를 방지할 수 있을 거 같아서 로직을 짜봤습니다.


게시판에서 리뷰를 클릭해서 상세 페이지로 클릭했을 때 로직입니다.


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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// 리뷰 상세 페이지
    @RequestMapping(value = "/reviewDetail.do")
    public ModelAndView reviewDetail(HttpServletRequest request, HttpServletResponse response, HttpSession session,
            @RequestParam int reviewNo) {
        
        // 해당 게시판 번호를 받아 리뷰 상세페이지로 넘겨줌
        BoardVO review = bService.reviewDetail(reviewNo);
        ModelAndView view = new ModelAndView();
        
        Cookie[] cookies = request.getCookies();
        
        // 비교하기 위해 새로운 쿠키
        Cookie viewCookie = null;
 
        // 쿠키가 있을 경우 
        if (cookies != null && cookies.length > 0
        {
            for (int i = 0; i < cookies.length; i++)
            {
                // Cookie의 name이 cookie + reviewNo와 일치하는 쿠키를 viewCookie에 넣어줌 
                if (cookies[i].getName().equals("cookie"+reviewNo))
                { 
                    System.out.println("처음 쿠키가 생성한 뒤 들어옴.");
                    viewCookie = cookies[i];
                }
            }
        }
        
        if (review != null) {
            System.out.println("System - 해당 상세 리뷰페이지로 넘어감");
            
            view.addObject("review", review);
 
            // 만일 viewCookie가 null일 경우 쿠키를 생성해서 조회수 증가 로직을 처리함.
            if (viewCookie == null) {    
                System.out.println("cookie 없음");
                
                // 쿠키 생성(이름, 값)
                Cookie newCookie = new Cookie("cookie"+reviewNo, "|" + reviewNo + "|");
                                
                // 쿠키 추가
                response.addCookie(newCookie);
 
                // 쿠키를 추가 시키고 조회수 증가시킴
                int result = bService.viewUp(reviewNo);
                
                if(result>0) {
                    System.out.println("조회수 증가");
                }else {
                    System.out.println("조회수 증가 에러");
                }
            }
            // viewCookie가 null이 아닐경우 쿠키가 있으므로 조회수 증가 로직을 처리하지 않음.
            else {
                System.out.println("cookie 있음");
                
                // 쿠키 값 받아옴.
                String value = viewCookie.getValue();
                
                System.out.println("cookie 값 : " + value);
        
            }
 
            view.setViewName("reviewDetail");
            return view;
        } 
        else {
            // 에러 페이지 설정
            view.setViewName("error/reviewError");
            return view;
        }
    }
cs


처음 리뷰 상세페이지를 클릭하면은 쿠키를 받아옵니다.


받아 온 쿠키값들로 리뷰 글 넘버와 관련된 쿠키가 있는지 없는 지를 확인합니다.


없으면 쿠키를 생성하고(리뷰 페이지 넘버를 이용) 


response.addCookie(newCookie)를 통해 생성한 쿠키를 추가합니다.


그리고 조회수 증가 비즈니스 로직을 처리하고


if문을 빠져나와 ModelAndVIew를 이용해 해당 리뷰 상세페이지로 이동하게 됩니다.


같은 리뷰 페이지를 한 번 더 이동하게 되면


처음 if문을 통해 해당 글 넘버와 관련된 쿠키가 있으면 viewCookie 변수에 저장되겠죠?


그리고 viewCookie가 null이 아니므로 ( 쿠키가 있으므로 )


조회수 증가 로직을 처리하지 않고 그냥 리뷰 상세 페이지로 넘어가게 됩니다.


이상 쿠키를 이용한 조회수 새로고침을 방지해봤습니다.


태클은 언제나 환영입니다. 


감사합니다.







공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함