본문 바로가기
NodeJS

nodejs와 mysql연결

by 개발자doc 2024. 6. 14.
목차
1. 모듈 설치
2. DB와 연결하기
3. 쿼리 실행하기

 

데이터 베이스에 저장된 데이터들을 사용자가 다루기 위해서는 사용하는 프로그램과 데이터 베이스가 연결이 되어있어야 한다. 웹 애플리케이션을 만들기 전에 데이터 베이스와 nodejs를 연결하는 방법을 알아보도록 하자.

1. 모듈 설치

nodejs에서 내부적으로 데이터베이스와의 연결을 지원하는 모듈이 없다. 그래서 mysql2라는 외부 모듈을 설치하여 연결을 할 것이다. 

npm i mysql2

mysql2라는 모듈을 설치하는데 왜 1이 아닌 2를 설치할까? 가장 큰 이유는 promise지원 때문이다. 추후 알아볼 sequelize라는 ORM에서 promise 방식을 사용하기 때문에 공식 npm에서 mysq2 사용을 권장한다.

2. DB와 연결하기

모듈을 설치했다면 DB연결을 진행하는데 필요한 것을 딱 두 가지다.

  • mysql 객체
  • 접속할 DB의 정보
const mysql = require('mysql2');

// 접속할 DB 정보
const DBInfo = {
    host:'localhost',
    port:'3306',
    user:'유저명',
    password:'패스워드',
    database:'연결할 데이터베이스'
}

// 커넥션 객체 생성
const DBConnect = mysql.createConnection(DBInfo);

nodejs에서 DB를 연결하려면 연결 객체를 만들어야하는데 createConnection메서드에 접속정보를 인자값으로 보내줬을 때 정보가 정확하다면 객체가 생성이 된다.  

3. 쿼리 실행하기

연결이 되었다면 쿼리문를 실행하여 DB에 저장되어 있는 데이터를 조회하거나 추가, 삭제 등 관리를 할 수 있다. 

// 쿼리에 동적으로 적용할 데이터가 없을 때
const query = "select * from table명";

DBConnect.query(query,(err,data)=>{
	console.log(data);
})

// 쿼리에 동적으로 적용할 데이터가 있을 때
const query = "select * from table명 where 컬럼1 = ? and 컬럼2 = ?";

DBConnect.query(query,[데이터1,데이터2],(err,data)=>{
	console.log(data);
})

다만 늘 고정적인 쿼리를 사용하는 것이 아니기 때문에 데이터도 동적으로 쿼리에 적용할 수 있어야한다. 위와 같이 '?'를 통해 어떠한 값이 동적으로 적용될 수 있음을 명시해주고 연결객체의 query메서드를 통해 쿼리가 실행될 때 데이터를 넘겨주면 된다. ?를 통해 데이터를 동적으로 처리하는 방식을 preparedStatement라고 한다.

const query = `select * from 테이블명 where 컬럼1=${값}`

위와 같이 문자열로 쿼리를 만들 수 있지만 어떤 공격자가 쿼리 가져다 그대로 실행할 경우 데이터가 유출될 수 있지만 preparedStatement방식은 '?'로인해 쿼리가 실행될 때 에러를 발생시킨다. 따라서 보안을 위해 쿼리 문자열에 검색이나 추가에 대한 데터를 포함시키는 것은 권장하지 않는다.

'NodeJS' 카테고리의 다른 글

cors  (0) 2024.06.21
form태그로 REST FUL 가능할까?  (0) 2024.06.15
ejs  (0) 2024.06.10
미들웨어  (0) 2024.06.09
REST방식  (0) 2024.06.08