본문 바로가기
개발정리 (nodeJS)

[nodeJS] Node.js로 페이징네이션 활용하기

by 할리갈리0 2024. 5. 23.

페이징네이션은 전체 데이터셋을 일정한 크기로 나누어 페이지별로 데이터를 제공하는 방식입니다. 
이를 통해 한 번에 모든 데이터를 불러오는 부담을 줄이고, 사용자는 필요한 데이터를 쉽게 탐색할 수 있습니다. 
일반적으로 페이지 번호와 페이지당 항목 수를 사용해 특정 페이지의 데이터를 가져옵니다.

 

1. Node.js 프로젝트 설정하기

Express는 웹 서버를 구축하는 데 사용하고, MySQL과 MongoDB 연결을 위해 각각 mysql과 mongoose를 사용

mkdir pagination-example
cd pagination-example
npm init -y
npm install express mysql mongoose

 

2. MySQL에서 페이징네이션 구현하기

1) 데이터베이스 설정

간단한 users 테이블을 생성

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);

 

2) Node.js 코드

express를 사용해 간단한 서버를 설정하고, MySQL에서 페이징네이션을 구현

page와 limit 파라미터를 통해 페이지 번호와 페이지당 항목 수를 받아 해당 페이지의 데이터를 쿼리

const express = require('express');
const mysql = require('mysql');
const app = express();
const port = 3000;

const db = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'test'
});

db.connect(err => {
    if (err) throw err;
    console.log('MySQL Connected...');
});

app.get('/users', (req, res) => {
    const page = parseInt(req.query.page) || 1;
    const limit = parseInt(req.query.limit) || 10;
    const offset = (page - 1) * limit;

    const sql = `SELECT * FROM users LIMIT ${limit} OFFSET ${offset}`;
    db.query(sql, (err, results) => {
        if (err) throw err;
        res.json({
            page,
            limit,
            results
        });
    });
});

app.listen(port, () => {
    console.log(`Server running on port ${port}`);
});

 

3. MongoDB에서 페이징네이션 구현하기

1) 데이터베이스 설정

users 컬렉션을 사용

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true, useUnifiedTopology: true });

const UserSchema = new mongoose.Schema({
    name: String,
    email: String
});

const User = mongoose.model('User', UserSchema);

 

2) Node.js 코드

mongoose를 사용해 MongoDB에서 페이징네이션을 구현

skip과 limit 메서드를 사용해 특정 페이지의 데이터를 가져오기

app.get('/users', async (req, res) => {
    const page = parseInt(req.query.page) || 1;
    const limit = parseInt(req.query.limit) || 10;
    const skip = (page - 1) * limit;

    try {
        const users = await User.find().skip(skip).limit(limit);
        res.json({
            page,
            limit,
            results: users
        });
    } catch (err) {
        res.status(500).json({ error: err.message });
    }
});

 

페이징네이션은 대용량 데이터를 효율적으로 관리하고, 사용자에게 빠르고 유용한 정보를 제공하는 데 중요한 역할을 합니다. 다양한 상황에 맞게 페이징네이션을 적용해 보시기 바랍니다.

반응형