언더독 레볼루션 학습 커리큘럼을 따라갑니다.
npm init
npm i sequelize mysql2 sequelize-cli
여기서 mysql2는 mysql과 node를 연결하는 드라이버
만약 성공적이라면 package.json에 작성됨
npx sequelize init
npm i express cookie-parser express-session morgan multer dotenv nunjucks
npm i -D nodemon
데이터베이스 연결을 위한 코드 및 주석 작성
위 링크를 타고 들어가면 주석을 통해 더 자세히 수업 내용을 확인할 수 있습니다. 하지만 중요한 몇가지 코드를 설명해보자면
이번 수업에서는 models 들을 작성하는데, SNS 작성을 위한 Database를 설정합니다. mysql를 직접적으로 사용하는 것이 아닌 sequelize를 이용하여 js를 통해 설정합니다. 그래서 총 4가지의 모델을 작성하고 config, app.js에서 세팅을 합니다.
const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require('../config/config')[env];
// 각 모델 파일을 가져옵니다.
const User = require('./user');
const Post = require('./post');
const Hashtag = require('./hashtag');
// Sequelize 연결 설정
const sequelize = new Sequelize(
config.database, config.username, config.password, config,
);
// db 객체 생성
const db = {};
// Sequelize 연결을 db 객체에 추가
db.sequelize = sequelize;
// // 모델 파일을 읽어들여 동적으로 모델을 추가하고 초기화합니다.
// // 각 모델 파일의 associate 메서드를 호출하여 관계 설정
// fs.readdirSync(__dirname).filter(file => {
// // 파일명에서 .으로 시작하고, basename과 일치하지 않으며 .js 파일인 경우 필터링
// return file.indexOf('.') !== 0 && file !== basename && file.slice(-3) === '.js';
// }).forEach(file => {
// const model = require(path.join(__dirname, file));
// db[model.name] = model; // db 객체에 각 모델 추가
// model.init(sequelize); // Sequelize 연결을 통해 모델 초기화
// });
// // 각 모델 파일의 associate 메서드 호출하여 관계 설정
// Object.keys(db).forEach(modelName => {
// if (db[modelName].associate) {
// db[modelName].associate(db);
// }
// });
// 각 모델을 db 객체에 추가하고 초기화합니다.
db.User = User;
db.Post = Post;
db.Hashtag = Hashtag;
User.init(sequelize);
Post.init(sequelize);
Hashtag.init(sequelize);
// 모델 간의 관계 설정
User.associate(db);
Post.associate(db);
Hashtag.associate(db);
// 완성된 db 객체를 내보냅니다.
module.exports = db;
위 코드는 index.js 이고 나머지 model 코드들을 이어주는 역할을 담당한다. db 객체를 꼭 추가하고 초기화 하며 associate를 해야하는데 주석이 달려 있는 부분은 아래 코드를 자동화하는 코드이다. 계속 생성되는 모델과 db 객체를 계속 넣을 수 없기 때문에 위와 같은 Js 문법을 활용한다.
이후 app.js 에서
sequelize.sync({ force: false }).then(() => {
console.log('데이터베이스 연결 성공')
//개발시에만 force:true 왜냐면 기존 테이블이 다 날라가버리기 때문
})
이 코드를 통해 mysql과 연결한다. 연결 설정은 config에서 하지만 내 remote 코드에서는 config 폴더를 삭제했기에 수업을 참고하여 작성하는 것이 좋을 듯 하다.