MySQL 과 sequelize 연결하기
MySQL 란?
MySQL 은 세계에서 가장 많이 쓰이는 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)이다. 일단 오픈소스이고 관계형이 대중적이기 때문에 배워본다.
1.MySQL 먼저 컴퓨터에 설치를 한다.
각자 구글링해서 설치하기~.
2. sequelize
sequelize-cli
mysql2
설치 해준다.
npm i sequelize sequelize-cli mysql2
sequelize: 직접 database 언어사용하지 않고 js언어로 database 조작할 수 있게 해주는 라이브러리이다.
mysql2: node 와 mysql 연결해주는 드라이버 역할.
이제 sequelize 세팅을 해 줍시다. 다음 명령어를 쳐 주세요.
npx sequelize init
3. config폴더안에 config.json 파일 설정 해주기.
{
"development": {
//개발할때 사용하는 데이터베이스
"username": "root",
"password": "1234", // 자기계정 비밀번호
"database": "react-nodebird", // 프로젝트 이름
"host": "127.0.0.1", // 기본으로 localhost 로 설정됨.
"dialect": "mysql"
},
"test": {
// 테스트용 데이터베이스.
"username": "root",
"password": null,
"database": "react-nodebird",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
// 배포용 데이터베이스.
"username": "root",
"password": null,
"database": "react-nodebird",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
4. models/index.js 초기셋팅
const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require('../config/config')[env]; //설정한 config 에서 'development' config 가져오자.
const db = {};
const sequelize = new Sequelize(
config.database,
config.username,
config.password,
config
); // 시퀄라이즈 노드랑mysql 연결해주는 역할.
Object.keys(db).forEach((modelName) => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
5. 모델 만들기 예시용으로 user모델과 post모델을 만들어 보겠다. 위치는 models 폴더에서 만들어준다
유저모델:
module.exports = (sequelize, DataTypes ) => {
const User = sequelize.define('User', {// MySQL 에는 'User' => users 로 테이블이 생성된다.
//id가 기본적으로 들어있다.
email: {
type: DataTypes.STRING(30),
allowNull: false, //필수
unique: true, //고유한값
},
nickname: {
type: DataTypes.STRING(30),
allowNull: false, //필수
},
password: {
type: DataTypes.STRING(100),// 비밀번호는 암호화 되기떄문에 길게 설정해놓는다.
allowNull: false, //필수
},
}, {
charset: 'utf8', // 이렇게 셋팅안하면 데이터 베이스에 한글넣을시 에라남.
collate: 'utf8_general_ci', //한글저장 가능
});
User.associate = (db) => { //관계 설정하는 구간.
db.User.hasMany(db.Post); // 유저가 많은 포스트를 가질 수 있다.
db.User.hasMany(db.Comment);
db.User.belongsToMany(db.Post, { through: 'Like', as: 'Liked'}); // 내가 좋아요 누른 포스트들 {테이블 이름은 : Like, User 이름을 Liked 로}
db.User.belongsToMany(db.User, { through: 'Follow', as: 'Follwer', foreignKey: 'FollowingId'});
db.User.belongsToMany(db.User, { through: 'Follow', as: 'Following', foreignKey: 'FollowerId'});
};
return User;
}
포스트모델:
module.exports = (sequelize, DataTypes ) => {
const Post = sequelize.define('Post', {// MySQL 에는 'User' => users 로 테이블이 생성된다.
//id가 기본적으로 들어있다.
content:{
type: DataTypes.TEXT,
allowNull: false,
},
// UserId
}, {
charset: 'utf8mb4', // 이렇게 셋팅안하면 한글(이모지)넣을시 에라남.
collate: 'utf8mb4_general_ci', //한글(이모지)저장
});
Post.associate = (db) => {
db.Post.belongsTo(db.User);
db.Post.belongsToMany(db.Hashtag, {through: 'PostHashtag'});
db.Post.hasMany(db.Comment);
db.Post.hasMany(db.Image);
db.Post.belongsToMany(db.User, { through: 'Like', as: 'Likers'}); // 좋아요 누른 유저들
db.Post.belongsTo(db.Post, {as: 'Retweet'});
};
return Post;
}
6. 모델들 index.js 에 불러오고 연결시켜주기
const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require('../config/config')[env]; //설정한 config 에서 'development' config 가져오자.
const db = {};
const sequelize = new Sequelize(
config.database,
config.username,
config.password,
config
); // 시퀄라이즈 노드랑mysql 연결해주는 역할.
db.Comment = require('./comment')(sequelize, Sequelize); // 모델 불러오고 실행해준다.
db.Hashtag = require('./hashtag')(sequelize, Sequelize);
db.Post = require('./Post')(sequelize, Sequelize);
db.User = require('./user')(sequelize, Sequelize);
db.Image = require('./image')(sequelize, Sequelize);
Object.keys(db).forEach((modelName) => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
7. express 와 db 연결하기 및 실행.
app.js
const express = require('express');
const app = express();
const port = 3065;
const postRouter = require('./routes/post');
const db = require('./models'); // models/index.js 에서 db 가져오기.
db.sequelize
.sync() // 비동기 연결 시도.
.then(() => {
console.log('db 연결 성공');
})
.catch(console.error);
app.use('/post', postRouter);
app.listen(port, () => {
console.log(`app listening at http://localhost:${port}`);
});
db 해당 프로젝트에 먼저 생성해줍시다.
npx sequelize db:create
db 연결성공 메시지 뜨면 연결이 된거다.
그리고 매번 백엔드쪽 고치면 db를 새로고침 해야할 다소 귀찮은점이 있다 그래서 그런걸 해결하기 위해서
npm i -D nodemon
설치해주고 개발을 시작하자.
패키지.json 가서 "node app.js" => 'nodemon app.js'
"scripts": {
"dev": "nodemon app.js" //=>'nodemon app.js' 이렇게 바꿔주세요
},
npm run dev 로 실행.
Author And Source
이 문제에 관하여(MySQL 과 sequelize 연결하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sungmin-choi/MySQL-과-sequelize-연결하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)