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는 제외)
'Node js > Nest js' 카테고리의 다른 글
PrismaClientInitializationError: Unable to require(`/app/node_modules/.prisma/client/libquery_engine-linux-musl.so.node`). 오류 해결방법 (0) | 2024.12.15 |
---|---|
nest js docker 배포 하기 (nestjs) (0) | 2024.11.24 |
Nest js Test Container 구성!! feat. Mysql (1) | 2024.11.23 |
About "nest js" based on past experience (0) | 2024.08.21 |
Nest js , MSA 기본 구조 설계 (0) | 2022.10.03 |