본문 영역

Programing/NodeJS2016. 3. 21. 23:27

NodeJS에서 Mysql 연동하기



(이 포스팅은 mysql의 기본적인 설치, 실행은 사용할 수 있다는 것을 가정하에 작성되었습니다.)


서버의 단짝친구는 DB인 만큼 서버에서 DB연동은 중요하다.


NodeJS 는 JSON의 특화된 만큼 MongoDB와 많이 연동된다.


하지만 RDB와의 연동도 중요하기 때문에 Mysql과의 연동에 대해 포스팅하려 한다.

(MongoDB와의 연동은 다음포스팅에!)


nodejs에서 mysql연동은 간단하다.


일단 첫번째! 서버에 mysql 모듈을 설치해준다.


npm install mysql *


여기서 말그대로 모듈을 설치한 것이지 mysql을 설치한 것은 아니다.

따라서 당연히 mysql은 따로 설치를 해야한다.


java로 얘기하자면 mysql driver를 library에 추가한 것과 동일하다.


(package.json에 mysql모듈을 추가하였다.)


저번에 이어 Express Framework을 적용한 프로젝트에 mysql 모듈을 추가하여 설치하였다.

물론 단독으로 npm install mysql로 설치해도 무방하다.


그 후 연동을 하기 테이블이 필요하므로

nodemysql이라는 테이블을 하나 생성하였다.


1
2
3
4
create table nodemysql(
id int auto_increment primary key,
study varchar(20))
DEFAULT CHARACTER SET=utf8;
cs

(사용한 테이블 셋팅)


 study라는 컬럼에 내용을 넣어두고 nodejs에 연동을 하여 웹페이지에 띄워주면 포스팅의 목적은 달성된 것이다.

따라서 study라는 컬럼에 몇가지 값을 insert 해주었다.


1
2
3
insert into nodemysql(study) values('이글이 보이면 성공!');
insert into nodemysql(study) values('이글이 보이면 성공2!');
insert into nodemysql(study) values('이글이 보이면 성공3!');

cs(

(테이블에 3개의 데이터를 넣음)


이제 연동을 시작해보자!


mysql과 connection을 하기위한 pool을 생성해야한다.

물론 단독으로 바로 커넥션을 만들 수는 있다.


하지만 서버의 효율과 db접속의 분산을 위해 풀을 생성하여 하나씩 꺼내쓰는게 좋다.


1
2
3
4
5
6
var pool = mysql.createPool({
    connectionLimit: 10,
    user: 'root',
    password: '',
    database: 'c9'
});
cs

(Pool 생성 코드)

따로 주석을 달지 않아도 어떤 내용인지 파악이 가능할 것 이다.

10개의 커넥션 제한을 두고 어떤 데이터베이스에 접속할 것 인지 pool을 설정한다.


이렇게 생성을 해두면 pool에서 connection객체를 하나씩 따로 꺼내서 쓸 수 있다.


얼마나 간단한가..

JDBC를 사용할때 xml에서 각 종 설정값을 넣어두고 JNDI를 이용하여 서버와 연동을 했던 것을 생각해보면 정말 간단 그 자체..

(사실 기억이 안난다..spring이라던가.. mybatis라던가..) 


그리고 꺼내 쓰면된다.

1
2
3
4
5
6
pool.getConnection(function(err,con){
    //callback값인 con을 이용하여 쿼리문 때리기
    con.query('select * from nodemysql',function(err,result){
        //callback값인 result를 이용하면 끝!
    });
});
cs

(주석에 설명달았긔)


위의 코드에서 result 값이 select all한 결과로 저장된다.

따라서 result값을 ejs쪽으로 render해주면 끗!


(index.js에 pool과 select를 작성하였다.)


저번 포스팅에서 작성하였던것 처럼 express framework을 이용하여 

index.js에서 get 방식으로('/')로 접속을 하면 index.ejs로 data라는 객체에

result값을 JSON형식으로 보낸다.


여기서 중요!!!

release(); 메서드를 사용하지않으면 사용한 pool객체를 반환하지 않으므로 꼭 써주도록 하자!

반환하지 않는다면...limit값을 10개로 정해놨기 때문에 내서버에는 10명밖에 DB값을 가져오지 못할 것이다..

(혹시나 새로고침을 연타한다면?!?!)



(index.ejs의 코드부분)


ejs에 data라는 json 배열 객체가 전달되었기 때문에 for문으로 꺼내쓰면 끗!



(연동 성공!)



여기까지 쉽게 성공하였다면

다른 CRUD 작업 역시 이와 마찬가지로 어렵지 않게 사용이 가능할 것이다.



마치며..

사실 nodejs를 공부한지 한달정도 밖에 안됬으므로 효율적인 코딩이라고는 말할 수 없지만

최대한 열심히 포스팅작성을 해보았다.

혹시 이상한점이나 고쳐야할 부분은 댓글로 달아주시면 꼭 참고하겠습니다!


다음 포스팅 예고

mongodb 소개 및 nodejs와의 연동!



이글이 도움이 되었다면 공감버튼 꾸욱!

(비회원도 가능합니다!)

댓글 영역

  • 프로필 사진
    입문생
    2017.04.07 18:26

    nodejs 프로젝트에 ExpressFramwork 템플릿 만들기 포스팅 보고 왔는데요 routes폴더가 일종의 controller라고 보면 된다고 하셨는데 이 포스팅을 보니 DB에 값을 주고 받는 것은 model이 되어야 하는걸로 알고 있는데 C와M을 분리하지 않은건가요? 아님 원래 nodejs는 이렇게 쓰면 되는건가요?

person
vpn_key
comment

페이지 네비게이션