MySQL์์ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋, ํน์ ์กฐ๊ฑด์ ๋ง๋ ์ผ๋ถ ๋ฐ์ดํฐ๋ง ์กฐํํ๊ณ ์ถ์ ๋๊ฐ ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ LIMIT
์ ์ ์ฌ์ฉํ๋ฉด ์ง์ ํ ๊ฐ์๋งํผ์ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. Node.js์ MySQL์ ์ฐ๋ํ์ฌ LIMIT
์ ์ฌ์ฉํด ๋ฐ์ดํฐ ์กฐํ๋ฅผ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
Node.js์ MySQL ์ฐ๊ฒฐ ์ค์
MySQL ๋ฐ์ดํฐ๋ฅผ ์ ํํ์ฌ ์กฐํํ๊ธฐ ์ ์, ๋จผ์ Node.js์ MySQL ๊ฐ์ ์ฐ๊ฒฐ์ ์ค์ ํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด mysql2
ํจํค์ง๋ฅผ ์ค์นํ๊ณ , MySQL ์๋ฒ์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
1. mysql2 ํจํค์ง ์ค์น
MySQL๊ณผ Node.js๋ฅผ ์ฐ๋ํ๋ ค๋ฉด mysql2
ํจํค์ง๊ฐ ํ์ํฉ๋๋ค. ์ด ํจํค์ง๋ MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฐ๋์ ์ฝ๊ฒ ๋์์ค๋๋ค.
$ npm init -y
$ npm install mysql2
์ ๋ช
๋ น์ด๋ฅผ ํตํด mysql2
ํจํค์ง๋ฅผ ํ๋ก์ ํธ์ ์ค์นํ ์ ์์ต๋๋ค.
2. MySQL ์ฐ๊ฒฐ ์ค์
๋ค์์ MySQL ์๋ฒ์์ ์ฐ๊ฒฐ์ ์ค์ ํ๋ ๊ธฐ๋ณธ ์ฝ๋์ ๋๋ค. ์ด ์ฝ๋๋ฅผ ์ฌ์ฉํด MySQL์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
// app.js
const mysql = require('mysql2');
// MySQL ์ฐ๊ฒฐ ์ค์
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'your-password',
database: 'node_mysql'
});
// MySQL ์ฐ๊ฒฐ
connection.connect((err) => {
if (err) {
console.error('MySQL ์ฐ๊ฒฐ ์ค ์ค๋ฅ ๋ฐ์:', err);
return;
}
console.log('MySQL์ ์ฑ๊ณต์ ์ผ๋ก ์ฐ๊ฒฐ๋์์ต๋๋ค.');
});
MySQL์์ LIMIT ์ฌ์ฉํ๊ธฐ
MySQL์ LIMIT
์ ์ ์กฐํํ ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ์ ํํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ํ
์ด๋ธ์์ ์์ 10๊ฐ์ ๋ ์ฝ๋๋ง ์กฐํํ๊ณ ์ถ๋ค๋ฉด LIMIT
์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
1. ๊ธฐ๋ณธ์ ์ธ LIMIT ์ฌ์ฉ๋ฒ
๋ค์์ users
ํ
์ด๋ธ์์ ์ฒซ 5๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ์์์
๋๋ค.
// ์ฒซ 5๊ฐ์ ๋ฐ์ดํฐ๋ง ์กฐํํ๋ ์ฟผ๋ฆฌ
const selectQuery = 'SELECT * FROM users LIMIT 5';
// ๋ฐ์ดํฐ ์กฐํ ์คํ
connection.query(selectQuery, (err, results) => {
if (err) {
console.error('๋ฐ์ดํฐ ์กฐํ ์ค ์ค๋ฅ ๋ฐ์:', err);
return;
}
console.log('์กฐํ๋ ๋ฐ์ดํฐ:', results);
});
์ ์ฝ๋๋ users
ํ
์ด๋ธ์์ ์์ 5๊ฐ์ ๋ ์ฝ๋๋ง ์กฐํํฉ๋๋ค. LIMIT 5
๋ ๊ฒฐ๊ณผ๋ฅผ 5๊ฐ๋ก ์ ํํ๋ ์ญํ ์ ํฉ๋๋ค.
2. LIMIT์ OFFSET ์ฌ์ฉํ๊ธฐ
LIMIT
์ OFFSET
๊ณผ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค. OFFSET
์ ๊ฒฐ๊ณผ์์ ๋ช ๋ฒ์งธ ๋ ์ฝ๋๋ถํฐ ๊ฐ์ ธ์ฌ์ง ์ค์ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, 6๋ฒ์งธ ๋ ์ฝ๋๋ถํฐ 5๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์์ต๋๋ค.
// 6๋ฒ์งธ ๋ ์ฝ๋๋ถํฐ 5๊ฐ ๋ฐ์ดํฐ ์กฐํ
const selectQuery = 'SELECT * FROM users LIMIT 5 OFFSET 5';
// ๋ฐ์ดํฐ ์กฐํ ์คํ
connection.query(selectQuery, (err, results) => {
if (err) {
console.error('๋ฐ์ดํฐ ์กฐํ ์ค ์ค๋ฅ ๋ฐ์:', err);
return;
}
console.log('์กฐํ๋ ๋ฐ์ดํฐ:', results);
});
์ ์ฟผ๋ฆฌ๋ 6๋ฒ์งธ ๋ ์ฝ๋๋ถํฐ 5๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํฉ๋๋ค. ์ฆ, ์ฒ์ 5๊ฐ์ ๋ ์ฝ๋๋ฅผ ๊ฑด๋๋ฐ๊ณ ๊ทธ ์ดํ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํฉ๋๋ค.
3. LIMIT์ ORDER BY ํจ๊ป ์ฌ์ฉํ๊ธฐ
๋ณดํต LIMIT
์ ORDER BY
์ ํจ๊ป ์ฌ์ฉ๋์ด ์ ๋ ฌ๋ ๋ฐ์ดํฐ์์ ์์ ๋ช ๊ฐ๋ง ์กฐํํ ๋ ์ ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ์ฅ ์ต๊ทผ์ ๊ฐ์
ํ ์ฌ์ฉ์ 3๋ช
์ ์กฐํํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์์ต๋๋ค.
// ๊ฐ์
์ผ ๊ธฐ์ค์ผ๋ก ๊ฐ์ฅ ์ต๊ทผ 3๋ช
์กฐํ
const selectQuery = 'SELECT * FROM users ORDER BY created_at DESC LIMIT 3';
// ๋ฐ์ดํฐ ์กฐํ ์คํ
connection.query(selectQuery, (err, results) => {
if (err) {
console.error('๋ฐ์ดํฐ ์กฐํ ์ค ์ค๋ฅ ๋ฐ์:', err);
return;
}
console.log('์ต๊ทผ ๊ฐ์
ํ ์ฌ์ฉ์:', results);
});
์ ์ฟผ๋ฆฌ๋ ORDER BY created_at DESC
๋ก ์ฌ์ฉ์์ ๊ฐ์
์ผ์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ ํ, ๊ฐ์ฅ ์ต๊ทผ์ ๊ฐ์
ํ 3๋ช
์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํฉ๋๋ค.
4. LIMIT์ ํ์ด์ง๋ค์ด์ ๊ตฌํ
๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋๋ ํ์ด์ง๋ค์ด์
์ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋๋ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด ํจ์จ์ ์
๋๋ค. LIMIT
๊ณผ OFFSET
์ ํจ๊ป ์ฌ์ฉํ์ฌ ํ์ด์ง๋ค์ด์
์ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ด์ง ๋ฒํธ์ ํ ํ์ด์ง์ ํ์ํ ๋ฐ์ดํฐ ๊ฐ์๋ฅผ ์ค์ ํด ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
// ํ์ด์ง ๋ฒํธ์ ํ ํ์ด์ง๋น ๋ฐ์ดํฐ ์
const page = 2; // 2๋ฒ์งธ ํ์ด์ง
const limit = 5; // ํ ํ์ด์ง์ 5๊ฐ์ ๋ฐ์ดํฐ
const offset = (page - 1) * limit;
// ํ์ด์ง๋ค์ด์
์ฟผ๋ฆฌ
const selectQuery = 'SELECT * FROM users LIMIT ? OFFSET ?';
const data = [limit, offset];
// ๋ฐ์ดํฐ ์กฐํ ์คํ
connection.query(selectQuery, data, (err, results) => {
if (err) {
console.error('๋ฐ์ดํฐ ์กฐํ ์ค ์ค๋ฅ ๋ฐ์:', err);
return;
}
console.log(`ํ์ด์ง ${page}์ ๋ฐ์ดํฐ:`, results);
});
์ ์ฝ๋์์๋ ํ์ด์ง ๋ฒํธ์ ํ์ด์ง๋น ๋ฐ์ดํฐ ๊ฐ์๋ฅผ ๊ณ์ฐํ์ฌ LIMIT
๊ณผ OFFSET
์ ํ์ฉํ ํ์ด์ง๋ค์ด์
์ ๊ตฌํํ์ต๋๋ค. 2๋ฒ์งธ ํ์ด์ง์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ฉฐ, ํ ํ์ด์ง์ 5๊ฐ์ ๋ฐ์ดํฐ๊ฐ ํ์๋ฉ๋๋ค.
MySQL ์ฐ๊ฒฐ ์ข ๋ฃ
๋ฐ์ดํฐ ์กฐํ ์์
์ด ๋๋๋ฉด MySQL ์ฐ๊ฒฐ์ ์์ ํ๊ฒ ์ข
๋ฃํด์ผ ํฉ๋๋ค. connection.end()
๋ฉ์๋๋ฅผ ์ฌ์ฉํด MySQL ์ฐ๊ฒฐ์ ์ข
๋ฃํ ์ ์์ต๋๋ค.
// MySQL ์ฐ๊ฒฐ ์ข
๋ฃ
connection.end((err) => {
if (err) {
console.error('MySQL ์ฐ๊ฒฐ ์ข
๋ฃ ์ค ์ค๋ฅ ๋ฐ์:', err);
return;
}
console.log('MySQL ์ฐ๊ฒฐ์ด ์ข
๋ฃ๋์์ต๋๋ค.');
});
์ ์ฒด ์ฝ๋ ์์
์ง๊ธ๊น์ง ์ค๋ช ํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก, ์์ 5๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ์ ์ฒด ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
// app.js
const mysql = require('mysql2');
// MySQL ์ฐ๊ฒฐ ์ค์
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'your-password',
database: 'node_mysql'
});
// MySQL ์ฐ๊ฒฐ
connection.connect((err) => {
if (err) {
console.error('MySQL ์ฐ๊ฒฐ ์ค ์ค๋ฅ ๋ฐ์:', err);
return;
}
console.log('MySQL์ ์ฑ๊ณต์ ์ผ๋ก ์ฐ๊ฒฐ๋์์ต๋๋ค.');
// LIMIT์ ์ฌ์ฉํ ๋ฐ์ดํฐ ์กฐํ ์ฟผ๋ฆฌ
const selectQuery = 'SELECT * FROM users LIMIT 5';
// ๋ฐ์ดํฐ ์กฐํ ์คํ
connection.query(selectQuery, (err, results) => {
if (err) {
console.error('๋ฐ์ดํฐ ์กฐํ ์ค ์ค๋ฅ ๋ฐ์:', err);
return;
}
console.log('์กฐํ๋ ๋ฐ์ดํฐ:', results);
// MySQL ์ฐ๊ฒฐ ์ข
๋ฃ
connection.end((err) => {
if (err) {
console.error('MySQL ์ฐ๊ฒฐ ์ข
๋ฃ ์ค ์ค๋ฅ ๋ฐ์:', err);
return;
}
console.log('MySQL ์ฐ๊ฒฐ์ด ์ข
๋ฃ๋์์ต๋๋ค.');
});
});
});
๊ฒฐ๋ก
Node.js์์ MySQL์ ์ฌ์ฉํ ๋ LIMIT
์ ์ ํ์ฉํ๋ฉด ์ํ๋ ๊ฐ์์ ๋ฐ์ดํฐ๋ง ๋น ๋ฅด๊ฒ ์กฐํํ ์ ์์ต๋๋ค. LIMIT
๊ณผ OFFSET
์ ํจ๊ป ์ฌ์ฉํ๋ฉด ํ์ด์ง๋ค์ด์
๋ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ด, ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ํตํด ์ฑ๋ฅ ์ต์ ํ์ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์์ผ๋ณด์ธ์!
๋๊ธ ์ฐ๊ธฐ