본문 바로가기
Back-End/Express

[Node.js] Express + MySQL로 REST API 만들기 (2)

by j-y 2021. 4. 2.
반응형

이번 포스팅에서는 DB 서버와 Express 서버 간 연결하는 코드를 작성하고, 모듈화하여 사용하는 것을 작성해보겠습니다.

 

준비물


  1. DB 주소
  2. DB 포트
  3. DB 접속 계정 아이디/패스워드
  4. 연결할 DB(스키마)명
  5. DB GUI 툴(MySQL Workbench, Sequel Pro 등)

 

DB 드라이버 설치


express와 mysql을 연결하기 위해선 mysql 드라이버가 필요합니다. npm 에서 mysql 이라는 이름의 패키지를 설치하시면 됩니다.

> npm i mysql

 

DB 연결


app.js 파일에 아래 코드를 추가하여 DB와 연결하는 객체를 만들어 보도록 하겠습니다. mysql 내의 createConnection 메서드를 이용해 DB 정보를 입력하면 됩니다!

// app.js에 추가

const mysql = require('mysql')

const con = mysql.createConnection({
	host: '연결할 호스트',
	port: '연결할 포트',
	user: 'DB 계정',
	password: 'DB 계정 비밀번호',
	database: '연결할 DB'
});

con.connect(err => {
	if (err) console.log("MySQL 연결 실패 : ", err);
	console.log("MySQL Connected!!!");
})

 

코드를 작성한 뒤 서버를 실행시켜 정상적으로 연결되었는지 확인해보겠습니다.

(app.js 전체 코드)

// app.js

const express = require('express')
const mysql = require('mysql')
const app = express()
const port = 3000

const con = mysql.createConnection({
	host: '연결할 호스트',
	port: '연결할 포트',
	user: 'DB 계정',
	password: 'DB 계정 비밀번호',
	database: '연결할 DB'
});

con.connect(err => {
	if (err) console.log("MySQL 연결 실패 : ", err);
	console.log("MySQL Connected!!!");
})


app.get('/', (req, res) => res.send('Hello JY World!'))

app.listen(port, () => console.log('Server Running. . .'))

 

테이블 생성


DB 접속을 성공했으니 간단하게 쿼리문을 하나 날려보도록 하겠습니다. 아직 DB에 접속만 된 것이고, 데이터를 저장할 테이블을 만들지 않았으니 간단하게 글 제목과 글 내용을 컬럼으로 갖는 board 테이블을 생성해보도록 하겠습니다.

쿼리문을 전송할 때는 mysql 커넥션 객체의 query 메서드를 사용합니다. app.js 파일에서 아까 connect 코드에 이어서 아래 코드를 작성해주세요!

// app.js에 추가

sql = "create table board(\
    no int auto_increment primary key,\
    title varchar(30) not null,\
    content varchar(100) not null\
    )"

con.query(sql, (err, result) => {
    if (err) console.log(err);
    else console.log(result);
})

 

app.js 를 실행시켜보도록 하겠습니다.

 

정상적으로 테이블이 생성되었는지 GUI 툴이나 CLI로 접속하여 확인해보도록 하겠습니다. 저는 Sequel Pro로 접속하여 확인해보겠습니다.

 

mysql 연결 객체 모듈화


DB 연결 방법과 쿼리 전송 방법을 살펴봤으니 이제 mysql 연결 객체를 모듈화 해보겠습니다. 모듈화해서 사용하지 않으면 express 라우트에서 DB와 어떤 데이터를 주고받을 때 마다 mysql 접속 코드를 작성해야 할 것입니다..

먼저 config 라는 디렉터리를 만들고, config 디렉터리 안에 mysql.js 파일을 생성하겠습니다.

 

app.js 에서는 더이상 DB 연결을 직접하지 않을 것이므로 위에서 작성한 코드를 모두 삭제하고 아래 코드를 mysql.js 파일에 작성해주세요!

const mysql = require('mysql'); // #1

const mysqlConnection = {
    init: function() {          // #2
        return mysql.createConnection({
						host: '연결할 호스트',
						port: '연결할 포트',
						user: 'DB 계정',
						password: 'DB 계정 비밀번호',
						database: '연결할 DB'
        });
    },
    open: function(con) {       // #3
        con.connect(err => {
            if(err) {
                console.log("MySQL 연결 실패 : ", err);
            } else {
                console.log("MySQL Connected!!!");
            }
        });
    },
    close: function(con) {      // #4
        con.end(err => {
            if(err) {
                console.log("MySQL 종료 실패 : ", err);
            } else {
                console.log("MySQL Terminated...");
            }
        })
    }
}

module.exports = mysqlConnection; // #5

#1 : mysql 드라이버를 불러옵니다.

#2 : DB와 연결하는 객체를 생성합니다.

#3: 생성된 커넥션 객체를 DB와 연결합니다.

#4 : DB와 연결을 종료합니다.

#5 : 생성한 mysqlConnection 객체를 모듈화하여 외부 파일에서 불러와 사용할 수 있도록 export 합니다.

 

dotenv 설치


DB 연결 정보를 직접 하드 코딩하는 것은 보안상 매우 안좋은 방법이므로 연결 정보를 따로 환경 변수로 파일을 만들어 관리하도록 하겠습니다. 여러가지 방법이 있는데 그 중 dotenv 라는 라이브러리를 설치하여 사용하는 방식으로 구성해보겠습니다.

> npm i dotenv

 

환경 변수 설정


dotenv는 프로젝트의 최상위 경로에 있는 .env 파일에서 변수를 가져와 사용할 수 있도록 도와줍니다. 프로젝트의 최상위 위치에 .env 파일을 생성해주세요!

 

.env 파일에 DB 연결 정보를 작성하겠습니다.

host=연결할 호스트
port=연결할 포트
user=DB 계정
password=DB 계정 비밀번호
database=연결할 DB

.env 파일에서는 각 변수의 값이 자동으로 문자열 형태로 저장되므로 따옴표나 쌍따옴표로 값을 묶으시면 안됩니다!

 

환경 변수 사용


이제 환경 변수를 설정했으니 사용을 해보도록 하겠습니다. .env 파일에 등록된 환경 변수는 process.env.변수명으로 접근할 수 있습니다. 아까 작성한 mysql.js 파일을 열어 mysql.createConnection 부분의 연결 정보를 수정하겠습니다.

const mysqlConnection = {
    init: function() {
        return mysql.createConnection({
            host: process.env.host,
            port: process.env.port,
            user: process.env.user,
            password: process.env.password,
            database: process.env.database 
        });
    },

 

DB 연결 확인


이제 mysql 연결을 모듈화하는 것이 완료되었으니 실제로 외부 파일에서 잘 불러와서 접속이 되는지 확인해보겠습니다. app.js 파일을 열고 아래 코드를 작성해주세요!

// app.js에 추가

const dotenv = require('dotenv').config()     // #1
const mysqlConObj = require('./config/mysql') // #2
const db = mysqlConObj.init()

mysqlConObj.open(db)

#1 : dotenv를 사용하기 위해서 dotenv 라이브러리를 불러온 뒤 .config() 메소드를 호출해줘야 합니다.

#2 : 위에서 작성한 mysql 파일을 가져와 mysqlConnection 객체를 사용합니다.

 

app.js 를 실행시켜 정상적으로 DB 서버와 연결된 것을 확인합니다.

정상적으로 연결이 잘 되었습니다!

 

// app.js

const express = require('express')
const mysql = require('mysql')
const app = express()
const port = 3000
const dotenv = require('dotenv').config()
const mysqlConObj = require('./config/mysql')
const db = mysqlConObj.init()

mysqlConObj.open(db)


app.get('/', (req, res) => res.send('Hello JY World!'))

app.listen(port, () => console.log('Server Running. . .'))

 

다음 포스팅에서는 express를 이용해 라우트를 생성하고, 각 라우트에 GET, POST, PUT, DELETE 메서드를 통해 값을 입력받고 반환해주는 controller와 model을 만들어 보도록 하겠습니다.

반응형

'Back-End > Express' 카테고리의 다른 글

[Node.js] Express + MySQL로 REST API 만들기 (1)  (0) 2021.04.01

댓글