게시판 페이지 기능 구현

ttaho·2023년 3월 1일
0

Project-board

목록 보기
14/16

게시판 페이지의 기능을 구현해보자.
ArticleService.java의 기존의 테스트만을 위한 껍데기 내용에 실제 데이터를 사용하게 메소드들을 수정하였다.

게시글 조회기능에서는 총 5가지의 필드(제목, 본문, 회원id, 회원닉네임, 해시태그)들로 조회되게 하였다. 아래는 ArticleRepository 인터페이스에 추가해준 코드이다.

그리고, 해당 필드의 검색어를 exact매칭이 아니고 포함하는것을 찾아오게 하였고,
만약 keyword가 주어지지 않으면 모든 게시글이 나오게 findAll을 사용하였다.
다음은 게시글 생성기능이다.

게시글 생성기능에서는 게시글dto가 주어지면 그 게시글을 articleRepository에 save되도록 하였다.


getReferenceById로 id를 통해 article을 불러오고, 만약에 매칭되는 id가 없으면,
try catch문으로 log가 나오게 했다.
게시글 수정시 제목과 본문을 수정하지 않아도 되므로 그 값들이 null이면 set하지 않도록 했고, 해시태그는 무조건 수정되게 했다.
수정후 save를 해주지 않는 이유는
클래스레벨 transactional(제일 바깥쪽)에 의해서 메소드 단위로 트랜잭션이 묶여있으므로 트랜잭션이 끝날때 영속성 컨텍스트는 article이 변화된걸 감지한다. 감지된 부분에 의해 쿼리를 날려서 업데이트를 시켜주기 때문에 따로 save를 해주지 않아도 된다.

삭제는 id와 매칭되는 게시글을 삭제시킨다.

다음으로 ArticleController를 수정하자.

ArticleService를 사용하기위해 선언해주고, 게시판 페이지의 검색 게시글 리스트들을 보여주기위해 seartchtype, searchvalue를 받는다. 한 페이지에서 게시글의 총 갯수는 10개이고, 만들어진순으로 내림차순으로 정렬한다.


게시글 페이지에서는 게시글id로 getArticle을 수행한다. 게시글과 게시글의댓글들을 모두 가져와야 하므로 ArticleWithCommentsReponse를 사용했다.

다음으로 View 부분을 처리해준다.


우선 게시판 페이지에 게시글들을 뿌려줘야 하기때문에 class이름들을 추가해주었다.

그리고 inde.th.xml에 타임리프 문법을 사용하였다.
th:each="article : ${articles}" :
게시글들을 받아와서 게시글 하나마다 밑의것들을 반복시키는 것 같다.

th:remove="all-but-first":
tbody의 첫번째인 필드 이름들은 남겨두고 나머지는 삭제한다. 그리고 게시글 제목에는 링크가 걸린다.

temporals.format는 날짜를 yyyy-mm-dd형식으로 출력해준다.
localhost:8080에 들어가면 드디어 원하는 화면이 보인다.

다음은 게시글 페이지를 구현해야한다.

profile
백엔드 꿈나무

0개의 댓글