728x90

MySql

 

MySql은 관계형 DBMS(Relational DBMS) 중 하나이다.

 

예를 들어, 쇼핑몰에서 a, b, c라는 제품을 판매하고 있고, a', b', c'라는 고객이 있다고 하자. 

 

고객 a'와 b'는 아래와 같이 제품을 주문하였다고 할때, 쇼핑몰에서는 제품 a를 주문한 고객이 누구누구인지 알고싶다고 하면 고객 테이블과 제품 테이블의 관계를 보는 것이 가장 좋을 것이다.

 

(관계가 그려져 있지 않다면 모든 고객을 조회하여, 어떤 제품을 주문했는지 확인해야 하고, 그 제품들 속에 a가 있는지 확인해야 하는 등,,, 아주 복잡해질 것이다.) 그래서 이렇게 테이블 간의 관계가 필요할 때, 관계형 DBMS를 사용한다. 

 

 

Sequelize 

 

관계형 DB를 조작하기 위해서는, SQL(Structured Query Language)이라는 프로그래밍 언어를 사용해야 하지만,

 

Sequelize를 사용하면 SQL을 사용하지 않고도, DB를 조작할 수 있다

 

Sequelize javascript 코드를 알아서 SQL로 바꿔준다. 즉, Sequelize는 db 조작 언어이다. 

 

Sequelize 사용해보기

터미널에 아래 코드를 입력하면 된다. 

 

npm i sequelize sequelize-cli mysql2 
npx sequelize init

 

sequelize-clisequelize 명령어를 실행하기 위한 패키지이고, 

 

mysql2MySql과 Sequelize(노드, 즉, javascript 코드)를 연결해주는 드라이버이다. 

 

이들을 설치하고, sequelize init을 하면 config, models와 같은 폴더가 만들어진다. 

 

config/config.json(or config.js)는 데이터베이스 설정을 해주는 파일이다. 

db 이름, username, password 등 데이터베이스 설정은 config 폴더에서 관리하면 된다. 

 

MySql의 테이블이 Sequelize에서는 models이다. 

 

아래는 models 폴더의 index.js 파일이다. 

 

Sequelize시퀄라이즈 패키지이자 생성자이다. 

 

'config/config'에서 데이터 베이스 설정을 불러온 후, new Sequelize를 통해 노드와 MySql을 연결해준다. 

 

// models/index.js

const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require('../config/config')[env];
const db = {};

const sequelize = new Sequelize(
  config.database,
  config.username,
  config.password,
  config
);

db.Comment = require('./comment')(sequelize, Sequelize);
db.Hashtag = require('./hashtag')(sequelize, Sequelize);
db.Image = require('./image')(sequelize, Sequelize);
db.Post = require('./post')(sequelize, Sequelize);
db.User = require('./user')(sequelize, Sequelize);

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

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

module.exports = db;

 

 

위의 models/index.js에서 노드와 MySql을 연결해주었으니

app.js에서 sync 메서드를 사용해, 서버 실행시 MySql과 연동되도록 하면 된다. 

 

// app.js
const express = require('express'); 

// ...생략

const db = require('./models');

// ...생략

db.sequelize
  .sync()
  .then(() => {
    console.log('db 연결 성공!');
  })
  .catch(console.error);
  
// ...생략

 

 

728x90

'Back-end' 카테고리의 다른 글

Node.js란  (0) 2021.05.14
728x90

백엔드 작업을 위해 Node를 사용하기 때문에 Node가 서버라고 오해하기 쉽지만, Node는 서버가 아니다

 

Node 공식 홈페이지에도 나와있듯, Node는 javascript runtime이다.

 

node는 javascript runtime

 

javascript runtimejavascript 코드를 실행할 수 있도록 해준다. 

 

 

그렇다면 javascript로 서버는 어떻게 구동하냐? 

 

노드는 http라는 모듈을 제공한다.  app.js를 실행하는 순간,

javascript runtime인 노드가 아래의 코드를 실행해서 http가 서버 역할을 수행하게 된다. 

 

// app.js
const http = require('http'); 
const server = http.createServer(() => {

}); 
server.listen(3065); 

 

 

 

 

728x90

'Back-end' 카테고리의 다른 글

MySql과 Sequelize  (0) 2021.05.14

+ Recent posts