-
Notifications
You must be signed in to change notification settings - Fork 2
NestJS ORM으로 무엇을 사용해야 할까?
Seungheon Han edited this page Dec 1, 2024
·
1 revision
NestJS 프로젝트를 진행하면서, 데이터베이스와의 상호작용을 효율적으로 관리하기 위해 ORM(Object Relational Mapping) 도구를 선택해야 한다. 우리 팀의 현재 상황과 요구사항을 고려했을 때, TypeORM과 Prisma 중 하나를 선택해야 했다.
-
NestJS 프레임워크 사용
- NestJS는 TypeScript 기반으로 동작하며 객체 지향 프로그래밍(OOP)을 강조하는 구조를 가지고 있다.
-
짧은 개발 기간
- 프로젝트 개발 기간은 6주로 제한적이기 때문에, 초기 설정과 학습 곡선이 높으면 안된다
-
객체 지향적 코드 작성:
- TypeORM은 엔티티 클래스를 정의하여 객체 지향적으로 데이터를 관리할 수 있습니다.
- NestJS가 제공하는 객체 지향적 설계 철학과 잘 맞아떨어지며, Spring Framework와 유사한 경험을 제공합니다.
-
NestJS에서 가장 많이 사용되는 ORM:
- NestJS 공식 문서에서도 TypeORM과의 통합 예제를 제공하며, 많은 프로젝트에서 채택하고 있습니다.
-
풍부한 자료:
- TypeORM은 오랜 기간 사용되었기 때문에, 커뮤니티 리소스와 문제 해결 자료가 풍부합니다.
-
유연한 쿼리 작성:
- 복잡한 쿼리 및 트랜잭션 로직을 작성할 때 강력한 기능을 제공합니다.
-
초기 설정 복잡성:
- TypeORM은 엔티티와 설정 파일을 명시적으로 작성해야 하며, 초기 설정 과정이 복잡할 수 있습니다.
-
타입 안정성:
- Prisma에 비해 타입 체크와 데이터 안전성에서 약간의 부족함이 있을 수 있습니다.
-
강력한 타입 체킹:
- Prisma Client는 데이터베이스 스키마에서 자동으로 생성되며, 강력한 타입 안전성을 제공한ㄷ.
-
함수형 프로그래밍에 가까운 접근 방식:
- Prisma는 데이터 접근을 함수 기반으로 처리하며, 간결하고 직관적인 코드를 작성할 수 있습니다.
-
DB 엔진 활용:
- Prisma는 자체 DB 엔진을 사용하여 쿼리를 효율적으로 처리하고 결과를 반환합니다.
-
빠른 초기 설정:
- Prisma는 간단한 Schema 파일 작성과 자동화된 Client 생성으로 설정 과정을 크게 단축할 수 있습니다.
-
NestJS의 객체 지향 철학과의 괴리:
- Prisma는 객체 지향 프로그래밍보다는 함수형 프로그래밍에 가깝기 때문에, NestJS의 장점을 활용하기 어렵습니다.
-
Join 연산 부재:
- Prisma는 데이터베이스에서 Join 문을 지원하지 않고, Select 문을 여러 번 실행한 뒤 엔진에서 데이터를 합칩니다. 이는 성능과 복잡성에 영향을 미칠 수 있습니다.
-
커뮤니티와 리소스:
- TypeORM에 비해 상대적으로 짧은 역사로 인해, 자료나 레퍼런스가 부족할 수 있습니다.
- Prisma는 NestJS의 객체 지향적 철학을 온전히 살리지 못하며, 함수형 접근 방식으로 인해 NestJS의 구조적 이점을 잃을 수 있습니다. 또한, Join 연산 부재로 인해 복잡한 데이터 관계를 처리하기 어려울 가능성이 있습니다.
- TypeORM은 NestJS와 완벽히 통합되며, 객체 지향적 코드 작성을 지원하여 Spring이나 NestJS 경험이 있는 개발자들에게 더 익숙합니다.
- 커뮤니티 리소스와 자료가 풍부하여 문제 해결이 용이하며, NestJS와의 호환성을 극대화할 수 있습니다.
- 프로젝트의 짧은 개발 기간과 NestJS의 객체 지향적 철학을 최대한 활용하기 위해 TypeORM이 더 적합합니다.
- 팀원들이 Spring이나 NestJS에 익숙하다면, TypeORM은 배우기 쉬우며, 개발 생산성을 높일 수 있습니다.
- Mediasoup 포트 매핑 문제
- swagger 같은 응답 코드에 다양한 응답 보여주기
- Sudo가 계속 비밀번호를 요청함
- Docker 이미지가 너무 크다
- Git action에서 도커 이미지 빌드 시간을 단축시켜보자
- Docker compose를 이용해서 메모리 사용률을 줄여보자
- 방송 녹화 시 CPU 과부하 문제를 해결해보자
- Release 브랜치? 너 필요해?
- 로딩이 너무 짧아…!
- NestJS ORM으로 무엇을 사용해야 할까?
- WebRTC를 이용한 1:N 스트리밍 서비스에서 시그널링 서버가 필요할까?
- 실시간 채팅 구현: 인메모리 방식을 선택한 이유
- MySQL 아키텍처 개선: DB 의존성 분리와 서버 역할 명확화
- 브라우저 창이 최소화되면 비디오 송출이 안된다…!
- Mediasoup 기본 개념
- DLTS와 Signaling
- Tell, Don't Ask (TDA) 원칙이란
- VPC(Virtual Private Cloud) 학습 정리
- 순환참조: A 서비스 ‐ B 서비스 vs. A 서비스 ‐ B 레포지토리
- Dto 메서드 전략
- WebRTC란?
- 자바스크립트 패키지 매니저(npm, yarn, pnpm)
- shadcn/ui을 이용해 UI 개발 생산성 높이기
- React 이벤트 핸들러 네이밍(on vs handle)
- React-router-dom의 createBrowserRouter을 사용해보기
- fetch vs axios