Prisma의 내장된 'findManyAndCount' 부재와 ORM 사용 시 고려사항
🤖 AI 추천
Prisma를 사용하거나 데이터베이스 조회 성능 및 ORM 활용에 대한 깊이 있는 고민을 하는 백엔드 개발자 및 풀스택 개발자에게 추천합니다. 특히 복잡한 데이터 처리 및 페이징 기능 구현에 어려움을 겪는 개발자에게 유용합니다.
🔖 주요 키워드

핵심 기술
Prisma와 같은 ORM 사용 시, 데이터 조회와 총 개수 반환을 단일 쿼리로 처리하지 못하는 점을 지적하며, 이로 인한 성능 및 데이터 일관성 문제를 분석하고 대안을 모색합니다.
기술적 세부사항
- Prisma의 페이징 한계점:
findMany
와count
를 별도 쿼리로 실행해야 함.- 기본 방식:
await prisma.model.findMany(); await prisma.model.count();
- 필터, 조인 등이 추가될 경우 복잡성 및 비효율성 증가.
- 기본 방식:
- 대안적 접근법 및 문제점:
prisma.$transaction
: 순차 실행으로 느림.Promise.all
: 병렬 실행으로 빠르지만, 두 쿼리 사이에 데이터 변경 발생 시 일관성 문제 발생 가능성 (예:INSERT
,DELETE
).
- Raw SQL의 필요성: 복잡한 요구사항 및 최적화가 필요할 때 ORM의 한계를 느끼고 Raw SQL 사용의 필요성을 제기합니다.
- 개발 도구 선택의 중요성: 과거 iframe 테스트 관련 경험을 예로 들며, 라이브러리/프레임워크 선택 시 기능적 제한 사항을 미리 검토하는 것의 중요성을 강조합니다.
개발 임팩트
- ORM의 편리함 이면에 숨겨진 성능 및 구현상의 복잡성을 인지하고, 실제 개발 시 발생할 수 있는 비효율성을 사전에 파악하는 데 도움을 줍니다.
- 데이터베이스 쿼리 최적화 및 데이터 일관성 유지에 대한 중요성을 환기시킵니다.
- 개발 도구 선택 시 단순히 편리성뿐만 아니라 장기적인 유지보수성과 성능까지 고려하는 안목을 기르게 합니다.
커뮤니티 반응
- Prisma GitHub 이슈 트래커에서
findManyAndCount
기능에 대한 요청이 2021년부터 현재까지 계속 열려있는 상태임을 언급하며, 많은 개발자들이 이 문제로 어려움을 겪고 있음을 시사합니다.
톤앤매너
기술적인 문제점을 명확히 지적하고, 경험을 바탕으로 실질적인 고민과 인사이트를 공유하는 분석적이고 객관적인 톤을 유지합니다.
📚 관련 자료
Prisma
글의 핵심 주제인 Prisma ORM의 GitHub 저장소입니다. 해당 이슈 및 기능 요청에 대한 개발 현황을 파악할 수 있습니다.
관련도: 95%
TypeORM
Prisma와 유사한 기능을 제공하는 또 다른 인기 ORM입니다. TypeORM의 페이징 및 count 관련 구현 방식을 비교하며 ORM 간의 차이점을 이해하는 데 도움이 될 수 있습니다.
관련도: 70%
sequelize
Node.js 환경에서 널리 사용되는 ORM 중 하나로, Prisma와 마찬가지로 데이터베이스 상호작용을 추상화합니다. Sequelize의 `findAndCountAll`과 같은 기능을 통해 Prisma의 부재와 비교할 수 있습니다.
관련도: 65%