[DataBase] ORM and ODM

먹보·2023년 2월 1일
0

MUK_BO's DataBase

목록 보기
3/6

데이터베이스에 대한 개념이 어느정도 잡히고 데이터베이스를 활용할 시기가 왔다면 ORMODM을 빼놓을 수는 없다.

물론 ORMODM 도움 없이도 하단에 있는 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();

하지만 ORMODM을 사용하게 되면 다양한 추가기능들을 사용 할 수 있으며, 개발이 조금 더 쉬워진다.

필자는 현재 자바스크립트와 타입스크립트를 공부하는 중이기 때문에, RDBMS용 ORM으로는 TypeORMSequelize를 간략하게 언급할 것이고 ODM으로는 Mongoose에 대해서 언급할 것이다 (물론 사용법과 메서드는 다루지 않을 것이다)

✍ ORM (Object Relational Mapping)

📝 ORM이란...

ORM(Object-relational mapping)은 객체지향 프로그래밍(Object-Oriented-Programming)과 관계형 데이터베이스(Relational-Database)사이의 호환되지 않는 데이터를 변환하는 기술입니다. 즉, ORM은 이렇게 서로 다른 객체와 관계형 데이터 시스템(RDBMS)을 연결해주는 중간 매개체 역할을 합니다.

✏️ 특징

  1. 추상화 : RAW QUERY를 사용하는 대신 객체와 메서드 기능을 제공하여 개발자들이 데이터베이스와 프로그래밍 언어 사이에서 활동을 할 수 있도록 Abstraction Layer를 제공한다.

  2. 관계형 객체 맵핑 : 프로그래밍 언어에서의 객체와 관계형 데이터베이스의 스키마를 맵핑해주기에, 개발자가 입력한 프로그래밍 언어의 값들이 자동으로 SQL 언어로 변경이 되어 데이터베이스에서 작동한다.

  3. 스키마 정의 : ORM은 데이터 베이스 내에서 쓰일 수 있는 스키마를 제공해 주고 프로그래밍 언어를 통해 직접 스키마를 작성 할 수 있기 때문에 유연하고 편리하다.

  4. 쿼리 빌딩 : 개발자들이 RAW QUERY를 사용하는 대신 조금 더 편안하게 개발을 진행 할 수 있도록 QUERY BUILDER를 제공한다.

  5. Connection Pooling(DB Configuration) : 데이터베이스의 커넥션 기능을 최적화하여 성능을 향상시키고 확장성에 용이하도록 Configuration을 제공한다.

  6. 데이터 검증 : 데이터베이스에 설정 한 값들이 유효한지 스키마에 맞는 값이 들어갔는지 검증할 수 있는 데이터 검증 기능을 제공한다.

  7. 트렌젝션 관리 : 데이터베이스가 에러가 발생해도 유지가 될 수 있도록 단일 트렌젝션이 일어나는 동안 다양한 데이터 베이스 작업을 개발자가 할 수 있도록 트렌젝션 관리 기능을 제공한다.

✏️ ORM에는 어떤 것들이 있을까?

  • Ruby : ActivdRecord
  • Python : Django, SQLAlchemy
  • Java : Hibernate
  • JavaScript : Sequelize, TypeORM

📝 TypeORM

✏️ 장점 (ORM 특징에 언급했던 부분은 제외)

  1. 타입스크립트 지원 : TypeORM Github를 들어가보면 알겠지만 거의 100% TypeScript 기반으로 세워져 있다. 그렇기 때문에 자바스크립트에서는 당연히 작동하는 것은 물론 타입스크립트 기반 프로젝트에서는 잠재력을 최대로 발휘 할 수 있으며 타입스크립트의 장점을 다 가지고 온다.

  2. ORM 및 ODM 지원 : TypeORM은 ORM과 ODM 모두 지원하기에 다양한 프로젝트와 데이터베이스에 쓰일 수 있다.

  3. TypeORM은 규모가 큰 프로젝트에 적절한 선택이다

✏️ 단점

  1. 숙련도가 높다.

  2. Performance Overhead : 다른 ORM과 마찬가지로 Library이기에 Performance Overhead는 가지고 있지만....

📝 Sequelize

✏️ 장점

TypeORM의 장점을 전부 가지고 있다.

✏️ 단점

TypeORM의 단점과 비슷하다

하지만 한 가지 추가 할 수만 있다면, TypeScript 기반이 아니기에 (32%) 타입 연결고리를 상대적으로 약하다.

✍ ODM (Object Document Mapper)

📝 ODM이란...

ODM은 NoSQL 데이터베이스의 Documents와 Objects 간의 매핑을 도와주는 기술이며 ORM과 비슷하지만 Documents가 목적지라는 것만큼은 다르다.

✏️ 특징

  1. NoSQL 데이터 베이스 지원

  2. 객체형 접근

  3. 강력한 유효성 검증 (데이터 타입, 필드 값 검증 등)

📝 Mongoose

✏️ 장점

  1. 추상화 계층

  2. 객체형 접근

  3. 강력한 유효성 검증

  4. 방대한 커뮤니티

✏️ 단점

  1. Performance Overhead

  2. 복잡성과 숙련도

  3. No Strict Schema

profile
🍖먹은 만큼 성장하는 개발자👩‍💻

0개의 댓글