[Node.js] Mysql 시퀄라이즈 요약
시퀄라이즈는 Mysql 작업을 쉽게 할 수 있도록 도와주는 라이브러리입니다. ORM(객체 관계 매핑)으로 분류되는데요.
자바스크립트 객체와 데이터베이스의 릴레이션을 매핑해주는 도구 역할을 합니다.
시퀄라이즈를 사용하는 이유?
자바스크립트 구문을 알아서 SQL로 바꿔줍니다. 따라서 SQL 언어를 직접 사용하지 않아도 자바스크립트만으로 MySQL을 조작할 수 있습니다.
시퀄라이즈 설치
express learn-sequelize --view=pug
폴더로 이동해 npm 패키지 설치
cd learn-sequelize
npm i
시퀄라이즈에 필요한 패키지 설치 (sequelize, mysql2)
npm i sequelize mysql2
npm i -g sequelize-cli ( sequelize 커맨드 사용을 위해 전역 설치 )
sequelize init
MySQL 연결
시퀄라이즈를 통해 익스프레스와 MySQL을 연결해야 합니다. app.js에 아래와 같이 추가합니다.
var sequelize = require('./models').sequelize;
sequelize.sync();
sync를 사용하면 서버 실행 시 알아서 MySQL과 연동할 수 있습니다.
시퀄라이즈로 CRUD를 작성해보면서 알게된 중요 포인트 정리
1. 시퀄라이즈는 알아서 id를 기본키로 연결해줌. 따라서 id 컬럼은 적어줄 필요 X
2. MySQL 테이블 컬럼 내용과 정확히 일치하는 모델을 만들어야 연결 가능. 만약 npm start 진행 시 오류가 나면, model에 오타가 있거나 컬럼이 잘못되지 않았는지 확인하자
3. 시퀄라이즈로 모델 정의 시 기본 형태
module.exports = (sequelize, DataTypes) => {
return sequlize.define (1, 2, 3)
}
1 : 모델 이름 -> ex. 'user'
2 : 모델 컬럼 -> ex. name: { type : DataTypes.STRING(20) }, age: { type : DataTypes.INTEGER.UNSIGNED },
3 : 테이블 옵션 -> ex. { timestamps: true }
4. 시퀄라이즈와 MySQL의 자료형 차이점
MySQL : 시퀄라이즈
VARCHAR : STRING
INT : INTEGER
TINYINT : BOOLEAN
DATETIME : DATE
NOT NULL : allowNull
DEFAULT : defaultValue
5. Date에서 현재 시간을 나타내는 now()를 시퀄라이즈에서 사용하려면, sequlize.literal('now()')로 작성. literal 메서드는 인자로 넣은 문자 그대로 사용하는 역할
6. define 메서드의 세 번째 인자는 테이블 옵션. timestamps는 createdAt과 updatedAt 컬럼을 생성해주고, 로우가 생성될 때와 수정될 때 시간이 자동으로 입력된다.
7. paranoid는 timestamps가 true일 때 자주 사용. deletedAt 컬럼을 추가해주며 로우 삭제 시 제거 날짜를 기록 (데이터 복구에 활용)
8. config.json에서 development는 개발 시, prodection은 배포 시, test는 테스트 시 알맞게 이용
9. 관계 정의
외래키로 연결된 테이블이 존재하면 관계를 정의해야 함.
각 관계시 사용하는 메서드
1 : N -> hasMany, belongsTo
1 : 1 -> hasOne, belongsTo
N : M -> hasMany, belongsToMany
10. 시퀄라이즈 Op 연산자는 초과(Op.gt), 미만(Op.lt) 등에 사용
'Node.js' 카테고리의 다른 글
[Node.js] 핵심 요약 (0) | 2018.09.26 |
---|---|
[Node.js] 6. 파일 업로드 (0) | 2018.04.04 |
[Node.js] 5. 웹 애플리케이션 만들기 (0) | 2018.04.03 |
[Node.js] 4. Express 프레임워크 (get과 post) (0) | 2018.04.02 |
[Node.js] 3. Express 프레임워크(템플릿, URL) (0) | 2018.04.02 |