Database
ORM, Sequelize - Database
파란배개
2020. 12. 7. 12:00
ORM = Object-Relational Mapping
object <-> ORM <-> Relational Database(Mysql같은 관계형 데이터베이스)
객체지향 프로그램과 관계형 데이터베이스는 접근방식이 다르지만 ORM은 접근방식을 객체지향 프로그램 방식으로 접근할 수 있도록 해준다.
ORM을 사용해서 데이터베이스 데이터를 객체나 클래스처럼 이용할 수 있게 된다.
SQL문 없이 데이터베이스에 접근이 가능하다.
Sequelize = ORM의 한 종류
a promise based Node.js(프로미스 사용 가능)
var Sequelize = require('sequelize');//sequelize를 불러온다
var db = new Sequelize('chatter', 'root', '');
//연결을 만들고 괄호 안은 순서대로 데이터베이스 이름, 유저네임, 비번
var User = db.define('User', {//db.define은 스키마를 작성하는 부분
username: Sequelize.STRING
});//Sequelize에서 update, id, created at 같은 필드는 자동으로 생성된다.
var Message = db.define('Message', {
userid: Sequelize.INTEGER,
text: Sequelize.STRING,
roomname: Sequelize.STRING
});
//INTEGER, STRING은 여러 RDBMS(데이터베이스 소프트웨어)들의 각자 다른 필드타입의 호환성을 위해
//sequelize에서 만들어낸 필드타입
User.sync()//.sync는 객체지향 코드와 database를 연결(코드와 스키마를 일치)해주는 것
.then(function() {//비동기 코드를 체이닝 해주고 있다
return User.create({username: 'Jean Valjean'});//INSERT INTO와 동일
})
.then(function() {
return User.findAll({ where: {username: 'Jean Valjean'} });//SELECT * WHERE 과 동일
})
.then(function(users) {
users.forEach(function(user) {
console.log(user.username + ' exists');
});
db.close();
})
.catch(function(err) {
console.error(err);
db.close();
});
ORM에서 더 공부해볼 주제
Association(데이터베이스의 JOIN)
- API를 참고해서 ORM을 이용해서 JOIN TABLE을 구현하는 것을 해보자.
(HasOne(일대), HasMany(다대) - BelongsTo(일), BelongsToMany(다))
Transaction(하나하나의 쿼리를 일련의 작업단위로 보고 작업이 성공하면 commit, 실패하면 rollback한다).