소프트웨어가 돌아가는 방식에 대한 하나의 패턴, 아이디어, 디자인
코드 가독성, 관리성, 퀄리티가 나아짐.
Model을 기술하는 도구.
관계형 데이터베이스(Mysql같은)의 entity, record에 접근할 때 마치 자바스크립트 객체, 클래스를 다루듯이 다룰 수 있게 해줌. 그 사이의 통역사 같은 존재.
이를 통해 데이터베이스 세계와 프로그래밍 언어 사이의 개념의 간극을 줄여줌.
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
빈 프로젝트 만들기 : init
명령 실행 npx sequelize-cli init
config
데이터베이스에 연결하는 방법을 CLI에 알려주는 구성 파일이 포함되어 있습니다.models
프로젝트의 모든 모델을 포함합니다.migrations
모든 마이그레이션 파일 포함seeders
모든 시드 파일을 포함합니다.config 파일을 이용해 MYSQL 접속 설정
Sequelize CLI는 기본적으로 mysql을 가정함.
MYSQL 접속: sequelize db:create
config/config.json 파일을 읽은 후 development 모드에 있는 database를 생성.
모델 생성
모델: 엔티티를 객체로 표현한 형태, 데이터 구조를 기술하고 데이터에 수행할 수 있는 명령의 모음을 의미
모델 생성 명령어 -> 모델 이름은 Url, field는 url, title, visits인 경우
npx sequelize-cli model:generate --name url --attributes url:string,title:string,visits:integer
아래와 같이 url.js 파일이 생성됨
*필드값의 기본값을 설정해주고 싶은 경우 -> defaultValue : (초기화값)
npx sequelize-cli db:migrate
: 마이그레이션 파일에 지정된 대로 모든 열을 사용하여 호출된 테이블을 만듦npx sequelize-cli db:migrate:undo
: 마이그레이션 실행 취소