-
02. [NestJS] Smart Diet Agent 개발기 #1: Prisma 7 & PostgreSQL로 회원가입 API 구현 및 환경 설정 트러블슈팅프로젝트/개인프로젝트 2026. 2. 26. 13:41
2026.02.26
안녕하세요. 개인 프로젝트인 'Smart Diet Agent*를 개발하며 겪은 기술적 도전과 해결 과정을 기록하고 있습니다. 오늘은 그 첫 단계로 NestJS 환경에서 Prisma 7을 연동하여 회원가입 API를 구축한 과정을 공유합니다.
특히 최신 버전인 Prisma 7.4.1을 적용하며 겪었던 설정 변경 사항과 유효성 검사 적용법을 중점적으로 다룹니다.
1. 개발 환경 (Tech Stack)
- Framework: NestJS
- Database: PostgreSQL (Docker-compose 환경)
- ORM: Prisma 7.4.1
- Validation: class-validator, class-transformer
2. Prisma Schema 설계
데이터베이스 계층과 애플리케이션 계층 간의 네이밍 컨벤션을 유지하기 위해 @map과 @@map 속성을 적극 활용했습니다. ID는 보안과 확장성을 위해 UUID 방식을 채택했습니다.
// prisma/schema.prisma model User { id String @id @default(uuid()) email String @unique password String nickname String activityLevel String? @map("activity_level") goalCalories Int @default(2000) @map("goal_calories") willpowerScore Int @default(100) @map("willpower_score") createdAt DateTime @default(now()) @map("created_at") @@map("users") }
3. Prisma 7 핵심 변경 사항 및 트러블슈팅
Prisma 7 버전으로 넘어오면서 기존의 schema.prisma 내 url = env("DATABASE_URL") 설정 방식이 더 이상 지원되지 않는 이슈가 발생했습니다.
문제 상황: Error P1012
npx prisma db push 실행 시, url 속성이 스키마 파일에서 더 이상 지원되지 않는다는 에러가 발생하며 컴파일이 중단되었습니다.
해결 방법: prisma.config.ts 도입
Prisma 7부터는 프로젝트 루트에 별도의 설정 파일을 생성하여 환경 변수를 관리해야 합니다.
// prisma.config.ts import { defineConfig } from '@prisma/config'; import 'dotenv/config'; export default defineConfig({ datasource: { url: process.env.DATABASE_URL, }, });
4. 회원가입 API 구현
(1) Request Validation (SignupDto)
클라이언트로부터 들어오는 데이터의 무결성을 보장하기 위해 class-validator를 적용했습니다. 특히 class-transformer를 통해 평문 JSON 데이터를 클래스 인스턴스로 자동 변환하여 안정적인 유효성 검사를 수행합니다.
// src/users/dto/signup.dto.ts export class SignupDto { @IsEmail({}, { message: '올바른 이메일 형식이 아닙니다.' }) @IsNotEmpty() email!: string; @IsString() @MinLength(8, { message: '비밀번호는 최소 8자 이상이어야 합니다.' }) password!: string; @IsString() @IsNotEmpty() nickname!: string; }(2) Controller & Service
회원가입 요청은 POST /auth/signup 엔드포인트에서 처리됩니다. 비즈니스 로직은 UsersService로 분리하여 코드의 재사용성과 가독성을 높였습니다.
5. 테스트 및 결과
Postman을 활용하여 실제 API를 테스트한 결과, 201 Created 응답을 확인했습니다. 응답 객체에서 비밀번호(password) 필드를 제외하여 보안 가이드라인을 준수하였습니다.

Postman 테스트 결과
6. 프로젝트 구조 정리
상위 폴더와 프로젝트 폴더 간의 node_modules 중복 문제를 해결하기 위해 불필요한 패키지 파일을 정리했습니다. 이 과정을 통해 npx prisma generate 시 발생하던 경로 인식 오류를 근본적으로 차단할 수 있었습니다.

마치며
최신 기술 스택인 Prisma 7을 도입하며 발생한 예기치 못한 설정 이슈들을 해결하며 ORM의 동작 원리를 더 깊게 이해할 수 있었습니다. 다음 포스팅에서는 가입된 유저 정보를 바탕으로 JWT 인증을 적용한 로그인 API 구현 과정을 정리해 보겠습니다.
궁금하신 점이나 개선 방향에 대한 의견은 언제든 환영합니다. 긴 글 읽어주셔서 감사합니다.
'프로젝트 > 개인프로젝트' 카테고리의 다른 글
Meal API Troubleshooting(API 보안 강화) (0) 2026.03.04 [NestJS/Prisma] 식단 관리 서비스 백엔드 고도화 및 트러블슈팅 기록 (0) 2026.03.04 [NestJS] Prisma 7과 JWT로 철벽 보안 로그인 구현하기 (feat. 드라이버 어댑터의 늪) (0) 2026.03.02 03. Prisma 7 + NestJS 셋업 트러블 슈팅 — `datasources`는 이제 없다 (0) 2026.02.26 01. 맥북 Node.js 개발 환경 준비 (5) 2026.02.23