Node.js 를 배워보자/5. 데이터베이스 연동

MySQL과 Node.js 연동 (MySQL Node.js 드라이버)

_Blue_Sky_ 2024. 10. 1. 07:57
728x90
728x90

 


MySQL과 Node.js 연동: 심층적인 이해와 실제 구현

Node.js는 비동기 이벤트 기반의 JavaScript 런타임 환경으로, 실시간 웹 애플리케이션 개발에 널리 사용됩니다. MySQL은 관계형 데이터베이스 관리 시스템으로, 웹 애플리케이션의 데이터를 저장하고 관리하는 데 필수적인 역할을 합니다. Node.js와 MySQL을 효과적으로 연동하여 데이터베이스 작업을 수행하는 방법에 대해 자세히 알아보겠습니다.

1. 왜 Node.js와 MySQL을 연동해야 할까요?

  • 비동기 처리: Node.js와 MySQL 모두 비동기 처리를 지원하여, 여러 요청을 동시에 처리할 수 있습니다. 이는 웹 애플리케이션의 성능을 향상시키는 데 크게 기여합니다.
  • JavaScript 생태계: Node.js와 MySQL 모두 JavaScript를 기반으로 하므로, 개발자는 하나의 언어로 서버 사이드 로직과 데이터베이스 작업을 모두 처리할 수 있습니다.
  • 다양한 오픈 소스 라이브러리: Node.js와 MySQL을 연동하기 위한 다양한 오픈 소스 라이브러리가 제공되어, 개발 생산성을 높일 수 있습니다.

2. MySQL Node.js 드라이버 설치

Node.js에서 MySQL에 접속하기 위해서는 드라이버를 설치해야 합니다. 가장 많이 사용되는 드라이버는 mysql2입니다. 터미널에서 다음 명령어를 실행하여 mysql2를 설치합니다.

Bash
npm install mysql2
 
728x90

3. MySQL 연결 설정

mysql2를 설치한 후, Node.js 코드에서 MySQL에 연결하기 위한 설정을 수행합니다.

const mysql = require('mysql2');

const connection = mysql.createConnection({
  host: 'your_host',
  user: 'your_user',
  password: 'your_password',
  database: 'your_database'
});

connection.connect(err => {
  if (err) throw err;
  console.log('MySQL 연결 성공');
});
 

위 코드에서 your_host, your_user, your_password, your_database 부분은 실제 MySQL 서버의 정보로 변경해야 합니다.

4. SQL 쿼리 실행

MySQL에 연결된 후, connection.query() 메소드를 사용하여 SQL 쿼리를 실행할 수 있습니다.

connection.query('SELECT * FROM users', (err, results) => {
  if (err) throw err;
  console.log(results);
});
 

위 코드는 users 테이블의 모든 데이터를 조회하는 예시입니다.

5. 비동기 처리

Node.js의 비동기 특성을 활용하여, 여러 개의 SQL 쿼리를 동시에 실행하거나, 쿼리 결과를 기다리지 않고 다른 작업을 수행할 수 있습니다.

connection.query('INSERT INTO users (name, email) VALUES (?, ?)', ['John Doe', 'johndoe@example.com'], (err, result) => {
  if (err) throw err;
  console.log('사용자 추가 성공');
});
 

6. Promise 기반 API

mysql2는 Promise 기반 API를 제공하여, async/await 키워드를 사용하여 더욱 간결하고 직관적인 코드를 작성할 수 있습니다.

async function getUsers() {
  const [rows] = await connection.promise().query('SELECT * FROM users');
  return rows;
}
 

7. 연결 종료

더 이상 MySQL에 연결할 필요가 없을 때는 connection.end() 메소드를 호출하여 연결을 종료합니다.

connection.end();
 

8. 추가적인 기능

  • Prepared Statements: SQL 인젝션 공격을 방지하기 위해 Prepared Statements를 사용합니다.
  • Transactions: 여러 개의 SQL 쿼리를 하나의 트랜잭션으로 묶어서 처리합니다.
  • Pooling: 연결 풀을 사용하여 연결 생성 및 해제 오버헤드를 줄입니다.
  • ORM (Object-Relational Mapper): Sequelize와 같은 ORM을 사용하여 객체 지향적인 방식으로 데이터베이스를 조작할 수 있습니다.

9. 주의 사항

  • 비동기 처리: Node.js의 비동기 특성을 이해하고, 콜백 함수나 Promise를 올바르게 사용해야 합니다.
  • 에러 처리: SQL 쿼리 실행 중에 발생할 수 있는 에러를 항상 처리해야 합니다.
  • 보안: SQL 인젝션 공격을 방지하기 위해 Prepared Statements를 사용하고, 비밀번호를 안전하게 관리해야 합니다.
  • 성능: 대량의 데이터를 처리할 때는 인덱스를 적절히 활용하고, 쿼리 최적화를 수행해야 합니다.

10. 결론

Node.js와 MySQL을 연동하면 강력하고 효율적인 웹 애플리케이션을 개발할 수 있습니다. 이 글을 통해 Node.js와 MySQL 연동에 대한 기본적인 이해를 얻었기를 바랍니다.

728x90
728x90