Spring/게시판 만들기

조회수 기능, 페이징, 정렬

민철킹 2021. 6. 22. 18:48

현재 게시물 CRUD 기능은 구현이 되어있는 상태이다. 스프링 데이터 JPA를 사용하여 굉장히 편리하게 구현하였다.

 

 

조회수 기능

 

조회수 기능의 구현 로직은 굉장히 간단하다. 그냥 해당 게시물을 조회할 때 조회수 필드를 +1 시켜주면 된다.

 

프로젝트를 진행할 때에는 Setter를 사용하여 값을 변경하는 습관은 매우 좋지 않은 습관이다. 그 외에 따로 조회수 필드를 변경할 수 있는 메서드를 만들어서 진행하였다.

이는 서비스 계층에서 호출되어 사용된다. 

JPA의 Dirty Checking 기능을 사용하여 조회수를 1씩 올려주는 식으로 구현하였다. 서비스 계층의 클래스 레벨에서 @Transation(readOnly=true)로 설정해놓고 생성, 수정이 일어나는 메서드 레벨에서 위와 같이 @Transaction을 걸어놨다. 이렇게 변경되어 반환되는 dto객체를 컨트롤러에 반환시켜준다.

 

 

 


페이징과 정렬

 

페이징과 정렬은 Spring Data JPA가 제공하는 Page인터페이스를 사용하여 진행하였다.

Repository

서비스 계층에서의 메서드를 살펴보면

Service

몇번째 페이지를 보여줄지를 결정하는 page를 parameter로 받고 size는 5이고 생성된 날짜 순으로 정렬을 진행한다.

당연히 엔티티를 반환해서는 안되기 때문에 dto로 변환해서 컨트롤러에 전달해준다.

Controller

컨트롤러에서는 쿼리파라미터로 페이지 넘버를 받는데 default는 0번째 페이지로 지정해놓았다.

페이징을 진행하여 서비스로부터 넘겨받은 결과를 View로 랜더링을 한다.

View

Thymeleaf 문법을 사용하여 첫번째 페이지라면 이전페이지로 이동하는 링크를 disable하고 그렇지 않다면 위와 같이 링크를 걸어 이전 페이지로 이동할 수 있도록 한다.==> ?page=현재페이지-1의 형태로 쿼리 파라미터 전달됨

 

다음 페이지로 이동하는 링크도 마찬가지로 진행

 

현재 첫번째 페이지기 때문에 아래의 이전 페이지 링크가 disable되고 다음페이지 링크가 활성화되어 있다.

다음페이지를 클릭하면 

다음페이지가 나타난다. 현재 6개의 게시물 밖에 없기 때문에 1개의 게시물만 나옴.

반응형