mariaDB/3. SQL 사용법

데이터베이스 페이징

bbomkim 2025. 5. 16. 15:24

페이징(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