Node.js 데이터베이스 연동 (Node.js Database Integration)
Node.js를 사용하면 다양한 데이터베이스와 연동하여 애플리케이션의 데이터를 관리할 수 있습니다. 이 문서에서는 데이터베이스의 기본 이해, MongoDB 및 MySQL과 같은 데이터베이스 연동, ORM(Object-Relational Mapping) 사용 방법, 그리고 데이터베이스 쿼리 작성에 대해 소개하고 상세히 설명합니다.
데이터베이스 기본 이해 (Understanding Databases)
데이터베이스는 데이터를 저장하고 관리하는 시스템입니다. 데이터베이스는 크게 SQL과 NoSQL로 구분됩니다.
SQL 데이터베이스 (SQL Databases)
SQL 데이터베이스는 구조화된 데이터를 테이블 형태로 저장하며, 관계형 데이터베이스 관리 시스템(RDBMS)을 사용합니다. 데이터 간의 관계를 명확히 정의할 수 있습니다.
- 대표적인 SQL 데이터베이스: MySQL, PostgreSQL, SQLite, Microsoft SQL Server
NoSQL 데이터베이스 (NoSQL Databases)
NoSQL 데이터베이스는 비정형 데이터를 저장하며, 스키마가 없거나 유연합니다. 다양한 데이터 모델(문서, 키-값, 그래프, 컬럼)을 지원합니다.
- 대표적인 NoSQL 데이터베이스: MongoDB, Cassandra, Redis, CouchDB
MongoDB 연동 (Connecting to MongoDB)
MongoDB는 문서 지향 NoSQL 데이터베이스로, Node.js와 함께 많이 사용됩니다. MongoDB와 Node.js를 연동하기 위해 Mongoose 라이브러리를 사용할 수 있습니다.
MongoDB 설치 및 설정 (Installing and Setting Up MongoDB)
- MongoDB 설치: MongoDB를 설치하고 실행합니다. 공식 웹사이트에서 운영 체제에 맞는 설치 방법을 참고합니다.
- Mongoose 설치: npm을 사용하여 Mongoose를 설치합니다.
npm install mongoose
MongoDB 연결 및 데이터 조작 (Connecting and Manipulating Data in MongoDB)
다음은 Mongoose를 사용하여 MongoDB와 연결하고, 데이터를 생성, 조회, 수정, 삭제하는 예제입니다.
const mongoose = require('mongoose'); // MongoDB 연결 mongoose.connect('mongodb://localhost:27017/mydatabase', { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log('MongoDB connected')) .catch(err => console.error('MongoDB connection error:', err)); // 스키마 정의 const userSchema = new mongoose.Schema({ name: String, age: Number, email: String }); // 모델 생성 const User = mongoose.model('User', userSchema); // 데이터 생성 const createUser = async () => { const user = new User({ name: 'John Doe', age: 30, email: 'john@example.com' }); await user.save(); console.log('User created:', user); }; // 데이터 조회 const getUsers = async () => { const users = await User.find(); console.log('Users:', users); }; // 데이터 수정 const updateUser = async (userId) => { const user = await User.findByIdAndUpdate(userId, { age: 31 }, { new: true }); console.log('User updated:', user); }; // 데이터 삭제 const deleteUser = async (userId) => { const user = await User.findByIdAndDelete(userId); console.log('User deleted:', user); }; // 함수 실행 예제 (async () => { await createUser(); await getUsers(); })();
MySQL 연동 (Connecting to MySQL)
MySQL은 널리 사용되는 관계형 데이터베이스입니다. MySQL과 Node.js를 연동하기 위해 mysql2
또는 sequelize
라이브러리를 사용할 수 있습니다.
MySQL 설치 및 설정 (Installing and Setting Up MySQL)
- MySQL 설치: MySQL을 설치하고 설정합니다. 공식 웹사이트에서 운영 체제에 맞는 설치 방법을 참고합니다.
- mysql2 설치: npm을 사용하여
mysql2
라이브러리를 설치합니다.
npm install mysql2
MySQL 연결 및 데이터 조작 (Connecting and Manipulating Data in MySQL)
다음은 mysql2
를 사용하여 MySQL과 연결하고, 데이터를 생성, 조회, 수정, 삭제하는 예제입니다.
const mysql = require('mysql2'); // MySQL 연결 설정 const connection = mysql.createConnection({ host: 'localhost', user: 'root', database: 'mydatabase', password: 'password' }); // 연결 connection.connect(err => { if (err) { console.error('MySQL connection error:', err); return; } console.log('MySQL connected'); }); // 데이터 생성 const createUser = () => { const query = 'INSERT INTO users (name, age, email) VALUES (?, ?, ?)'; connection.query(query, ['John Doe', 30, 'john@example.com'], (err, results) => { if (err) throw err; console.log('User created:', results.insertId); }); }; // 데이터 조회 const getUsers = () => { const query = 'SELECT * FROM users'; connection.query(query, (err, results) => { if (err) throw err; console.log('Users:', results); }); }; // 데이터 수정 const updateUser = (userId) => { const query = 'UPDATE users SET age = ? WHERE id = ?'; connection.query(query, [31, userId], (err, results) => { if (err) throw err; console.log('User updated:', results.message); }); }; // 데이터 삭제 const deleteUser = (userId) => { const query = 'DELETE FROM users WHERE id = ?'; connection.query(query, [userId], (err, results) => { if (err) throw err; console.log('User deleted:', results.message); }); }; // 함수 실행 예제 createUser(); getUsers();
ORM 사용 (Using ORM)
ORM(Object-Relational Mapping)은 데이터베이스와 객체 지향 프로그래밍 간의 데이터를 변환해주는 도구입니다. Node.js에서는 Sequelize와 Mongoose가 대표적인 ORM 라이브러리입니다.
Sequelize 사용 (Using Sequelize)
Sequelize는 MySQL, PostgreSQL, SQLite 등 여러 SQL 데이터베이스를 지원하는 ORM 라이브러리입니다.
- Sequelize 설치: npm을 사용하여 Sequelize와 해당 데이터베이스 드라이버를 설치합니다.
npm install sequelize mysql2
- Sequelize 설정 및 모델 정의:
const { Sequelize, DataTypes } = require('sequelize'); const sequelize = new Sequelize('mysql://root:password@localhost:3306/mydatabase'); // 모델 정의 const User = sequelize.define('User', { name: { type: DataTypes.STRING, allowNull: false }, age: { type: DataTypes.INTEGER, allowNull: false }, email: { type: DataTypes.STRING, allowNull: false, unique: true } }); // 데이터베이스 동기화 및 데이터 조작 예제 const main = async () => { await sequelize.sync({ force: true }); console.log('Database synced'); // 데이터 생성 const user = await User.create({ name: 'John Doe', age: 30, email: 'john@example.com' }); console.log('User created:', user.toJSON()); // 데이터 조회 const users = await User.findAll(); console.log('Users:', users); // 데이터 수정 user.age = 31; await user.save(); console.log('User updated:', user.toJSON()); // 데이터 삭제 await user.destroy(); console.log('User deleted'); }; main().catch(err => console.error('Error:', err));
Mongoose 사용 (Using Mongoose)
Mongoose는 MongoDB를 위한 ORM 라이브러리로, MongoDB와의 상호작용을 단순화합니다. Mongoose의 사용 예제는 앞서 MongoDB 연동 섹션에서 다루었습니다.
데이터베이스 쿼리 작성 (Writing Database Queries)
데이터베이스 쿼리는 데이터베이스에서 데이터를 검색, 삽입, 수정, 삭제하는 데 사용됩니다. 각 데이터베이스와 ORM 라이브러리마다 쿼리 작성 방법이 다릅니다.
SQL 데이터베이스 쿼리 (SQL Database Queries)
SQL 데이터베이스에서는 SQL 언어를 사용하여 쿼리를 작성합니다. mysql2
라이브러리를 사용한 예제는 다음과 같습니다.
- 데이터 조회:
connection.query('SELECT * FROM users', (err, results) => { if (err) throw err; console.log('Users:', results); });
- 데이터 삽입:
const query = 'INSERT INTO users (name, age, email) VALUES (?, ?, ?)'; connection.query(query, ['Jane Doe', 28, 'jane@example.com'], (err, results) => { if (err) throw err; console.log('User created:', results.insertId); });
- 데이터 수정:
const query = 'UPDATE users SET age = ? WHERE id = ?'; connection.query(query, [29, userId ], (err, results) => { if (err) throw err; console.log('User updated:', results.message); });
- 데이터 삭제:
const query = 'DELETE FROM users WHERE id = ?'; connection.query(query, [userId], (err, results) => { if (err) throw err; console.log('User deleted:', results.message); });
NoSQL 데이터베이스 쿼리 (NoSQL Database Queries)
NoSQL 데이터베이스에서는 각 데이터베이스의 쿼리 언어를 사용합니다. Mongoose를 사용한 MongoDB 쿼리 예제는 다음과 같습니다.
- 데이터 조회:
User.find((err, users) => { if (err) throw err; console.log('Users:', users); });
- 데이터 삽입:
const user = new User({ name: 'Jane Doe', age: 28, email: 'jane@example.com' }); user.save((err) => { if (err) throw err; console.log('User created:', user); });
- 데이터 수정:
User.findByIdAndUpdate(userId, { age: 29 }, { new: true }, (err, user) => { if (err) throw err; console.log('User updated:', user); });
- 데이터 삭제:
User.findByIdAndDelete(userId, (err) => { if (err) throw err; console.log('User deleted'); });
이 문서에서는 Node.js와 다양한 데이터베이스의 연동, SQL과 NoSQL 데이터베이스의 이해, ORM 사용, 그리고 데이터베이스 쿼리 작성에 대해 소개하고 상세히 설명하였습니다. 이를 통해 Node.js 애플리케이션에서 데이터베이스를 효과적으로 관리할 수 있습니다.