TIL sequelize config.js 활용하기

ESH'S VELOG·2023년 7월 18일
0

sequelize는 관계형 데이터베이스를 사용할 수 있게 해주는 도구이다.
다른 말로는 ORM(Object Relation Mapping)이라고하며, 말 그대로 객체와 데이터베이스의 관계를 연결해준다는뜻이다.

관계형 데이터베이스(Relation DataBase) 로는 MySQL, Oracle, MariaDB, PostgreSQL이 있다.

현재 폴더 구조는 다음과 같이 되어있다.

여기서 특이한 점은 config폴더와 root폴더에 config.js파일이 존재한다는 것이다.
config폴더 에는 config.json파일이 들어있다.
config.json파일은 npx sequelize init시 생성되는 폴더이며 json형태로 mySQL과 연결할 수 있는 내용이 들어있다.
config.js에는 db와 연결시 사용되는 개인정보가 들어있고 (config.json과 같은 내용이 들어있으나 json타입이 아닌 객체형태이다) jwt를 이용하여 토큰을 생성할 키와 토큰의 유효기간 등이 들어있다.

문제 발생:
db:create와 db:migrate를 모두 정상적으로 실행하여 db관계도를 생성하고 desc로 확인하였고 node server.js로 실행하였으나 계속해서 dialect를 찾을 수 없다는 에러가 발생하였다.

E:\Node\team_1jobeoljo\node_modules\sequelize\lib\sequelize.js:136
      throw new Error("Dialect needs to be explicitly supplied as of v4.0.0");
      ^

Error: Dialect needs to be explicitly supplied as of v4.0.0
    at new Sequelize (E:\Node\team_1jobeoljo\node_modules\sequelize\lib\sequelize.js:136:13)
    at Object.<anonymous> (E:\Node\team_1jobeoljo\models\index.js:18:15)
    at Module._compile (node:internal/modules/cjs/loader:1254:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1308:10)
    at Module.load (node:internal/modules/cjs/loader:1117:32)
    at Module._load (node:internal/modules/cjs/loader:958:12)
    at Module.require (node:internal/modules/cjs/loader:1141:19)
    at require (node:internal/modules/cjs/helpers:110:18)
    at Object.<anonymous> (E:\Node\team_1jobeoljo\respositories\userRepository.js:1:15)
    at Module._compile (node:internal/modules/cjs/loader:1254:14)

문제 해결 프로세스

문제 발생 의심 근원지

  • config.js를 연결해주는 부분: models/index.js
    를 살펴보았다.
    원래는 npx sequelize init을 실행할 때 자동으로 생성되는 부분이어서 config/config.json도 같이 자동으로 생성되어 config.json을 따르게 되어있다.
const config = require(__dirname + '/../config/config.json')[env];

이 부분을 아래와 같이 고쳐서 사용했는데

const config = require('../config.js').db;

아래에서 sequelize 인스턴스를 생성하여 개인정보와 연결하는 부분에서 에러가 났던것 같다.

let sequelize;
if (config.use_env_variable) {
  sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
  sequelize = new Sequelize(
    config.development.database,
    config.development.username,
    config.development.password,
    config.development,
  );
}

원래는 config.database, config.username으로 되어있었는데 config.js파일 내에 config.db = {development: {database:''}, {username:''}, 이런식으로 되어있어 development를 붙여주니 정상 실행되는 것을 확인할 수 있었다.
또한 sequelize로 생성한 모델은 객체로 들어오기 때문에 repository에서 객체 분해할당을 하여 선언하고 사용할 수 있다.

profile
Backend Developer - Typescript, Javascript 를 공부합니다.

2개의 댓글

comment-user-thumbnail
2023년 7월 18일

글이 잘 정리되어 있네요. 감사합니다.

답글 달기
comment-user-thumbnail
2023년 7월 18일

정말 유익한 글이었습니다.

답글 달기