본문 바로가기

IoT Server 설계/Node.js

node.js + db 연동 (POSTman 확인) (1)

지금까지 node.js 포스팅을 하면서 우리는 node.js의 기본 개념과 셋팅방법 그리고 RESTful API의 설계까지 진행해봤다. 하지만 지금까지 진행한 것은 단순히 node.js의 기본 개념을 이해하기 위해 node.js 의 비동기식 방식과 모듈의 이해정도로 진행했었다. 이번 포스팅에는 node.js의 응용편으로 node.js + db 연동 방법에 대해서 포스팅 하도록 하겠다. 포스팅은 (1), (2) 로 구성되며 본 포스팅에서는 node.js를 사용해서 마리아 db의 데이터베이스와 테이블 생성하는 것에 대해 포스팅 하고 다음 포스팅에서는 생성한 데이터베이스와 node.js의 연결과 post 확인까지 진행하겠다.


본 (1) 포스팅은 node.js를 사용해 db 연결, db 생성, 테이블 생성에 초점이 맞춰져있다!!




1. 개발 컨셉


개발 컨셉과 사용되는 프로그램은 아래와 같다. 개발전 웹 브라우저에서 간단하게 POST 할 수 있는 프로그램인 POSTman과 데이터베이스의 저장된 데이터 확인을 쉽게 하기 위한 HeidiSQL 프로그램 설치를 하기 바란다. 


포스트맨 다운로드 링크: https://www.getpostman.com/apps

HeidiSQL 다운로드 링크: https://www.heidisql.com/download.php



개발 컨셉의 경우 포스트맨 프로그램을 통해 key-value 형태로 POST를 날리면 본 포스팅에서 설계할 node.js 프로그램에서 db 접속을 하게 되고 해당 key-value 에 맞게 마리아DB에 데이터 저장을 하게 된다. 저장된 데이터의 확인은 해당 서버에서 마리아DB 커맨드로 확인 가능하지만 편의를 위해 HeidiSQL로 마리아DB에 접속하여 저장된 데이터의 확인이 가능하다. 



2. DB 설계


DB 설계의 경우 외부에서 접속이 가능한 유저를 생성 후 HeidiSQL 연결을 통해 직관적인 UI로 DB 생성이 가능하지만, 본 포스팅에서는 DB 연동을 위해 하는 작업인 만큼 node.js 프로그램을 이용하여 DB 설계를 진행하도록 하겠다. 만약 node.js를 이용한 DB 설계가 프로그램이 궁금하지 않다면 기존 포스팅 'HeidiSQL 활용을 위한 SQL 유저생성, 권한설정 및 DB 외부접속' 포팅을 참고하여 데이터베이스 생성 후 다음 단계로 진행을 해도 무방하다.


참고: https://neosla.tistory.com/16?category=805051


DB 연동을 위해서 node.js 모듈중 하나인 mysql 모듈을 설치해줘야 한다.


# npm install mysql

# vim DBCreate.js


//////////////////////////////////////////////////////////


var mysql = require('mysql');
var db = 'ns_sensor';

var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : 'db password'
});

var table = ('CREATE TABLE IF NOT EXISTS user (id INT(100) NOT NULL AUTO_INCREMENT, name TINYTEXT, PRIMARY KEY(id))');


connection.query('CREATE DATABASE IF NOT EXISTS ??', db, function(err, results) {
  if (err) {
    console.log('error in creating database', err);
    return;
  }

  console.log('created a new database');


  connection.changeUser({
    database : db
  }, function(err) {
    if (err) {
      console.log('error in changing database', err);
      return;
    }


    connection.query(table, function(err) {
      if (err) {
        console.log('error in creating tables', err);
        return;
      }

      console.log('created a new table');
    });
  });
});

module.exports = connection;


//////////////////////////////////////////////////////////


var mysql = require('mysql');
var db = 'ns_sensor';

var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : 'db password'
});


앞서 설치한 mysql 모듈을 로드하고 db는 앞에서 미리 생성한 ns_sensor를 활용한다는 부분이다. 코드 실행시 ns_sensor 데이터베이스에 테이블을 생성하게 된다. 또한 mysql.createConnect() 함수의 경우 host, user, password 설정을 통해서 db에 접속을 하게되며, 현재 DB의 경우 같은 서버에 설치를 하였기 때문에 localhost 라고 했지만, DB 서버가 물리적으로 다른 서버에 존재한다면 해당 DB서버의 IP를 적어주면 된다.


var table = ('CREATE TABLE IF NOT EXISTS user (id INT(100) NOT NULL AUTO_INCREMENT, name TINYTEXT, PRIMARY KEY(id))');


해당 데이터베이스에 테이블을 생성해주는 코드이며, 만약 생성하려는 테이블 user가 존재하지 않는다면 user 테이블을 생성하며 테이블 속성으로 id와 name 속성을 생성해준다. id는 null 값을 허용하지 않으며 name이 프라이머리키로 생성이 되게끔 설정하였다.


connection.query(

   connection.changeUser(

      connection.query(

      )

   )

)


전체의 구조를 보자면 처음 connection.query() 는 테이블을 생성하기전에 테이블을 생성할 데이터 베이스를 생성하기 위한 쿼리이다. 두번째 connection.changeUser() 는 해당 데이터베이스가 정상적으로 생성이 되었다면 생성된 데이터베에서 테이블을 생성하기 위해 생성된 데이터베이스로 진입한다고 보면된다. 마지막으로 connection.query()는 해당 데이터베이스에서 테이블을 생성하기 위한 쿼리문이다.


module.exports = connection;


최종 모듈인인 connection 모듈 자체를 return 하라는 뜻으로 결국 connection이 최종적으로 return 된다.


# node DBCreate.js






해당 프로그램을 실행했을 경우와 생성된 데이터베이스 및 테이블을 확인한 결과이다. 코드에서 설정한 ns_sensor라는 데이터베이스와 user 라는 테이블이 생성된것을 확할 수 있다. 아직 데이터를 저장하지는 않았기 때문에 Empty set 으로 뜨게 된다.





이번 포스팅에서는 node.js를 사용해서 데이터베이스 연동, 생성, 테이블 생성에 대해서 포팅 하였다. 다음 포스팅에서는 이번 포스팅에서 생성한 데이터베이스를 활용하여 포스트맨에서 데이터를 날린 후 해당 데이터가 데이터베이스가 저장이 되도록 node.js 프로그래밍을 진행하도록 하겠다.