public record PageResponse<T>(
List<T> content, // 실제 데이터 목록
int page, // 현재 페이지 번호 (0부터 시작)
int size, // 페이지 크기
long totalElements, // 전체 데이터 수
int totalPages, // 전체 페이지 수
boolean first, // 첫 페이지 여부
boolean last // 마지막 페이지 여부
) {
// Page<T> → PageResponse<T> 변환 팩토리 메서드
public static <T> PageResponse<T> from(Page<T> p) {
return new PageResponse<>(
p.getContent(),
p.getNumber(),
p.getSize(),
p.getTotalElements(),
p.getTotalPages(),
p.isFirst(),
p.isLast()
);
}
}
Spring Data JPA Page<T> 객체
│
▼
PageResponse.from(Page<T>) 호출
│
▼
PageResponse<T> 객체 생성
│
▼
프론트엔드 전달
Page<T>: JPA가 반환하는 페이징 결과 객체PageResponse<T>: 프론트가 쉽게 처리할 수 있는 JSON 형태로 변환from(Page<T> p) 정적 메서드로 간단 변환<aside> 💡
Tip
sort, hasNext, hasPrevious 등 추가 정보 포함 가능Page<T> 객체를 그대로 반환하지 않고 DTO로 변환 → 프론트 의존 최소화 + 보안
</aside>