서버에서 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 |