[개인 프로젝트] 9일차 회고

·2024년 7월 27일

개인 프로젝트

목록 보기
10/16

🐘 오늘의 회고록

  • 오늘은 post 기능 개발을 완성했다. 가장 어려웠던 부분이 페이징 처리 부분이었는데, 회고에 간단히 정리해놓으려고 한다.
  • 그리고 게시글 생성하면 PostIt count--하는거나 PostIt count가 10개 미만이면 생성하지 못하게 하는 기능 등 세부적인 기능을 추가했다.

📄 페이징

먼저 페이징 기능을 개발하기 위해 Pageable을 사용했다.

  • 조회를 해서 화면에 뿌려줘야하기 때문에 PostController가 아닌 PostPageController에서 페이징 기능을 개발했다.
  • 트잇 프로젝트 메인페이지 화면에 맞게, 한 페이지당 3개의 글을 보여주고 버튼은 최대 5개로 제한했다.

PostPageController

	@GetMapping("/main")
    public String mainPage(Model model, @AuthenticationPrincipal CustomUserDetails customUserDetails,
                           @RequestParam(value = "page", defaultValue = "0") int page) {
        Page<Post> paging = postService.findPosts(page);
        model.addAttribute("postList", paging);

        return "main";
    }
@RequestParm(value = "page", defaultValue = "0") int page 
  • URL에 매개변수로 page가 전달되지 않은 경우엔 기본값이 0이 된다.
    그리고 model에 paging 을 전달해 html 화면에 값을 뿌려주도록 했다.

PostService

 public Page<Post> findPosts(int page) {
        // 생성 순으로 내림차순 정렬
        List<Sort.Order> sorts = new ArrayList<>();
        sorts.add(Sort.Order.desc("createDate"));

        Pageable pageable = PageRequest.of(page, 3);
        Page<Post> findPosts = postRepository.findAll(pageable);

        if (findPosts.isEmpty()) {
            throw new IllegalArgumentException("등록된 게시글이 없습니다.");
        }
        return findPosts;
    }
  • PageRequest.of() 에서 page는 조회할 페이지의 번호이고 3은 한 페이지에 보여 줄 게시글의 개수를 의미한다.
  • 생성 순으로 내림차순 정렬하기 위해 Sort.Order를 사용했다.

PostRepository

@Query("select p from Post p where p.use_yn = true")
        Page<Post> findAll (Pageable pageable);
  • 삭제된 게시글의 경우 실제 삭제대신 use_yn을 false로 변경한다. 그래서 모든 게시글을 가져올 때 use_yn이 true인 경우만 가져오도록해야한다.

여기까지 설정 후 http://localhost:8080/main?page=0 URL을 요청하면 원하는대로 첫 페이지에 게시글 3개만 조회된다. page=1,2,3,4 를 각각 요청해도 페이지가 3개씩 조회된다.

현재 게시글의 총 개수는 20개로 page=6까지 조회되고 page=7로 넘어가면 Whitelabel Error Page가 조회된다.

참고한 사이트 - 위키독스 https://wikidocs.net/162028

🐠 내일 할 일

  • comment 기능 개발
profile
꾸준히 성장하자!

0개의 댓글