Node.js ORM

TypeORM vs Sequelize

어떤 ORM을 쓸까?

기본

TypeORMSequelize
주간 다운로드483만294만
최근 릴리스28일 전156일 전
유지보수활발둔화
열린 이슈6061,075

유지보수 상태는 최근 릴리스 간격만으로 판정합니다 (90일 이내 활발 · 270일 이내 둔화 · 그 이상 정체).

쓰다 보면 만나는 것

TypeORM

  • 거슬림

    마이그레이션 생성기가 컬럼 변경을 ALTER 대신 드랍·재생성으로 만들 수 있다

    특정 컬럼 변경에서 migration:generate가 DROP 후 재생성 SQL을 만들어, 검토 없이 적용하면 해당 컬럼 데이터가 사라진다. 2019년부터 열려 있는 이슈이며, 디폴트값이 매번 재생성되는 등 생성기 출력이 안정적이지 않다는 보고가 이어진다. 생성된 마이그레이션 SQL을 반드시 사람이 검토하는 절차가 필요하다.

    2024-03 · 미해결

  • 거슬림

    one-to-many 관계 엔티티를 save()로 저장할 때 기존 행 UPDATE 대신 INSERT를 시도하는 경우가 보고돼 있다

    one-to-many 관계가 걸린 엔티티를 save()로 저장하면 기존 행 갱신이 아니라 새 행 삽입으로 처리돼 중복 키 위반이 나는 사례가 보고돼 있다(typeorm/typeorm#3095, 2018-11 기준 open). save()의 upsert 의미론이 관계 저장 시 직관과 어긋나는 지점이다. 별개로 save()는 존재 확인용 SELECT 후 INSERT/UPDATE를 수행해 왕복이 늘어나는 성능 특성도 지적된다.

    2022-01 · 미해결

Sequelize

  • 거슬림

    findAndCountAll에 include를 섞으면 count가 부풀려져 페이지네이션이 깨진다

    include(JOIN)가 있으면 부모 행이 아니라 조인된 행을 세기 때문에 count가 실제보다 커진다. count: 72에 rows: 38 같은 결과가 나와 페이지네이션 계산이 어긋난다. distinct: true 옵션이나 count·find 쿼리 분리로 우회한다. 2018년부터 같은 계열 이슈가 반복 보고돼 왔다.

    2025-07 · 미해결

  • 거슬림

    TypeScript 지원이 JavaScript 우선 설계 위에 후행으로 얹힌 구조라, 타입 선언이 장황하고 보일러플레이트가 남는다

    자바스크립트로 먼저 설계된 API 위에 타입 지원이 나중에 추가되어, 모델 필드 타입을 일일이 선언하고 InferAttributes·InferCreationAttributes 같은 유틸리티 타입을 함께 써야 하는 등 정의가 장황하다. 최근 버전에서 속성·생성 속성 인터페이스를 겹쳐 선언하던 부담은 줄었으나, 자동 추론이 제한적이라는 점은 TS 우선 설계인 최신 대안과 비교할 때 여전히 자주 언급된다.

    2025-10 · 미해결

  • 거슬림

    복합 외래키를 지원하지 않는다

    복합 외래키 지원 요청이 2012년부터 열려 있다. 복합 외래키로 연결된 기존 스키마에 붙이려 하면 뒤늦게 벽을 만나며, 연관 정의를 바꾸거나 raw 쿼리로 우회해야 한다.

    2019-03 · 미해결

문서 바로가기