[JPA] Pageable ๋๋ ์ฟผ๋ฆฌ ๋ฉ์๋๋ก Pagination ์ฒ๋ฆฌํ๊ธฐ
๐ ๊ฐ๋ฐ ํ๊ฒฝ
Editor : Intellij Ultimate
Deb Tool : SpringBoot 2.7.5
JDK : JAVA 11
Build : Gradle 6.8
Server : AWS EC2
DevOps : Docker
DB : MySql 8.0
Library : SpringBoot Web, MySQL, Spring Data JPA, Lombok, Spring Security
โ ํ์ด์ง ์ฒ๋ฆฌ ์ Orderby ์ฟผ๋ฆฌ๋ฌธ์ด 2๋ฒ ๋ ๋ผ๊ฐ๋คโ
Pageable์ ์ด์ฉํ ํ์ด์ง ์ฒ๋ฆฌ ์ Orderby ์ฟผ๋ฆฌ๋ฌธ์ด 2๋ฒ ๋ ๋ผ๊ฐ๋ ๊ฒ์ ํ์ธํ์๊ณ , ์ด๋ ๋นํจ์จ์ ์ด๋ผ๋ ์๊ฐ์ด ๋ค์๋ค.
๊ทธ ์ด์ ๋ก๋ Pageable API์ `@pageDefault` ์ด๋ ธํ ์ด์ ๊ณผ JPA ์ฟผ๋ฆฌ ๋ฉ์๋๋ฅผ ์ด์ฉํ Orderby ๋ชจ๋๋ฅผ ์คํํ๊ธฐ ๋๋ฌธ์ด๋ผ ์ถ์ธกํ์๋ค.
๐ก ํด๊ฒฐ ๋ฐฉ๋ฒ
๋ฐฉ๋ฒ 1๏ธโฃ @PageDefault ๋ง ์ฌ์ฉํ๊ธฐ
JPA์๋ PagingAndSortRepository ๊ฐ ์ถ์ํ๋์ด ์์ผ๋ฉฐ, ํด๋น Repository ๋ ์ํฐํฐ์ ๋ํด ํ์ด์ง ์ฒ๋ฆฌ๋ฅผ ํ๋ ์ถ๊ฐ ๋ฉ์๋๋ฅผ ์ง์ํด์ค๋ค.
๐ ์ด๊ฑด tmi์ง๋ง, JPA์์ ์ง์ํ๋ ๊ธฐ๋ฅ์ธ์ค๋ ๋ชจ๋ฅด๊ณ Controller์์ ๋ฐํ์ด ๋ ๋ ์ ๋ ฌ์ด ๋๋์ค ์์์ ๋๋ ControllerTest๋ฅผ ์ด์ฉํ Page์ ๋ ฌ์ ์๋ํ์ง๋ง ์๋ฌด๋ฆฌ ํด๋ด๋ ์ ๋ ฌ์ด ์๋๋ ๊ฒฝํ์ด ์๋ค...๐คฆโ๏ธ
@PageaDefault ๋ง ์ฌ์ฉํด๋ ๋ชฉ๋ก ์กฐํ ์ ์์ฑ์ผ ๋ด๋ฆผ์ฐจ์์ผ๋ก Orderby๊ฐ ์ ๋๋ ๊ฒ์ ํ์ธํ๋ค.
์ถ๊ฐ์ ์ผ๋ก ์์๋ณธ ๋ฐ์ ์ํ๋ฉด Spring Data JPA์ ๊ฒฝ์ฐ Pageable ๊ตฌํ์ฒด๋ฅผ ์ฟผ๋ฆฌ ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํจ์ผ๋ก์จ ์ฟผ๋ฆฌ์ ํ์ด์ง์ ๋์ ์ผ๋ก ์ถ๊ฐํ ์ ์๋ค.
Note
1๏ธโฃ Sort ๊ตฌํ์ฒด(์ ๋ ฌ ์กฐ๊ฑด ํฌํจ)๋ฅผ ์ฟผ๋ฆฌ ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํจ์ผ๋ก์จ ์ ๋ ฌ ๊ธฐ๋ฅ์ ์ํํ ์ ์๋ค.
๐ JpaRepository ์ธํฐํ์ด์ค๊ฐ PagingAndSortingRepository๋ฅผ ํ์ฅํ๊ณ ์๊ธฐ ๋๋ฌธ
2๏ธโฃ Pagination ์ฒ๋ฆฌ ์ Controller์ Sort ๋๋ Pageable์ ์ปจํธ๋กค๋ฌ ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ์ฃผ์ด ์ฌ์ฉํ ์ ์๋ค.
๐ HandlerMethodArgumentResolver์ธํฐํ์ด์ค ๊ตฌํ์ฒด๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ
๋ฐฉ๋ฒ 2๏ธโฃ JPA ์ฟผ๋ฆฌ ๋ฉ์๋๋ง ์ฌ์ฉํ๊ธฐ
JPA ์ฟผ๋ฆฌ ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ๋ชฉ๋ก ์กฐํ ์ ์์ฑ์ผ ๋ด๋ฆผ์ฐจ์์ผ๋ก Orderby๊ฐ ์ ๋๋ ๊ฒ์ ํ์ธํ๋ค.
3๏ธโฃ ์ด๋ ๊ฒ์ด ๋ ๋์ ๋ฐฉ๋ฒ์ผ๊น?
๊ฐ์ธ์ ์ผ๋ก ๋ฐฉ๋ฒ 2๏ธโฃ ๋ณด๋ค๋ ๋ฐฉ๋ฒ 1๏ธโฃ ์ด ๋ ๋์ ๋ฐฉ๋ฒ์ด๋ผ ์๊ฐํ๋ค.
JPA ์ฟผ๋ฆฌ ๋ฉ์๋๋ช ์ผ๋ก๋ Orderby ์ฟผ๋ฆฌ๋ฌธ์ด ์์ฑ์ด ๋์ง๋ง, ์ด๋ฌํ ๊ฒฝ์ฐ ๋ฉ์๋๋ช ์ด ๋๋ฌด ๋ณต์กํด์ ธ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ค๋ ๋ฌธ์ ์ ์ด ๋ฐ์ํ๋ค๋ ์ ์ด ์์๋ค.
๋ํ, Pageable์์ ์ ๊ณตํ๋ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์ Pageable ๊ฐ์ฒด์๊ฒ Orderby ์ฑ ์์ ๋งก๊ฒจ ๊ตฌํํ๋ ๊ฒ์ด ๋ ์ข๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ฐธ๊ณ ๋ฌธ์
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.core-concepts
Spring Data JPA - Reference Documentation
Example 119. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") void del
docs.spring.io
https://tecoble.techcourse.co.kr/post/2021-07-26-jpa-pageable/
JPA Pagination, ๊ทธ๋ฆฌ๊ณ N + 1 ๋ฌธ์
1. Pagination ๊ฒ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ์ํ์ฌ ๊ฒ์๋ฌผ ๋ชฉ๋ก์ ์์ฒญํ๋ ๊ฒฝ์ฐ๋ฅผ ์์ํด๋ด ์๋ค. DB…
tecoble.techcourse.co.kr