Nodejs

Express 서버에 Mysql과 session store 설치(AWS-RDS이용)

마손리 2022. 12. 14. 18:17

사실 이전까지 DB는 Postgre와 Prisma orm만으로 공부를 하였다가 SQL문을 공부하면서 Mysql만으로 서버를 만들어보고 싶어서 직접 연결해 보았다.

session 또한 그저 express session만을 이용해 보았는데 그러다보니 서버를 재부팅할시 session 정보가 리셋이 되서 mysql session store를 이용하여 DB에 저장해주어야됬다.

 

관련 라이브러리 설치

npm i dotenv --save
npm i express-session --save 
npm i express-mysql-session --save
npm i mysql2 --save

 

 

처음 mysql을 설치해주었는데 mysql은 promise를 반환하지않아 비동기작동이 되지않는다는것을 알게되었다. 검색끝에 promise-mysql과 mysql2를 사용해보았고 mysql2가 더 사용이 간편하여 선택해주었다.

 

 

db.ts(혹은 js)

require("dotenv").config();
import session from "express-session";
const MySQLStore = require("express-mysql-session")(session);
const mysql = require("mysql2/promise");

const options = {
  user: process.env.DB_USER,
  host: process.env.DB_HOST,
  database: process.env.DB_DATABASE,
  password: process.env.DB_PASSWORD,
  port: process.env.DB_PORT,
};

export const conn = mysql.createPool(options);
export const sessionStore = new MySQLStore(options, conn);

설치한 라이브러리들을 불러와주고 Mysql session store에는 불러온 express-session을 연결

AWS-RDS에서 데이터베이스를 개설한후 옵션값들을 env파일을 이용하여 입력

mysql의 createPool과 옵션값들을 이용하면 Express 서버와 DB와의 연결이 끝난다.

또한 Mysql session store에 옵션값들과 연결된 DB를 넣어주면 mysql을 이용한 session store 또한 생성이 되었다.

(이후 DB에 session을 위한 테이블이 생성된다.)

 

 

생성된 세션스토어 연결

import express from "express";
import rootRouter from "./routers/rootRouter";
import session from "express-session";
import { sessionStore } from "./db";

const app = express();

const farFuture = new Date(
  new Date().getTime() + 1000 * 60 * 60 * 24 * 365 * 10
);
// 테스트를 위한 서버이므로 쿠키 지속을 10년으로 설정

app.use(
  session({
    key: "login-session",
    secret: process.env.COOKIE_SECRET,
    store: sessionStore,
    resave: true,
    saveUninitialized: false,
    cookie: {
      expires: farFuture,
    },
  })
);

app.use("/", rootRouter);

export default app;

 

express session과 연결된 세션스토어를 임포트해준뒤

app.use를 이용하여 생성된 설정값들을 입력, store에는 생성된 세션스토어를 연결해주면 session정보가 DB에 저장이되며 서버가 리부팅되어도 그값을 잃어버리지않는다.

 

(깃헙:https://github.com/Mason3144/booking-manager-backend/blob/master/src/db.ts)

'Nodejs' 카테고리의 다른 글

GraphQL API  (0) 2022.12.29
REST API  (0) 2022.12.26
GraphQL에서 파일 업로드  (0) 2022.12.24
GraphQl과 Apollo  (1) 2022.12.23
AWS-s3, multer, multer-s3를 이용한 express 파일업로드  (0) 2022.12.23