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

🚀 1부.NestJS와 Prisma로 ORM 끝판왕 되기: 소개 및 기본 설정

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

NestJS 프로젝트에서 데이터베이스를 다루는 가장 세련되고 효율적인 방법을 찾고 계신가요? 바로 Prisma가 그 해답입니다.
이 글에서는 Prisma를 왜 사용해야 하는지부터 시작해, NestJS 프로젝트에 설치하고 첫 번째 데이터 모델을 정의하는 기본 설정을 단계별로 안내합니다.


1.1. Prisma, 왜 사용해야 할까요?

데이터베이스를 다루는 방법에는 크게 ORM(Object-Relational Mapping)Query Builder가 있습니다.

  • ORM (예: TypeORM, Sequelize): 데이터베이스 테이블을 클래스(객체)로 매핑하여 SQL 쿼리 없이 객체 지향적으로 데이터를 조작합니다.
  • Query Builder (예: Knex.js): SQL 쿼리를 문자열 대신 메서드 체이닝을 통해 구성하도록 돕습니다. SQL에 가깝지만 좀 더 안전합니다.

🌟 Prisma의 장점

Prisma는 기존 ORM의 장점을 취하고 단점을 보완한 차세대 데이터베이스 툴킷입니다.

  1. 압도적인 개발 경험 (Developer Experience, DX):
    • Prisma Schema: 직관적인 선언형 스키마 파일을 통해 데이터 모델, 관계, 데이터베이스 설정을 한눈에 관리합니다.
    • Prisma Client: schema.prisma 파일을 기반으로 자동 생성되는 Type-Safe한 쿼리 빌더 역할을 합니다.
  2. 완벽한 타입 안전성 (Type Safety):
    • Prisma Client가 TypeScript로 자동 생성되므로, 쿼리 작성 시점에 데이터베이스 필드 이름, 반환 타입 등을 즉시 검증할 수 있습니다. 런타임 오류가 현저히 줄어듭니다.
  3. NestJS와의 시너지:
    • NestJS는 모듈화된 구조TypeScript 기반이라는 점에서 Prisma의 모듈화된 접근 방식강력한 Type Safety와 완벽하게 조화됩니다. Prisma Client를 서비스 모듈에 주입(Inject)하여 깔끔한 아키텍처를 구현할 수 있습니다.

1.2. 프로젝트 환경 설정

🛠️ 1단계: NestJS 프로젝트 생성

아직 프로젝트가 없다면 Nest CLI를 사용하여 새 프로젝트를 만듭니다.

nest new my-prisma-app
cd my-prisma-app

📦 2단계: Prisma 설치 및 초기화

Prisma CLI와 Client를 설치하고, 프로젝트에 Prisma 설정을 초기화합니다.

# 1. Prisma CLI 및 Client 설치
npm install prisma @prisma/client

# 2. Prisma 초기화
npx prisma init

이 명령을 실행하면 프로젝트 루트에 다음 두 파일이 생성됩니다.

  1. prisma/schema.prisma: 핵심 설정 파일입니다.
  2. .env: 데이터베이스 연결 문자열을 저장할 환경 변수 파일입니다.

1.3. schema.prisma 완전 정복

prisma/schema.prisma 파일은 Prisma의 모든 것을 정의하는 청사진입니다. 이 파일은 크게 세 블록으로 구성됩니다.

1. datasource 블록

데이터베이스 연결 정보를 정의합니다.

datasource db {
  provider = "postgresql" // 사용하는 DB 종류 (e.g., "mysql", "sqlite")
  url      = env("DATABASE_URL") // .env 파일에 정의된 연결 문자열
}

 

2. generator 블록

Prisma Client가 어떻게 생성될지 정의합니다.

generator client {
  provider = "prisma-client-js"
  // 기본적으로 typescript 코드를 생성하여 타입 안전성을 보장합니다.
}

3. model 블록 (Data Model)

데이터베이스의 테이블 구조를 정의합니다.

// Data Model의 구성 요소 및 스키마 작성 기본 문법
model User {
  id    Int     @id @default(autoincrement()) // Primary Key, 자동 증가
  email String  @unique // 고유 값
  name  String? // Null 허용
  posts Post[] // 1:N 관계 (Post 모델에 연결)
  
  // 기타 타입: String, Int, DateTime, Boolean, Json 등
}

1.4. 첫 번째 데이터 모델 정의 및 마이그레이션

📝 1단계: 모델 정의 (User 및 Post)

prisma/schema.prisma에 기본 User 모델과 Post 모델을 추가하여 관계를 정의합니다.

// prisma/schema.prisma
// ... (datasource, generator 블록 아래에 추가)

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
  posts Post[] // User가 여러 Post를 가짐 (1:N)
}

model Post {
  id        Int      @id @default(autoincrement())
  title     String
  content   String?
  published Boolean  @default(false)
  author    User     @relation(fields: [authorId], references: [id]) // N:1 관계의 "객체" 필드
  authorId  Int // N:1 관계의 "외래 키" 필드
}

🚀 2단계: 마이그레이션 실행

npx prisma migrate dev 명령은 스키마 변경 사항을 감지하고, 데이터베이스 스키마를 자동으로 생성(혹은 업데이트)합니다.

npx prisma migrate dev --name init_models
  • --name init_models를 통해 마이그레이션 파일에 이름을 부여합니다.
  • 이 명령을 실행하면 prisma/migrations 폴더에 DB 스키마를 생성하는 SQL 파일이 생성됩니다.
  • Prisma Client도 자동으로 최신 스키마에 맞춰 재-생성됩니다.

1.5. Prisma Studio로 데이터 확인하기

개발 단계에서 데이터베이스 내용을 쉽고 시각적으로 관리하고 싶다면 Prisma Studio를 사용하세요.

👁️ Prisma Studio 실행

npx prisma studio

이 명령을 실행하면 브라우저에서 데이터베이스 내용을 볼 수 있는 로컬 웹 인터페이스가 열립니다.

  • 테이블 별 데이터 조회 및 필터링
  • 데이터 추가, 수정, 삭제
  • 관계형 데이터(Foreign Key)를 쉽게 확인

개발 초기 단계의 데이터 입력 및 검증 작업에 매우 유용합니다.


📊 Prisma Studio 설명

Prisma Studio는 Prisma ORM을 사용하는 프로젝트에서 데이터베이스의 데이터를 시각적으로 보고 편집할 수 있도록 제공되는 GUI(그래픽 사용자 인터페이스) 도구입니다. 개발자가 데이터베이스를 직접 다루지 않고도 데이터를 쉽게 탐색하고 조작할 수 있게 도와주는 일종의 관리자 인터페이스(Admin GUI) 역할을 합니다.


주요 기능 및 특징

  • 데이터 시각화 및 편집:
    • schema.prisma 파일에 정의된 모든 모델(Model), 즉 데이터베이스의 테이블 목록을 한눈에 확인할 수 있습니다.
    • 각 모델에 저장된 실제 데이터를 브라우저 기반의 깔끔한 인터페이스에서 생성(Create), 조회(Read), 업데이트(Update), 삭제(Delete) (CRUD)할 수 있습니다.
  • 편의성:
    • 복잡한 SQL 쿼리를 직접 작성할 필요 없이 직관적인 GUI를 통해 데이터 작업을 수행할 수 있어, 특히 프론트엔드 개발자나 서버 개발 접근성을 높이는 데 유용합니다.
    • 개발 및 테스트 과정에서 데이터베이스의 상태를 확인하고 데이터를 빠르게 수정하는 데 큰 도움이 됩니다.
  • 실행 방법:
    • 터미널에서 npx prisma studio 명령어를 실행하면 기본적으로 localhost:5555 포트로 웹 브라우저 새 창이 열리면서 Prisma Studio가 시작됩니다.

Prisma 생태계에서의 역할

Prisma Studio는 Prisma라는 데이터베이스 툴킷을 구성하는 세 가지 핵심 요소 중 하나입니다.

  1. Prisma Client: Node.js 및 TypeScript를 위한 타입 안전한 쿼리 빌더입니다. 애플리케이션 코드에서 데이터베이스와 상호작용하는 데 사용됩니다.
  2. Prisma Migrate: 데이터베이스 스키마 변경 및 관리를 위한 마이그레이션 시스템입니다.
  3. Prisma Studio: 데이터베이스 데이터를 탐색하고 수정하기 위한 GUI 도구입니다.

결론적으로, Prisma Studio는 Prisma를 통한 데이터베이스 개발 경험을 더욱 편리하고 효율적으로 만들어주는 시각적 관리 도구라고 할 수 있습니다.


☁️ console.prisma.io는 무엇 ?

https://console.prisma.io/](https://console.prisma.io/) 는 과거 Prisma Data Platform의 일부였거나 그와 관련된 Prisma의 클라우드 기반 관리 콘솔 또는 대시보드 역할을 했을 가능성이 높습니다.

Prisma는 데이터베이스 ORM(Object-Relational Mapping) 도구이지만, 이 주소는 Prisma 생태계에서 제공하는 추가적인 서비스나 기능을 통합 관리하는 데 사용되었을 것입니다.

현재 해당 주소가 접속 가능한지 여부와 구체적인 제공 기능은 Prisma의 제품 전략 변화에 따라 달라질 수 있으므로, Prisma의 공식 웹사이트(prisma.io)를 통해 최신 정보를 확인하는 것이 가장 정확합니다.


Prisma 클라우드 콘솔의 예상 기능 및 이득 (일반적인 SaaS 기반 관리 도구의 관점)

Prisma가 제공했던 클라우드 기반 관리 콘솔은 주로 다음과 같은 이점을 제공했을 것으로 예상됩니다.

1. ⚙️ 데이터베이스 통합 관리 및 모니터링

  • 원격 Prisma Studio 기능: 로컬이 아닌 클라우드 환경에서 Prisma Studio와 유사하게 데이터를 조회, 편집, 관리할 수 있는 기능을 제공했을 수 있습니다.
  • 스키마 및 마이그레이션 관리: 여러 환경(개발, 스테이징, 프로덕션)의 데이터베이스 스키마와 마이그레이션 상태를 대시보드에서 일괄적으로 모니터링하고 관리하는 기능을 제공했을 수 있습니다.

2. 🚀 개발 및 배포 워크플로우 개선

  • 협업 기능: 팀원들과 데이터베이스 액세스 권한이나 데이터셋을 공유하고 협업하는 기능을 제공했을 수 있습니다.
  • 환경 일관성: 각 배포 환경(개발/운영)의 데이터베이스 설정 및 버전을 중앙에서 관리하여 일관성을 유지하고 디버깅을 쉽게 만듭니다.

3. 🛡️ 실시간 데이터 및 보안 (특화 기능)

  • 실시간 구독/푸시 기능: Prisma의 실시간 구독 기능(Subscription)을 활용하여 데이터 변경사항을 실시간으로 모니터링하고 사용자에게 푸시하는 기능을 관리했을 수 있습니다.
  • 로그 및 오류 추적: 데이터베이스 쿼리, 성능, 오류 등에 대한 로그와 통계를 시각화하여 제공했을 수 있으며, 이를 통해 성능 최적화 및 문제 해결에 도움을 주었을 것입니다.

요약: 이득은 무엇인가요?

개발 경험 개선, 중앙 집중식 관리, 그리고 향상된 생산성이 가장 큰 이득입니다. 복잡한 데이터베이스 작업을 로컬이 아닌 클라우드에서 시각적으로 처리하고 팀 전체가 일관된 환경에서 협업할 수 있도록 돕습니다.


✅  로컬 MySQL에 연결하여 Prisma Studio를 사용할 수 있습니다.

Prisma Studio는 사용자가 지정한 데이터베이스 접속 정보를 기반으로 시각적 UI를 제공하는 도구이므로, 로컬 환경에서 MySQL 데이터베이스를 설치하고 접속 정보를 설정하면 바로 사용할 수 있습니다.


🛠️ 필수 준비 단계

Prisma Studio를 로컬 MySQL에 연결하고 UI를 사용하기 위해 필요한 세 가지 핵심 단계는 다음과 같습니다.

1. MySQL 설치 및 실행

  • MySQL Server를 로컬 컴퓨터에 설치하고 실행해야 합니다. (저장소가 준비되어야 합니다.)

2. Prisma 프로젝트 설정 (schema.prisma)

  • 프로젝트 내에 Prisma ORM이 설정되어 있어야 합니다.
  • prisma/schema.prisma 파일 내에서 datasource를 MySQL로 설정해야 합니다.
    // schema.prisma 파일 예시
    datasource db {
      provider = "mysql"
      // 로컬 MySQL 접속 정보를 연결합니다.
      url      = env("DATABASE_URL") 
    }
    

3. 환경 변수 설정 (.env 파일)

  • .env 파일에 로컬 MySQL의 접속 정보를 포함하는 DATABASE_URL 변수를 정의해야 합니다.
  • 예시 접속 정보: DATABASE_URL="mysql://사용자이름:비밀번호@localhost:포트번호/데이터베이스이름"

💻 Prisma Studio 실행 및 UI 접근

위의 설정이 완료되었다면, 터미널에서 다음 명령어를 실행하여 Prisma Studio를 띄울 수 있습니다.

  1. 터미널 명령어 실행:
    npx prisma studio
    
  2. UI 접속:
    • 명령어를 실행하면 자동으로 웹 브라우저가 열리고 http://localhost:5555 주소로 접속됩니다.
    • 이 웹 UI에서 로컬 MySQL 데이터베이스 내의 테이블(모델)과 데이터를 시각적으로 CRUD (생성, 조회, 수정, 삭제) 할 수 있습니다.

요약하자면, Prisma Studio 자체는 저장소가 아닌 UI 도구이며, 로컬에 설치된 MySQL이라는 저장소에 연결하여 시각적 데이터 관리 기능을 제공하는 것이 맞습니다.

728x90