Sequelize 는 프로미스 기반의 Node.js ORM(Object-Releational-Mapping) 이다. DBMS인 PostgreSQL, MySQL, MariaDB, SQLite, MS-SQL을 지원한다.
//설치
$ npm install --save sequelize
sequelize-cli 는 마이그레이션을 할 수 있도록 돕는 툴로, CLI에서 모델을 생성해주거나, 스키마 적용을 할 수 있도록 돕는다. 설치 후, 공식 문서 외에 npx sequelize-cli --help 을 통해 명령의 종류를 파악할 수 있다.
// Sequelize CLI 설치
$ npm install --save-dev sequelize-cli
// 프로젝트 초기화(init)
$ npx sequelize-cli init
프로젝트 초기화 후, 아래와 같이 폴더가 생성된다.
config
, DB 연결 정보 저장models
, DB 모- migrations
, 마이그레이션 데이터 자동저장seeders
, 데이터 정의 congif.json
을 통해서 서버 연결을 진행하는데 기본적으로 development 를 사용한다. 만약 새롭게 다른 곳을 원한다면 model/index.js 에서 const env = process.env.NODE_ENV || 'development';
를 설정해주면 바꿀 수 있다.
config 파일 설정 후 아래와 같은 에러가 나온다면 비밀번호를 그냥 숫자로 집어넣은게 아닌지 확인해야한다. 에러문자 그대로 " data " 매개변수는 type이 string 이어야한다고 나와있다. 비밀번호를 따옴표 안에 넣어줘야 정상작동한다.
마이그레이션(Migrations)은 스키마 변경에 따른 데이터 이주(migration)를 뜻한다. model:generate
명령어를 통해서 작성할 수 있다.
$ npx sequelize-cli model:generate --name User --attributes firstName:string,lastName:string,email:string
그럼 아래와 같은 형태로 폴더 안에 파일들이 생성된다. 참고로 모델명을 단수로 적어도 테이블명은 복수형나온다. 위에 User 모델의 테이블명은 'Users'임을 확인할 수 있다.
하지만 DB는 비어있다. 이 단계에서는 모델을 만들어주었을 뿐이라, DB에 등록하기 위해서는 db:migrate
를 이용해서 제작해줘야한다.
$ npx sequelize-cli db:migrate
그럼 아래와 같이 테이블이 생성되고, 지정한 컬럼 속성이 어떻게 들어갔는지 알 수 있다.
$ npx sequelize-cli db:migrate:undo
// 특정 migration 실행취소
$ npx sequelize-cli db:migrate:undo:all --to XXXXXXXXXXXXXX-create-posts.js
위와 같이 롤백이나 실행취소를 했을 경우, 다시 마이그레이션을 통해 동기화 작업을 진행할 수 있다.
마이그레이션은 Git의 '커밋'과 같다.
마이그레이션을 통해서 스키마 변경에 대한 기록 을 진행하고, 그 로그를 확인할 수 있다. 스키마 버전관리로 보면 알기 쉽다. 스키마를 완벽하게 설계할 수 없기 때문에 마이그레이션을 통해 추후 새로운 기능을 추가하는 스키마 관리를 할 수 있다. 또한 데이터 복구를 위해서도 존재한다. 참고로 이미 만들어진 '필드'는 지우면 안된다. 이 필드는 언제 어디서 쓸지 모르기 때문이다.
위에 테이블 생성에서 보면 SequelizeMeta 라는 테이블이 자동 생성된 것을 알 수 있는데 이는 현재 데이터베이스에 실행된 migrations 기록을 볼 수 있는 테이블이다. 한 테이블에 하나의 Meta가 생성된다.
테이블간의 관계성을 만들어주는 것. 각 모델안에 아래의 관계를 작성해 준 후, 스키마 마이그레이션으로 연결할 외래키 컬럼을 생성하면 된다. (외래키 컬럼이 없을 경우), 제약이름을 설정해줘여 casecade나 remove 등이 가능하다.
HasOne
associationBelongsTo
associationHasMany
associationBelongsTo
associationBelongsToMany
association추가 참조사이트
Sequelize CLI를 사용하여 User API 만들기
처음 사용해보는 Sequelize
[Node.js] sequelize(2) - 모델 정의하기
https://sequelize.readthedocs.io/en/2.0/
int(11)관련
var db = new Sequelize('DB명', 'root', '비번')
db.define : 엔티티 정의(테이블)
테이블.sync() = 코드와 스키마를 일치시켜준다.
.then( ()=>{
return 테이블.create() = INSERT INTO
})
.then( ()=>{
return 테이블.findAll({where:...}) = SELECT *
})
... → 비동기코드 체이닝