SpringFramework에서 제공하는 Pageable과 PageRequest에 대해 여러 블로그 포스팅글들을 보면 Spring Data JPA에서 제공하는 기능이라는 잘못된 정보의 포스팅 글들을 볼 수 있습니다.(분명 어느 인강에서 잘못 설명했거나, 급하게 혹은 잘못 이해된 것으로 판단됩니다.)
우선 PageRequest란 Pageable을 구현한 AbstractPageRequet클래스를 상속받은 클래스입니다.
상세한 설명은 넘어가고 PageRequest와 Pageable은 Spring 프로젝트에서 Pagenation을 쉽게 처리할 수 있는 기능을 지원해주는데요.
해당 인터페이스와 클래스는 흔히 알고있는 Spring Data JPA에서 제공해 주는것이 아닌 Spring Data JPA를 제공하는 모델인 Spring Data에서 제공해줍니다.
Spring Data란 기본 데이터 저장소의 특수한 특성을 유지하면서 데이터 접근을 위한 친숙하고 일관된 Spring 기반의 프로그래밍 모델을 제공하는 프로젝트입니다.
이는 데이터베이스와 관련된 많은 하위 프로젝트(Spring Data JPA, Spring Data REST, Spring Data JDBC, ...등)를 포함하는 포괄적인 프로젝트 입니다.
참조 : https://imbf.github.io/spring/2020/04/30/Spring-Data.html
위에서 말했듯이 Spring Data의 주요 모듈로는 JDBC, JPA, MongoDB 등이 있습니다.
흔히 스프링에서 사용하는 JdbcTemplate는 Spring Data JDBC라고 불립니다.
Spring Data JPA는 일반적인 JPA의 EntityManager 기반으로 동작합니다.
두 모듈 모두 SpringData 모델에서 제공합니다.
참조 : https://brunch.co.kr/@springboot/107
본론으로 돌아와서 이러한 JdbcTemplate와 SpringDataJPA를 제공하는 SpringData 모델에서 Pagenation을 쉽게 구현할 수 있도록 Pageable 인터페이스를 제공해줍니다.
따라서 Pageable은 Spring Data JPA에서 제공해주는 기능이 아닌 Spring Data JPA와 JdbcTemplate를 제공하는 Spring Data 모델에서 지원하는 기능이기 때문에 Mybatis 프레임워크에서도 사용할 수 있습니다.
해당 모델에서 Pageable을 따로 제공해 주기 전까지는 직접 페이징로직을 구현해서 적용했었던걸로 기억합니다.
이러한 사실을 모른채 2020년까지만 해도 페이징, 검색기능을 함께 묶어서 객체화 한 로직을 MySQL과 Oracle 각각 구현해 본 적도 있습니다.
저도 공부하면서 항상 구글링을 하는데, 뭔가 이상하다 싶어서 mybatis를 연동한 legacyproject에서 Pageable을 선언하면 springframework.data.domain 패키지로부터 임포트가 되는것을 확인하고, 간단하게 구글링해서 작성한 포스팅입니다.
이 포스팅이 도움이 되길 바라며, 보다 정확한 정보가 있다면 댓글로 피드백 부탁드립니다!
이상으로 Pageable과 SpringData에 대한 포스팅을 마치겠습니다. 감사합니다.
'SpringFramework' 카테고리의 다른 글
Spring Legacy Mybatis Execute Query 콘솔출력 (0) | 2024.02.18 |
---|---|
[Swagger3] spring doc 2.1.0 설정 및 Map<String,Object> 스키마 (0) | 2023.07.27 |
SLF4J Logback 설정 및 전역 컨트롤러 선언 (0) | 2022.11.20 |
미완성 [ property / 커맨드객체 / ${EL} / #{ } ] 문법별 set/get 메서드명 필드명 참조 기준 확인] (0) | 2020.09.04 |
스프링 DI 및 IOC xml에 Bean객체화 Container에 등록 (0) | 2020.08.28 |