Spring-Boot,JPA로 질문/답변 게시판 구현(36)

Spring-Boot, JPA로 질문/잡변 게시판 구현 및 배포

자바지기님 유튜브 강의 정리

6-4 질문 목록에 답변 개수 보여주기 기능 추가

  • question 제목 왼쪽에 ‘8’로 고정되어있는 답변 개수를 출력해주는 기능을 추가해보자.
  • 질문 데이터가 많으면, 많을수록 데이터 목록을 가져오는데 시간이걸린다. 근데 각 목록 데이터에 대해서 몇개의 답변이 달려있는지 매번 데이터베이스에서 조회하는 쿼리를 날려야 댓글 개수를 알 수 있다. select count(*) from answer where question_id = 1

  • 글이 많아질수록 각 글에대해서 현재 답변개수를 확인하기 위한 쿼리를 날리는 횟수가 증가한다. 이것은 성능상 좋지않다. 그래서 성능개선을 위해서 답변을 쓰는 순간에 질문 테이블에 답변 개수를 증가시켜주면 된다. 답변이 삭제되면 답변 개수를 감소시키면된다.

  • 따라서 question 클래스에 답변 개수 필드를 추가한다.

    public class Question {
      ...
      @JsonProperty
      private Integer countOfAnswer = 0;
      ...
    }
    
    • default값을 null이 아닌 0으로 지정해준다.

여기까지 실습

  • 답변이 추가되거나 삭제될 때 countOfAnswer의 값을 1증가하거나 1감소시키면된다.

    public class ApiAnswerController {
      ...
      @PostMapping("")
      public Answer create(@PathVariable Long id, String contents, HttpSession session) {
        ...
        question.addAnswer();
        ...
      }
          
      ...
      @DeleteMapping("/{id}")
      public Result result(@PathVariable Long questionId, @PathVariable Long id, HttpSession session) {
        ...
        Question question = questionRepository.findOne(questionId);
        question.deleteAnswer();
        questionRepository.save(question);
        ...
      }
    }
      
    public class Question {
      ...
      public void addAnswer() {
        this.countOfAnswer++;
      }
        
      public void deleteAnswer() {
        this.countOfAnswer--;
      }
    }
    
  • 테스트

여기까지 실습

  • view도 수정해주자.

    <!-- index.html -->
    ...
    <div class="reply" title="댓글">
        <i class="icon-reply"></i>
        <span class="point"></span>
    </div>
      
      
    <!-- show.html -->
    <div class="qna-comment-slipp">
      <p class="qna-comment-count"><strong></strong>개의 의견</p>
      ...
    </div>
    
  • countOfAnswer를 증가시키거나 감소시킬 때 지금은 하드코딩에 가까운형태로 구현했지만 jpa에 대한 추가공부를 하고 나면 자연스럽게 할 수 있을것이다.

여기까지 실습

댓글남기기