node.js ORM, 무엇을 써야 할까? (Sequelize, TypeORM, Prisma, Knex)

Lee Yechan·2023년 8월 16일
0

Language - javascript

목록 보기
8/8
post-thumbnail

이 글에서는...

자바스크립트 진영에서 사용되는 ORM들 특징/장단점을 정리해보았다.

주로 사용되는 ORM 라이브러리는?

https://npmtrends.com/ 에서 가져온 npm 다운로드 수를 나타낸 그래프이다. 아래 라이브러리들을 비교해봤다.

  • Knex
  • Sequelize
  • TypeORM
  • Prisma
  • Objection.js
  • MikroORM
  • Waterline
  • Bookshelf

가장 많이 사용되는 ORM 라이브러리는 Knex, Sequelize, TypeORM, Prisma 4가지로, 따라서 이 글에서는 이 넷을 비교해 설명해보도록 하겠다.

ORM 라이브러리 비교

ORM이니만큼 DB와 관련된 핵심적인 기능은 큰 차이가 없지만, 라이브러리 사용 경험, 안정성, 커뮤니티, 성능 등등에서 차이가 있을 것이다.

  1. Sequelize
    1. promise-based Node.js ORM
    2. 가장 오래된 ORM 라이브러리로, 그만큼 가장 큰 커뮤니티와 가장 많은 자료를 찾을 수 있다. 사용자 수가 많았던 만큼 안정성도 더욱 보장된다고 할 수 있다.
    3. 위 그래프를 보면, TypeORM과 Prisma가 인기를 얻기 전까지 줄곧 1위 ORM 라이브러리 자리를 지켜오던 라이브러리였던 것을 알 수 있다.
    4. 최신 버전 넘버도 6.32.1로 든든하다
    5. 지원되는 데이터베이스 종류가 많음
    6. 다만 요즘은 비교적 최신 라이브러리인 TypeORM, Prisma에게 조금씩 밀려나고 있는 듯 하다
    7. NoSQL 지원이 부실함
  2. TypeORM
    1. 비교적 최근에 나온 ORM 라이브러리 중 하나이다.
    2. 모델과 테이블을 매핑하는 전통적인 ORM이다.
    3. schema를 만들고 migration하는 과정 등이 쉽다고 한다.
    4. advanced feature들을 만지작거리기 시작하면 러닝 커브가 가파르다는 점이 단점으로 꼽힌다.
  3. Prisma
    1. 오픈소스 ORM 라이브러리이다.
    2. 비교적 최근에 나온 ORM 라이브러리 중 하나로, 위 그래프가 가파르게 상승하고 있다는 점에서도 보이다시피 요즘 핫한 ORM 라이브러리이다.
    3. 타입스크립트, 타입 안정성을 아주 잘 지원한다고 한다.
    4. bloated model instances, mixing business with storage logic, lack of type-safety or unpredictable queries caused e.g. by lazy loading. 과 같은 전통적인 ORM의 문제점들을 어느정도 해결한 라이브러리라고 한다.
    5. 아래와 같이 예쁜 인터페이스도 지원해줘서 개발할 맛이 나도록 해준다고 한다.

  1. Knex
    1. Knex는 사실 ORM이 아닌 query builder이다.
    2. 쿼리 빌더는 SQL query를 만드는 데에 있어 추상화를 지원하며, ORM과는 달리 class를 이용해 모델을 만들고 DB 테이블과 매핑해주는 것 등은 지원하지 않는다.
    3. 로직이 복잡하지 않은, 작은 프로젝트에 적합하다.
    4. ORM을 사용하면 SQL에 대한 control을 잃게 된다. 이것이 싫다면 query builder를 사용하여 어느 정도 control을 가져오는 게 적합할 것이다.

references

NPM ORM library download trends
[ORM] Node.js에서 ORM 사용하기
Quick Compare on ORM, knex, TypeORM, Sequelize, Prisma #01
Prisma Vs. TypeORM Vs. Sequelize | Which is Better?
Why Prisma?
Prisma Studio
Is Prisma a viable alternative for TypeORM?

profile
이예찬

0개의 댓글