Pageable
: Spring Data JPA 에서 제공하는 인터페이스로 페이징 및 정렬 정보를 전달하는데 사용됩니다. Pageable 객체는 @RequestParam을 자동으로 매핑해줍니다.
주요 특징
- 페이지 번호(page): 0부터 시작하는 현재 페이지 번호
- 페이지 크기(size): 한 페이지에 포함될 항목의 수
- 정렬 기준(sort): 특정 컬럼을 기준으로 오름차순 또는 내림차순으로 정렬
일반적으로 @PagaableDefault 또는 클라이언트에서 전달된 page, size, sort 파라미터를 통해 Pageable 객체가 생성됩니다.
@GetMapping("/trades")
public ResponseEntity<PagedModel<TradeResDto>> getTrades(
@PageableDefault(size = 10, sort = "createdAt", direction = Sort.Direction.DESC) Pageable pageable
) {
return new ResponseEntity<>(immediateTradeService.findTrades(pageable), HttpStatus.OK);
}
예를 들어 클라이언트가 ``GET /trades?page=1&size=10&sort=createdAt,desc`` 의 요청을 보낸다면
``page=1 : 두 번째 페이지,
size = 10 : 한 페이지에 10개,
sort = createdAt: DESC : 생성 시각 기준 내림 차순``
의 기준을 가지고 페이징처리된 데이터 조회를 요청하는 것입니다.
PagedModel
: PageModel은 Spring HATEOAS에서 제공하는 페이징 처리된 데이터를 포함하는 클래스입니다.
@Transactional(readOnly = true)
public PagedModel<FindTradeResDto> findTrades(Pageable pageable) {
Page<Trade> trades = tradeRepository.findAll(pageable);
return new PagedModel<>(trades.map(FindTradeResDto::from));
}
위 예시에 대한 응답이 아래와 같을 수 있습니다.
// API 응답
{
"content": [
{ "id": 1, "name1": "Trade1" },
{ "id": 2, "name2": "Trade2" },
{ "id": 3, "name3": "Trade3" },
// ...
{ "id": 10, "name10": "Trade10" }
],
"page": {
"size": 10,
"totalElements": 25,
"totalPages": 3,
"number": 1
},
"_links": {
"self": { "href": "/trades?page=1&size=10" },
"next": { "href": "/trades?page=2&size=10" },
"prev": { "href": "/trades?page=0&size=10" }
}
}
- content : 페이징된 실제 데이터 목록
- page : 페이지 메타데이터 - 페이지 크기, 총 항목 수, 전체 페이지, 현재 페이지 번호
- _links : 링크 - 현재 페이지, 다음 페이지, 이전 페이지
'Spring > Spring 문법' 카테고리의 다른 글
ArgumentResolver - HandlerMethodArgumentResolver 란 무엇일까? (0) | 2024.12.14 |
---|---|
@Scheduler 사용해보기(주기 마다 메서드 실행) (0) | 2024.12.09 |
Mock 을 이용한 테스트 코드 - argument matcher (0) | 2024.11.26 |
N + 1 문제 해결, JPQL과 QueryDsl에서 JOIN FETCH (0) | 2024.11.26 |
AWS S3 버킷 사용하기 (0) | 2024.11.25 |