본문 바로가기

Node.js/실험실

[Node.js] Express ORM 세팅해보기

설치 

npm install mysql2 sequelize sequelize-cli

mysql2는 node와 mysql의 연결을 위해서 사용하는 패키지 

sequelize는 ORM을 이용해서 데이터베이스를 다룰 수 있는 패키지

sequelize-cli는 데이터베이스 작업을 sequelize와 연동해서 터미널에서 수행하게 해주는 패키지

 

초기화 

npx sequelize init

초기 세팅을 위해서 사용하는 패키지 

  • config/config.json
  • models/
  • migrations/
  • seeders/

4개의 디렉토리가 만들어진다. 

 

config/config.json

우선 json 파일이면 env로 설정을 불러오지 못한다. 

그러므로 간단하게 수정을 한다. 

// config/config.js
require("dotenv").config();
const { MYSQL_HOST, MYSQL_USER, MYSQL_PORT, MYSQL_PW, MYSQL_DB } = process.env;

const development = {
  username: MYSQL_USER,
  password: MYSQL_PW,
  database: MYSQL_DB,
  host: MYSQL_HOST,
  port: MYSQL_PORT,
  dialect: "mysql",
};

const test = {
  username: MYSQL_USER,
  password: MYSQL_PW,
  database: MYSQL_DB,
  host: MYSQL_HOST,
  port: MYSQL_PORT,
  dialect: "mysql",
};

const production = {
  username: MYSQL_USER,
  password: MYSQL_PW,
  database: MYSQL_DB,
  host: MYSQL_HOST,
  port: MYSQL_PORT,
  dialect: "mysql",
};

module.exports = { development, production, test };

js 파일로 변경하고 다음과 같이 env 설정값을 넣어준다. 

각각의 설정은 개발용, 테스트용, 배포용으로 나뉘어 진다. 필요에 따라 설정을 해주면 된다. 

 

// models/index.js

const config = require(__dirname + "/../config/config.json")[env];
->
const config = require(__dirname + "/../config/config.js")[env];

models의 index.js에서 config를 불러오는 곳에서 확장자를 변경해주면 끝이다. 

 

데이터베이스 생성

npx sequelize db:create --env development

db:create 명령어를 통해서 데이터베이스를 생성하는데, 

--env 옵션으로 원하는 config.js 파일의 설정을 불러와 데이터베이스를 만들 수 있다. 

 

테이블 생성

본인은 이미 mysql에 테이블을 모두 만든 상태이다. 

미리 만들어둔 테이블을 불러오기 위해서 작업을 조금해야한다.

npm i sequelize-auto

자동으로 테이블을 만들어주는 패키지이다. 

 

sequelize-auto -o "./models" -d 테이블명 -h DB_URL -u 유저명 -p 포트 -x 비밀번호 -e DB명

명령어를 입력하면 자동으로 ./models 경로에 테이블을 만들어준다. 

 

오류

bash: sequelize-auto: command not found
npm install -g sequelize-auto

명령어로 전역으로 설치해준다. 

 

Error: Please install mysql2 package manually
npm i -g mysql2

명령어로 전역으로 설치해준다. 

 

모델과 테이블 연동

마지막으로 모델과 테이블을 연동해준다. 

// app.js

// ...
const db = require("./models");

// ...
db.sequelize.sync();
반응형