Closed TaeyoonKwon closed 8 months ago
생산성 및 안정성에서 가장 뛰어나다 판단하여 사용합니다.
제가 class-validator
를 버리고 typia
를 자작하여 사용하는 이유에는, class-validator
특유의 느린 성능도 있지만, 그보다도 생산성 및 안정성이 엉망이기 때문입니다. NestJS 에서 class-validator
를 사용하는 경우, 대략 4 중의 중복 타입 정의를 해야하고 (TS Type + class-validator
+ class-transformer
+ @nestjs/swagger
, 그 타입을 프론트와 공유할 수 없어 생산성 측면에서 최악입니다.
또한, 조금만 복잡한 타입이 와도 타입 검사기가 아주 엉터리로 작동합니다. 저는 틀린 것을 맞다고 하는게, 맞는 것을 틀리다고 하는거보다 훨씬 더 심각한 버그라 생각합니다. 후자야 버그를 발견하여 고치면 그만인데, 전자는 유저가 정상 동작하는 줄 알고 쓰다가 크게 다치기 때문입니다. 그리고 class-validator
가 실제로 전자의 경우로, 틀린 것을 맞다고 하는 비중이 과합니다.
위 문제를 해결하기 위해 typia
를 만들면서, 겸사 겸사 AoT (Ahead of Time) 컴파일 개념을 도입하여 속도가 큰 폭으로 개선하였긴 하나, 그것이 제가 생산성이나 안정성보다 성능을 우위에 두는 성향의 사람이어서 그런 것은 아닙니다. 저는 성향상 생산성과 안정성을 속도보다 우선시하고, 퍼포먼스 개선 또한 기대 효과가 큰 것에서부터 시작하는 편입니다.
프리즈마가 TypeORM 보다 대략 1.5배 느릴뿐, 그 어떤 라이브러리처럼 20,000 배씩 느린게 아니니까요
답변 감사합니다. 저 역시 매우 동의하는 바 입니다.
저도 프리즈마가 안정성이나 유지보수 측면에서 상당히 뛰어나고 느껴 퍼포먼스 감안하고 최근 도입하였습니다.
아 그리고 반박을 하려는 것은 아닙니다만 혹시나 인지를 하지 못하셨을 수 있어 말씀 드리면
Drizzle이 Prisma보다 벤치 마크상으로 100배 이상 차이가 나기도 합니다 https://orm.drizzle.team/benchmarks
북미 쪽 커뮤에서는 프리즈마 도입이 성능 이슈로 Controversial 하다보니 저도 고민을 많이 했던터라
삼촌님의 의견을 얻어보고 싶었습니다.
저는 그래도 스타트업 레벨에서는 안정성과 마이그레이션 편의성이 훨씬 중요하다 생각하여
프리즈마가 충분히 가치있다 생각합니다.
기존 블로그 글이나 개발하신 오픈소스, 선택하신 라이브러리들을 봤을 때
Performance를 매우 중시하며 Node.js에서 State of art 수준의 활용 능력을 보여주시는데요.
다른게 아니라 Prisma를 쓰시는 이유가 궁금하여 질문 드립니다.
ORM이 필요한 경우 Drizzle + Prepared statement나 Kysely 같은 일반적으로 알려진 라이브러리 들이나
raw query를 랩핑해서 쓰실 수도 있으셨을 것 같은데, 선택하신 이유가 있으실까요?