피드로 돌아가기
Dev.toBackend
원문 읽기
BaseRepository 도입을 통한 CRUD 개발 시간 83% 단축
How I Stopped Writing the Same 5 Methods in Every NestJS Repository
AI 요약
Context
NestJS와 Prisma 조합 시 발생하는 반복적인 CRUD 메서드 구현으로 인한 코드 중복 문제 발생. 12개 모듈에 걸쳐 동일한 패턴의 메서드가 산재하며 유지보수 효율성이 저하된 구조적 한계 노출.
Technical Solution
- Prisma Delegate를 클래스 레벨 Generic으로 정의하여 다양한 모델에 대응하는 BaseRepository 설계
- Entity 및 DTO 타입을 메서드 레벨 Generic으로 분리하여 타입 안정성과 유연성을 동시에 확보
- Soft Delete 패턴을 BaseRepository 내부에서 강제하여 모든 조회 쿼리에 deletedAt: null 조건 자동 적용
- ErrorService를 통한 Prisma 에러 코드의 NestJS Exception 매핑으로 비즈니스 로직 내 try-catch 제거
- BaseService와 BaseRepository의 계층 구조 설계를 통해 순수 CRUD 모듈의 보일러플레이트 제거
- 도메인 특화 로직은 Concrete Repository에 유지하고 공통 인프라 로직만 추상화하는 전략 채택
실천 포인트
1. 모든 모델에 적용되는 공통 쿼리 패턴(예: 삭제 여부 확인)이 존재하는지 검토
2. 라이브러리 특화 에러를 프레임워크 표준 예외로 변환하는 중앙 집중형 Error Handler 구현
3. 클래스 Generic과 메서드 Generic을 구분하여 타입 오버헤드 최소화
4. API 성격이 완전히 다른 모듈은 추상화 계층에서 제외하여 유연성 유지