페이징 쿼리(Paging Query)란?
페이징 쿼리(Paging Query) 는 전체 데이터를 부분적으로 나누어 데이터를 조회하거나 처리할 때 사용됩니다. 데이터를 상대적으로 작은 단위로 나누어 처리하기 때문에 데이터베이스나 애플리케이션의 리소스 사용 효율이 증가하며, 로직 처리 시간을 단축 시킬 수 있습니다. MySQL에서 페이징 쿼리는 일반적으로 LIMIT, OFFSET 구문을 사용하여 작성합니다.
페이징 쿼리를 왜 사용할까?
1. 데이터의 물리적 양
- 실제 서비스에서는 수천, 수만, 수십만 개의 데이터가 존재할 수 있습니다.
- 한 번에 모든 데이터 조회시 발생하는 이슈
- DB에 과부하 발생
- 네트워크 전송량 증가
- 사용자 브라우저에서도 렌더링 부담
2. 사용자 경험 측면
- 사용자는 한 번에 모든 상품을 보기 힘듬
- 일반적으로 10개, 20개씩 끊어서 보여주는 게 더 자연스러움
3. 성능 최적화
- 페이징 쿼리를 사용하게 되면 불필요한 데이터를 조회할 필요가 없습니다.
- 대량데이터에서 그 페이지를 제외한 다른데이터를 보여주지 않게 되면 성능이 매우 향상됩니다.
예시 코드
CREATE TABLE articles (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT,
author VARCHAR(100),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
이런 게시글 테이블이 있다고 가정하자. 우리는 이 때, 생성된 날짜에 따라서 게시글을 조회할 예정입니다.
-- 1페이지: 0번째부터 10개 조회
SELECT * FROM articles
ORDER BY created_at DESC
LIMIT 10 OFFSET 0;
-- 2페이지: 10번째부터 10개 조회
SELECT * FROM articles
ORDER BY created_at DESC
LIMIT 10 OFFSET 10;
-- 3페이지: 20번째부터 10개 조회
SELECT * FROM articles
ORDER BY created_at DESC
LIMIT 10 OFFSET 20;
이렇게 페이지 별로 필요한 데이터와 시작할 순서를 쿼리문에서 LIMIT과 OFFSET으로 설정하게 되면 필요한 데이터만 조회할 수 있게 됩니다.
Java + JPA 기준
PageRequest pageRequest = PageRequest.of(0, 10, Sort.by("createdAt").descending());
Page<Article> page = articleRepository.findAll(pageRequest);
PageRequest.of(pageNumber, pageSize)를 사용하여 Spring Data JPA에서도 페이징 구현이 가능합니다.
'Interview Question' 카테고리의 다른 글
[Interview Question] 선언형과 명령형 프로그래밍의 차이점은? (1) | 2025.06.10 |
---|---|
[백엔드 면접 질문 준비] (6) JVM이란 무엇인가? (0) | 2025.04.05 |
[백엔드 면접 질문 준비] (5) 프로세스와 스레드의 차이는 무엇인가요? (0) | 2025.04.04 |
[백엔드 면접 질문 준비] (4) CI/CD란? (0) | 2025.04.03 |
[백엔드 면접 질문 준비] (3) HTTP 상태 코드에 대해 말해보세요. (0) | 2025.04.02 |