이 시리즈는 TypeScript 기반의 NestJS 애플리케이션에 타입 안전성과 생산성을 제공하는 ORM, Prisma를 통합하고 활용하는 방법을 심층적으로 다룹니다.
1부. 소개 및 기본 설정 (시작하기)
| 1.1. Prisma, 왜 사용해야 할까요? |
ORM vs Query Builder, Prisma의 장점 (Type Safety, DX), 그리고 NestJS와의 시너지 소개 |
| 1.2. 프로젝트 환경 설정 |
NestJS 프로젝트 생성, Prisma 설치 및 초기화 (npm install prisma, npx prisma init) |
| 1.3. schema.prisma 완전 정복 |
Datasource, Generator, Data Model의 구성 요소 및 스키마 작성 기본 문법 |
| 1.4. 첫 번째 데이터 모델 정의 및 마이그레이션 |
기본 모델 (User 등) 작성, npx prisma migrate dev를 사용한 DB 스키마 생성 |
| 1.5. Prisma Studio로 데이터 확인하기 |
npx prisma studio를 통한 데이터베이스 시각적 관리 및 활용법 |
2부. NestJS 모듈 시스템에 통합하기
| 2.1. Prisma Client를 래핑하는 PrismaService 생성 |
PrismaClient를 확장(extends)하는 NestJS 서비스 구조 설계 |
| 2.2. 모듈 초기화 및 연결 관리 |
OnModuleInit을 사용한 $connect()와 종료 훅을 이용한 $disconnect() 구현 |
| 2.3. 의존성 주입(DI)으로 PrismaService 사용하기 |
PrismaModule 설정 및 서비스, 컨트롤러에 주입하여 사용하는 방법 |
3부. CRUD 기본 및 복합 쿼리
| 3.1. 데이터 생성 (Create) |
create 및 createMany 메서드와 DTO (Data Transfer Object)를 이용한 안전한 데이터 생성 |
| 3.2. 데이터 조회 (Read) |
단일 조회 (findUnique), 목록 조회 (findMany) 및 where 조건 필터링 |
| 3.3. 데이터 수정 및 삭제 (Update & Delete) |
update, updateMany, delete, deleteMany 사용법 및 조건부 업데이트 |
| 3.4. 복합 쿼리: 페이징, 정렬, 검색 |
take, skip, orderBy를 이용한 효율적인 데이터 처리 방법 |
4부. 관계형 데이터 쿼리 마스터하기
| 4.1. 일대다 관계 (One-to-Many) |
스키마 정의 및 연결된 데이터 생성/조회 방법 (예: User와 Post) |
| 4.2. 다대다 관계 (Many-to-Many) |
중간 테이블 없이 다대다 관계를 설정하고 쿼리하는 방법 |
| 4.3. 관계형 데이터 로딩: include와 select |
Eager Loading을 사용하여 N+1 문제 방지 및 필요한 필드만 선택적으로 가져오기 |
| 4.4. 관계 데이터를 통한 생성/수정 |
Nested Write (중첩 쓰기)를 이용한 관계 데이터의 한 번에 처리 |
5부. 고급 활용 및 데이터 무결성
| 5.1. 데이터 트랜잭션 (Transactions) |
$transaction을 사용하여 여러 쿼리의 원자성(Atomicity) 보장 |
| 5.2. 집계 및 그룹화 |
_count, _sum, _avg, groupBy를 이용한 통계 데이터 처리 |
| 5.3. 데이터 시딩 (Seeding) |
개발/테스트 환경에서 필요한 초기 데이터를 자동 주입하는 방법 |
| 5.4. 에러 처리 및 로깅 전략 |
Prisma 에러(P2002 등)를 NestJS에서 처리하고, 데이터베이스 쿼리 로깅 설정하기 |
6부. 실전 배포 환경 구성
| 6.1. 환경 변수 관리 |
.env 파일과 NestJS ConfigModule을 연동하여 데이터베이스 정보 관리 |
| 6.2. Docker를 이용한 배포 환경 |
Dockerfile 작성 및 컨테이너 환경에서 NestJS와 Prisma Client 실행하기 |
| 6.3. 운영 환경 마이그레이션 전략 |
프로덕션 환경에서 마이그레이션을 안전하게 실행하는 방법 |