-
Notifications
You must be signed in to change notification settings - Fork 0
TypeORM을 선택한 이유
이번 글에서는 다양한 ORM 중 TypeORM을 선택한 이유를 설명하도록 하겠습니다.
ORM(Object-Relational Mapping)
은 객체 지향 프로그래밍 언어에서 사용되는 데이터베이스 관리 기술로, 객체와 관계형 데이터베이스의 테이블 간의 변환을 자동화하는 도구입니다. 주로 관계형 데이터베이스와 객체 지향 언어 간의 불일치를 해결하기 위해 사용됩니다.
- 객체와 테이블 간의 매핑: ORM은 객체와 데이터베이스 테이블 간의 매핑을 자동으로 처리하여 SQL 쿼리 없이도 데이터베이스 조작이 가능하게 합니다.
- 추상화: ORM을 사용하면 SQL 쿼리 작성 없이 객체를 통해 데이터베이스를 다룰 수 있어, 데이터베이스 작업이 추상화됩니다.
- 생산성 향상: SQL을 작성하지 않고 객체를 조작하는 방식으로 개발자가 더 적은 코드로 데이터베이스와 상호작용할 수 있게 합니다.
- 유지보수 용이성: ORM을 사용하면 코드가 더 직관적이고 유지보수하기 쉬워집니다.
저희 팀은 NestJs에서 주로 사용되는 ORM
들을 리스트 업하고 이들을 비교하여 최종적으로 TypeORM
과 Prisma
두 라이브러리를 채택하였습니다.
두 라이브러리는 npm 트렌드 사이트에서 확인할 수 있듯, 가장 대중적인 ORM인 것을 알 수 있습니다.

이 중 어떤 라이브러리가 저희 프로젝트에 맞을지 확인하기 위해 두 라이브러리의 장단점을 비교해보았습니다.
장점
- 성능 좋은 편이다. (Prisma보다 2배 빠름)
- 익숙하다. (프로젝트 진행 속도 및 코드리뷰 속도 향상)
- 러닝 커브가 낮은 편이다.
- 객체지향적인 코드 작성이 가능하다.
- NestJS에 호환성이 좋다.
단점
-
최신 릴리즈가 늦다.
-
알 수없는 버그가 많이 발생한다고 한다
-
데코레이터 패턴으로 인해 엔티티에 외부 의존관계가 생긴다.
-
undefined
를 조회 시 첫 번째 row를 반환한다.(치명적이다.)
장점
- 타입 안정성과 자동완성을 지원한다.
- 강력한 CLI 도구이다.
- 객체지향적인 코드 작성이 가능하다.
- 직관적이고 선언적인 스키마 정의가 가능.
- NestJS에 호환성이 좋다.
단점
-
러닝커브가 높은 편(Prisma DSL을 배워야 한다.)
-
성능이 낮은 편이다. (대체로 TypeORM 보다 2배 느리다.)
위와 같은 특징을 고려하였을 때 타입 안정성 지원과 직관적으로 스키마를 정의할 수 있는 Prisma
도 고려하였지만, 저희 서비스 특성 상 실시간으로 동작하는 기능이 많기 때문에 성능이 중요하다고 판단하였습니다.
또한 6주라는 짧은 프로젝트 기간을 고려하였을 때 러닝커브를 무시할 수 없었기 때문에 최종적으로 TypeORM
을 사용하기로 결정하였습니다.
https://www.npmjs.com/package/typeorm-transactional
https://codebibimppap.tistory.com/16
https://stackshare.io/stackups/mikroorm-vs-typeorm
https://dev.to/afl_ext/prisma-vs-typeorm-description-and-comparison-4bob
https://e-room.tistory.com/225
https://choidr.tistory.com/entry/TypeORM-N-1-%EB%AC%B8%EC%A0%9C
web12-MafiaCamp