Do it/Practice

추천 누르면 조회수 중복 증가 할 때 수정 해보기

develop_mii 2025. 9. 17. 17:19

기존 오류 상황)

: 게시글 상세보기 후 추천 버튼 누르면 조회수 +2 되는 상황

 

 

#BoardController

 

● 게시글 상세보기 : 누르면 조회수 증가

@GetMapping(value="/detail/{bnum}")
	public String detail(Model model, @PathVariable("bnum") Integer bnum, 
    AnswerForm answerForm) {
    boardService.hit(boardService.getBoard(bnum)); // 조회수 증가
    
    Board board = boardService.getBoard(bnum);
	model.addAttribute("board", board)
        
    return "board_detail";		
 }

 

● 추천 메서드 : 추천 버튼 누르면 다시 상세보기로 리다이렉트 됨 → 조회수 또 증가

@PreAuthorize("isAuthenticated()")
@GetMapping(value="/vote/{bnum}")
public String boardVote(Principal principal, @PathVariable("bnum") Integer bnum) {
	Board board = boardService.getBoard(bnum);
	SiteUser siteUser = userService.getUser(principal.getName());
	boardService.vote(board, siteUser);
    
	return String.format("redirect:/board/detail/%s", bnum);
}

 

 

정리하자면

 추천 버튼 클릭(JavaScript를 통해 /board/vote/{bnum}로 이동)

   → BoardController.boardVote() 실행 : 추천 저장 후 게시글 상세페이지로 리다이렉트

   → 다시 BoardController.detail() 실행 → 조회수가 한번 더 올라감

 

해결하려면?

  리다이렉트 시 조회수 증가를 제외하는 조건(fromVote=true)을 추가하거나,

  조회수 증가 조건을 강화하여 중복 조회를 필터링하는 방식으로 처리

 


해결)

: /board/detail/{bnum} 안에서 무조건 조회수 증가시키지 말고, vote 요청인지 아닌지만 판단해서 걸러내기

 

 

#BoardController

 

 게시글 상세보기 

@GetMapping(value="/detail/{bnum}")
public String detail(Model model, @PathVariable("bnum") Integer bnum, AnswerForm answerForm,
	@RequestParam(value = "fromVote", required = false) boolean fromVote) {
		
	if(!fromVote) {
		boardService.hit(boardService.getBoard(bnum));
	}
				
	Board board = boardService.getBoard(bnum);
	model.addAttribute("board", board); 
		
	return "board_detail"; 
}

 

● 추천 메서드

@PreAuthorize("isAuthenticated()")
@GetMapping(value="/vote/{bnum}")
public String boardVote(Principal principal, @PathVariable("bnum") Integer bnum) {
		
	Board board = boardService.getBoard(bnum);
	SiteUser siteUser = userService.getUser(principal.getName());
	boardService.vote(board, siteUser);
		
	return String.format("redirect:/board/detail/%s?fromVote=true", bnum);
		
}

 

 

쉽게 말해

  추천 버튼 클릭 (/board/vote/{추천누른글번호} 이동)

   → boardVote() 메서드 실행 : return String.format("redirect:/board/detail/%s?fromVote=true", bnum);

   → vote 끝나고 /board/detail/ {추천누른글번호} ?fromVote=true로 리다이렉트

   

   if (!fromVote) {
        boardService.hit(boardService.getBoard(bnum)); //조회수 증가

    }

 

 

fromVote=false (기본) → 조회수 증가 , fromVote=true → 조회수 증가 안 함

 

'Do it > Practice' 카테고리의 다른 글

stmt / pstmt 사용 비교  (1) 2025.08.18
JDBC DB연결 예제  (2) 2025.08.18
MySQL) JOIN연습  (0) 2025.08.13
MySQL) SELECT문 연습  (1) 2025.08.12
Java) 예외처리 연습문제  (2) 2025.08.05