๋ค์ด๋ฒ ์ผํ์ด๋ ์ง๋ฉ์ผ์ ๋ค์ด๊ฐ ๋ณด๋ฉด ์ด๋ฌํ ํ์ด์ง ๋ชฉ๋ก๋ค์ ํ์ธํ ์ ์๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ธฐ๋ฒ์ ํ์ด์ง์ด๋ผ๊ณ ํ๋ค. ์ ํํ๊ฒ ๋งํ๋ฉด ์ ์ฒด ๋ฐ์ดํฐ์์ ์ฌ์ฉ์๊ฐ ์์ฒญํ ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ์ํ๋ ์ ๋ ฌ ๋ฐฉ์์ผ๋ก ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด๋ค.
ํ์ด์ง์ด ์์ผ๋ฉด ์ฐ๋ฆฌ๋ ๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ฐ์์ ํ๋์ ์น ํ์ด์ง์ ๋ค ํํํด์ผ ํ๋ค. ๋ค์ด๋ฒ ์ผํ์์ ๋ชจ๋ํฐ๋ฅผ ๊ฒ์ํ๋ฉด ์ฝ 500๋ง ๊ฐ์ ๋ชจ๋ํฐ ๊ตฌ๋งค์ฒ๊ฐ ๋์ค๋๋ฐ ์ด๋ฅผ ํ๋์ ์น ํ์ด์ง ๋ชจ๋ ๋ถ๋ฌ์จ๋ค๋ฉด ์น ํ์ด์ง๋ฅผ ๋ถ๋ฌ์ค๋ ์๊ฐ๋ ๋์ด๋ ๋ฟ๋๋ฌ ๊ทธ๋งํผ ๋คํธ์ํฌ ํธ๋ํฝ๋ ์ฆ๊ฐํ๋ค. ๋ํ, ๋ง์ ์์ ๋ชจ๋ํฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ค ๋ณด๋ ์คํฌ๋กค ๊ธธ์ด๋ ์๋นํ ๊ฒ์ด๋ค. ๊ทธ๋ ๊ธฐ์ ์ฐ๋ฆฌ๋ ํ์ด์ง ๊ธฐ๋ฒ์ผ๋ก ์น ํ์ด์ง์ ์ ์ฒด ๋ฐ์ดํฐ ์ค ์ผ๋ถ๋ง์ ๊ฐ์ ธ์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ํ์ด์ง ๊ธฐ๋ฅ์ ์คํ๋ง ๋ถํธ์์ ๊ตฌํํ๋ ค๋ฉด ๋ณต์กํ ๊ณผ์ ์ ๊ฑฐ์ณ์ผํ๋ค.
๋ค์ด๋ฒ ์ผํ์์ ์๋ฌด๊ฑฐ๋ ๊ฒ์ ํ์ 2ํ์ด์ง๋ก ๋์ด๊ฐ๋ฉด ์ด ์ฌ์ง์ฒ๋ผ pagingIndex=2์ pagingSize=40๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ์คํธ๋ง์ด ํจ๊ป ๋์ด๊ฐ๋๋ฐ, ์คํ๋ง ๋ถํธ์์๋ ์ด๋ ๊ฒ ๋์ด์จ ํ์ด์ง ์ ๋ณด์ ์ ์ฒด ๋ฐ์ดํฐ ์ ๋ณด ๋ฑ์ ํ์ฉํด ๊ฐ๋ฉฐ ์ง์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค. ์ด๋ ๊ฒ ํ๊ธฐ ์ํด์๋ ์ ์ฒด ๋ฐ์ดํฐ ๊ฐ์๋ฅผ ๊ฐ์ ธ์ ์ ์ฒด ํ์ด์ง ๊ฐ์๋ฅผ ๊ณ์ฐํ๊ณ , ํ์ฌ ํ์ด์ง์์ ๋ณด์ฌ์ค ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ํ์ฌ ํ์ด์ง๊ฐ ์ฒซ ๋ฒ์งธ ํ์ด์ง์ธ์ง ๋ง์ง๋ง ํ์ด์ง์ธ์ง ๋ฑ๋ฑ.. ๋ง์ ์ผ๋ค์ ํด์ผ ํ๋ค. ์ด ๊ณผ์ ์์ ๋ฐ์ดํฐ ์์ฒญ๊ณผ ๋ฐ์ดํฐ ๊ฐ์ ์์ฒญ์ผ๋ก 2๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ๋ ๋ฌด์ํ ์ ์๋ค.
๊ทธ๋์ Spring ํ๋ ์์ํฌ์์๋ Spring Data JPA์ Page์ Pageable์ ์ด์ฉํ์ฌ ๋ง์ด ํ์ด์ง์ ๊ตฌํํ๋ค.
Pageable
Pageable์ ํ์ด์ง ๋ฒํธ, ํ์ด์ง ํฌ๊ธฐ, ์ ๋ ฌ ์ ๋ณด๋ค์ ๋ด์ ์ธํฐํ์ด์ค์ด๋ค. ํด๋ผ์ด์ธํธ๋ก๋ถํฐ์ ํ์ด์ง ์์ฒญ์ ๋ด๋นํ๋ฉฐ ํด๋น ์ธํฐํ์ด์ค๋ฅผ ํตํด Spring Data JPA ๋ฆฌํฌ์งํ ๋ฆฌ๋ก DB์ ์ ๊ทผ ์ ์๋์ผ๋ก limit ์กฐ๊ฑด์ ๋ถ์ฌ ๋ฐ์ดํฐ๋ค์ ๊ฐ์ ธ์จ๋ค. ์ธํฐํ์ด์ค์ด๊ธฐ ๋๋ฌธ์ ๊ตฌํ์ฒด๋ก PageRequest ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉฐ PageRequest.of(page, size, sort) ๋ฉ์๋๋ก ์์ฑํ ์ ์๋ค.
Page
Pageable๋ก ์์ฒญํ ํ์ด์ง ์ ๋ณด๋ฅผ ๋๊ฒจ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ Page๋ผ๋ ๊ฐ์ฒด์ ๊ฐ์ธ์ ธ ๋ฐํ๋๋ค. ๋ฐํ๋ Page ๊ฐ์ฒด์๋ ์ ์ฒด ๋ฐ์ดํฐ ๊ฐ์, ํ์ด์ง ๊ฐ์, ํ ํ์ด์ง๋น ๋ฐ์ดํฐ ๊ฐ์, ํ์ด์ง ๋ฒํธ ๋ฑ ํ์ด์ง๋ฅผ ๊ด๋ฆฌํ๋๋ฐ ํ์ํ ์ ๋ณด๋ค์ด ํจ๊ป ๋ฐํ๋๊ธฐ ๋๋ฌธ์ ์ฝ๊ฒ ํ์ด์ง ์ ๋ณด๋ค์ ๊ด๋ฆฌํ ์ ์๋ค.
๊ตฌํ
๊ฐ์ธ์ ์ผ๋ก ์ฐ์ตํ๊ณ ์๋ ๋ธ๋ก๊ทธ ํ๋ก์ ํธ์ ํ๋ฒ ํ์ด์ง์ ์ ์ฉ์์ผ ๋ณด์๋ค.
๋จผ์ , ํ์ด์ง์ด ์ ๋๋ก ๋๋์ง๋ฅผ ํ์ธํ๊ธฐ ์ํด์ ์คํ๋ง ํ ์คํธ ํ๋ ์์ํฌ๋ฅผ ํตํด ๋๋ฏธ ๋ฐ์ดํฐ 300๊ฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ถ๊ฐํด ์ฃผ์๋ค. ํด๋น ๋ด์ฉ์ ์ ํ ํฌ ์คํ๋ง๋ถํธ๋ฅผ ์ฐธ๊ณ ํ์๋ค!!
๊ทธ๋ฆฌ๊ณ , ์ค์ง์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์กฐ์ํ๋ Jpa Repository์ Page๋ก ๊ฐ์ผ PostEntity๋ฅผ ๋ฐํํ๋๋ก ์๋ก์ด ๋ฉ์๋๋ฅผ ์ ์ํ์๋ค.
๋ค์์ Service ์ฝ๋์ด๋ค. ์ฌ์ฉ์๊ฐ ๋๋ฅธ ํ์ด์ง ๋ฒํธ๋ฅผ ํตํด ๋ค์ด์ค๋ ํ์ด์ง ๋ฒํธ๋ 1๋ถํฐ ์์ํ์ง๋ง, ์ค์ ํ์ด์ง ์ฒ๋ฆฌ๋ฅผ ์ํด์๋ 0๋ถํฐ ์์ํ๋๋ก ํด์ผ ํ๋ฏ๋ก ๋๊ฒจ๋ฐ์ pageable ๊ฐ์ฒด์์ page ๋ฒํธ๋ฅผ -1 ํด์ฃผ๋ฉฐ size ๋ณ์์ ํ๋์ ํ์ด์ง์์ ์ฝ์ ํฌ๊ธฐ๋ฅผ ๋ฐ์์จ๋ค.
์ ๋ฐ์ดํธ๋ ํด๋น ์ ๋ณด๋ค์ ๋ฐํ์ผ๋ก ๋ค์ PageRequest.of๋ก ์๋ก์ด Pageable ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค. ๋ง๋ค๋ฉด์ ์ ๋ ฌ ๊ธฐ์ค๋ 'createdTime'์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋๋ก ํ๋ค. ๊ทธ๋์ผ ์ต์ ๊ธ๋ถํฐ ๋ณด์ด๊ธฐ ๋๋ฌธ์ด๋ค. ์ด์ , Repository์ ์ด์ ์ ๋ง๋ค์๋ findAll ๋ฉ์๋๋ก Page์ ๋ด๊ธด PostEntity ๋ชฉ๋ก๋ค์ ๊ฐ์ ธ์จ๋ค.
๊ฐ๋จํ๊ฒ ์ ๋ชฉ๊ณผ ์์ฑ์ผ๋ง ๋ณด์ฌ์ฃผ๋๋ก ํ์๊ณ ๋๊ฒจ๋ฐ์ Page<PostEntity>๋ฅผ Page<PostListDTO>๋ก ๋ณํํ๋ค.
์ด๋ ๊ฒ ๊ตฌํํ ๊ฒ์ ๋ฐํ์ผ๋ก Controller๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑํ๊ณ ์คํํ์๋ค.
ํ์ด์ง๋ฅผ ์ฝ์ด์์ ๋ณด์ฌ์ฃผ๊ธฐ๋ง ํ์ง ์์ง ํ์ด์ง ์ ๋ณด๋ค์ ํ์ฉํ์ง ์์์ ๋ฐ์ ํ์ด์ง๋ฅผ ์ ํํ๋ ๋ด๋น๊ฒ์ด์ ์ ์์ง๋ง ์ ์์ ์ผ๋ก ์๋ํ๋ ๋ชจ์ต์ ๋ณผ ์ ์๋ค.
url/post?page=4 ์ด๋ ๊ฒ URL์ ๋ณ๊ฒฝํ์ฌ๋ ํ ํ์ด์ง์ 10๊ฐ๋ฅผ ์ญ์์ผ๋ก ์ ํํ ์ถ๋ ฅํ๊ณ ์๋ค. ์ด์ ์๋ ํ์ด์ง๋ฅผ ์ฝ๊ฒ ์ด๋ํ ์ ์๋๋ก ๋ด๋น๊ฒ์ด์ ๋ฐ๋ฅผ ๋ง๋ค์ด ๋ณผ ์ฐจ๋ก์ด๋ค. ๋๋ ํ์๋๋ ํ์ด์ง ๋ฒํธ์ url์ ๋๊ฒจ์ง๋ ํ์ด์ง ๋ฒํธ ๋ชจ๋ 1๋ถํฐ ์์ํ๋๋ก ํ๊ณ ์๋ฒ์์ ์ฒ๋ฆฌํ ๋๋ง ๋ชจ๋ 0๋ถํฐ ์์ํ๋๋ก ํ์๋ค. ๊ทธ๋์, ์ ๊ฐ page=1์ ์์ฒญํ๋ค๋ฉด ์ค์ Page ๊ฐ์ฒด ์ getNumber()๋ 0์ด ๋๋ค.
์กฐ๊ธ ๋ณต์กํ๊ฒ Thymeleaf๊ฐ ์ค๊ณ๋ ๊ฒ ๊ฐ๋ค. ๋ด๊ฐ ์ํ๋ nav๋ 1๋ถํฐ 5๊น์ง๋ 1-5๊น์ง์ ํ์ด์ง ๋งํฌ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ , ๊ทธ๋ค์๋ถํฐ๋ 6-10, 11-15๊ฐ ๋ํ๋๋๋ก ํ๋ค. 1-5๊น์ง ์์ฒญ์ ์ค์ ๋ก getNumber() ์ 0-4๊น์ง ์ด๋ฏ๋ก ์ด๋ฅผ ์ํ๋ 5๋ก ๋๋๋ฉด 0, 6-10์ 1, 11-15๋ 2๊ฐ ๋๋ค. ๊ทธ๋์ ์์ ๋ฒํธ๋ 1-5 ํ์ด์ง๋ฅผ ์ ์ธํ๊ณ ๋ ๋๋ ๊ฐ์ * 5๋ฅผ ํด์ฃผ๋ฉด ๋๊ณ ๋ ๋ฒํธ๋ ๋๋ ๊ฐ์ + 1์ ํ๊ณ * 5๋ฅผ ํด์ฃผ๋ฉด ๋๋ค. ๋จ, ๋ ๋ฒํธ๊ฐ ์ ์ฒด ํ์ด์ง ๊ฐ์๋ฅผ ๋์ด๊ฐ๋ฉด ์ ์ฒด ํ์ด์ง ๊ฐ์๊ฐ ๋ ๋ฒํธ๊ฐ ๋๋๋ก ํ์๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ๋ ๋ฒํธ๋ 1-5์ผ ๋๋ 0-4๋ก ๋๋๊ณ + 1 * 5๋๊น 5๊ฐ ํญ์ ๋์ค๊ณ , 6-10์ 10, 11-15๋ 15๊ฐ ํญ์ ๋์ค๊ฒ ๋๋ค.
์ด๋ก์จ ํ์ด์ง์ ์ดํดํ๊ณ ๊ตฌํ๊น์ง ํด๋ณด์๋ค. ๊ทผ๋ฐ, ํ์ด์ง ๋งํฌ๋ฅผ ๋ง๋๋ ๊ณผ์ ์ด ์กฐ๊ธ ์์ฝ๊ฒ ๋๊ปด์ง๋ฉฐ ๋ ์ข์ ๋ฐฉ๋ฒ์ด ๋ถ๋ช ๋ง์ ๊ฒ์ด๋ค. ๊ณ์ํด์ ๊ณต๋ถํด ๋ณด์์ผ๊ฒ ๋ค!!
'๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
MVC ํจํด (3) | 2024.10.15 |
---|---|
๋์ ํ๋ผ๋ฏธํฐํ ์ฝ๋ ์ ๋ฌํ๊ธฐ (6) | 2024.10.10 |
BeanFactory์ ApplicationContext, Configuration (0) | 2024.10.04 |
JWT ํ ํฐ์ ์ด์ฉํ ๋ก๊ทธ์ธ ๋ฐฉ๋ฒ ์ดํด (5) | 2024.09.15 |