ORM
-
[Prisma] - 중복되는 로우 쿼리 재사용하기ORM/Prisma 2022. 3. 28. 19:01
Prisma 에서 Raw Query 를 사용할 때 공통되는 부분이 생기기 마련입니다. 예를 들어 아래와 같은 2개의 쿼리를 사용하고 있다고 가정을 해봅시다. this.prismaService.$queryRaw`select * from User where id = ${userId};`; this.prismaService.$queryRaw`select * from User where age < ${maxAge};`; select * from User 쿼리가 현재 공통으로 사용되고 있습니다. 만약 select * from User 을 문자열로 만들어서 추가해주면 어떻게 될까요? const selectQuery: string = 'select * from User'; this.prismaService.$quer..
-
Prisma - RelationORM/Prisma 2021. 12. 29. 19:41
Prisma Relation Prisma 는 RDB 기반의 여러 DBMS(PostgreSQL, MySQL, MariaDB...) 를 지원합니다. RDB 에서 관계는 핵심이며 이를 통해서 무결성을 보장하고, join 을 통해 우리가 원하는 데이터를 테이블 별로 가져올 수 있습니다. 우리가 정의한 model 을 통해서 실제 DB 스키마를 생성합니다. Prisma 에서는 3가지의 방법으로 모델을 정의할 수 있습니다. 1 : 1 : 남편과 부인의 관계, 남편은 2명 이상의 부인을 둘 수 없다. 1 : N : 부모와 자식의 관계, 부모는 1명 이상의 자식들을 가질 수 있다. N : M : 학원과 학생의 관계, 학원에는 여러 학생이 수강할 수 있고 학생도 여러개의 학원을 수강할 수 있다. 관계는 Prisma 스키마..
-
NestJS, Prisma - CRUDORM/Prisma 2021. 12. 26. 22:44
Prisma, Mysql 시작하기 Prisma 란? 공식 홈페이지 에서 확인해보면 차세대 오픈 소스 ORM 으로 아래와 같은 구성으로 이뤄져있다고 합니다. Prisma Client : NodeJS 와 TypeScript 전용 Type Safe 및 자동 생성 쿼리빌더 Prisma Migrate : Migration system, 데이터 모델링 Prisma Studio : GUI 를 통해 DB 를 수정할 수 있는 기능 Prisma Client 는 모든 NodeJS 또는 Typescript 백엔드 어플리케이션에서 사용이 가능하다고 합니다. 그리고 PostgreSQL, MySQL, MariaDB, SQLite 등의 데이터베이스를 지원합니다. 왜 Prisma 를 사용할까? Prisma 의 주요 목적은 데이터베이스..
-
TypeORM - N + 1 문제ORM/TypeORM 2021. 12. 11. 22:19
ORM N + 1 문제 N + 1 문제가 뭘까? ORM 의 연관 관계에서 발생하는 문제로, 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수(N) 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오게 되는 것입니다. 예를 들어 사용자는 여러개의 상품을 가지고 있을 수 있기 때문에 User 와 Product 엔티티가 1 : N 관계로 설정되어 있다고 가정해봅시다. 특정 유저를 조회 했을 때 (SELECT 1번), 해당 유저와 관련된 상품을 N 번 더 조회합니다(SELECT N번). 위의 문제에 대한 해결 방법을 알아보기 전에 관련된 중요한 개념인 Eager Loading 과 Lazy Loading 에 대해서 알아봅시다. Eager Loading 이란? Eager Loading 이란 즉..
-
TypeORM - Active Record / Data Mapper PatternORM/TypeORM 2021. 11. 25. 17:19
TypeORM 패턴 TypeORM 에서는 Active Record 와 Data Mapper 패턴을 지원합니다. Data Mapper 는 큰 서비스에서 유지보수하며 개발하기 좋다는 장점이 있고, Active Record 는 간단하기에 작은 서비스에서 유지보수하면서 사용하기 좋습니다. Active Record Pattern Model 을 테이블로 보기에 모델에서 바로 메서드를 사용할 수 있습니다. Entity 에서 쿼리 메서드를 정의하고, 쿼리 메소드를 통해 객체를 조회, 저장, 삭제합니다. 또한 모든 Active Record entity 들은 BaseEntity 를 상속해야하며 이것은 여러가지 메서드들을 제공합니다(save, remove, find,...). BaseEntity 는 기본적인 Reposito..
-
ORM(Object-relatinal mapping) 이란ORM/TypeORM 2021. 11. 23. 15:57
ORM(Object-relatinal mapping) ORM 이란 객체(클래스) 와 관계형 데이터 베이스의 데이터를 자동으로 매핑(연결) 해주는 역할을 합니다. 대표적으로 Flask - SQLAlchemy, Django - 내장 ORM, Node.js - Sequalize, NestJS - TypeORM , java - Hybernate, JPA 등이 있습니다. ORM 장/단점 장점 1. 객체지향적인 코드 직관적이고, 비즈니스 로직에 더 집중할 수 있도록 도와준다. SQL 문을 사용하면서 필요한 선언문, 할당, 종료 같은 부수적인 코드가 줄어든다. 코드를 별도로 작성하기 때문에 코드의 가독성을 올려준다. SQL 의 절차적이고, 순차적인 접근이 아닌, 객체 지향적인 접근으로 생산성이 증가한다. 2. 재사용..