Responsive Advertisement

Node.js์—์„œ MySQL ๋ฐ์ดํ„ฐ ์‚ฝ์ž…ํ•˜๊ธฐ: INSERT INTO ์‚ฌ์šฉ๋ฒ•

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 ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ด๋ณด์„ธ์š”!

๋Œ“๊ธ€ ์“ฐ๊ธฐ