카테고리 없음
20240913Fri Page / Pageable Version.1
ddh1713
2024. 9. 13. 15:57
1. Page / Pageable |
[1] TodoController
@GetMapping("/v1/newsfeed")
public Page<TodoNewsfeedDto> getTodoNewsfeed(
@RequestParam(default = "1", name = "page") int page,
@RequestParam(defualt = "10") int size) {
return todoService.getTodoNewsfeed(page, size);
}
@GetMapping("/v1/newsfeed") |
/v1/newsfeed : API 버전 1 을 의미하며, 추후 API가 발전하거나 변경될 가능성이 있음을 나타냅니다. v1 경로는 추후 다른 버전의 API와 구분을 하기 위해 사용됩니다. |
@RequestParam : 요청에서 특정 파라미터 값을 가져오는 역할을 합니다.
@RequestParam(defaultValue = "1", name = "page") |
defaultValue = "1" 은 클라이언트가 페이지 번호를 전달하지 않은 경우 기본 값을 1로 설정한다는 의미입니다. name = "page" 는 파라미터 이름을 지정하는 것으로, 클라이언트가 요청할 때 page 라는 이름의 쿼리 파라미터를 통해 페이지 번호를 전달해야 합니다. 예를 들어, GET /v1/newsfeed?page=2 라면 2페이지를 요청하게 됩니다. |
@RequestParam(defaultValue = "10", name = "size) |
위의 설명과 마찬가지로, defaultValue = "10" 은 기본값이 10으로 설정되어 있어 클라이언트가 별도의 크기를 지정하지 않으면, 한 페이지당 10개의 뉴스피드 항목을 반환합니다. name = "size" 는 클라이언트가 size 라는 파라미터로 한 페이지의 항목 개수를 설정할 수 있게 합니다. 예를 들어, GET /v1/newsfeed?size=20 이라면 한 페이지에 20개의 항목을 요청하는 것입니다. size : 한 페이지에 표시할 데이터의 개수를 나타냅니다. |
반환 타입 Page<TodoNewsfeedDto> |
Page 는 Spring Data JPA 에서 제공하는 클래스이며, 페이지네이션 처리된 데이터를 포함하고 있습니다. 이 객체는 해당 페이지의 데이터 뿐만 아니라 전체 페이지 수, 현재 페이지 번호 등의 메타 정보를 함께 제공합니다. |
[2] todoService.getTodoNewsfeed()
public Page<TodoNewsfeedDto> getTodoNewsfeed(int page, int size) {
Pageable pageable = PageRequest.of(page-1, size);
Page<Todo> todoPage = todoRepository.findAllByOrderByModifiedAtDesc(pageable);
return todoPage.map(todo -> new TodoNewsfeedDto(
todo.getTodo(),
todo.getUsername(),
todo.getCreatedAt(),
todo.getModifiedAt(),
commentRepository.countByTodoId(todo.getId())
));
}
Pageable pageable = PageRequest.of(page-1, size); |
PageRequest.of(page-1, size) : 페이지네이션 처리를 위해 PageRequest 객체를 생성합니다. 여기서 page-1 을 하는 이유는 Spring Data JPA 의 페이지 번호는 0부터 시작하지만, 일반적으로 사용자가 1부터 페이지 번호를 인식하기 때문에 page-1 을 적용합니다. |