데이터베이스를 조작하기 위해 SQL 문을 작성해야 합니다. 하지만 SQL 문법을 코드와 함께 작성하면 가독성이 떨어집니다. 이런 문제를 해결하기 위해 ORM을 사용합니다.
Object Relational Mapping은 객체(Object)와 관계(Relation)를 맵핑(Mapping)하여 비즈니스 로직에 집중할 수 있도록 데이터 처리를 도와줍니다.
ORM을 사용하면 DBMS에 종속되지 않으며 생산성, 독립성, 가독성 및 유지보수 측면에서 장점이 있습니다. 하지만 Query가 복잡해질수록 오히려 생산성이 떨어지는 단점도 존재합니다.
Node에서 가장 많이 사용되는 ORM입니다. Promise를 기본으로 동작하기 때문에 비동기 코드를 보기 좋게 작성할 수 있습니다.
npm install --save sequelize mysql
npm install -g sequelize-cli
Sequelize cli를 통해서 migration, seeder, model의 초기 설정을 할 수 있습니다.
(migration, seeder, model 폴더는 직접 생성하는 게 아닙니다.)
ex) User 전체 데이터 조회하기
models.User.findAll()
.then(results) {
res.json(results);
})
.catch(err => {
console.error(err);
});
Sequelize는 결과를 Promise로 리턴합니다. 따라서 findAll 역시 Promise를 리턴합니다. query의 결과는 then에서 출력하고 catch문을 통해 error handling을 할 수 있습니다.
models.User.create({userID: 'userId', password: 'Password'})
.then(result => {
res.json(result);
})
.catch(err => {
console.error(err);
});
create를 통해 Insert 된 row 정보를 추가할 수 있습니다.
models.User.update({password: 'Password'}, {where: {userID: 'userId'}})
.then(result => {
res.json(result);
})
.catch(err => {
console.error(err);
});
update할 데이터를 입력해 userId의 비밀번호를 업데이트 할 수 있습니다.
models.User.destroy({where: {userID: 'userId'}})
.then(result => {
res.json({});
})
.catch(err => {
console.error(err);
});
destroy를 통해 데이터를 삭제할 수 있습니다. 중요한 부분은 where 조건을 입력해야 합니다. 조건이 없다면 테이블 모든 row가 삭제될 수 있습니다.