Post

[Spring Data JPA] ํŽ˜์ด์ง•(Paging)

๐Ÿ“Œ ๋“ค์–ด๊ฐ€๋ฉฐ

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ํ•„์ˆ˜์ธ ํŽ˜์ด์ง•(Paging)์„ Spring Data JPA๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฒ•์„ ์ •๋ฆฌํ•œ๋‹ค.

ํŽ˜์ด์ง•์ด๋ž€? ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ์ˆ . ํ•œ ๋ฒˆ์— ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ๋ณด๋‹ค ํšจ์œจ์ ์ด๋ฉฐ, ์›น์—์„œ ํŽ˜์ด์ง€๋ณ„๋กœ ๋ณด์—ฌ์ค„ ๋•Œ ์ž์ฃผ ์“ฐ์ธ๋‹ค.


1. Pageable๊ณผ Page

Spring Data JPA์˜ ํŽ˜์ด์ง•์€ Pageable(์š”์ฒญ ์ •๋ณด)๊ณผ Page(๊ฒฐ๊ณผ)๋กœ ์ด๋ค„์ง„๋‹ค.

1
2
3
4
public Page<Product> getProductsByPage(int pageNumber, int pageSize) {
    Pageable pageable = PageRequest.of(pageNumber, pageSize);   // ์š”์ฒญ ์ •๋ณด ์ƒ์„ฑ
    return productRepository.findAll(pageable);                 // Page ๋ฐ˜ํ™˜
}
์š”์†Œ์—ญํ• 
PageRequest.of(๋ฒˆํ˜ธ, ํฌ๊ธฐ)ํŽ˜์ด์ง€ ์š”์ฒญ ์ƒ์„ฑ
findAll(pageable)ํ•ด๋‹น ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ ์กฐํšŒ
Page<T>ํŽ˜์ด์ง•๋œ ๊ฒฐ๊ณผ (์ „์ฒด ๊ฐœ์ˆ˜ยท์ด ํŽ˜์ด์ง€ ํฌํ•จ)

2. ์ •๋ ฌ ์กฐ๊ฑด ์ถ”๊ฐ€ (Sort)

1
2
3
4
public Page<Product> getSortedProductsByPage(int pageNumber, int pageSize, String sortBy) {
    Pageable pageable = PageRequest.of(pageNumber, pageSize, Sort.by(sortBy));
    return productRepository.findAll(pageable);
}

Sort.by(์ •๋ ฌ๊ธฐ์ค€)์„ PageRequest์— ๋„ฃ์–ด ํŽ˜์ด์ง•๊ณผ ์ •๋ ฌ์„ ํ•จ๊ป˜ ์ฒ˜๋ฆฌํ•œ๋‹ค.


3. Pageable์˜ ์ฃผ์š” ๋ฉ”์†Œ๋“œ

1
Pageable pageable = PageRequest.of(pageNumber, pageSize, Sort.by(sortBy));
๋ฉ”์†Œ๋“œ๋ฐ˜ํ™˜
getPageNumber()ํ˜„์žฌ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ
getPageSize()ํŽ˜์ด์ง€๋‹น ์•„์ดํ…œ ์ˆ˜
getSort()์ •๋ ฌ ์กฐ๊ฑด

๐Ÿ“Œ ์ฃผ์˜์‚ฌํ•ญ๊ณผ ํŒ

ํ•ญ๋ชฉ๋‚ด์šฉ
์ •๋ ฌ ์กฐ๊ฑด ๋ช…์‹œ์—†์œผ๋ฉด ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์ด ๊นจ์งˆ ์ˆ˜ ์žˆ์Œ
์ธ๋ฑ์Šค ํ™•์ธ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ๋Š” ์ธ๋ฑ์Šค๋กœ ์„ฑ๋Šฅ ํ–ฅ์ƒ
ํŽ˜์ด์ง€ ํฌ๊ธฐ๋Œ€์šฉ๋Ÿ‰์€ ์ ์ ˆํ•œ ํฌ๊ธฐ ์„ ํƒ์œผ๋กœ ํšจ์œจ ํ™•๋ณด

๐Ÿ“ ์ •๋ฆฌ

1
2
3
4
5
ํŽ˜์ด์ง•
โ”œโ”€ ์š”์ฒญ    PageRequest.of(๋ฒˆํ˜ธ, ํฌ๊ธฐ [, Sort])
โ”œโ”€ ์กฐํšŒ    findAll(pageable) โ†’ Page<T>
โ”œโ”€ ์ •๋ ฌ    Sort.by(๊ธฐ์ค€)
โ””โ”€ ์ฃผ์˜    ์ •๋ ฌ ๋ช…์‹œ + ์ธ๋ฑ์Šค + ํŽ˜์ด์ง€ ํฌ๊ธฐ
๊ฐœ๋…ํ•œ ์ค„ ์ •์˜
PageableํŽ˜์ด์ง€ ์š”์ฒญ ์ •๋ณด(๋ฒˆํ˜ธยทํฌ๊ธฐยท์ •๋ ฌ)
PageํŽ˜์ด์ง• ๊ฒฐ๊ณผ(๋ฐ์ดํ„ฐ + ๋ฉ”ํƒ€)
Sort์ •๋ ฌ ์กฐ๊ฑด

ํŽ˜์ด์ง•์€ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜๋ˆ ์„œ ํšจ์œจ์ ์œผ๋กœ ๋‹ค๋ฃจ๋Š” ํ•„์ˆ˜ ๊ธฐ๋Šฅ์ด๋‹ค. PageRequest.of(...) ํ•˜๋‚˜๋กœ ํŽ˜์ด์ง€ยทํฌ๊ธฐยท์ •๋ ฌ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์–ด, ๋ช‡ ์ค„๋กœ ๊ฒฌ๊ณ ํ•œ ํŽ˜์ด์ง•์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.