RDBMS란?
Sequelize
Node.js 기반의 ORM으로 PostgreSQL, MySQL, MariaDB, SQLite, MS-SQL을 지원한다.
프로미스 기반의 ORM이기 때문에 비동기 처리에 용이하다.
table 대신 modeling을 통해 객체 형태로 table을 짠다.
기본적인 query문은 아래와 같다.
// Find all users
User.findAll().then(users => {
console.log("All users:", JSON.stringify(users, null, 4));
});
// Create a new user
User.create({ firstName: "Jane", lastName: "Doe" }).then(jane => {
console.log("Jane's auto-generated ID:", jane.id);
});
// Delete everyone named "Jane"
User.destroy({
where: {
firstName: "Jane"
}
}).then(() => {
console.log("Done");
});
// Change everyone without a last name to "Doe"
User.update({ lastName: "Doe" }, {
where: {
lastName: null
}
}).then(() => {
console.log("Done");
});
ORM과 ODM 구분
ORM?
Object Relational Mapping, 객체-관계 매핑객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다.
객체 간의 관계를 바탕으로 SQL을 자동 생성해서 sql 쿼리문 없이도 데이터베이스의 데이터들을 다룰 수 있다.
ORM의 장점
- 객체 지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중할 수 있게 도와준다.
- 재사용 및 유지보수의 편리성이 증가한다.
특정 DB에 한정 되지 않기 때문에 나중에 어떤 DB로든 쉽게 migration 가능하다ORM의 단점
완벽하게 ORM으로만 서비스를 구현하기가 어렵다.
프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어렵다ODM: Object Document Mapping
ORM과 동일하게 객체 관계로 정의한 내용을 NoSQL 형태로 매핑(연결)해주는 도우미 역할을 한다.
NoSQL?
Not Only SQL이라고도 표현되며 SQL 또는 관계형 DB만을 사용하지 않고 여러유형의 DB를 사용하는 확장된 DB를 말한다.
기본적으로 SQL과 반대되는 접근방식을 따르고 비관계형 데이터베이스라고 불리며 스키마가 없다.
예를 들어 구매 내역이나 게임의 로그 같은 데이터들은 매 초마다 엄청난 양이 생성되지만 한번 저장되고 난 뒤에는 수정될 일이 거의 없다. 거기다 생성되는 데이터의 양도 많기 때문에 장비의 성능에도 상당한 영향을 미칠 것이다. NoSQL은 이러한 데이터들을 효율적으로 저장할 수 있다. 여러 대의 장비에 빠른 속도로 저장이 가능하며, 데이터의 양이 누적되더라도 얼마든지 수평적 확장이 가능하기 때문이다.
실제로 페이스북이나 트위터 같은 SNS에서는 게시글들을 저장하는 데 NoSQL 데이터베이스를 사용하고 있다.
NoSQL의 특징
MongoDB가 NoSQL이다
기본 사용방법:
insert: db.콜렉션명.insert({필드1: "값1", 필드2: "값2", ...})
select: db.콜렉션명.find({필드1: "값1", ...})
update: db.콜렉션명.update({조건 필드: "값"}, {$set: {변경 필드: "변경 값"})
delete: db.콜렉션명.remove({삭제할 필드: "값"})
Mongoose
MongoDB 기반 ODM(Object Data Mapping) Node.JS 전용 라이브러리
MongoDB는 Document 기반이지만 RDBMS에서 사용하는 스키마(schema) 개념의 부활, populate, 프로미스와 콜백 사용 가능, 편리한 쿼리 빌더 등의 장점으로 많이 쓰이는 ODM이다.
NoSQL 기반에서 schema를 정의하여 model에 도움을 주는 라이브러리