Nest.js를 배워보자/15. NestJS & Prisma 완벽 가이드

📝 NestJS & Prisma 완벽 가이드 시리즈 목차

_Blue_Sky_ 2025. 12. 3. 19:30
728x90

이 시리즈는 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. 운영 환경 마이그레이션 전략 프로덕션 환경에서 마이그레이션을 안전하게 실행하는 방법
728x90