간단하게 ORM에 대해서 알아보고, Express, Node.js, TypeScript, Sequelize 세팅에 대해서 글을 작성해보겠습니다.
Object Relational Mapping
객체와 관계형 데이터베이스의 데이터를 자동으로 연결해주는 것을 말합니다.
객체를 통해 간접적으로 데이터베이스 데이터를 다룹니다.
npm install --save-dev sequelize-cli
위 명령어를 통해 쉽게 설치할 수 있습니다.
npx sequelize-cli init
init을 통해 시작할 수 있고, config, models, migrations, seeders 폴더가 생성됩니다. (위 4개 폴더는 직접 생성하는 게 아니라, init을 통해 생성합니다.)
기타 설치가 필요한 Npm
npm install --save express cors dotenv typescript
위 모듈 설치를 통해 config.ts를 다루려고 합니다.
config/config.json 을 config.ts 로 확장자를 변경 후 아래 내용을 작성합니다.
development 이외 test, production은 필요한 경우 추가 작성해주시면 됩니다.
import * as dotenv from 'dotenv';
dotenv.config();
export const config = {
development : {
username : process.env.DB_USERNAME
password : process.env.DB_PASSWORD,
database : process.env.DB_DBNAME,
host : process.env.DB_HOST,
port : process.env.DB_PORT,
dialect : "mysql"
}
}
dotenv를 통해서 username, password 등을 전달해줄 겁니다.
기존 생성된 index.js에 자동으로 설정된 내용이 있지만, 확장자를 ts로 변경하면서 내용도 추가로 변경해야 합니다.
ts에서 import 형식을 사용하기 위해 {} 묶어줬습니다.
경로의 경우 tsconfig.json 시작 경로 세팅에 따라 경로를 신경 써주시면 됩니다.
import {Sequelize} from "sequelize";
import {config} from "../config/config";
export const sequelize = new Sequelize(
config.development.database,
config.development.username,
config.development.password,
{
host: config.development.host,
dialect: 'mysql'
}
)
npx sequelize-cli model:generate --name User --attributes firstName:string,lastName:string,email:string
model 생성의 예시이며, --name 뒤 User가 Table이 됩니다. firstName, lastName, email의 경우 column 됩니다.
모든 model을 생성 후, 아래 명령어를 통해 migration 하면 끝입니다-!
npx sequelize-cli db:migrate
만약 내용 추가 또는 수정이 필요한 경우
npx sequelize-cli db:migrate:undo
입력 후 추가, 수정을 진행해주시면 됩니다.
undo 진행 시 시간적 여유를 가지고 한 번에 끝내시기를 추천해 드립니다.
model, migration을 수정하면서 급하게 진행하거나, 중간에 일을 끊었다 진행하면 꼬일 가능성이 있습니다.