본문 바로가기

백엔드

[Node.js] 3. 서버와 MySQL의 연동

개요

  저번 문서에서는 데이터를 서버 내에 하드 코딩하여 작업이 된다는 정도만 확인하였지만 실제로는 데이터들은 DB에서 관리된다. 이번 문서에서는 저번 문서에서 구축한 서버에 MySQL을 연결하여 요청받은 데이터를 MySQL DB에서 조회, 수정, 삭제, 추가하는 예제를 수행한다. 문서를 시작하기에 앞서 MySQL은 설치되어 있다고 가정한다. 또한 기본적인 MySQL 쿼리 방법을 기본으로 가정한다.

 

과정

  1. MySQL에 데이터베이스 및 테이블 생성
  2. 기본 환경 세팅
  3. 조회/삽입/수정/삭제 구

 

1. MySQL에 데이터베이스 및 테이블 생성

MySQL 쉘을 열어 'test' DB를 생성한다. 이후 토큰값과 위도, 경도 값을 컬럼으로 갖는 테이블을 생성한다.

CREATE DATABASE test;

USE test;

CREATE TABLE location(
    token VARCHAR(255) NOT NULL,
    latitude double DEFAULT 0.0 NOT NULL,
    longitude double DEFAULT 0.0 NOT NULL.
    PRIMARY KEY(token));

 

2. 기본 환경 세팅

 먼저 MySQL을 사용하기 위해 npm install을 통해 프로젝트 폴더에 설치한다.

npm install mysql

 

 그리고 프로젝트 폴더 내에 config 폴더를 생성하고 해당 폴더 안에 database.js 파일을 생성한다. 이는 DB에 대한 정보를 갖고 있는 모듈로 사용할 예정이다. 만약 github에 올릴 경우 이 파일을 따로 배제하여 올린다. (비밀번호 유출)

 

database.js

module.exports = {
    host: 'localhost',
    user: 'root',
    password: '비밀번호',
    database: 'test'
};

 

그리고 실제 서버에서 DB에 연결하기 위해 다음과 같은 코드를 작성한다.

server.js

const mysql = require("mysql");
const dbConfig = require("./config/database.js");
const connection = mysql.createConnection(dbConfig);

설치한 mysql과 기본 DB 구성 정보 모듈을 가져오고 해당 모듈을 통해 연결 객체를 생성한다.

 

 

3. 조회/삽입/삭제/수정

 데이터를 삽입하는 방법.

server.post("/location",(req,res)=>{
    var sql = 'INSERT INTO location VALUES (?,?,?)';
    var params = [req.body.token,req.body.latitude, req.body.longitude];
    
    connection.query(sql, params, (error, rows)=>{
        if(error) throw error;
        console.log('Location info is: ', rows);
        res.send(rows);
    });
})

SQL문의 ?는 params로 대치된다. 요청 body에 삽입하고 싶은 내용을 작성하고 post 메서드로 /location을 요청한하면 된다.

 

 

데이터를 조회하는 방법.

server.get("/location",(req,res)=>{
    connection.query('SELECT * FROM location', (error, rows)=>{
        if(error) throw error;
        console.log('Location info is: ', rows);
        res.send(rows);
    });
});


server.get("/location/:token",(req,res)=>{
    connection.query('SELECT * FROM location WHERE token=\''+req.params.token+'\'', (error, rows)=>{
        if(error) throw error;
        console.log('Location info is: ', rows);
        res.send(rows)
    });
});

MySQL에 대한 기본 개념이 있다면 코드만 봐도 대충 어떤 일을 하는지 알 것이다.

 

 

데이터를 수정하는 방법.

server.put("/location/:token",(req,res)=>{
    var sql = 'UPDATE location SET latitude='+req.body.latitude+', longitude='+req.body.longitude+' WHERE token=\''+req.params.token+"\'";
    connection.query(sql, (error, rows)=>{
        if(error) throw error;
        console.log('Location info is: ', rows);
        res.send(rows);
    });
})

매개변수로 전달받은 토큰에 해당하는 로우를 요청 body에 넘어돈 데이터로 바꾸어준다.

 

 

데이터를 삭제하는 방법.

server.delete("/location/:token",(req,res)=>{
    var sql = 'DELETE FROM location WHERE token=\''+req.params.token+'\'';
    connection.query(sql, (error, rows)=>{
        if(error) throw error;
        console.log('Location info is: ', rows);
        res.send(rows);
    });
})

매개변수로 전달받은 토큰에 해당하는 로우를 삭제한다.

 

위는 저번 시간에 설치한 postman으로 간단하게 테스트 가능하다.

 


마무리

과거 프로젝트에서 Apache, PHP, MySQL을 이용하여 서버를 구축한 경험이 있었고 서버를 처음 구축해서 그런지 꽤나 복잡하다고 생각했다. 그 복잡성의 큰 부분을 차지한 것은 PHP의 문법이었다. 하지만 이번에 학습하는 Node.js의 Express 프레임 워크의 경우 훨씬 간결하고 이 코드가 어떤 작동을 의미하는지 알아보기가 명확한 것 같다. 다음 프로젝트부터는 Node.js를 적극적으로 활용할 계획이다.