MVC, ORM, Sequelize

매정·2022년 5월 17일
1

MVC (Model View Controller)


소프트웨어가 돌아가는 방식에 대한 하나의 패턴, 아이디어, 디자인
코드 가독성, 관리성, 퀄리티가 나아짐.

  • Model: 데이터를 직접 갖고 있거나, 데이터베이스와 연결되어 있어 데이터를 handle함.
    controller를 통해 데이터를 전달, View와 소통할 일이 거의 없음.
  • View: 유저가 보는 화면. html, css 등. Controller와만 소통함.
  • Controller: View에서 일어나는 액션과 이벤트의 인풋값을 받음. Model과 데이터를 소통함.

  1. Browser에서 유저의 액션이 일어남
  2. Router에서 endpoint에 따라 분기함
  3. Routing endpoint에 맞는 Controller 함수를 호출
    4-1. View로 바로 보내주거나
    4-2. Model에서 데이터를 가져와서 View로 보내주기도 함.



ORM (Object-Relational Mapping)

Model을 기술하는 도구.
관계형 데이터베이스(Mysql같은)의 entity, record에 접근할 때 마치 자바스크립트 객체, 클래스를 다루듯이 다룰 수 있게 해줌. 그 사이의 통역사 같은 존재.
이를 통해 데이터베이스 세계와 프로그래밍 언어 사이의 개념의 간극을 줄여줌.


Sequelize

Node.js를 지원하는 ORM, promise도 지원함
지원 RDBMS : Postgres, MYSQL, MariaDB, SQLite, Microsoft SQL Server 등

ORM 예시 코드

var Sequelize = require('sequelize'); //모듈 로드 
var db = new Sequelize('chatter', 'root', ''); //chatter: db이름, root: 유저네임, ' ': 패스워드

var User = db.define('User', {
  username: Sequelize.STRING
}); //db.defiend으로 schema 작성

var Message = db.define('Message', {
  userid: Sequelize.INTEGER,
  text: Sequelize.STRING,
  roomname: Sequelize.STRING
}); //primary key는 자동으로 생성해줌. updatedAt, createdAt 도 자동으로 생성해줌. 필요없는 것도 만들어주는 것도 있어서, 필요없는 것을 제거해주는 방법은 API 문서 참고할 것

User.sync() //객체 지향 코드와 DB를 싱크해준다. (코드와 schema를 일치시켜준다.)
  .then(function() {
    return User.create({username: 'Jean Valjean'});
  //새로운 하나의 record를 만들어 줌. sql문에서 Insert Into ~ Values ~ 에 해당됨.
  }) 
  .then(function() {
    return User.findAll({ where: {username: 'Jean Valjean'} });
  //sql문에서 select * where ~ 에 해당됨.
  })
  .then(function(users) {
    users.forEach(function(user) {
      console.log(user.username + ' exists');
    });
    db.close();
  })
  .catch(function(err) {
    console.error(err);
    db.close();
  });

Migrations
스키마 변경에 따른 데이터 이주(migration)을 뜻함. 데이터 선택, 준비, 추출 및 변환하여 한 컴퓨터 저장 시스템에서 다른 컴퓨터 저장 시스템으로 영구적으로 전송하는 프로세스
https://sequelize.org/docs/v6/other-topics/migrations/

Association
(join과 관련)
https://sequelize.org/api/v6/class/src/associations/base.js~association

Transaction

SPRINT 1

  1. 빈 프로젝트 만들기 : init 명령 실행 npx sequelize-cli init

    • config 데이터베이스에 연결하는 방법을 CLI에 알려주는 구성 파일이 포함되어 있습니다.
    • models 프로젝트의 모든 모델을 포함합니다.
    • migrations 모든 마이그레이션 파일 포함
    • seeders 모든 시드 파일을 포함합니다.
  2. config 파일을 이용해 MYSQL 접속 설정

    Sequelize CLI는 기본적으로 mysql을 가정함.
    MYSQL 접속: sequelize db:create config/config.json 파일을 읽은 후 development 모드에 있는 database를 생성.

  3. 모델 생성
    모델: 엔티티를 객체로 표현한 형태, 데이터 구조를 기술하고 데이터에 수행할 수 있는 명령의 모음을 의미
    모델 생성 명령어 -> 모델 이름은 Url, field는 url, title, visits인 경우

npx sequelize-cli model:generate --name url --attributes url:string,title:string,visits:integer

아래와 같이 url.js 파일이 생성됨

*필드값의 기본값을 설정해주고 싶은 경우 -> defaultValue : (초기화값)

  1. 마이그레이션 진행
    npx sequelize-cli db:migrate : 마이그레이션 파일에 지정된 대로 모든 열을 사용하여 호출된 테이블을 만듦
    npx sequelize-cli db:migrate:undo : 마이그레이션 실행 취소
profile
Prospective Entrepreneur

0개의 댓글