Sequelize 적용

셋팅

models 폴더안에 index.js파일을 봐주세요

const Sequelize = require("sequelize");


Object.keys(db).forEach(modelName => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

이부분만 남기고 싹다 날려버립니다.

먼저 DB와 연결을 해줘야 겠죠?

const Sequelize = require("sequelize");
//환경변수
const env = process.env.NODE_ENV || "development";
//env는 현재 개발모드를 나타는중
//DB계정정보 가져오기
const config = require("../config/config")[env];
const db = {}; //일단 db 빈객체를 만들어줍니다

//연결
//config 파일안에 있는 정보들을 이용해 DB와 연결해준다.
const sequelize = new Sequelize(
  config.database,
  config.username,
  config.password,
  config
);

Object.keys(db).forEach((modelName) => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

모델작성

자 이제 모델 ( = 태이블) 을 만들어 줄 것입니다.

테이블 구조는 다음과 같습니다

봐서는 이해가 어려우니 직접 만들면서 보아요

일단 우리는 model 5개를 만들어줘야 합니다. 위에 ERD에서는 8개인데 왜 5개만 만드냐 하면,

관계 설정시 다대다관계가 나오면 태이블이 하나가 만들어져야만 합니다.

일단 볼까요

User모델

아직 관계는 설정하지 않았지만, email, nickname, password의 칼럼을 가지는 태이블을하나 생성한 것입니다.

나머지도 만들어주세요 .

관계설정을 해볼까요 일단 User에서는 다음과 같습니다.

  • 한명의 유저는 게시글을 많이 가지고 있을 수 있다. (1대 다)

  • 한명의 유저는 댓글을 많이 작성할 수 있다. (1대 다)

  • 유저는 게시글에 좋아요를 많이 누를수도 받을수도 있다. (다대다)

  • 유저는 유저에게 팔로우를 많이 할수도 당할수도 있다. (다대다)

  • 다른 유저는 유저에게 팔로우를 많이 할수/당할수 있다(다대다 4번과 연계)

다대다 관계에서는 한 칼럼이 여러개의 아이디를 가질 수 없기 때문에 다른 태이블에서 관계들을 묶어줍니다.

through는 그 태이블의 이름을 설정해 주는 것이고 상대 모델에서도 같게 작성해줘야 합니다.

as는 생성된 관계 태이블에서 작성한 태이블과 관계된 id의 별칭을 설정해 줍니다.

foreignKey는 관계테이블의 칼럼명이 userId라면 그 칼럼명을 바꿔줍니다 .

다른 모델들도 마져 작성해보겠습니다 .

참고로 belongsTo에는 속한테이블이, hasOne,hasMany는 가진 테이블이기 때문에 외래키 칼럼은 belongsTo 즉, 속한 테이블에 생성이 되겠죠?

Post 모델

Comment모델

Hashtag 모델

Hash태그 모델은 다대다 관계가 햇갈릴 수 있습니다 .

node태그가 있다면 node개시글이 많이 있을수도 있고,

node개시글에는 많은 태그들이 달릴수도 있으니, 다대다 관계라고 이해해 주면 됩니다.

image모델

모델 생성

다시 models 폴더에 돌아와서 모델들을 db에 담아줄 것입니다 .

Sync

마지막으로 내보낸 db를 가지고 app.js에서 db를 sync해주면 마무리됩니다.

자 이제 노드를 통해 app.js를 실행해 보세요.

터미널에 SQL문들이 마구 출력될 것입니다

Last updated

Was this helpful?