Skip to content

TypeORM을 선택한 이유

simjaesung edited this page Oct 29, 2024 · 3 revisions

TypeORM을 선택한 이유

개요

이번 글에서는 다양한 ORM 중 TypeORM을 선택한 이유를 설명하도록 하겠습니다.


ORM이란?

ORM(Object-Relational Mapping)은 객체 지향 프로그래밍 언어에서 사용되는 데이터베이스 관리 기술로, 객체와 관계형 데이터베이스의 테이블 간의 변환을 자동화하는 도구입니다. 주로 관계형 데이터베이스와 객체 지향 언어 간의 불일치를 해결하기 위해 사용됩니다.


ORM 주요 특징

  1. 객체와 테이블 간의 매핑: ORM은 객체와 데이터베이스 테이블 간의 매핑을 자동으로 처리하여 SQL 쿼리 없이도 데이터베이스 조작이 가능하게 합니다.
  2. 추상화: ORM을 사용하면 SQL 쿼리 작성 없이 객체를 통해 데이터베이스를 다룰 수 있어, 데이터베이스 작업이 추상화됩니다.
  3. 생산성 향상: SQL을 작성하지 않고 객체를 조작하는 방식으로 개발자가 더 적은 코드로 데이터베이스와 상호작용할 수 있게 합니다.
  4. 유지보수 용이성: ORM을 사용하면 코드가 더 직관적이고 유지보수하기 쉬워집니다.

TypeORM vs Prisma

저희 팀은 NestJs에서 주로 사용되는 ORM들을 리스트 업하고 이들을 비교하여 최종적으로 TypeORMPrisma 두 라이브러리를 채택하였습니다.

두 라이브러리는 npm 트렌드 사이트에서 확인할 수 있듯, 가장 대중적인 ORM인 것을 알 수 있습니다.

image
이 중 어떤 라이브러리가 저희 프로젝트에 맞을지 확인하기 위해 두 라이브러리의 장단점을 비교해보았습니다.

TypeORM

장점

  • 성능 좋은 편이다. (Prisma보다 2배 빠름)
  • 익숙하다. (프로젝트 진행 속도 및 코드리뷰 속도 향상)
  • 러닝 커브가 낮은 편이다.
  • 객체지향적인 코드 작성이 가능하다.
  • NestJS에 호환성이 좋다.

단점

  • 최신 릴리즈가 늦다.

  • 알 수없는 버그가 많이 발생한다고 한다

  • 데코레이터 패턴으로 인해 엔티티에 외부 의존관계가 생긴다.

  • undefined를 조회 시 첫 번째 row를 반환한다.(치명적이다.)

    image

Prisma

장점

  • 타입 안정성과 자동완성을 지원한다.
  • 강력한 CLI 도구이다.
  • 객체지향적인 코드 작성이 가능하다.
  • 직관적이고 선언적인 스키마 정의가 가능.
  • NestJS에 호환성이 좋다.

단점

  • 러닝커브가 높은 편(Prisma DSL을 배워야 한다.)

  • 성능이 낮은 편이다. (대체로 TypeORM 보다 2배 느리다.)

    image

결론

위와 같은 특징을 고려하였을 때 타입 안정성 지원과 직관적으로 스키마를 정의할 수 있는 Prisma 도 고려하였지만, 저희 서비스 특성 상 실시간으로 동작하는 기능이 많기 때문에 성능이 중요하다고 판단하였습니다.

또한 6주라는 짧은 프로젝트 기간을 고려하였을 때 러닝커브를 무시할 수 없었기 때문에 최종적으로 TypeORM을 사용하기로 결정하였습니다.


참고 자료

https://www.npmjs.com/package/typeorm-transactional

https://codebibimppap.tistory.com/16

https://monday9pm.com/typeorm-%EC%9D%B4%EB%8C%80%EB%A1%9C-%EA%B4%9C%EC%B0%AE%EC%9D%80%EA%B0%80-1-%ED%94%84%EB%A1%9C%EB%8D%95%EC%85%98%EC%97%90-%EC%A0%81%ED%95%A9%ED%95%98%EC%A7%80-%EC%95%8A%EC%9D%80-3%EA%B0%80%EC%A7%80-%EC%9D%B4%EC%9C%A0-2a92a101d934

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

MafiaCamp

📔소개
🎯프로젝트 규칙
💻프로젝트 기획
🍀기술 스택
📚그룹 회고
🌈개발 일지
🍀문제 해결 경험
🔧트러블 슈팅
Clone this wiki locally