[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지(5)

나강민·2023년 11월 13일
0

조현영님의 Node.js 강의

언더독 레볼루션 학습 커리큘럼을 따라갑니다.

Section 8. 9장 노드버드 SNS 만들기

  1. 프로젝트 세팅
  2. 데이터베이스 연결

프로젝트 세팅

실습

  1. 원하는 폴더를 만든다.
  2. 폴더로 이동한 후에
npm init
  1. 이후 패키지 이름과, app version(0.0.1), main file(app.js), author : Nakangmi, license : MIT 작성
  2. 다 작성했다면 package.json 생성
  3. 이후 mysql 및 sequelize 생성을 위한 설치 명령어
npm i sequelize mysql2 sequelize-cli

여기서 mysql2는 mysql과 node를 연결하는 드라이버
만약 성공적이라면 package.json에 작성됨
  1. 글로벌이 아닌 npx를 통해 sequelize init를 설정해준다.
npx sequelize init
  1. 이후 필요한 express 라이브러리 설치
npm i express cookie-parser express-session morgan multer dotenv nunjucks 
  1. 이후 개발용 서버 node-mon 설정 -> 파일변경 확인
npm i -D nodemon

Express.js 프로젝트 기본 설정 확인하기

데이터베이스 연결

데이터베이스 연결을 위한 코드 및 주석 작성
위 링크를 타고 들어가면 주석을 통해 더 자세히 수업 내용을 확인할 수 있습니다. 하지만 중요한 몇가지 코드를 설명해보자면
이번 수업에서는 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 폴더를 삭제했기에 수업을 참고하여 작성하는 것이 좋을 듯 하다.

0개의 댓글