ORM / Sequelize & typeORM 본문
미래의 나에게 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 에서 일반적으로 사용)
공식문서를 따르면, TypeORM은 여러 플랫폼을 지원하며
궁극적으로 사용자의 데이터베이스 관리를 도와주는 역할을 한다.
추가적으로 TypeORM은 Active Record / Date Mapper 패턴을 모두 지원하여,
느슨하게 결합할 수 있으며 / 확장 가능성 높고 / 유지보수 용이한 프로젝트를 만들 수 있다고 하는데 이에 대해 다뤄본다.
Active Record Pattern
Active record pattern 은 모델 안에서
- 모든 쿼리 메서드를 정의
- 모델 메서드를 사용하여 객체를 CRUD
할 수 있게 하는 방식을 의미한다.
Data Mapper Patten
Data Mapper Patten 은
- '레퍼지토리'라는 별도 클래스에 모든 쿼리메서드를 정의
- '레퍼지토리'를 활용해 객체를 CRUD
할 수 있게 하는 방식을 의미한다.
'개발 > node.js' 카테고리의 다른 글
Node.js, 미들웨어 & 라우터 핸들러 (0) | 2023.04.13 |
---|---|
node.js & graphQL (0) | 2023.04.11 |
NestJS - 기초 구조 / graphQL (0) | 2023.01.25 |
node.js - about TypeScript (타임스크립트) (0) | 2023.01.25 |
node.js - graphQL : Schema-first vs Code-first (0) | 2023.01.24 |