๐ โ๋ด Spring Boot API๊ฐ ๋๋ ค์ก์ด์โฆ Pagination & Sorting์ ๋ฐฐ์ฐ๊ธฐ ์ ๊น์งโ
Source: Dev.to

์ ๋ ฌ ๋ฐ ํ์ด์ง๋ค์ด์ ์ด ์ค์ํ ์ด์
์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์์๋:
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋น ๋ฅด๊ฒ ์ฑ์ฅํ๋ค
- ํ ๋ฒ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋น์ฉ์ด ๋ง์ด ๋ ๋ค
- ํด๋ผ์ด์ธํธ๋ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ๊ฑฐ์ ํ์๋ก ํ์ง ์๋๋ค
์ ๋ ฌ๊ณผ ํ์ด์ง๋ค์ด์ ์ ์ฌ์ฉํ๋ฉด:
- ์ฑ๋ฅ ํฅ์
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๊ฐ์
- ๋ ๋น ๋ฅธ API ์ ๊ณต
- ํ์ฅ ๊ฐ๋ฅํ ์์คํ ๊ตฌ์ถ
์ด๋ ํ๋ก๋์ ๋ฐฑ์๋์์๋ ์ ํ ์ฌํญ์ด ์๋๋ค.
๋ฉ์๋ ์ฟผ๋ฆฌ ์ด๋ฆ์ ์ด์ฉํ ์ ๋ ฌ
Spring Data JPA๋ ๋ฉ์๋ ์ด๋ฆ์ ์ง์ ์ ๋ ฌ์ ์ง์ ํ ์ ์๋ค.
List findAllByOrderByNameAsc();
List findAllByOrderByNameDesc();
๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์ ๋์ํ๋ค:
- ์ ๋ ฌ ๋ก์ง์ด ๊ณ ์ ๋ผ ์์ ๋
- ์๊ตฌ์ฌํญ์ด ๋จ์ํ ๋
ํ์ง๋ง ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๋์ ์ ๋ ฌ์ด ํ์ํ๋ค.
Sort ํด๋์ค๋ฅผ ์ด์ฉํ ๋์ ์ ๋ ฌ
๋ ํฌ์งํ ๋ฆฌ ๋ฉ์๋์ ํจ๊ป ์ฌ์ฉํ๋ ์ ๋ ฌ
List findByDepartment(String department, Sort sort);
์ด๋ฅผ ํตํด ํด๋ผ์ด์ธํธ๊ฐ ๊ฒฐ์ ํ ์ ์๋ค:
- ์ด๋ค ํ๋๋ก ์ ๋ ฌํ ์ง
- ์ค๋ฆ์ฐจ์ ๋๋ ๋ด๋ฆผ์ฐจ์
Sort ๊ฐ์ฒด ์์ฑ
Sort sort = Sort.by(Sort.Direction.ASC, sortField);
์ฌ๋ฌ ์ ๋ ฌ ํ๋ ์ง์ :
Sort sort = Sort.by(
Sort.Order.asc("name"),
Sort.Order.desc("salary")
);
์ ๋ ฌ๋ง์ผ๋ก๋ ๋ถ์กฑํ ์ด์
์ ๋ ฌ์ ์ ์ฉํ๋๋ผ๋:
- ์์ฒ ๊ฐ์ ํ์ ๋ฐํํ๋ ๊ฒ์ ๋นํจ์จ์ ์ด๋ค
- API๊ฐ ๋๋ ค์ง๋ค
- ํด๋ผ์ด์ธํธ๊ฐ ํฐ ์๋ต์ ์ฒ๋ฆฌํ๊ธฐ ํ๋ค๋ค
์ด๋ ํ์ด์ง๋ค์ด์ ์ด ํ์ํ๋ค.
ํ์ด์ง๋ค์ด์ ์ดํดํ๊ธฐ
ํต์ฌ ํ์ด์ง๋ค์ด์ ๊ฐ๋
Page
๋ฐ์ดํฐ์ ํ ์กฐ๊ฐ์ ๋ํ๋ด๋ฉฐ ๋ค์ ์ ๋ณด๋ฅผ ํฌํจํ๋ค:
- ์ ์ฒด ์์ ์
- ์ ์ฒด ํ์ด์ง ์
- ํ์ฌ ํ์ด์ง ๋ฐ์ดํฐ
Pageable
๋ค์ ํญ๋ชฉ์ ์ ์ํ๋ค:
- ํ์ด์ง ๋ฒํธ
- ํ์ด์ง ํฌ๊ธฐ
- ์ ๋ ฌ ๊ท์น
PageRequest
Pageable์ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ผ๋ก, ํ์ด์ง๋ค์ด์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์ฌ์ฉํ๋ค.
๋ ํฌ์งํ ๋ฆฌ์์ Pageable ์ฌ์ฉํ๊ธฐ
Spring Data JPA๋ ํ์ด์ง๋ค์ด์ ์ ๋งค์ฐ ๊ฐ๋จํ๊ฒ ๋ง๋ ๋ค.
Page findAll(Pageable pageable);
Page findByLastName(String lastName, Pageable pageable);
SQL๋ ์๊ณ ๋ณต์กํ ๋ก์ง๋ ์๋ค. ๊น๋ํ ๋ฉ์๋ ์๊ทธ๋์ฒ๋ง ์์ผ๋ฉด ๋๋ค.
Pageable ์ธ์คํด์ค ๋ง๋ค๊ธฐ
Pageable pageable = PageRequest.of(
pageNumber,
size,
Sort.by("lastName").ascending()
);
์ด๋ฅผ ํตํด ์ ์ดํ ์ ์๋ ๊ฒ์:
- ํ์ด์ง ํฌ๊ธฐ
- ํ์ด์ง ๋ฒํธ
- ์ ๋ ฌ
๋ชจ๋ ํ๋์ ๊ฐ์ฒด์ ๋ด๋๋ค.
๋ด๊ฐ ์ ์ง๋ฅธ ์ค์
์์ ์๋:
- ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ๊ฐ์ ธ์ด
- ๋ฉ๋ชจ๋ฆฌ ๋ด์์ ์ ๋ ฌํจ
- ํ์ฅ์ฑ์ ๋ฌด์ํจ
๋ฐ์ดํฐ๊ฐ ์ฆ๊ฐํ ๋๊น์ง๋ ๋์ํ์ง๋ง, ํ์ด์ง๋ค์ด์ ๊ณผ ์ ๋ ฌ์ ๋์ ํ ๋ค:
- API๊ฐ ๋นจ๋ผ์ก๋ค
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๊ฐ์ํ๋ค
- ๋ฐฑ์๋๊ฐ ํ๋ก๋์ ์์ค์ด ๋์๋ค
๋ง๋ฌด๋ฆฌ ์๊ฐ
์ ๋ ฌ๊ณผ ํ์ด์ง๋ค์ด์ ์ โ๋ถ๊ฐ ๊ธฐ๋ฅโ์ด ์๋๋ค. ํต์ฌ ๋ฐฑ์๋ ๊ธฐ๋ณธ์ด๋ค. ๋ง์ฝ Spring Boot API๊ฐ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๋ณด์ธ๋ค๋ฉด:
- ๋๋ฆผ
- ๋ฌด๊ฑฐ์
- ํ์ฅ ์ด๋ ค์
์ฌ๊ธฐ์๋ถํฐ ์์ํ๋ผ.
์ด ๊ธ์ Spring Boot๊ณผ ์ค์ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ํ๊ตฌํ๋ฉด์ ์งํํ learning-in-public ์ฌ์ ์ ์ผ๋ถ์ด๋ค.