Node.js์ MySQL์ ๊ฒฐํฉํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ฐ์ ๊ฐ๋ ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํ ํ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ํ ์ด๋ธ์ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์ด ๊ธ์์๋ Node.js์์ MySQL ํ ์ด๋ธ ์์ฑ ๋ฐฉ๋ฒ์ ๋จ๊ณ๋ณ๋ก ์ค๋ช ํ๊ณ , SQL ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ ์ด๋ธ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค.
Node.js์ MySQL: ๊ธฐ๋ณธ ์ค๋น
Node.js์์ MySQL๊ณผ ์ํธ์์ฉํ๋ ค๋ฉด mysql2
ํจํค์ง๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ด ํจํค์ง๋ MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฐ๊ฒฐ ๋ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ฝ๊ฒ ํ ์ ์๋๋ก ๋์์ค๋๋ค.
1. MySQL ์ค์น ๋ฐ ์ค์
MySQL์ด ์์คํ ์ ์ค์น๋์ด ์์ง ์๋ค๋ฉด, ๋จผ์ ์ค์นํด์ผ ํฉ๋๋ค. ์๋ ๋งํฌ๋ฅผ ํตํด ์ด์์ฒด์ ์ ๋ง๋ MySQL ์ค์น ๋ฐฉ๋ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
MySQL ์ค์น ํ, mysql -u root -p
๋ช
๋ น์ด๋ก MySQL ํฐ๋ฏธ๋์ ๋ก๊ทธ์ธํ ๋ค, ํ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํ๊ณ ์ค์ ํ์ธ์.
2. Node.js ํ๋ก์ ํธ์ mysql2 ํจํค์ง ์ค์น
Node.js์์ MySQL๊ณผ ์ํธ์์ฉํ๊ธฐ ์ํด mysql2
ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.
$ npm init -y
$ npm install mysql2
์ ๋ช ๋ น์ด๋ก Node.js ํ๋ก์ ํธ์์ ์ฌ์ฉํ MySQL ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค. ์ดํ MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๊ณ ํ ์ด๋ธ์ ์์ฑํ ์ค๋น๊ฐ ์๋ฃ๋ฉ๋๋ค.
MySQL์ ์ฐ๊ฒฐํ๊ณ ํ ์ด๋ธ ์์ฑํ๊ธฐ
Node.js์์ MySQL ํ ์ด๋ธ์ ์์ฑํ๋ ค๋ฉด, ๋จผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ ๋ค์ SQL ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํด ํ ์ด๋ธ์ ์์ฑํฉ๋๋ค.
1. 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์ ์ฑ๊ณต์ ์ผ๋ก ์ฐ๊ฒฐ๋์์ต๋๋ค.');
});
์ ์ฝ๋๋ MySQL ์๋ฒ์ ์ฐ๊ฒฐํ๋ ๊ธฐ๋ณธ์ ์ธ ์ค์ ์ ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ์ ์ด๋ฏธ ์์ฑ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ์์ฑํ ์ ์์ต๋๋ค.
2. MySQL ํ ์ด๋ธ ์์ฑ ์ฟผ๋ฆฌ
MySQL์ ์ฐ๊ฒฐํ ํ, SQL ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํด ํ
์ด๋ธ์ ์์ฑํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๋ฅผ ์ ์ฅํ 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('ํ
์ด๋ธ์ด ์ฑ๊ณต์ ์ผ๋ก ์์ฑ๋์์ต๋๋ค.');
});
์ SQL ์ฟผ๋ฆฌ๋ users
๋ผ๋ ํ
์ด๋ธ์ ์์ฑํ๋ฉฐ, id
, name
, email
, created_at
๋ฑ์ ์ปฌ๋ผ์ ํฌํจํฉ๋๋ค. AUTO_INCREMENT
๋ id
์ปฌ๋ผ์ด ์๋์ผ๋ก ์ฆ๊ฐํ๋๋ก ์ค์ ํ๋ฉฐ, IF NOT EXISTS
๋ ๋์ผํ ์ด๋ฆ์ ํ
์ด๋ธ์ด ์ด๋ฏธ ์กด์ฌํ์ง ์์ ๋๋ง ํ
์ด๋ธ์ ์์ฑํฉ๋๋ค.
3. MySQL ์ฐ๊ฒฐ ์ข ๋ฃ
ํ
์ด๋ธ์ ์์ฑํ ํ์๋ MySQL ์ฐ๊ฒฐ์ ์ข
๋ฃํด์ผ ํฉ๋๋ค. connection.end()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐ์ ์์ ํ๊ฒ ์ข
๋ฃํ ์ ์์ต๋๋ค.
// MySQL ์ฐ๊ฒฐ ์ข
๋ฃ
connection.end((err) => {
if (err) {
console.error('MySQL ์ฐ๊ฒฐ ์ข
๋ฃ ์ค ์ค๋ฅ ๋ฐ์:', err);
return;
}
console.log('MySQL ์ฐ๊ฒฐ์ด ์ข
๋ฃ๋์์ต๋๋ค.');
});
์ ์ฝ๋๋ MySQL ์ฐ๊ฒฐ์ ์ข ๋ฃํ๋ ์ญํ ์ ํฉ๋๋ค. ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ด ์๋ฃ๋๋ฉด ์ฐ๊ฒฐ์ ์ข ๋ฃํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ ์ฒด ์ฝ๋ ์์
์์์ ์ค๋ช ํ ๋จ๊ณ๋ฅผ ๋ชจ๋ ํฉ์น๋ฉด, Node.js์์ 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 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('ํ
์ด๋ธ์ด ์ฑ๊ณต์ ์ผ๋ก ์์ฑ๋์์ต๋๋ค.');
// MySQL ์ฐ๊ฒฐ ์ข
๋ฃ
connection.end((err) => {
if (err) {
console.error('MySQL ์ฐ๊ฒฐ ์ข
๋ฃ ์ค ์ค๋ฅ ๋ฐ์:', err);
return;
}
console.log('MySQL ์ฐ๊ฒฐ์ด ์ข
๋ฃ๋์์ต๋๋ค.');
});
});
});
์ ์ฝ๋๋ฅผ ์คํํ๋ฉด MySQL ์๋ฒ์ ์ฐ๊ฒฐํ ํ users
ํ
์ด๋ธ์ด ์์ฑ๋ฉ๋๋ค. ํ
์ด๋ธ์ด ์ด๋ฏธ ์กด์ฌํ๋ ๊ฒฝ์ฐ์๋ ์๋ก ์์ฑ๋์ง ์์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ด ์๋ฃ๋ ํ์๋ ์ฐ๊ฒฐ์ด ์์ ํ๊ฒ ์ข
๋ฃ๋ฉ๋๋ค.
์ถ๊ฐ ์ปฌ๋ผ๊ณผ ์ต์ ์ค์
ํ
์ด๋ธ์ ์์ฑํ ๋ ๋ค์ํ ์ปฌ๋ผ๊ณผ ์ต์
์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, NOT NULL
์ต์
์ ์ฌ์ฉํด ํน์ ์ปฌ๋ผ์ด ๋น์ด ์์ ์ ์๋๋ก ์ค์ ํ๊ฑฐ๋, DEFAULT
๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค.
CREATE TABLE IF NOT EXISTS products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price DECIMAL(10, 2) NOT NULL,
stock INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
์ ์์๋ ์ ํ์ ์ ์ฅํ๋ products
ํ
์ด๋ธ์ ์์ฑํ๋ ์ฟผ๋ฆฌ์
๋๋ค. price
๋ ์์์ ๊ฐ์ ๊ฐ์ง ์ ์์ผ๋ฉฐ, stock
์ปฌ๋ผ์ ๊ธฐ๋ณธ๊ฐ์ 0์ผ๋ก ์ค์ ๋ฉ๋๋ค.
๊ฒฐ๋ก
Node.js์์ MySQL ํ
์ด๋ธ ์์ฑ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. mysql2
ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๊ณ , SQL ์ฟผ๋ฆฌ๋ฅผ ํตํด ์ํ๋ ํ
์ด๋ธ์ ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค. ํ
์ด๋ธ์ ์์ฑํ ํ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
, ์กฐํ, ์์ , ์ญ์ ํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ ์์ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ์ด ๊ณผ์ ์ ํตํด ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ์์คํ
์ ๊ฐ๋ฐํด๋ณด์ธ์!
๋๊ธ ์ฐ๊ธฐ