본문 바로가기

ORM / Sequelize & typeORM 본문

개발/node.js

ORM / Sequelize & typeORM

자전하는명왕성 2023. 1. 29. 01:20

미래의 나에게 typeORM

@nestjs/typeorm typeorm mysql2

 

typeORM 에 대해 포스팅 전 다루어야 할 개념에 대해 먼저 소개한다.

 

ORM

ORM (Object relational Mapping) 은, 그 말마따나 객체와 관계를 맵핑해주는 것을 말한다.

여기서 Mapping 이란, OOP(객체 지향 프로그래밍) 로 이루어진 Class 와,

SQL(관계형 데이터 베이스)의 Table 을 연결시켜주는 것을 의미한다.

이전 포스팅에서 ODM(mongoose)를 통해 noSQL문을 작성했던 것처럼

ORM 또한 객체 지향적으로 코드를 작성할 수 있게 도와주는 역할을 한다.

 

Sequelize (JavaScript 에서 일반적으로 사용)

Sequelize 는 ORM을 지원하는 라이브러리이며,

TypeScript / Node.js / Postgres / MySQL / MariaDB / SQLite / SQL server 등을 지원한다.

Sequelize는 앞서 말했던 ODM인 mongoose 와 비슷한 역할을 하며, 

덕분에 쿼리문을 작성하지 않고도, 쿼리 로직을 작성할 수 있다.

 

설치를 완료하면 4가지의 폴더들이 생성된다.

  • config : DB의 설정 파일을 비롯해, 기본적인 정보들이 수록되어 있다.
  • migrations : 변화하는 데이터를 추적 / 반영 / 취소 할 수 있다.
  • models : DB 각 테이블의 정보를 정의하고 하나의 객체로 모은다.
  • seeder : 테이블에 기본적인 데이터를 넣기 위해 활용한다.

 

typeORM (typescript 에서 일반적으로 사용)

https://typeorm.io/

 

TypeORM - Amazing ORM for TypeScript and JavaScript (ES7, ES6, ES5). Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server,

 

typeorm.io

공식문서를 따르면, TypeORM은 여러 플랫폼을 지원하며

궁극적으로 사용자의 데이터베이스 관리를 도와주는 역할을 한다.

추가적으로 TypeORM은 Active Record / Date Mapper 패턴을 모두 지원하여,

느슨하게 결합할 수 있으며 / 확장 가능성 높고 / 유지보수 용이한 프로젝트를 만들 수 있다고 하는데 이에 대해 다뤄본다.

 

Active Record Pattern

 

Active record pattern 은 모델 안에서

  • 모든 쿼리 메서드를 정의
  • 모델 메서드를 사용하여 객체를 CRUD

할 수 있게 하는 방식을 의미한다.

 

Data Mapper Patten

 

Data Mapper Patten 은

  • '레퍼지토리'라는 별도 클래스에 모든 쿼리메서드를 정의
  • '레퍼지토리'를 활용해 객체를 CRUD

할 수 있게 하는 방식을 의미한다.

 

Comments