ODM : Object-Document Mapper
: NoSQL에서 Document Database를 지원하기 위해 데이터를 변환하는 프로그래밍 기법
NoSQL(Not Only SQL)
- 관계형 데이터베이스 뿐만 아니라 다양한 데이터베이스를 명칭함
- 빅데이터를 다룰 때 RDBMS로만 트래픽을 감당하기 어려워져 이를 해결하기 위해 탄생한 것
MongoDB
: NoSQL DBMS의 중 가장 많이 사용되는 DBMS. mongo는 humongous를 줄인 표현
특징
- Join이 없으므로 Join이 필요 없도록 데이터 구조화가 필요
- 다양한 종류의 쿼리문을 지원(필터링, 수집, 정렬, 정규표현식 등)
- 관리의 편의성
- 스키마 없는(Schemaless) 데이터베이스를 이용한 신속 개발. 필드를 추가하거나 제거하는 것이 매우 쉬워짐
- 쉬운 수평 확장성
- 인덱싱 제공
mongoose
: mongoose : node.js 기반이고 MongoDB와 프로그램 사이 데이터를 변환해주는 ODM
ORM : Object-Relational Mapper
: 데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법
ORM(Object-relatinal mapping)이란 객체(클래스)와 관계(관계형 데이터 베이스)와의 설정을 의미한다. 객체 지향 프로그래밍은 클래스를 사용하고 관계형 데이터 베이스는 테이블을 사용하는데 객체 모델과 관계형 모델간에 불일치가 존재 하는데 이 객체간의 관계를 바탕으로 SQL을 자동 생성하여 불일치를 해결 하는 것이 ORM.
예를 들면,
- DB : MySQL
- ORM : MyBatis
- Program : Java Application
객체(Class) <- ORM -> DB 데이터
장점
- 객체 지향적 코드로 인해 더 직관적이고 비즈니스 로직에 집중할 수 있도록 도와줌
- 재사용 및 유지보수의 편리성
- DBMS에 대한 종속성이 낮음
단점
- 복잡성이 올라갈 수록 난이도가 높아짐
- 프로시저가 많은 시스템을 전환하기가 어려움
종류
- Sequelize : Node.js에서 가장많이 사용되고 있는 ORM이며 MySQL, PostgreSQL, MariaDB, SQLite, MSSQL을 지원
- Prisma : GraphQL스키마를 기반으로 DB를 자동생성 해줌
- myBatis : 개발자가 지정한 SQL, 저장 프로시저 그리고 몇 가지 고급 매핑을 지원하는 SQL Mapper
- jdbc : DB에 접근할 수 있도록 Java에서 제공하는 API
- jpa : JPA는 ORM을 사용하기 위한 표준 인터페이스를 모아둔 것, JPA의 대표적인 구현체로는 Hibernate, EclipseLink, DataNucleus, OpenJPA, TopLink Essentials 등
- hibernate : HQL(Hibernate Query Language)이라 불리는 매우 강력한 쿼리 언어를 포함
SQL vs NoSQL
https://edu.goorm.io/learn/lecture/557/%ED%95%9C-%EB%88%88%EC%97%90-%EB%81%9D%EB%82%B4%EB%8A%94-node-js/lesson/174384/mongodb%EB%9E%80