본문 바로가기

250924 (수) 스프링부트 페이징 구현과 소셜 로그인 개념

@6uiw2025. 9. 24. 21:06

 

학습 목표

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
6uiw
@6uiw :: LOG.INFO("MING's DEVLOG")

개발을 하면서 공부한 기록을 남깁니다

목차