node.js

MySQL과 sequelize 연결하기

Heoky 2022. 1. 16. 17:07

서버에서 router를 만들고 이제 data를 저장하기 위해 관계형 database인 MySQL을 사용하기로 했다.

사용하기 전에 MySQL을 조작하기 위해 사용법을 익히면 좋으나 손쉽게 javascript로 조작할 수 있는 방법을 찾았다.

sequelize란? node.js의 ORM(Object-Relational Mapping)이다. 여기서 ORM은 간단하게 말하자면 객체지향 패러다임을
활용하여 관계형 database의 data를 조작하게 하는 기술이다.

 


1. 설치 및 초기화

/back

$npm install sequelize
$npm install mysql2 
$npm install sequelize-cli

 

mysql: node와 mysql을 연결해주는 드라이버
sequelize-cli: sequelize 명령어를 실행하기 위한 패키지 라이브러리

2. 터미널에 sequelize init 명령어를 사용하게 되면 config, models, migrations, seeders 폴더가 생성된다.

$npx sequelize init

 


1. config/config.json

{
  "development": {
    "username": "사용할 유저의 이름 (root)",
    "password": "데이터베이스에 접속할 떄 사용하는 password",
    "database": "database의 이름",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "test": {
    "username": "사용할 유저의 이름 (root)",
    "password": "데이터베이스에 접속할 떄 사용하는 password",
    "database": "database의 이름",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "production": {
    "username": "사용할 유저의 이름 (root)",
    "password": "데이터베이스에 접속할 떄 사용하는 password",
    "database": "database의 이름",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}

database에 접속할 때 사용할 정보들을 입력한다. password 같은 경우 보안에 위협이 될 수 있어 추후 .env를 통해 안전하게 설정해주면
된다.


1. models/index.js 설정

back/models/index.js

const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};
// sequelize는 내부적으로 mysql2라는 드라이버를 사용중 (node랑 mysql을 연결해주는 드라이버)
const sequelize = new Sequelize(config.database, config.username, config.password, config); // node와 mysql 연결

// 만든 table(model)들을 db에 삽입
db.Comment = require('./comment')(sequelize, Sequelize);
db.Image = require('./image')(sequelize, Sequelize);
db.Post = require('./post')(sequelize, Sequelize);
db.User = require('./user')(sequelize, Sequelize);

// 반복문으로 돌면서 associate에서 관계를 연결해준다
Object.keys(db).forEach((modelName) => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

// db안에 sequelize를 넣어둠
db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

- 변수로 선언한 env는 기본적으로 개발모드를 뜻한다. config의 경우 config/config.json의 [env] 번째 인덱스에 접근하게 해준다.
- db에는 table을 생성하는 model을 넣어주고 Object.keys(db)의 반복문을  돌며 설정한 관계들(associate)을 db에 연결해줄 것이다.

 


1. app.js에 sequelize 장착하기

...

const db = require('./models').sequelize;

db.sync()
  .then(() => {
    console.log('db 연결 성공');
  })
  .catch(console.error);

db.sync({
  alter: true,
}); // sequelize model sync() 수정하기

...

만들어 놓은 model을 import해온 뒤, sequelize와 연결해주고 변수 db에 담는다.
이후 sync와 promise를 활용하여 연결하고 console로 연결 여부를 찍어서 보여준다.

테이블이 수정될 때마다 적용할 수 있도록 alter: true를 적어주었다.

이렇게 하면 express에 sequelise를 성공적으로 연결 할 수 있다.

'node.js' 카테고리의 다른 글

sequelize 관계 설정하기  (0) 2022.01.16
sequelize model 만들기  (0) 2022.01.16
express 라우터 분리하기  (0) 2022.01.16
서버 자동실행을 위한 nodemon  (0) 2022.01.16
express로 라우팅하기  (0) 2022.01.16