sequelize - Getting Started[번역]
시작 하기 앞서 해당 글은 sequelize document를 직접 번역함을 알립니다. 영어를 많이 잘하지 못하여 오역이 있을 수 있습니다.
설치
Sequelize는 NPM을 통하여 사용할 수 있다.
$ npm install --save sequelize
# 다음 중 하나를 실행(사용하는 디비에 맞게 설치)
$ npm install --save pg pg-hstore
$ npm install --save mysql // mysql, mariadb 사용 할 경우
$ npm install --save sqlite3
$ npm install --save tedious // MSSQL사용 할 경우
연결 설정
Sequelize는 초기화시 연결풀을 설정 하므로 데이터베이스당 하나의 인스턴스만 생성하는 것이 이상적입니다.
var sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mysql'|'mariadb'|'sqlite'|'postgres'|'mssql',
pool: {
max: 5,
min: 0,
idle: 10000
},
// 오직 SQLite만
storage: 'path/to/database.sqlite'
});
// 또는 간단하게 연결하기 위한 URI를 사용할 수 있다.
var sequelize = new Sequelize('postgres://user:pass@example.com:5432/dbname');
Sequelize생성자는 API 레퍼런스를 통해 사용할 수 있는 다양한 옵션들을 확인 할 수 있다.
첫번째 모델
sequelize.define('name', {attributes}, {options})
와 같이 모델 정의
var User = sequelize.define('user', {
firstName: {
type: Sequelize.STRING,
field: 'first_name' // Will result in an attribute that is firstName when user facing but first_name in the database
},
lastName: {
type: Sequelize.STRING
}
}, {
freezeTableName: true // 모델의 테이블 이름(user)은 해당 모델 이름과 같다
});
User.sync({force: true}).then(function () {
// 테이블 생성
return User.create({
firstName: 'John',
lastName: 'Hancock'
});
});
더 다양한 옵션은 API 레퍼런스에서 찾을 수 있다.
어플리케이션 다양한 모델 옵션
Sequelize 생성자는 정의된 모든 모델들의 기본 옵션인 define
옵션을 가지고 있다.
var sequelize = new Sequelize('connectionUri', {
define: {
timestamps: false // 기본값인 true
}
});
var User = sequelize.define('user', {}); // timestamps is false by default
var Post = sequelize.define('post', {}, {
timestamps: true // timestamps는 이제 true이다.
});
Promises
Sequelize는 비동기의 흐름을 제어하기 위해 Promises를 사용한다. 만약 여러분들이 promise 사용 하는 방법이 익숙하지 않는다면 here 또는 here를 들어가서 복습을 하면 좋은 시간을 보낼 수 있습니다.
기본적으로 하나의 promise 어느 지점에서의 값을 보여준다. “나는 여러분들에게 어느 지점에서 결과나 오류를 줄 것이라고 약속합니다. 이것이 의미하는 것은
// 이렇게 쓰면 안된다!
user = User.findOne()
console.log(user.get('firstName'));
적용되지 않을 것이다. user
는 promise 객체이기 때문에 DB에서 가져온 데이터 행이 아닙니다. promise를 사용하는 올바른 방법은 다음과 같습니다.
User.findOne().then(function (user) {
console.log(user.get('firstName'));
});
여러분들은 promise를 다루는 방법과 그것이 어떻게 작동하는 지에 대해서 다음 bluebird API 레퍼런스를 참조할 것이다.
특히, 여러분들은 아마도 .all
을 많이 사용할 것이다.