fs모듈을 통해서 파일을 읽어와 로그인과 회원가입을 기능을 구현해보았다면, 이번에는 DB를 통해서 로그인과 회원가입 기능을 구현해보려고 한다. 그러기 위해서 DB를 먼저 구축해주었다.
use login_lecture;
CREATE TABLE users (
id varchar(30) NOT NULL,
password varchar(30) NOT NULL,
name varchar(30) NOT NULL,
in_date datetime default current_timestamp,
PRIMARY KEY (id)
);
INSERT INTO users(id, password, name)
values("minjae","1234","민재"),
("rkdalswo1021","12345","강민재"),
("mj991021","123456","강민재2"),
("kangminjae","1021","강민재3");
파일에 담겨져있던 내용을 DB에 옮겨주었고, 파일은 과감히 삭제! 하였다. src
폴더에 config
폴더를 추가하여 db.js
파일을 생성해준다. DB를연동해주기 위해서이다.
const mysql = require("mysql");
const db = mysql.createConnection({
host: "localhost",
user: "root",
password: "비밀번호",
database: "login_lecture",
});
db.connect();
modeul.exports = db;
기능적인 부분은 구현을 해놓았으니, DB와 연결해주는 작업만 해주면 된다. fs모듈에는 promise
가 내장되어있으나, mysql의 경우에는 그러지 않기 때문에 직접 promise를 만들어 주었다. 그리고 로그인 할때와 회원가입을 할 경우, 로그인은 DB에 있는 데이터를 받아와서 대조하고, 회원가입은 DB에 데이터를 넣기 때문에 각기 다른 쿼리를 통해서 구현을 해준다.
//in UserStorage.js
const db = require("../config/db");
class UserStorage{
static getUsersInfo(id){
return new Promise((resolve, reject) =>{
const query = "SELECT * FROM users WHERE id=?;";
db.query(query,[id], (error, data) =>{
if (error) reject(error);
resolve(data[0]);
});
});
}
static async save(userInfo){
return new Promise((resolve, reject) =>{
const query = "INSERT INTO users(id, password, name) VALUES(?, ?, ?);";
db.query(query,
[userInfo.id, userInfo.password, userInfo.name],
(error) =>{
if (error) reject(error);
resolve({success: true});
});
});
}
}
module.exports = UserStorage;
환경 변수는 OS 운영시스템에 등록되는 변수이므로, OS 전반에 걸쳐 모두 적용된다는 의미로 환경 변수라고 한다. 환경 변수를 관리해주는 이유는 팀 단위로 개발을 진행하게 되는데, 경우에 따라서 개발환경이 다를 수 있으며 각 운영체제마다 환경 변수를 등록해주는 방법이 다르다. 그래서 node.js에서 제한한 방법이 존재하는데, 그것이 dotenv
모듈을 사용하는 것이다.
const dotenv = require("dotenv");
dotenv.config();
외부에서 노출되어서는 안되는 것들을 환경 변수로 감추면서 보안을 향상시킬 수 있게 된다.
.env
PORT = 3000
DB_HOST ="localhost"
DB_USER ="root"
DB_PASSWORD="비밀번호"
DB_DATABASE="login_lecture"
//in db.js
const mysql = require("mysql");
const db = mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER ,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE,
});
db.connect();
module.exports = db;