728x90
반응형
1. 슬라이스 조회 (Slice)
특징
- 슬라이스 조회는 Spring Data JPA에서 제공하는 기능으로, 결과 데이터를 슬라이스(일부) 형태로 가져온다.
- 슬라이스는 페이지 크기와 현재 페이지 번호에 따라 정의되며, 페이지 크기에 맞게 결과 데이터를 가져온다.
- 슬라이스를 사용하면 일부 데이터만 로드되므로 메모리 사용을 최적화할 수 있다.
- Spring Data JPA의 Slice<T> 타입을 사용하여 결과를 반환합니다.
장점
- 메모리 사용을 효율적으로 관리하며, 대용량 데이터셋을 다룰 때 성능을 최적화할 수 있다.
- 사용자 인터페이스에서 무한 스크롤과 같은 기능을 구현하는 데 적합하다.
단점
- 정렬 기준 및 방향을 지정하는 등 추가적 설정이 필요할 수 있다.
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Slice;
import org.springframework.data.domain.Sort;
// 슬라이스 조회 인터페이스
public interface UserRepository extends JpaRepository<User, Long> {
Slice<User> findAllByLastName(String lastName, Pageable pageable);
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Slice;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Autowired
private UserRepository userRepository;
@GetMapping("/users")
public Slice<User> getUsersByLastName(
@RequestParam String lastName,
@RequestParam int page,
@RequestParam int size
) {
PageRequest pageRequest = PageRequest.of(page, size, Sort.by("id"));
return userRepository.findAllByLastName(lastName, pageRequest);
}
}
2. 페이징 조회 (Page)
특징
- 페이징 조회는 결과 데이터를 페이지 단위로 가져오는 방법이다.
- Spring Data JPA의 Page<T> 또는 Pageable 객체를 사용하여 페이지별 결과를 반환한다.
- 페이지 번호와 페이지 크기를 지정하여 데이터를 가져온다.
- 전체 페이지 수와 전체 항목 수를 함께 반환하기 때문에 페이지 관리에 용이하다.
장점
- 페이지 번호와 페이지 크기를 쉽게 관리하며, 사용자에게 페이징된 데이터를 제공하는 데 용이하다.
- 대용량 데이터셋을 처리할 때도 효과적으로 사용된다.
단점
- 페이지마다 데이터베이스 쿼리가 실행되므로, 큰 페이지 수나 무한 스크롤을 구현할 때 성능 이슈가 발생할 수 있다.
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
// 페이징 조회 인터페이스
public interface UserRepository extends JpaRepository<User, Long> {
Page<User> findAllByLastName(String lastName, Pageable pageable);
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Autowired
private UserRepository userRepository;
@GetMapping("/users")
public Page<User> getUsersByLastName(
@RequestParam String lastName,
@RequestParam int page,
@RequestParam int size
) {
PageRequest pageRequest = PageRequest.of(page, size);
return userRepository.findAllByLastName(lastName, pageRequest);
}
}
728x90
반응형
댓글