Node.js๋ ์๋ฒ ์ฌ์ด๋์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ๋ฐํ์ ํ๊ฒฝ์ผ๋ก, ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ํนํ, MySQL๊ณผ Node.js๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ด ๊ธ์์๋ Node.js์์ MySQL์ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ ๋ฐฉ๋ฒ, ์ฆ INSERT INTO ๋ฌธ์ ์ฌ์ฉํ ๋ฐ์ดํฐ ์ฝ์ ์ ๋จ๊ณ๋ณ๋ก ์ค๋ช ํ๊ฒ ์ต๋๋ค.
Node.js์ MySQL ์ฐ๊ฒฐ ์ค์
MySQL์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ๊ธฐ ์ ์ ๋จผ์ Node.js์ MySQL ๊ฐ์ ์ฐ๊ฒฐ์ ์ค์ ํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด mysql2
ํจํค์ง๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ํจํค์ง๋ MySQL๊ณผ์ ๋ฐ์ดํฐ ํต์ ์ ์ง์ํ๋ ๊ณต์ ํจํค์ง๋ก, ์ค์น ํ ์ฌ์ฉํ ์ ์์ต๋๋ค.
1. mysql2 ํจํค์ง ์ค์น
ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ์์ mysql2
ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค. npm
์ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ๊ฒ ์ค์นํ ์ ์์ต๋๋ค.
$ npm init -y
$ npm install mysql2
์ด ๋ช
๋ น์ด๋ฅผ ์คํํ๋ฉด mysql2
ํจํค์ง๊ฐ ์ค์น๋ฉ๋๋ค. ์ด์ MySQL๊ณผ Node.js๋ฅผ ์ฐ๊ฒฐํ ์ค๋น๊ฐ ์๋ฃ๋์์ต๋๋ค.
2. MySQL ์ฐ๊ฒฐ ์ค์
MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๊ธฐ ์ํ ๊ธฐ๋ณธ ์ค์ ์ ์์ฑํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํธ์คํธ, ์ฌ์ฉ์๋ช , ๋น๋ฐ๋ฒํธ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ ๋ฑ์ ์ค์ ํ์ฌ ์ฐ๊ฒฐํฉ๋๋ค.
// app.js
const mysql = require('mysql2');
// MySQL ์ฐ๊ฒฐ ์ค์
const connection = mysql.createConnection({
host: 'localhost', // MySQL ์๋ฒ ํธ์คํธ
user: 'root', // MySQL ์ฌ์ฉ์๋ช
password: 'your-password', // MySQL ๋น๋ฐ๋ฒํธ
database: 'node_mysql' // ์ฌ์ฉํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ
});
// MySQL ์ฐ๊ฒฐ
connection.connect((err) => {
if (err) {
console.error('MySQL ์ฐ๊ฒฐ ์ค ์ค๋ฅ ๋ฐ์:', err);
return;
}
console.log('MySQL์ ์ฑ๊ณต์ ์ผ๋ก ์ฐ๊ฒฐ๋์์ต๋๋ค.');
});
์ ์ฝ๋๋ฅผ ํตํด Node.js์ MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ์ฐ๊ฒฐ์ด ์ค์ ๋ฉ๋๋ค. ์ด์ ์ด ์ฐ๊ฒฐ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ ์ ์์ต๋๋ค.
MySQL์ ๋ฐ์ดํฐ ์ฝ์ ํ๊ธฐ: INSERT INTO
MySQL์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ ๋๋ INSERT INTO ๊ตฌ๋ฌธ์ ์ฌ์ฉํฉ๋๋ค. ํ ์ด๋ธ์ ์ฝ์ ํ ๋ฐ์ดํฐ๋ฅผ ์ง์ ํ์ฌ ์๋ก์ด ํ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. Node.js์์ ์ด ๊ตฌ๋ฌธ์ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ ๋ฐฉ๋ฒ์ ๋จ๊ณ๋ณ๋ก ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. ํ ์ด๋ธ ์์ฑ
๋จผ์ , ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ ํ
์ด๋ธ์ด ํ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๋ฅผ ์ ์ฅํ users
ํ
์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์์ต๋๋ค.
// users ํ
์ด๋ธ ์์ฑ ์ฟผ๋ฆฌ
const createTableQuery = `
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
`;
// ํ
์ด๋ธ ์์ฑ ์คํ
connection.query(createTableQuery, (err, results) => {
if (err) {
console.error('ํ
์ด๋ธ ์์ฑ ์ค ์ค๋ฅ ๋ฐ์:', err);
return;
}
console.log('ํ
์ด๋ธ์ด ์ฑ๊ณต์ ์ผ๋ก ์์ฑ๋์์ต๋๋ค.');
});
์ ์ฟผ๋ฆฌ๋ฅผ ํตํด users
ํ
์ด๋ธ์ด ์์ฑ๋ฉ๋๋ค. name
, email
์ ์ ์ฅํ ์ ์์ผ๋ฉฐ, created_at
ํ๋์๋ ๋ฐ์ดํฐ๊ฐ ์ฝ์
๋ ์๊ฐ์ ์๋์ผ๋ก ๊ธฐ๋กํฉ๋๋ค.
2. ๋ฐ์ดํฐ ์ฝ์ ์ฟผ๋ฆฌ ์์ฑ
์ด์ INSERT INTO
๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ๋ ์ฝ๋๋ฅผ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค. name
๊ณผ email
ํ๋์ ๊ฐ์ ์ฝ์
ํ๊ณ , ํ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
// ๋ฐ์ดํฐ ์ฝ์
์ฟผ๋ฆฌ
const insertQuery = 'INSERT INTO users (name, email) VALUES (?, ?)';
const userData = ['John Doe', 'john@example.com'];
// ๋ฐ์ดํฐ ์ฝ์
์คํ
connection.query(insertQuery, userData, (err, results) => {
if (err) {
console.error('๋ฐ์ดํฐ ์ฝ์
์ค ์ค๋ฅ ๋ฐ์:', err);
return;
}
console.log('๋ฐ์ดํฐ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ฝ์
๋์์ต๋๋ค. ์ฝ์
๋ ํ ID:', results.insertId);
});
์ ์ฝ๋์์๋ INSERT INTO
๋ฌธ์ ์ฌ์ฉํด users
ํ
์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ์ต๋๋ค. VALUES (?, ?)
๋ userData
๋ฐฐ์ด์ ์๋ ๊ฐ์ผ๋ก ๋์ฒด๋ฉ๋๋ค. ์ฝ์
์ด ์๋ฃ๋๋ฉด, results.insertId
๋ฅผ ํตํด ์ฝ์
๋ ํ์ ID๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
3. ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ ์ฝ์ ํ๊ธฐ
ํ ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ๋ ค๋ฉด, INSERT INTO
๋ฌธ์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ ๋ชฉ๋ก์ ์ ๊ณตํ ์ ์์ต๋๋ค.
// ๋ค์ค ๋ฐ์ดํฐ ์ฝ์
์ฟผ๋ฆฌ
const multipleInsertQuery = 'INSERT INTO users (name, email) VALUES ?';
const multipleUserData = [
['Jane Doe', 'jane@example.com'],
['Mike Smith', 'mike@example.com'],
['Sara Lee', 'sara@example.com']
];
// ๋ค์ค ๋ฐ์ดํฐ ์ฝ์
์คํ
connection.query(multipleInsertQuery, [multipleUserData], (err, results) => {
if (err) {
console.error('์ฌ๋ฌ ๋ฐ์ดํฐ ์ฝ์
์ค ์ค๋ฅ ๋ฐ์:', err);
return;
}
console.log('์ฌ๋ฌ ๋ฐ์ดํฐ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ฝ์
๋์์ต๋๋ค. ์ฝ์
๋ ํ ์:', results.affectedRows);
});
์ ์ฝ๋๋ ์ฌ๋ฌ ๊ฐ์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ฝ์
ํ๋ ์์์
๋๋ค. VALUES ?
๋ ๋ฐฐ์ด์ ํฌํจ๋ ์ฌ๋ฌ ํ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ ์ ์๊ฒ ํฉ๋๋ค. ์ฝ์
๋ ํ์ ์๋ results.affectedRows
๋ฅผ ํตํด ํ์ธํ ์ ์์ต๋๋ค.
MySQL ์ฐ๊ฒฐ ์ข ๋ฃ
๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ด ์๋ฃ๋๋ฉด, MySQL ์ฐ๊ฒฐ์ ์์ ํ๊ฒ ์ข
๋ฃํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. connection.end()
๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ฐ๊ฒฐ์ ์ข
๋ฃํ ์ ์์ต๋๋ค.
// MySQL ์ฐ๊ฒฐ ์ข
๋ฃ
connection.end((err) => {
if (err) {
console.error('MySQL ์ฐ๊ฒฐ ์ข
๋ฃ ์ค ์ค๋ฅ ๋ฐ์:', err);
return;
}
console.log('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์ ์ฑ๊ณต์ ์ผ๋ก ์ฐ๊ฒฐ๋์์ต๋๋ค.');
// ๋ฐ์ดํฐ ์ฝ์
์ฟผ๋ฆฌ
const insertQuery = 'INSERT INTO users (name, email) VALUES (?, ?)';
const userData = ['John Doe', 'john@example.com'];
// ๋ฐ์ดํฐ ์ฝ์
์คํ
connection.query(insertQuery, userData, (err, results) => {
if (err) {
console.error('๋ฐ์ดํฐ ์ฝ์
์ค ์ค๋ฅ ๋ฐ์:', err);
return;
}
console.log('๋ฐ์ดํฐ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ฝ์
๋์์ต๋๋ค. ์ฝ์
๋ ํ ID:', results.insertId);
// MySQL ์ฐ๊ฒฐ ์ข
๋ฃ
connection.end((err) => {
if (err) {
console.error('MySQL ์ฐ๊ฒฐ ์ข
๋ฃ ์ค ์ค๋ฅ ๋ฐ์:', err);
return;
}
console.log('MySQL ์ฐ๊ฒฐ์ด ์ข
๋ฃ๋์์ต๋๋ค.');
});
});
});
์ด ์ฝ๋๋ฅผ ์คํํ๋ฉด MySQL์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๊ณ , ์ฝ์ ๋ ํ์ ID๋ฅผ ์ถ๋ ฅํ ํ ์ฐ๊ฒฐ์ ์ข ๋ฃํฉ๋๋ค.
๊ฒฐ๋ก
Node.js์ MySQL์ ํจ๊ป ์ฌ์ฉํ๋ฉด, ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ฝ์
ํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. mysql2
ํจํค์ง๋ฅผ ์ฌ์ฉํด MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๊ณ , INSERT INTO ๋ฌธ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ํ
์ด๋ธ์ ์ฝ์
ํ ์ ์์ต๋๋ค. ์ด ๊ณผ์ ์ ํตํด Node.js ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค. ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ๊ฑฐ๋ ํน์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ ๋ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ํจ์จ์ ์ผ๋ก ์์
์ ์ฒ๋ฆฌํด๋ณด์ธ์!
๋๊ธ ์ฐ๊ธฐ