학습 목표
1. 페이징에 필요한 핵심 인터페이스와 클래스 알아보기
2. OAuth의 개념 알아보기
1. 페이징 핵심 인터페이스와 클래스
| 클래스/인터페이스 | 설명 |
| Pageable | 페이지 번호, 페이지 크기, 정렬 정보 등을 담는 객체 |
| PageRequest | Pageable 구현체, 가장 많이 씀 |
| Page<T> | 페이징된 결과를 담는 객체, 총 페이지 수, 총 데이터 수 등 포함 |
| Slice<T> | Page와 비슷하지만 총 페이지 수 계산 없음 → 성능이 조금 더 좋음 |
| Sort | 정렬 기준 지정 |
2. 실제 사용법 예시
<리포지토리 작성법>
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ProductRepository extends JpaRepository<Product, Long> {
// 이름으로 검색하고 페이징
Page<Product> findByNameContaining(String keyword, Pageable pageable);
}
- Pageable pageable을 메서드 인자로 넣으면 자동으로 페이징 처리됨
- Page<Product>를 반환 → 데이터 + 페이징 정보 모두 포함
<서비스>
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
@Service
public class ProductService {
private final ProductRepository productRepository;
public ProductService(ProductRepository productRepository) {
this.productRepository = productRepository;
}
public Page<Product> getProducts(int page, int size) {
// page: 0부터 시작, size: 한 페이지에 보여줄 데이터 수
Pageable pageable = PageRequest.of(page, size, Sort.by("id").descending());
return productRepository.findAll(pageable);
}
public Page<Product> searchProducts(String keyword, int page, int size) {
Pageable pageable = PageRequest.of(page, size, Sort.by("name").ascending());
return productRepository.findByNameContaining(keyword, pageable);
}
}
- PageRequest.of(page, size, Sort.by("필드명").정렬) 형식으로 페이지 요청 가능
- Sort.by("필드명").ascending() / descending()으로 정렬 가능
<컨트롤러>
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProductController {
private final ProductService productService;
public ProductController(ProductService productService) {
this.productService = productService;
}
@GetMapping("/products")
public Page<Product> getProducts(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size) {
return productService.getProducts(page, size);
}
}
- URL 호출 시 /products?page=1&size=5 처럼 쓸 수 있어
- 반환되는 Page<Product>에는 다음 정보가 포함
- 실제 데이터 리스트: getContent()
- 총 페이지 수: getTotalPages()
- 총 데이터 수: getTotalElements()
- 현재 페이지: getNumber()
- 페이지 크기: getSize()
3. OAuth 란?
OAuth는 사용자가 비밀번호를 직접 알려주지 않고도, 다른 앱이나 웹사이트가 자신의 정보에 접근할 수 있게 허락하는 방법
즉, 비밀번호를 안전하게 지키면서, 앱이 필요한 정보만 가져가도록 허락하는 인터넷 표준
OAuth를 사용하는 서비스 제공자는 대표적으로 구글, 페이스북
국내에는 대표적으로 네이버와 카카오
'TIL(Today I Learned)' 카테고리의 다른 글
| TDD - 테스트 더블(Test Double) (0) | 2025.11.17 |
|---|