CS 잡지식

요청 API에서 Paging 정보 넘기기!!!

JIN_YOUNG _KIM 2023. 5. 13. 20:02
@GetMapping("/members")
public Page<Member> list(Pageable pageable){ // Page, Pagealbe 모두 [인터페이스]이다.

    Page<Member> page = memberReposiotry.findAll(pageable);

    return page;

}

row를 3개씩 묶어서 1개의 page를 생성

위 API는 page 1의 결과를 보여준다.(3개의 row가 반환된다)

2번째 페이지를 보여줌

위 API는 page 2의 결과를 보여준다.(3개의 row가 반환된다)

[page=?&size=?]를 입력하면, Spring FrameWork가 [PageRequest] 객체를 자동 생성해서

매개 변수인 Pageable 인터페이스에 삽입을 한다. 

그 정보를 바탕으로 쿼리 메서드를 사용하여, 위와 같이 Page<Member>를 반환하여 

요청 API에서 요구한 Page를 size만큼 반환을 한다. 

-> 이와 같이 Web에서 API를 요청을 할 때에도 요청 API에 개발자가 Paging 관련 정보를 넣으면 

처리할 수 있게 Spring이 잘 Setting되어 있다. 

Sorting 정보도 이렇게 넣어 주면, Spring이 PageRequest 안에 바인딩을 해준다. 

 

위와 같은 경우는, 개발자가 API 호출 시, 원하는 페이징 정보와 Sorting 정보를 넣을 수가 있었다. 

근데, 위와 같이 개발자가 직접 페이징 정보를 넣지 않아도, default로 페이징 정보와 Sorting 정보를

세팅하여 API 결과를 반환해 줄 수가 있다. 

1] Global Setting 

2] Local Setting(Global Setting보다 우선 순위가 높다)

// page의 default값( [ Local Setting ] )
// sort는 default값 오름차순(asc)이기에 적어 주지 않아도 된다.
// 내리차순이면 [명시적]으로 desc를 적어 줘야 한다.
@GetMapping("/members")
public Page<Member> list(@PageableDefault(size=5, sort="username") Pageable pageable){ // Page, Pagealbe 모두 [인터페이스]이다.

    Page<Member> page = memberReposiotry.findAll(pageable);

    return page;

}

 

참고로, Spring Data JPA는 Page가 0부터 시작한다.

그러나 직관적이지가 않다. 

개발자들은 Page의 시작 index가 1부터 시작하는 것이 더 직관적이다. 

이거에 대한 해법이 크게 2가지 있는데, 여기서는 손가락이 너무 아픈 나머지로 생략하고 

Spring Data JPA PPT를 참고하라.