이 글에서는...
자바스크립트 진영에서 사용되는 ORM들 특징/장단점을 정리해보았다.
주로 사용되는 ORM 라이브러리는?
https://npmtrends.com/ 에서 가져온 npm 다운로드 수를 나타낸 그래프이다. 아래 라이브러리들을 비교해봤다.
- Knex
- Sequelize
- TypeORM
- Prisma
- Objection.js
- MikroORM
- Waterline
- Bookshelf
가장 많이 사용되는 ORM 라이브러리는 Knex, Sequelize, TypeORM, Prisma 4가지로, 따라서 이 글에서는 이 넷을 비교해 설명해보도록 하겠다.
ORM 라이브러리 비교
ORM이니만큼 DB와 관련된 핵심적인 기능은 큰 차이가 없지만, 라이브러리 사용 경험, 안정성, 커뮤니티, 성능 등등에서 차이가 있을 것이다.
- Sequelize
- promise-based Node.js ORM
- 가장 오래된 ORM 라이브러리로, 그만큼 가장 큰 커뮤니티와 가장 많은 자료를 찾을 수 있다. 사용자 수가 많았던 만큼 안정성도 더욱 보장된다고 할 수 있다.
- 위 그래프를 보면, TypeORM과 Prisma가 인기를 얻기 전까지 줄곧 1위 ORM 라이브러리 자리를 지켜오던 라이브러리였던 것을 알 수 있다.
- 최신 버전 넘버도 6.32.1로 든든하다
- 지원되는 데이터베이스 종류가 많음
- 다만 요즘은 비교적 최신 라이브러리인 TypeORM, Prisma에게 조금씩 밀려나고 있는 듯 하다
- NoSQL 지원이 부실함
- TypeORM
- 비교적 최근에 나온 ORM 라이브러리 중 하나이다.
- 모델과 테이블을 매핑하는 전통적인 ORM이다.
- schema를 만들고 migration하는 과정 등이 쉽다고 한다.
- advanced feature들을 만지작거리기 시작하면 러닝 커브가 가파르다는 점이 단점으로 꼽힌다.
- Prisma
- 오픈소스 ORM 라이브러리이다.
- 비교적 최근에 나온 ORM 라이브러리 중 하나로, 위 그래프가 가파르게 상승하고 있다는 점에서도 보이다시피 요즘
핫한
ORM 라이브러리이다.
- 타입스크립트, 타입 안정성을 아주 잘 지원한다고 한다.
- bloated model instances, mixing business with storage logic, lack of type-safety or unpredictable queries caused e.g. by lazy loading. 과 같은 전통적인 ORM의 문제점들을 어느정도 해결한 라이브러리라고 한다.
- 아래와 같이 예쁜 인터페이스도 지원해줘서 개발할 맛이 나도록 해준다고 한다.
- Knex
- Knex는 사실 ORM이 아닌 query builder이다.
- 쿼리 빌더는 SQL query를 만드는 데에 있어 추상화를 지원하며, ORM과는 달리 class를 이용해 모델을 만들고 DB 테이블과 매핑해주는 것 등은 지원하지 않는다.
- 로직이 복잡하지 않은, 작은 프로젝트에 적합하다.
- 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?