Β λ°±μλ κ°λ°μλ€μ μλ§ μ λλ€μκ° CRUDλ₯Ό ν΅ν κ²μν λ§λ€κΈ° νλ‘μ νΈλ₯Ό μ§νν κ²½νμ΄ μμ κ²μ΄λ€.
Β νμλ λ§μ°¬κ°μ§λ‘ CRUDλ₯Ό ν΅ν κ²μν λ§λ€κΈ°λ₯Ό μ§ννλ λμ€, μ΄μνκ² ν·κ°λ¦¬λ κ°λ
μ΄ μμλ€.
λ°λ‘ νμ΄μ§ μμ
μ΄λ€.
Β κ·ΈλΉμμλ μ§κΈλ³΄λ€λ ν¨μ¬ λ νλ‘κ·Έλλ°κ³Ό μλ°μ λν μ§μμ΄ μ μλ€.
Β κ·Έλ¬λ€λ³΄λ κΈ°μ‘΄ μ§μμΌλ‘ μ΄λμ λ ν΄κ²°ν μ μλ κΈ°μ΄μ μΈ CRUD μμ
μ νλ κ²μ ν¬κ² μ΄λ ΅μ§ μμμ§λ§, μ²μμΌλ‘ νμ΄μ§ μμ
μ μ§λ©΄νμ λ λμ λ»λ» ν리며 κ³ μ νλ κΈ°μ΅μ΄ μλ€.
Β μ§κΈμ κ·Έλμ²λΌ νμ΄μ§ μμ μ λν μ΄λ €μμ΄ μμ§λ§, μμ£Ό μ¨μ μ΅μν΄μ§ λλμ΄μ§ Pageμ λν κ°λ μ μμΈν μλλκ³ μ€μ€λ‘μκ² λ¬Όμ΄λ³΄λ©΄ κ·Έ λλ΅μ 'No'μ κ°κΉλ€.
Β κ·Έλ¬λ―λ‘ λ΄μΉκΉμ Pageλ₯Ό νμ€νκ² μ 리ν΄λ³΄κ³ μ μ΄λ² ν¬μ€ν μ μ§ννκ² λμλ€.
Page μ Pageable μΈν°νμ΄μ€λ₯Ό ν΅ν΄ νμ΄μ§ μ²λ¦¬λ₯Ό μ½κ² ν μ μμDB 쿼리 κ²°κ³Όλ₯Ό νμ΄μ§ μ²λ¦¬ν λ μ μ©νκ² μ¬μ©Spring Data JPA μμ μ 곡νλ org.springframework.data.domain.Page λ₯Ό importνμ¬ μ¬μ©1) λ°μ΄ν° κ΄λ ¨
getContent()getSize()getNumber()getTotalElement()getTotalPages()2) νμ΄μ§ μν κ΄λ ¨
hasNext()hasPrevious()isFirst()isLast()1) λλ λ°μ΄ν° μ‘°ν
DB μμ λ°μ΄ν°λ₯Ό ν λ²μ κ°μ Έμ€λ κ²λ³΄λ€ νμ΄μ§ λ¨μλ‘ ν¨μ¨μ μΌλ‘ μλΌμ μ‘°ννλ κ²μ΄ μ’μ λ μ¬μ©2) μΉ μ ν리μΌμ΄μ νμ΄μ§ μ²λ¦¬
pagination UIλ₯Ό μ 곡νκΈ° μν΄μ, μλ²μμ λ°μ΄ν°λ₯Ό νμ΄μ§ λ¨μλ‘ μ 곡ν΄μΌ ν λ μ¬μ©3) REST-API μλ΅
PageRequest ν΄λμ€λ₯Ό ν΅ν΄ μ΄λ₯Ό ꡬν// μ£Όμ λ©μλ
public interface Pageable {
int getPageNumber(); // νμ¬ νμ΄μ§ λ²νΈ λ°ν (0λΆν° μμ)
int getPageSize(); // νμ΄μ§ λΉ λ°μ΄ν° κ°μ
int getOffset(); // νμ΄μ§ μμ μμΉ (pageNumber * pageSize)
Sort getSort(); // νμ¬ μ λ ¬ μ 보 λ°ν (Sort κ°μ²΄)
Pageable next(); // λ€μ νμ΄μ§μ Pageable κ°μ²΄ λ°ν
Pageable previousOrFirst(); // μ΄μ νμ΄μ§μ Pageable κ°μ²΄, νΉμ 첫 νμ΄μ§λ₯Ό λ°ν
Pageable first(); // 첫 νμ΄μ§μ Pageable κ°μ²΄ λ°ν
boolean hasPrevious(); // μ΄μ νμ΄μ§ μ‘΄μ¬ μ¬λΆ λ°ν
}
Pageable μΈν°νμ΄μ€μ ꡬν체public class myPageRequest {
int page = 0, size = 10;
// νμ΄μ§λΉ 10κ°μ©, 1νμ΄μ§ νμ΄μ§ (pageNumberλ 0λΆν° μμνλ―λ‘)
PageRequest pageRequest = PageRequest.of(page, size);
// νμ΄μ§ + "id"λ₯Ό κΈ°μ€μΌλ‘ μ€λ¦μ°¨μ μ λ ¬ (1)
Sort sort = Sort.by("id").ascending();
pageRequest = PageRequest.of(page, size, sort);
// νμ΄μ§ + "id"λ₯Ό κΈ°μ€μΌλ‘ μ€λ¦μ°¨μ μ λ ¬ (2)
pageRequest = PageRequest.of(page, size, Sort.by(Sort.Order.asc("id")));
// νμ΄μ§ + "id"λ₯Ό κΈ°μ€μΌλ‘ λ΄λ¦Όμ°¨μ μ λ ¬ (1)
sort = Sort.by("id").descending();
pageRequest = PageRequest.of(page, size, sort);
// νμ΄μ§ + "id"λ₯Ό κΈ°μ€μΌλ‘ λ΄λ¦Όμ°¨μ μ λ ¬ (2)
pageRequest = PageRequest.of(page, size, Sort.by(Sort.Order.desc("id")));
}
@Getter
public class MyPage<T> {
private List<T> content; // νμ΄μ§ λ λ°μ΄ν°
private int pageNumber; // νμ¬ νμ΄μ§ λ²νΈ
private int pageSize; // νμ΄μ§ λΉ λ°μ΄ν° μ
private int totalItems; // μ΄ λ°μ΄ν° μ
private int totalPages; // μ΄ νμ΄μ§ μ
private boolean isFirst; // 첫 λ²μ§Έ νμ΄μ§μΈμ§ μ¬λΆ
private boolean isLast; // λ§μ§λ§ νμ΄μ§μΈμ§ μ¬λΆ
public MyPage(List<T> content, int pageNumber, int pageSize, int totalItems) {
this.content = content;
this.pageNumber = pageNumber;
this.pageSize = pageSize;
this.totalItems = totalItems;
this.totalPages = (int) Math.ceil((double) totalItems / pageSize);
this.isFirst = pageNumber == 0;
this.isLast = pageNumber == totalPages - 1;
}
}
μ°Έκ³ ) OpenAI. (2024).ChatGPT(4o)[Large language model].https://chatgpt.com/