시퀄라이저
노드 기반의 ORM 지원 패키지 모듈이다.
https://sequelize.org/master/manual/model-querying-basics.html
설치하기
// 시퀄라이저와 mysql 설치
npm i sequelize mysql2
// 시퀄라이저 명령어 사용을 위해 명령어 설치
npm i -g sequelize-cli
시작하기
시퀄라이즈 사용을 편하게 하기위해 템플릿을 가져온다. = 프로젝트 구조를 생성해준다.
sequelize init // 템플릿을 추가해준다
생성된 폴더 설명
- config
데이터베이스 연결정보 환경설정 파일 폴더 - models
테이블과 맵핑되는 모델 정의 파일을 보관 및 모델 기반 프로그래밍 처리 모듈을 제공한다 - migrations
데이터를 옮길때 사용 - seeders
서버가 시작될 때, 가지고 있어야하는 정적 데이터들을 DB에 추가해준다.
models
models 폴더에 있는 index.js는 가장 중요한 파일이다.
models 폴더 안에 있는 파일들이 실제로 데이터베이스의 테이블과 1:1로 매핑이 된다.
1. index.js 수정하기
기존의 sequelize init을 사용해 만들어진 코드는 오류가 발생할 수 있어서 다시작성해준다.
'use strict';
// 경로를 위한 내장 모듈
const path = require('path');
// sequelize 패키지
const Sequelize = require('sequelize');
// 개발 모드 환경설정
const env = process.env.NODE_ENV || 'development';
// 데이터 베이스 연결 환경설정
// ../config/config.json에서 해당 env를 키로 가지는 데이터를 가져온다.
const config = require(path.join(__dirname,'..','config','config.json'))[env];
// 데이터베이스 객체
const db = {}; // 여기와 실제 데이터베이스가 연결된다.
// 데이터베이스 연결정보로 시퀄라이즈 ORM 객체를 생성한다
const sequelize = new Sequelize(config.database, config.username, config.password, confing);
// 데이터베이스와 ORM을 매핑한다.
// 이제부터 db를 통해 데이터베이스를 관리할 수 있다.
db.sequelize = sequelize; // db객체에 sequelize라는 프로퍼티 추가
db.Sequelize = Sequelize;
// 만든 db 객체를 exports 한다.
module.exports = db;
2. config를 수정해준다.
사용할 제품의 상태 [ develope, test, production ]에 맞게 데이터베이스 정보를 설정해준다.
중요한 정보가 들어가기때문에 관리에 유의한다.
3. 만든 ORM을 사용하기위해 app.js에서 설정해준다.
app.js는 어플리케이션이다.
// ORM 불러오기
// 오타 조심..
const {sequelize} = require('./models/index'); // db.sequlize 객체
// 데이터베이스 연동와 자동 연동하기
sequelize.sync({force : false}) // force가 true라면 매번 테이블을 새로 생성한다.
.then(()=>{
console.log('데이터베이스 연결 성공');
})
.catch((error)=>{
console.log(`데이터베이스 연결 실패 ${error}`);
})
데이터 베이스와 연동할 때, config에 있는 정보를 가지고 연동한다.
4. 모델을 정의하기
테이블과 모델이 매핑된다.
const Sequelize = require('sequelize');
// 클래스를 사용해서 모델 만들기
module.exports = class Member extends Sequelize.Model{
// init 메서드로 테이블 설정하기
static init(sequelize){
// super는 상속받는 부모 클래스를 말한다. === Sequelize.Model
return super.init({
// 첫번째 인수는 테이블 컬럼을 의미한다 = 속성
name:{
type : Sequelize.STRING(20),
allowNull : false,
unique : true,
},
age :{
type : Sequelize.INTEGER.UNSIGNED, // 음수 X
allowNull : false,
},
},
// 두번째 인수는 테이블 자체에 대한 설정을 의미한다.
{
sequelize,
timestamps: true, // 자동으로 createdAt과 updatedAt 속성 추가
charset:'utf8',
collate:'utf8_general_ci',
modelName: 'Member',
tableName:'Members',
paranoid : true, // 삭제시, 바로 삭제가 아닌 삭제
})
}
}
5. 만든 모델을 models/index.js에 연결한다.
index.js는 모든 모델들을 관리하는 파일이다.
// 만든 모델 가져와서 db에 프로퍼티로 추가하기
const Member = require('./member');
db.Member = Member;
Member.init(sequelize); // super.init을 리턴받기 때문에 실행을 해줘야한다
서버가 재시작되면서 테이블이 생성된다.
id는 시퀄라이저가 자동으로 생성하는 속성이다.
참고자료
Node.js 교과서
'공부 > 데이터베이스' 카테고리의 다른 글
[MySQL] root 비밀번호 변경하기 (0) | 2021.06.30 |
---|---|
ORM이란? (0) | 2021.06.27 |
데이터베이스 기초 (0) | 2021.06.27 |
댓글