설계된 데이터베이스 구조는 이 포스트에서 설명했습니다.
이걸 토대로 테이블 모델을 정의하고 Sequelize를 연동하는 시간입니다.
아래 명령어를 통해 sequelize로 mysql을 연동하기 위한 라이브러리들을 받아옵니다.
npm i sequelize mysql2
다 받았으면 sequelize 이용을 위해 필요한 내용들을 초기화 해줍니다.
npx sequelize init
프로젝트 폴더에 config, models, migrations, seeder폴더가 생겼습니다. 이 중에서 당장은 models와 config폴더만 수정합니다.
/config/config.json
{
"development": {
"username": "사용자이름",
"password": "비밀번호",
"database": "연동할 데이터베이스 이름",
"host": "127.0.0.1",
"dialect": "mysql"
},
"test": {
"username": "사용자이름",
"password": "비밀번호",
"database": "연동할 데이터베이스 이름",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "사용자이름",
"password": "비밀번호",
"database": "연동할 데이터베이스 이름",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
우선 컴퓨터에 MySQL이 깔려있다고 가정하고 진행합니다.
development항목에는 개발 환경에서 연동할 DB 정보를, test항목에는 테스트 환경에서의 DB, production항목에는 배포 환경에서 연동할 DB 정보를 적어줍니다.
저는 전부 동일하게 적어주었습니다.
database항목을 작성하려면 사전에 MySQL에 접속해서 데이터베이스를 하나 만들어 주어야 합니다. 저는 nullsafety라고 하나 만들었습니다.
사용할 테이블은
6가지입니다.
각각 [이름].ts 파일로 models폴더 하위에 생성해 줍니다.
그리고 index.js 파일 확장자도 index.ts로 바꿔줍니다.

이제 하나씩 내용을 작성해 줍니다.
models/category.ts
import { INTEGER, Sequelize, STRING } from "sequelize";
const Category = (sequelize: Sequelize) =>
sequelize.define(
"category",
{
name: {
type: STRING(50),
allowNull: false,
},
priority: {
type: INTEGER,
allowNull: false,
},
},
{
timestamps: false,
}
);
module.exports = Category;
models/content.ts
import { BLOB, INTEGER, STRING, DATE, NOW, Sequelize } from "sequelize";
module.exports = (sequelize: Sequelize) =>
sequelize.define(
"content",
{
title: {
type: STRING(100),
allowNull: false,
},
content: {
type: BLOB("long"),
allowNull: false,
},
hit: {
type: INTEGER,
defaultValue: 0,
},
liked: {
type: INTEGER,
defaultValue: 0,
},
thumbnail: {
type: STRING(200),
defaultValue: "",
},
createdAt: {
type: DATE,
defaultValue: NOW,
},
},
{
timestamps: false,
}
);
models/img.ts
import { INTEGER, Sequelize, STRING } from "sequelize";
const Img = (sequelize: Sequelize) =>
sequelize.define(
"img",
{
path: {
type: STRING(200),
allowNull: false,
},
cid: {
type: INTEGER,
defaultValue: -1,
},
},
{
timestamps: false,
}
);
module.exports = Img;
models/like.ts
import { INTEGER, Sequelize, STRING } from "sequelize";
const Like = (sequelize: Sequelize) =>
sequelize.define(
"like",
{
host: {
type: STRING(50),
allowNull: false,
},
cid: {
type: INTEGER,
allowNull: false,
},
},
{
timestamps: false,
}
);
module.exports = Like;
models/visit.ts
import { INTEGER, Sequelize, STRING } from "sequelize";
const Visit = (sequelize: Sequelize) =>
sequelize.define(
"visit",
{
ym: {
type: STRING(7),
allowNull: false,
},
d: {
type: STRING(2),
allowNull: false,
},
visited: {
type: INTEGER,
defaultValue: 1,
},
},
{
timestamps: false,
}
);
module.exports = Visit;
models/visitor.ts
import { INTEGER, Sequelize, STRING } from "sequelize";
const Visitor = (sequelize: Sequelize) =>
sequelize.define(
"visitor",
{
host: {
type: STRING(50),
allowNull: false,
primaryKey: true,
},
},
{
timestamps: false,
}
);
module.exports = Visitor;
index.js였는데 ts로 확장자를 바꿨습니다.
내용은 아래 내용으로 덮어씁니다.
models/index.ts
import { Sequelize } from "sequelize";
const SequelizeConstructor = require("sequelize");
const env = process.env.NODE_ENV || "development";
const config = require("../config/config")[env];
const db: any = {};
const sequelize: Sequelize = new SequelizeConstructor(
config.database,
config.username,
config.password,
config
);
db.sequelize = sequelize;
db.Sequelize = Sequelize;
db.Category = require("./category")(sequelize);
db.Content = require("./content")(sequelize);
db.Visitor = require("./visitor")(sequelize);
db.Visit = require("./visit")(sequelize);
db.Img = require("./img")(sequelize);
db.Like = require("./like")(sequelize);
db.Category.hasMany(db.Content, {
foreignKey: "cid",
sourceKey: "id",
});
module.exports = db;
src/app.ts
...
const app = express();
// 아래 두 줄 추가
const { sequelize } = require("../models/");
sequelize.sync();
...
npm run dev
위 명령으로 서버를 돌려봅니다.

테이블을 만드는 쿼리들이 터미널에 출력되고, 서버는 잘 실행됩니다.
DBMS가 테이블들을 잘 만들었나 확인해 봅니다.

nullsafety데이터베이스에 테이블들이 잘 만들어졌습니다.
배포 환경도 고정적으로 정해졌고, DB도 ORM도 연동했으니까 이제 정말 서버 기능을 개발할 차례입니다. 끝!