데이터베이스에 대한 개념이 어느정도 잡히고 데이터베이스를 활용할 시기가 왔다면 ORM
과 ODM
을 빼놓을 수는 없다.
물론 ORM
과 ODM
도움 없이도 하단에 있는 MySQL 예제처럼 직접적으로 연결해서 사용 할 수 있다.
const mysql = require("mysql");
const connection = mysql.createConnection({
host: "localhost",
user: "root",
password: "root",
database: "testdb"
});
connection.connect(function(err) {
if (err) throw err;
console.log("Connected to the database!");
});
const query = "SELECT * FROM users";
connection.query(query, function(err, result) {
if (err) throw err;
console.log(result);
});
connection.end();
하지만 ORM
과 ODM
을 사용하게 되면 다양한 추가기능들을 사용 할 수 있으며, 개발이 조금 더 쉬워진다.
필자는 현재 자바스크립트와 타입스크립트를 공부하는 중이기 때문에, RDBMS용 ORM
으로는 TypeORM
과 Sequelize
를 간략하게 언급할 것이고 ODM
으로는 Mongoose
에 대해서 언급할 것이다 (물론 사용법과 메서드는 다루지 않을 것이다)
ORM(Object-relational mapping)은 객체지향 프로그래밍(Object-Oriented-Programming)과 관계형 데이터베이스(Relational-Database)사이의 호환되지 않는 데이터를 변환하는 기술입니다. 즉, ORM은 이렇게 서로 다른 객체와 관계형 데이터 시스템(RDBMS)을 연결해주는 중간 매개체 역할을 합니다.
추상화 : RAW QUERY를 사용하는 대신 객체와 메서드 기능을 제공하여 개발자들이 데이터베이스와 프로그래밍 언어 사이에서 활동을 할 수 있도록 Abstraction Layer를 제공한다.
관계형 객체 맵핑 : 프로그래밍 언어에서의 객체와 관계형 데이터베이스의 스키마를 맵핑해주기에, 개발자가 입력한 프로그래밍 언어의 값들이 자동으로 SQL 언어로 변경이 되어 데이터베이스에서 작동한다.
스키마 정의 : ORM은 데이터 베이스 내에서 쓰일 수 있는 스키마를 제공해 주고 프로그래밍 언어를 통해 직접 스키마를 작성 할 수 있기 때문에 유연하고 편리하다.
쿼리 빌딩 : 개발자들이 RAW QUERY를 사용하는 대신 조금 더 편안하게 개발을 진행 할 수 있도록 QUERY BUILDER
를 제공한다.
Connection Pooling(DB Configuration) : 데이터베이스의 커넥션 기능을 최적화하여 성능을 향상시키고 확장성에 용이하도록 Configuration을 제공한다.
데이터 검증 : 데이터베이스에 설정 한 값들이 유효한지 스키마에 맞는 값이 들어갔는지 검증할 수 있는 데이터 검증 기능을 제공한다.
트렌젝션 관리 : 데이터베이스가 에러가 발생해도 유지가 될 수 있도록 단일 트렌젝션이 일어나는 동안 다양한 데이터 베이스 작업을 개발자가 할 수 있도록 트렌젝션 관리 기능을 제공한다.
타입스크립트 지원 : TypeORM Github를 들어가보면 알겠지만 거의 100% TypeScript 기반으로 세워져 있다. 그렇기 때문에 자바스크립트에서는 당연히 작동하는 것은 물론 타입스크립트 기반 프로젝트에서는 잠재력을 최대로 발휘 할 수 있으며 타입스크립트의 장점을 다 가지고 온다.
ORM 및 ODM 지원 : TypeORM은 ORM과 ODM 모두 지원하기에 다양한 프로젝트와 데이터베이스에 쓰일 수 있다.
TypeORM은 규모가 큰 프로젝트에 적절한 선택이다
숙련도가 높다.
Performance Overhead : 다른 ORM과 마찬가지로 Library이기에 Performance Overhead는 가지고 있지만....
TypeORM의 장점을 전부 가지고 있다.
TypeORM의 단점과 비슷하다
하지만 한 가지 추가 할 수만 있다면, TypeScript 기반이 아니기에 (32%) 타입 연결고리를 상대적으로 약하다.
ODM은 NoSQL 데이터베이스의 Documents와 Objects 간의 매핑을 도와주는 기술이며 ORM과 비슷하지만 Documents가 목적지라는 것만큼은 다르다.
NoSQL 데이터 베이스 지원
객체형 접근
강력한 유효성 검증 (데이터 타입, 필드 값 검증 등)
추상화 계층
객체형 접근
강력한 유효성 검증
방대한 커뮤니티
Performance Overhead
복잡성과 숙련도
No Strict Schema