본문 바로가기
내일배움캠프/회고록

8월 23일 금요일

by jhdevtrace 2024. 8. 26.




### 1. **`Pageable`이란?**

**`Pageable`**은 Spring Data JPA에서 **페이지네이션** 정보를 전달하는 데 사용되는 인터페이스입니다. 페이지네이션은 대량의 데이터를 일정 크기만큼 나누어 여러 페이지로 조회할 수 있도록 하는 기능입니다.

#### **왜 사용하나요?**
- **대량의 데이터 관리**: 데이터베이스에서 대량의 데이터를 한 번에 가져오면 메모리나 성능에 부담이 될 수 있습니다. `Pageable`을 사용하면 데이터를 페이지 단위로 나누어 가져올 수 있어 성능을 최적화할 수 있습니다.
- **유연한 데이터 조회**: 사용자는 원하는 페이지 번호와 크기를 지정해 필요한 만큼의 데이터를 조회할 수 있습니다.

#### **어떻게 사용하나요?**
- `Pageable` 인터페이스는 페이지 번호, 페이지 크기, 정렬 기준 등의 정보를 캡슐화합니다.
- `PageRequest` 클래스는 `Pageable`의 구현체로, 이를 사용해 쉽게 페이지네이션 정보를 생성할 수 있습니다.

```java
Pageable pageable = PageRequest.of(0, 10, Sort.by("createdDate").descending());
```

위 예시는 첫 번째 페이지(0번 페이지)에서 10개의 데이터를 `createdDate` 기준으로 내림차순 정렬하여 조회하도록 `Pageable` 객체를 생성하는 방법입니다.

### 2. **`Page`란?**

**`Page`**는 Spring Data JPA에서 **페이지네이션된 결과**를 담는 인터페이스입니다. 이 인터페이스는 특정 페이지에 속하는 데이터뿐만 아니라, 전체 데이터의 총 개수, 총 페이지 수, 현재 페이지 번호 등의 정보를 포함합니다.

#### **왜 사용하나요?**
- **페이지네이션된 결과를 쉽게 다루기 위해**: `Page` 인터페이스를 사용하면 특정 페이지에 해당하는 데이터를 손쉽게 가져오고, 동시에 전체 페이지 수나 다음 페이지 여부 등을 알 수 있습니다.
- **메타데이터 포함**: 단순히 데이터 리스트뿐만 아니라, 전체 데이터의 개수나 현재 페이지 등과 같은 정보를 포함하여 클라이언트에게 제공할 수 있습니다.

#### **어떻게 사용하나요?**
- Spring Data JPA의 리포지토리 메서드에서 `Pageable`을 인자로 받아 `Page` 객체를 반환하는 방식으로 사용됩니다.

```java
Page<Schedule> schedules = scheduleRepository.findAll(pageable);
```

위 코드는 `Page<Schedule>` 객체를 반환하며, 이는 특정 페이지에 속하는 일정 데이터를 담고 있습니다. 

### 3. **정리**

- **`Pageable`**: 
  - **무엇**: 페이지네이션 요청 정보를 담는 인터페이스.
  - **왜**: 대량의 데이터를 페이지 단위로 나누어 조회할 수 있게 하여 성능을 최적화하고, 유연한 데이터 조회를 지원하기 위해.
  - **어떻게**: `PageRequest` 등의 구현체를 사용하여 페이지 번호, 크기, 정렬 기준을 지정해 `Pageable` 객체를 생성.

- **`Page`**:
  - **무엇**: 페이지네이션된 결과를 담는 인터페이스.
  - **왜**: 특정 페이지의 데이터를 가져오고, 페이지네이션 관련 메타데이터(전체 페이지 수, 다음 페이지 존재 여부 등)를 포함하기 위해.
  - **어떻게**: 리포지토리 메서드에서 `Pageable`을 인자로 받아 `Page` 객체로 결과를 반환받음.

이렇게 `Pageable`과 `Page`를 사용하면, 대량의 데이터를 효율적으로 조회하고 관리할 수 있습니다.



'내일배움캠프 > 회고록' 카테고리의 다른 글

10월 11일 주특기 플러스 과제 회고  (1) 2024.10.11
9월 11일  (1) 2024.09.12
8월 22일 목요일  (0) 2024.08.23
8월 19일 월요일  (0) 2024.08.20
8월 13일 화요일  (0) 2024.08.14