본문 바로가기
Node js/Nest js

TypeORM vs Prisma

by Bill Lab 2024. 8. 22.
728x90

 

nest 를 사용하게되면서, TypeORM이라는 ORM 을 처음접했었다.

사용을 하면서 실망을 상당히 많이한 npm 중 하나로 기억된다.

 

이번 글은 typeORM 과 이를 대처가능한 Prisma에 대한 비교글로 시작하려 한다.

우선 구글링만 살짝해보아도 그동안 얼마나 많은 사람들이 두개의 ORM 을 비교하여

선택했는지를 알 수 있다.

(출처 : 구글 서치 결과)

심지어 Prisma 공식 사이트에서도 두개의 npm 을 비교한 글이 있는데 (https://www.prisma.io/docs/orm/more/comparisons/prisma-and-typeorm)

내용을 요약해보면, typeORM은 전통적인 ORM 이고 Prisma는 여러측면에서 기존의 문제점을

개선했으니, Prisma를 사용하는 것이 더 좋다이다.

 

그럼 어떤 측면에서 사용성이 좋아질까?

 

1. 버전차이

    typeORM 의 최신버전은 0.x.x, 방면에 Prisma는 ?

 

2. typeORM 의 entity 관리는 Java spring의 JPA 기반의 entity 관리와 동일한 양상을 보이며,

   OOP용으로 개발 및 join등의 처리도 OneToMany 등을 통해 (내부적으로는 단순히 쿼리를

   생성시켜주는 것만 시행하는데) 처리를 하도록 설계되었으나(JPA 의 장점을 못살리고

   단점은 그대로 녹아있는) , Prisma에선 테이블 스키마 구조로 보다 간결하고 직관적으로

   사용할 수 있음

 

3. 불필요한 DIP 제거 가능

    typeORM의 경우 JAVA Spring 의 체계를 repo impl, repo interface 까지 지키도록 설계를

   유도하는 경향이 있어, 오히려 FP 의 역할도 수행하는 Javascript의 성격과 미스매치 됨

   (DIP의 개념은 OOP 의 SOLID의 원칙 중 하나) 

    Prisma 이용시 스키마 활용으로 repo와 entity를 간결하게 가져갈 수 있는 장점이 있음

 

4. 간혹 typeORM에서는 type 안전성 보장이 부족한 상황이 발생되곤 하는데 Prisma에선

    쿼리의 결과 또한 type의 안정성을 체킹하는 구조로써 type 이 안정성이 부족한 javascript

    (타스포함) 기반에선 적합한 구조, where 조건도 동일

 

5. typeORM 은 기존의 sql에서 연산자를 사용하나(대표적으로 like의 %등), Prisma에선 보다

   명확한 명칭을 사용(startsWIth, contains, endsWith 등) 

 

6. typeORM 의 경우  limit-offset page 만 제공하나 Prisma 는 cursor-based 도 함께 제공

 

위에서 명시한 것 외에도 여러 장점들이 존재하나, 위의 근거만으로 Prisma를 사용할 이유는

충분했기때문에 이후 대부분의 프로젝트에선 Prisma 를 사용했고, 더 나은 결과 확인 가능!

(단, nosql는 제외)

728x90