페이징(Paging)이란?
**페이징(Paging)**이란, 데이터가 많을 때 전체 데이터를 한 번에 다 가져오는 것이 아니라,
일정 개수씩 나눠서 가져오는 방식입니다.
즉, "1페이지엔 10개, 2페이지엔 그다음 10개…" 이런 식으로 나눠서 조회합니다.
왜 페이징을 쓰나?
- 데이터가 수천, 수만 건이면 한 번에 다 보내면 성능 저하 발생
- 사용자 UX: 목록을 넘겨보는 인터페이스 제공
- DB 부하 감소, 네트워크 트래픽 절감
MariaDB / MySQL에서의 페이징 기본 문법
SELECT 컬럼들
FROM 테이블명
LIMIT 몇개_가져올지 OFFSET 어디서부터;
예시
도서 목록을 10개씩 가져오되, 페이지 번호에 따라 다르게 조회
1페이지 (1~10번째 도서)
SELECT *
FROM books
LIMIT 10 OFFSET 0;
2페이지 (11~20번째 도서)
SELECT *
FROM books
LIMIT 10 OFFSET 10;
3페이지 (21~30번째 도서)
SELECT *
FROM books
LIMIT 10 OFFSET 20;
공식 계산식
LIMIT pageSize OFFSET (page - 1) * pageSize
Express + MariaDB 예시
// GET /books?page=2&limit=10
const { page = 1, limit = 10 } = req.query
const offset = (page - 1) * limit
const sql = `
SELECT books.*, category.name AS category_name
FROM books
LEFT JOIN category ON books.categoryId = category.id
LIMIT ? OFFSET ?
`
const [result] = await conn.query(sql, [parseInt(limit), parseInt(offset)])
전체 개수도 함께 보내야 프론트에서 페이지 계산 가능
// 전체 도서 개수 조회
const [countRows] = await conn.query(`SELECT COUNT(*) AS total FROM books`)
const totalCount = countRows[0].total
res.json({
data: result,
total: totalCount,
page: parseInt(page),
limit: parseInt(limit)
})
요약
| 개념 | 설명 |
| 페이징 | 데이터를 여러 페이지로 나누어 조회 |
| LIMIT | 가져올 데이터 수 |
| OFFSET | 시작 위치 (몇 번째부터 가져올지) |
| 프론트에서 필요한 것 | page, limit, total |
'mariaDB > 3. SQL 사용법' 카테고리의 다른 글
| 좋아요 총 개수 보내주기 (개별 도서 조회) (1) | 2025.05.19 |
|---|---|
| 두 컬럼의 값을 한 쌍으로 제약조건 만들기 (0) | 2025.05.19 |
| SQL 시간 범위 구하기 (DATE_ADD, SUB) (0) | 2025.05.16 |
| JOIN vs LEFT JOIN 비교 (0) | 2025.05.16 |
| mariaDB 실행 / SQL 문법 (0) | 2025.04.02 |