프로그래밍 언어/NODE JS

데이터베이스 세팅하기 (3)

· 코딩마이데이

이제 생성한 모델을 데이터베이스 및 서버와 연결합니다. 아직 데이터베이스를 만들지 않았으므로 데이터베이스로부터 만들겠습니다. 데이터베이스의 이름은 nodebird입니다.

MySQL 프롬프트를 통해 SQL문을 데이터베이스를 만들었습니다. 하지만 시퀄라이즈는 config.jspm을 읽어 데이터베이스를 생성해주는 기능이 있습니다. 따라서 config.json을 먼저 수정합니다. MySQL 비밀번호를 password에 넣고 데이터베이스 이름을 nodebird러 바꿉니다. 자동 생성한 config.json에 operatorAliaxes 속성이 들어 있다면 삭제합니다.

{
  "development": {
    "username": "root",
    "password": "1234",
    "database": "nodebird",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}

 

콘솔에서 npx sequlize db:create 명령어를 입력하면 데이터베이스가 생성됩니다.

$ npx sequelize db:create

Sequelize CLI [Node: 22.13.0, CLI: 6.6.3, ORM: 6.37.7]

Loaded configuration file "config\config.json".
Using environment "development".
Database nodebird created.

 

데이터베이스를 생성했으니 모델을 서버와 연결합니다.

const express = require("express");
const cookieParser = require("cookie-parser");
const morgan = require("morgan");
const path = require("path");
const session = require("express-session");
const nunjucks = require("nunjucks");
const dotenv = require("dotenv");

dotenv.config();
const pageRouter = require("./routes/page");
const { sequlize } = require("./models");

const app = express();
app.set("port", process.env.PORT || 8001);
app.set("view engine", "html");
nunjucks.configure("views", {
  express: app,
  watch: true,
});
sequlize
  .sync({ force: false })
  .then(() => {
    console.log("데이터베이스 연결 성공");
  })
  .catch((err) => {
    console.error(err);
  });

app.use(morgan("dev"));
app.use(express.static(path.join(__dirname, "public")));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser(process.env.COOKIE_SECRET));
app.use(
  session({
    resave: false,
    saveUninitialized: false,
    secret: process.env.COOKIE_SECRET,
    cookie: {
      httpOnly: true,
      secure: false,
    },
  })
);

app.use("/", pageRouter);

app.use((req, res, next) => {
  const error = new Error(`${req.method} ${req.url} 라우터가 없습니다.`);
  error.status = 404;
  next(error);
});

app.use((err, req, res, next) => {
  res.locals.message = err.message;
  res.locals.error = process.env.NODE_ENV !== "production" ? err : {};
  res.status(err.status || 500);
  res.render("error");
});

app.listen(app.get("port"), () => {
  console.log(app.get("port"), "번 포트에서 대기중");
});

 

서버 쪽 세팅이 완료되었습니다. 이제 서버를 실행합니다. 시퀄라이즈는 테이블 생성 쿼리문에 IF NOT EXISTS를 넣어주므로 테이블이 없을 때 자동으로 생성합니다.

$ npm start

> nodebird@0.0.1 start
> nodemon app

[nodemon] 3.1.10
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,cjs,json
[nodemon] starting `node app.js`
[dotenv@17.2.3] injecting env (1) from .env -- tip: ✅ audit secrets and track compliance: https://dotenvx.com/ops
8001 번 포트에서 대기중
Executing (default): SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = 'users' AND TABLE_SCHEMA = 'nodebird'
Executing (default): SHOW INDEX FROM `users` FROM `nodebird`
Executing (default): SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = 'posts' AND TABLE_SCHEMA = 'nodebird'
Executing (default): SHOW INDEX FROM `posts` FROM `nodebird`
Executing (default): SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = 'hashtags' AND TABLE_SCHEMA = 'nodebird'
Executing (default): SHOW INDEX FROM `hashtags` FROM `nodebird`
Executing (default): SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = 'Follow' AND TABLE_SCHEMA = 'nodebird'
Executing (default): SHOW INDEX FROM `Follow` FROM `nodebird`
Executing (default): SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = 'PostHashtag' AND TABLE_SCHEMA = 'nodebird'
Executing (default): SHOW INDEX FROM `PostHashtag` FROM `nodebird`
데이터베이스 연결 성공