본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


Node.js

NodeJs Mysql 연동(Nodejs Maria 연동, 노드js 마리아, 노드js mysql)

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2019. 8. 14.

 

 

1. 설치한 모듈

npm install mysql

 

2. 1차 소스코드

const mysql = require('mysql');  //My-sql을 사용하였다.
const connection = mysql.createConnection({  //커넥션 생성
    host: 'ip주소',
    user: '아이디',
    database: '데이터베이스 명칭',
    password : '비밀번호'
  });
   
connection.query("select * from test", function (error, results, fields) {  //조회
    if (error) {
        console.log(error);
    } else {
        console.log(results);  //결과 출력(간혹 커넥션이 끊어졌다는 오류가 나올때가 있다.)
    }
});

connection.end();  //연결 종료

위 방식데로 코딩하면 문제없어보이나 Node.js에서는 이러한 행위의 대부분을 이벤트 루프에 전달하여 비동기 방식으로 처리한다. (무슨말 입니까??)

위 소스코드처럼 데이터베이스에 접속해서 정보를 가져오고 있는데 다 가져오지도 않았는데 맨 아래의 connection.end() 함수가 호출되서 연결을 끊어버리는 경우가 있다.

또는 서버에서 운용중이라면 서버가 데이터베이스에서 조회작업이 끝나지도 않았는데 Response 해버리는 현상을 만날 수 있다.

 

이를 해결하려면 async, await라는 방법을 사용하거나 bluebird라는 모듈을  설치해서 사용하기도 하는데, 가장 쉬운방법으로는 Promise를 활용하는 것 이다. (자바스크립트의 Promise와 100% 동일하다.)

 

위 소스코드를 고쳐보면,

const mysql = require('mysql');  //My-sql을 사용하였다.
const connection = mysql.createConnection({  //커넥션 생성
    host: 'ip주소',
    user: '아이디',
    database: '데이터베이스 명칭',
    password : '비밀번호'
  });

new Promise( (res,rej)=>{
    connection.query("select * from tb_user", function (error, results, fields) {  //조회
        if (error) {
            console.log(error);
            rej(error);  //실패시 catch행동을 한다.
        } else {
            console.log(results);
            res(results);  //성공시 then 이후의 행동을 한다.
        }
    });
}).then( res =>{  //성공하면 들어오는 구간
    connection.end();  
}).catch( err =>{  //실패하면 들어오는 구간
    if(connection != null){
        connection.end();  
    }
});

위 내용처럼 고쳐주면 성질급한 Node.js에게 순차적으로 일을 하도록 지시 할 수 있다.

 

만약 끊임없이 데이터를 등록, 수정, 삭제하는 서버 또는 앱이라면 그냥 Promise같은거 사용하지 않는 편이 속도에서 더 효율적이다.

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글