node.js와 DB 사용
npm install mysql
모듈 설치mysql.createConnection(DATABASE-CONFIG);
커넥션커넥션 설정
host
,port
: DMBS 주소와 포트(기본 3306)user
,password
: DBMS 사용자 계정과 암호database
: 데이터베이스 이름multipleStatements
: 동시에 여러 SQL 실행. 보안에 주의connectTimeout
: DBMS 연결 타임 아웃 시간. 기본은 10,000 ms
1
2
3
4
5
6
7var dbConfig = {
host : 'localhost',
user : 'root',
password : '1234'
database : 'Moviest'
};
var connection = mysql.createConnection(dbConfig);커넥션 연결과 닫기
1
2
3
4
5
6
7
8connection.connect(function(err) {
if (err) {
console.error('error connecting: ' + err.stack);
return;
}
console.log('connected as id ' +v connection.threadId);
connection.end();
});커넥션 풀 사용하기
생성
1
mysql.createPool(Option)
풀의 옵션풀 옵션
waitForConnections
: 풀에 여유 커넥션이 없는 경우 대기 여부connectionLimit
: 최대 커넥션 개수. 기본 10개
1
2
3
4
5
6var pool = mysql.createPool({
host : 'localhost',
user : 'user',
password : '1234’,
connectionLimit : 50
});풀에서 커넥션 얻기
1
2
3pool.getConnection(function(err, connection{
// connected! (unless `err` is set)
});풀에 커넥션 반환
conn.release();
풀 닫기
pool.end();
커넥션 모듈 분리
DB 커넥션 모듈
1
2
3var mysql = require('mysql');
var dbPool = mysql.createPool(dbConfig);
module.exports = dbPool;모듈 사용
1
2var pool = require(‘./dbconnection’);
pool.getConnection(function(err, conn) {});
SQL 문 실행
1
2
3
4
5
6
7
8var sql = 'INSERT INTO movies ...';
connection.query(sql,function(err, results) {
if ( err ) {
console.error('INSERT Error', err);
} else {
console.log('results : ', results);
}
});1
2
3
4
5var sql = 'INSERT INTO movies (title, director, year) VALUES (?, ?, ?);';
// 인터스텔라, 크리스퍼 놀란, 2015가 순차적으로 들어간다
connection.query(sql, ['인터스텔라', '크리스토퍼 놀란', 2015],function(err, results){
// 에러와 결과 처리
});insert 문 실행
1
2
3
4
5
6
7
8
9
10
11var data = {
title : '메멘토',
director : '크리스토퍼 놀란',
year : 2000
};
var sql = 'INSERT INTO movies SET ?';
connection.query(sql, data, function(err, results) {
// 에러 처리
// 결과 사용
connection.release();
});- 실행 결과
- affectedRow : 영향을 받은 열의 갯수
- insertID : 새로 추가한 경우 Primary Key
- changedRow : 변경된 열의 수
- 실행 결과
select 문 실행
1
2
3
4
5
6
7
8
9
10
11
12var sql = 'SELECT * FROM movies';
conn.query(sql, function(err, results) {
if ( err ) {
console.error('Error', err);
return;
}
for (var i = 0 ; i < results.length ; i++) {
var movieInfo = results[i];
console.log('제목 : ' + movieInfo.title + ' 감독 : ' + movieInfo.director);
}
conn.release();
});movieInfo
에 하나의 레코드가 반환된다
SQL Injection 방지하기
mysql.escape()
을 사용하거나 PlaceHolder 사용하기 (?,?,?)
트랜잭션
conn.beginTransaction(function(err) { } );
conn.commit()
: 트랜잭션 내 변경 확정conn.rollback()
: 트랜잭션 내 변경 되돌리기
예제
1 | conn.beginTransaction(function(err) { |